From: Andy P. <at...@us...> - 2002-04-10 18:31:54
|
Update of /cvsroot/linux-vax/kernel-2.4/arch/sparc64/prom In directory usw-pr-cvs1:/tmp/cvs-serv32333/sparc64/prom Modified Files: Makefile bootstr.c console.c devops.c init.c map.S memory.c misc.c p1275.c printf.c tree.c Log Message: synch 2.4.15 commit 46 Index: Makefile =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sparc64/prom/Makefile,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 Index: bootstr.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sparc64/prom/bootstr.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 Index: console.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sparc64/prom/console.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 Index: devops.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sparc64/prom/devops.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 Index: init.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sparc64/prom/init.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 Index: map.S =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sparc64/prom/map.S,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 Index: memory.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sparc64/prom/memory.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 Index: misc.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sparc64/prom/misc.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- misc.c 14 Jan 2001 19:45:19 -0000 1.1.1.1 +++ misc.c 10 Apr 2002 15:21:24 -0000 1.2 @@ -59,25 +59,15 @@ prom_palette (1); #endif - /* We always arrive here via a serial interrupt. - * So in order for everything to work reliably, even - * on SMP, we need to drop the IRQ locks we hold. - */ #ifdef CONFIG_SMP - irq_exit(smp_processor_id(), 0); smp_capture(); -#else - local_irq_count(smp_processor_id())--; #endif p1275_cmd ("enter", P1275_INOUT(0,0)); #ifdef CONFIG_SMP smp_release(); - irq_enter(smp_processor_id(), 0); spin_unlock_wait(&__br_write_locks[BR_GLOBALIRQ_LOCK].lock); -#else - local_irq_count(smp_processor_id())++; #endif #ifdef CONFIG_SUN_CONSOLE Index: p1275.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sparc64/prom/p1275.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- p1275.c 14 Jan 2001 19:45:18 -0000 1.1.1.1 +++ p1275.c 10 Apr 2002 15:21:24 -0000 1.2 @@ -29,257 +29,230 @@ void prom_cif_interface (void) { - __asm__ __volatile__ (" - mov %0, %%o0 - ldx [%%o0 + 0x010], %%o1 ! prom_cif_stack - save %%o1, -0x190, %%sp - ldx [%%i0 + 0x008], %%l2 ! prom_cif_handler - rdpr %%pstate, %%l4 - wrpr %%g0, 0x15, %%pstate ! save alternate globals - stx %%g1, [%%sp + 2047 + 0x0b0] - stx %%g2, [%%sp + 2047 + 0x0b8] - stx %%g3, [%%sp + 2047 + 0x0c0] - stx %%g4, [%%sp + 2047 + 0x0c8] - stx %%g5, [%%sp + 2047 + 0x0d0] - stx %%g6, [%%sp + 2047 + 0x0d8] - stx %%g7, [%%sp + 2047 + 0x0e0] - wrpr %%g0, 0x814, %%pstate ! save interrupt globals - stx %%g1, [%%sp + 2047 + 0x0e8] - stx %%g2, [%%sp + 2047 + 0x0f0] - stx %%g3, [%%sp + 2047 + 0x0f8] - stx %%g4, [%%sp + 2047 + 0x100] - stx %%g5, [%%sp + 2047 + 0x108] - stx %%g6, [%%sp + 2047 + 0x110] - stx %%g7, [%%sp + 2047 + 0x118] - wrpr %%g0, 0x14, %%pstate ! save normal globals - stx %%g1, [%%sp + 2047 + 0x120] - stx %%g2, [%%sp + 2047 + 0x128] - stx %%g3, [%%sp + 2047 + 0x130] - stx %%g4, [%%sp + 2047 + 0x138] - stx %%g5, [%%sp + 2047 + 0x140] - stx %%g6, [%%sp + 2047 + 0x148] - stx %%g7, [%%sp + 2047 + 0x150] - wrpr %%g0, 0x414, %%pstate ! save mmu globals - stx %%g1, [%%sp + 2047 + 0x158] - stx %%g2, [%%sp + 2047 + 0x160] - stx %%g3, [%%sp + 2047 + 0x168] - stx %%g4, [%%sp + 2047 + 0x170] - stx %%g5, [%%sp + 2047 + 0x178] - stx %%g6, [%%sp + 2047 + 0x180] - stx %%g7, [%%sp + 2047 + 0x188] - mov %%g1, %%l0 ! also save to locals, so we can handle - mov %%g2, %%l1 ! tlb faults later on, when accessing - mov %%g3, %%l3 ! the stack. - mov %%g7, %%l5 - wrpr %%l4, %1, %%pstate ! turn off interrupts - call %%l2 - add %%i0, 0x018, %%o0 ! prom_args - wrpr %%g0, 0x414, %%pstate ! restore mmu globals - mov %%l0, %%g1 - mov %%l1, %%g2 - mov %%l3, %%g3 - mov %%l5, %%g7 - wrpr %%g0, 0x14, %%pstate ! restore normal globals - ldx [%%sp + 2047 + 0x120], %%g1 - ldx [%%sp + 2047 + 0x128], %%g2 - ldx [%%sp + 2047 + 0x130], %%g3 - ldx [%%sp + 2047 + 0x138], %%g4 - ldx [%%sp + 2047 + 0x140], %%g5 - ldx [%%sp + 2047 + 0x148], %%g6 - ldx [%%sp + 2047 + 0x150], %%g7 - wrpr %%g0, 0x814, %%pstate ! restore interrupt globals - ldx [%%sp + 2047 + 0x0e8], %%g1 - ldx [%%sp + 2047 + 0x0f0], %%g2 - ldx [%%sp + 2047 + 0x0f8], %%g3 - ldx [%%sp + 2047 + 0x100], %%g4 - ldx [%%sp + 2047 + 0x108], %%g5 - ldx [%%sp + 2047 + 0x110], %%g6 - ldx [%%sp + 2047 + 0x118], %%g7 - wrpr %%g0, 0x15, %%pstate ! restore alternate globals - ldx [%%sp + 2047 + 0x0b0], %%g1 - ldx [%%sp + 2047 + 0x0b8], %%g2 - ldx [%%sp + 2047 + 0x0c0], %%g3 - ldx [%%sp + 2047 + 0x0c8], %%g4 - ldx [%%sp + 2047 + 0x0d0], %%g5 - ldx [%%sp + 2047 + 0x0d8], %%g6 - ldx [%%sp + 2047 + 0x0e0], %%g7 - wrpr %%l4, 0, %%pstate ! restore original pstate - ret - restore - " : : "r" (&p1275buf), "i" (PSTATE_IE)); + __asm__ __volatile__ ( +" mov %0, %%o0\n" +" ldx [%%o0 + 0x010], %%o1 ! prom_cif_stack\n" +" save %%o1, -0x190, %%sp\n" +" ldx [%%i0 + 0x008], %%l2 ! prom_cif_handler\n" +" rdpr %%pstate, %%l4\n" +" wrpr %%g0, 0x15, %%pstate ! save alternate globals\n" +" stx %%g1, [%%sp + 2047 + 0x0b0]\n" +" stx %%g2, [%%sp + 2047 + 0x0b8]\n" +" stx %%g3, [%%sp + 2047 + 0x0c0]\n" +" stx %%g4, [%%sp + 2047 + 0x0c8]\n" +" stx %%g5, [%%sp + 2047 + 0x0d0]\n" +" stx %%g6, [%%sp + 2047 + 0x0d8]\n" +" stx %%g7, [%%sp + 2047 + 0x0e0]\n" +" wrpr %%g0, 0x814, %%pstate ! save interrupt globals\n" +" stx %%g1, [%%sp + 2047 + 0x0e8]\n" +" stx %%g2, [%%sp + 2047 + 0x0f0]\n" +" stx %%g3, [%%sp + 2047 + 0x0f8]\n" +" stx %%g4, [%%sp + 2047 + 0x100]\n" +" stx %%g5, [%%sp + 2047 + 0x108]\n" +" stx %%g6, [%%sp + 2047 + 0x110]\n" +" stx %%g7, [%%sp + 2047 + 0x118]\n" +" wrpr %%g0, 0x14, %%pstate ! save normal globals\n" +" stx %%g1, [%%sp + 2047 + 0x120]\n" +" stx %%g2, [%%sp + 2047 + 0x128]\n" +" stx %%g3, [%%sp + 2047 + 0x130]\n" +" stx %%g4, [%%sp + 2047 + 0x138]\n" +" stx %%g5, [%%sp + 2047 + 0x140]\n" +" stx %%g6, [%%sp + 2047 + 0x148]\n" +" stx %%g7, [%%sp + 2047 + 0x150]\n" +" wrpr %%g0, 0x414, %%pstate ! save mmu globals\n" +" stx %%g1, [%%sp + 2047 + 0x158]\n" +" stx %%g2, [%%sp + 2047 + 0x160]\n" +" stx %%g3, [%%sp + 2047 + 0x168]\n" +" stx %%g4, [%%sp + 2047 + 0x170]\n" +" stx %%g5, [%%sp + 2047 + 0x178]\n" +" stx %%g6, [%%sp + 2047 + 0x180]\n" +" stx %%g7, [%%sp + 2047 + 0x188]\n" +" mov %%g1, %%l0 ! also save to locals, so we can handle\n" +" mov %%g2, %%l1 ! tlb faults later on, when accessing\n" +" mov %%g3, %%l3 ! the stack.\n" +" mov %%g7, %%l5\n" +" wrpr %%l4, %1, %%pstate ! turn off interrupts\n" +" call %%l2\n" +" add %%i0, 0x018, %%o0 ! prom_args\n" +" wrpr %%g0, 0x414, %%pstate ! restore mmu globals\n" +" mov %%l0, %%g1\n" +" mov %%l1, %%g2\n" +" mov %%l3, %%g3\n" +" mov %%l5, %%g7\n" +" wrpr %%g0, 0x14, %%pstate ! restore normal globals\n" +" ldx [%%sp + 2047 + 0x120], %%g1\n" +" ldx [%%sp + 2047 + 0x128], %%g2\n" +" ldx [%%sp + 2047 + 0x130], %%g3\n" +" ldx [%%sp + 2047 + 0x138], %%g4\n" +" ldx [%%sp + 2047 + 0x140], %%g5\n" +" ldx [%%sp + 2047 + 0x148], %%g6\n" +" ldx [%%sp + 2047 + 0x150], %%g7\n" +" wrpr %%g0, 0x814, %%pstate ! restore interrupt globals\n" +" ldx [%%sp + 2047 + 0x0e8], %%g1\n" +" ldx [%%sp + 2047 + 0x0f0], %%g2\n" +" ldx [%%sp + 2047 + 0x0f8], %%g3\n" +" ldx [%%sp + 2047 + 0x100], %%g4\n" +" ldx [%%sp + 2047 + 0x108], %%g5\n" +" ldx [%%sp + 2047 + 0x110], %%g6\n" +" ldx [%%sp + 2047 + 0x118], %%g7\n" +" wrpr %%g0, 0x15, %%pstate ! restore alternate globals\n" +" ldx [%%sp + 2047 + 0x0b0], %%g1\n" +" ldx [%%sp + 2047 + 0x0b8], %%g2\n" +" ldx [%%sp + 2047 + 0x0c0], %%g3\n" +" ldx [%%sp + 2047 + 0x0c8], %%g4\n" +" ldx [%%sp + 2047 + 0x0d0], %%g5\n" +" ldx [%%sp + 2047 + 0x0d8], %%g6\n" +" ldx [%%sp + 2047 + 0x0e0], %%g7\n" +" wrpr %%l4, 0, %%pstate ! restore original pstate\n" +" ret\n" +" restore\n" +" " : : "r" (&p1275buf), "i" (PSTATE_IE)); } void prom_cif_callback(void) { - __asm__ __volatile__ (" - mov %0, %%o1 - save %%sp, -0x270, %%sp - rdpr %%pstate, %%l4 - wrpr %%g0, 0x15, %%pstate ! save PROM alternate globals - stx %%g1, [%%sp + 2047 + 0x0b0] - stx %%g2, [%%sp + 2047 + 0x0b8] - stx %%g3, [%%sp + 2047 + 0x0c0] - stx %%g4, [%%sp + 2047 + 0x0c8] - stx %%g5, [%%sp + 2047 + 0x0d0] - stx %%g6, [%%sp + 2047 + 0x0d8] - stx %%g7, [%%sp + 2047 + 0x0e0] - ! restore Linux alternate globals - ldx [%%sp + 2047 + 0x190], %%g1 - ldx [%%sp + 2047 + 0x198], %%g2 - ldx [%%sp + 2047 + 0x1a0], %%g3 - ldx [%%sp + 2047 + 0x1a8], %%g4 - ldx [%%sp + 2047 + 0x1b0], %%g5 - ldx [%%sp + 2047 + 0x1b8], %%g6 - ldx [%%sp + 2047 + 0x1c0], %%g7 - wrpr %%g0, 0x814, %%pstate ! save PROM interrupt globals - stx %%g1, [%%sp + 2047 + 0x0e8] - stx %%g2, [%%sp + 2047 + 0x0f0] - stx %%g3, [%%sp + 2047 + 0x0f8] - stx %%g4, [%%sp + 2047 + 0x100] - stx %%g5, [%%sp + 2047 + 0x108] - stx %%g6, [%%sp + 2047 + 0x110] - stx %%g7, [%%sp + 2047 + 0x118] - ! restore Linux interrupt globals - ldx [%%sp + 2047 + 0x1c8], %%g1 - ldx [%%sp + 2047 + 0x1d0], %%g2 - ldx [%%sp + 2047 + 0x1d8], %%g3 - ldx [%%sp + 2047 + 0x1e0], %%g4 - ldx [%%sp + 2047 + 0x1e8], %%g5 - ldx [%%sp + 2047 + 0x1f0], %%g6 - ldx [%%sp + 2047 + 0x1f8], %%g7 - wrpr %%g0, 0x14, %%pstate ! save PROM normal globals - stx %%g1, [%%sp + 2047 + 0x120] - stx %%g2, [%%sp + 2047 + 0x128] - stx %%g3, [%%sp + 2047 + 0x130] - stx %%g4, [%%sp + 2047 + 0x138] - stx %%g5, [%%sp + 2047 + 0x140] - stx %%g6, [%%sp + 2047 + 0x148] - stx %%g7, [%%sp + 2047 + 0x150] - ! restore Linux normal globals - ldx [%%sp + 2047 + 0x200], %%g1 - ldx [%%sp + 2047 + 0x208], %%g2 - ldx [%%sp + 2047 + 0x210], %%g3 - ldx [%%sp + 2047 + 0x218], %%g4 - ldx [%%sp + 2047 + 0x220], %%g5 - ldx [%%sp + 2047 + 0x228], %%g6 - ldx [%%sp + 2047 + 0x230], %%g7 - wrpr %%g0, 0x414, %%pstate ! save PROM mmu globals - stx %%g1, [%%sp + 2047 + 0x158] - stx %%g2, [%%sp + 2047 + 0x160] - stx %%g3, [%%sp + 2047 + 0x168] - stx %%g4, [%%sp + 2047 + 0x170] - stx %%g5, [%%sp + 2047 + 0x178] - stx %%g6, [%%sp + 2047 + 0x180] - stx %%g7, [%%sp + 2047 + 0x188] - ! restore Linux mmu globals - ldx [%%sp + 2047 + 0x238], %%o0 - ldx [%%sp + 2047 + 0x240], %%o1 - ldx [%%sp + 2047 + 0x248], %%l2 - ldx [%%sp + 2047 + 0x250], %%l3 - ldx [%%sp + 2047 + 0x258], %%l5 - ldx [%%sp + 2047 + 0x260], %%l6 - ldx [%%sp + 2047 + 0x268], %%l7 - ! switch to Linux tba - sethi %%hi(sparc64_ttable_tl0), %%l1 - rdpr %%tba, %%l0 ! save PROM tba - mov %%o0, %%g1 - mov %%o1, %%g2 - mov %%l2, %%g3 - mov %%l3, %%g4 - mov %%l5, %%g5 - mov %%l6, %%g6 - mov %%l7, %%g7 - wrpr %%l1, %%tba ! install Linux tba - wrpr %%l4, 0, %%pstate ! restore PSTATE - call prom_world - mov %%g0, %%o0 - ldx [%%i1 + 0x000], %%l2 - call %%l2 - mov %%i0, %%o0 - mov %%o0, %%l1 - call prom_world - or %%g0, 1, %%o0 - wrpr %%g0, 0x14, %%pstate ! interrupts off - ! restore PROM mmu globals - ldx [%%sp + 2047 + 0x158], %%o0 - ldx [%%sp + 2047 + 0x160], %%o1 - ldx [%%sp + 2047 + 0x168], %%l2 - ldx [%%sp + 2047 + 0x170], %%l3 - ldx [%%sp + 2047 + 0x178], %%l5 - ldx [%%sp + 2047 + 0x180], %%l6 - ldx [%%sp + 2047 + 0x188], %%l7 - wrpr %%g0, 0x414, %%pstate ! restore PROM mmu globals - mov %%o0, %%g1 - mov %%o1, %%g2 - mov %%l2, %%g3 - mov %%l3, %%g4 - mov %%l5, %%g5 - mov %%l6, %%g6 - mov %%l7, %%g7 - wrpr %%l0, %%tba ! restore PROM tba - wrpr %%g0, 0x14, %%pstate ! restore PROM normal globals - ldx [%%sp + 2047 + 0x120], %%g1 - ldx [%%sp + 2047 + 0x128], %%g2 - ldx [%%sp + 2047 + 0x130], %%g3 - ldx [%%sp + 2047 + 0x138], %%g4 - ldx [%%sp + 2047 + 0x140], %%g5 - ldx [%%sp + 2047 + 0x148], %%g6 - ldx [%%sp + 2047 + 0x150], %%g7 - wrpr %%g0, 0x814, %%pstate ! restore PROM interrupt globals - ldx [%%sp + 2047 + 0x0e8], %%g1 - ldx [%%sp + 2047 + 0x0f0], %%g2 - ldx [%%sp + 2047 + 0x0f8], %%g3 - ldx [%%sp + 2047 + 0x100], %%g4 - ldx [%%sp + 2047 + 0x108], %%g5 - ldx [%%sp + 2047 + 0x110], %%g6 - ldx [%%sp + 2047 + 0x118], %%g7 - wrpr %%g0, 0x15, %%pstate ! restore PROM alternate globals - ldx [%%sp + 2047 + 0x0b0], %%g1 - ldx [%%sp + 2047 + 0x0b8], %%g2 - ldx [%%sp + 2047 + 0x0c0], %%g3 - ldx [%%sp + 2047 + 0x0c8], %%g4 - ldx [%%sp + 2047 + 0x0d0], %%g5 - ldx [%%sp + 2047 + 0x0d8], %%g6 - ldx [%%sp + 2047 + 0x0e0], %%g7 - wrpr %%l4, 0, %%pstate - ret - restore %%l1, 0, %%o0 - " : : "r" (&p1275buf), "i" (PSTATE_PRIV)); + __asm__ __volatile__ ( +" mov %0, %%o1\n" +" save %%sp, -0x270, %%sp\n" +" rdpr %%pstate, %%l4\n" +" wrpr %%g0, 0x15, %%pstate ! save PROM alternate globals\n" +" stx %%g1, [%%sp + 2047 + 0x0b0]\n" +" stx %%g2, [%%sp + 2047 + 0x0b8]\n" +" stx %%g3, [%%sp + 2047 + 0x0c0]\n" +" stx %%g4, [%%sp + 2047 + 0x0c8]\n" +" stx %%g5, [%%sp + 2047 + 0x0d0]\n" +" stx %%g6, [%%sp + 2047 + 0x0d8]\n" +" stx %%g7, [%%sp + 2047 + 0x0e0]\n" +" ! restore Linux alternate globals\n" +" ldx [%%sp + 2047 + 0x190], %%g1\n" +" ldx [%%sp + 2047 + 0x198], %%g2\n" +" ldx [%%sp + 2047 + 0x1a0], %%g3\n" +" ldx [%%sp + 2047 + 0x1a8], %%g4\n" +" ldx [%%sp + 2047 + 0x1b0], %%g5\n" +" ldx [%%sp + 2047 + 0x1b8], %%g6\n" +" ldx [%%sp + 2047 + 0x1c0], %%g7\n" +" wrpr %%g0, 0x814, %%pstate ! save PROM interrupt globals\n" +" stx %%g1, [%%sp + 2047 + 0x0e8]\n" +" stx %%g2, [%%sp + 2047 + 0x0f0]\n" +" stx %%g3, [%%sp + 2047 + 0x0f8]\n" +" stx %%g4, [%%sp + 2047 + 0x100]\n" +" stx %%g5, [%%sp + 2047 + 0x108]\n" +" stx %%g6, [%%sp + 2047 + 0x110]\n" +" stx %%g7, [%%sp + 2047 + 0x118]\n" +" ! restore Linux interrupt globals\n" +" ldx [%%sp + 2047 + 0x1c8], %%g1\n" +" ldx [%%sp + 2047 + 0x1d0], %%g2\n" +" ldx [%%sp + 2047 + 0x1d8], %%g3\n" +" ldx [%%sp + 2047 + 0x1e0], %%g4\n" +" ldx [%%sp + 2047 + 0x1e8], %%g5\n" +" ldx [%%sp + 2047 + 0x1f0], %%g6\n" +" ldx [%%sp + 2047 + 0x1f8], %%g7\n" +" wrpr %%g0, 0x14, %%pstate ! save PROM normal globals\n" +" stx %%g1, [%%sp + 2047 + 0x120]\n" +" stx %%g2, [%%sp + 2047 + 0x128]\n" +" stx %%g3, [%%sp + 2047 + 0x130]\n" +" stx %%g4, [%%sp + 2047 + 0x138]\n" +" stx %%g5, [%%sp + 2047 + 0x140]\n" +" stx %%g6, [%%sp + 2047 + 0x148]\n" +" stx %%g7, [%%sp + 2047 + 0x150]\n" +" ! restore Linux normal globals\n" +" ldx [%%sp + 2047 + 0x200], %%g1\n" +" ldx [%%sp + 2047 + 0x208], %%g2\n" +" ldx [%%sp + 2047 + 0x210], %%g3\n" +" ldx [%%sp + 2047 + 0x218], %%g4\n" +" ldx [%%sp + 2047 + 0x220], %%g5\n" +" ldx [%%sp + 2047 + 0x228], %%g6\n" +" ldx [%%sp + 2047 + 0x230], %%g7\n" +" wrpr %%g0, 0x414, %%pstate ! save PROM mmu globals\n" +" stx %%g1, [%%sp + 2047 + 0x158]\n" +" stx %%g2, [%%sp + 2047 + 0x160]\n" +" stx %%g3, [%%sp + 2047 + 0x168]\n" +" stx %%g4, [%%sp + 2047 + 0x170]\n" +" stx %%g5, [%%sp + 2047 + 0x178]\n" +" stx %%g6, [%%sp + 2047 + 0x180]\n" +" stx %%g7, [%%sp + 2047 + 0x188]\n" +" ! restore Linux mmu globals\n" +" ldx [%%sp + 2047 + 0x238], %%o0\n" +" ldx [%%sp + 2047 + 0x240], %%o1\n" +" ldx [%%sp + 2047 + 0x248], %%l2\n" +" ldx [%%sp + 2047 + 0x250], %%l3\n" +" ldx [%%sp + 2047 + 0x258], %%l5\n" +" ldx [%%sp + 2047 + 0x260], %%l6\n" +" ldx [%%sp + 2047 + 0x268], %%l7\n" +" ! switch to Linux tba\n" +" sethi %%hi(sparc64_ttable_tl0), %%l1\n" +" rdpr %%tba, %%l0 ! save PROM tba\n" +" mov %%o0, %%g1\n" +" mov %%o1, %%g2\n" +" mov %%l2, %%g3\n" +" mov %%l3, %%g4\n" +" mov %%l5, %%g5\n" +" mov %%l6, %%g6\n" +" mov %%l7, %%g7\n" +" wrpr %%l1, %%tba ! install Linux tba\n" +" wrpr %%l4, 0, %%pstate ! restore PSTATE\n" +" call prom_world\n" +" mov %%g0, %%o0\n" +" ldx [%%i1 + 0x000], %%l2\n" +" call %%l2\n" +" mov %%i0, %%o0\n" +" mov %%o0, %%l1\n" +" call prom_world\n" +" or %%g0, 1, %%o0\n" +" wrpr %%g0, 0x14, %%pstate ! interrupts off\n" +" ! restore PROM mmu globals\n" +" ldx [%%sp + 2047 + 0x158], %%o0\n" +" ldx [%%sp + 2047 + 0x160], %%o1\n" +" ldx [%%sp + 2047 + 0x168], %%l2\n" +" ldx [%%sp + 2047 + 0x170], %%l3\n" +" ldx [%%sp + 2047 + 0x178], %%l5\n" +" ldx [%%sp + 2047 + 0x180], %%l6\n" +" ldx [%%sp + 2047 + 0x188], %%l7\n" +" wrpr %%g0, 0x414, %%pstate ! restore PROM mmu globals\n" +" mov %%o0, %%g1\n" +" mov %%o1, %%g2\n" +" mov %%l2, %%g3\n" +" mov %%l3, %%g4\n" +" mov %%l5, %%g5\n" +" mov %%l6, %%g6\n" +" mov %%l7, %%g7\n" +" wrpr %%l0, %%tba ! restore PROM tba\n" +" wrpr %%g0, 0x14, %%pstate ! restore PROM normal globals\n" +" ldx [%%sp + 2047 + 0x120], %%g1\n" +" ldx [%%sp + 2047 + 0x128], %%g2\n" +" ldx [%%sp + 2047 + 0x130], %%g3\n" +" ldx [%%sp + 2047 + 0x138], %%g4\n" +" ldx [%%sp + 2047 + 0x140], %%g5\n" +" ldx [%%sp + 2047 + 0x148], %%g6\n" +" ldx [%%sp + 2047 + 0x150], %%g7\n" +" wrpr %%g0, 0x814, %%pstate ! restore PROM interrupt globals\n" +" ldx [%%sp + 2047 + 0x0e8], %%g1\n" +" ldx [%%sp + 2047 + 0x0f0], %%g2\n" +" ldx [%%sp + 2047 + 0x0f8], %%g3\n" +" ldx [%%sp + 2047 + 0x100], %%g4\n" +" ldx [%%sp + 2047 + 0x108], %%g5\n" +" ldx [%%sp + 2047 + 0x110], %%g6\n" +" ldx [%%sp + 2047 + 0x118], %%g7\n" +" wrpr %%g0, 0x15, %%pstate ! restore PROM alternate globals\n" +" ldx [%%sp + 2047 + 0x0b0], %%g1\n" +" ldx [%%sp + 2047 + 0x0b8], %%g2\n" +" ldx [%%sp + 2047 + 0x0c0], %%g3\n" +" ldx [%%sp + 2047 + 0x0c8], %%g4\n" +" ldx [%%sp + 2047 + 0x0d0], %%g5\n" +" ldx [%%sp + 2047 + 0x0d8], %%g6\n" +" ldx [%%sp + 2047 + 0x0e0], %%g7\n" +" wrpr %%l4, 0, %%pstate\n" +" ret\n" +" restore %%l1, 0, %%o0\n" +" " : : "r" (&p1275buf), "i" (PSTATE_PRIV)); } -/* We need some SMP protection here. But be careful as - * prom callback code can call into here too, this is why - * the counter is needed. -DaveM +/* + * This provides SMP safety on the p1275buf. prom_callback() drops this lock + * to allow recursuve acquisition. */ -static int prom_entry_depth = 0; spinlock_t prom_entry_lock = SPIN_LOCK_UNLOCKED; -static __inline__ unsigned long prom_get_lock(void) -{ - unsigned long flags; - - __save_and_cli(flags); - if (prom_entry_depth == 0) { - spin_lock(&prom_entry_lock); - -#if 1 /* DEBUGGING */ - if (prom_entry_depth != 0) - panic("prom_get_lock"); -#endif - } - prom_entry_depth++; - - return flags; -} - -static __inline__ void prom_release_lock(unsigned long flags) -{ - if (--prom_entry_depth == 0) - spin_unlock(&prom_entry_lock); - - __restore_flags(flags); -} - long p1275_cmd (char *service, long fmt, ...) { char *p, *q; @@ -296,7 +269,7 @@ spitfire_set_primary_context (0); } - flags = prom_get_lock(); + spin_lock_irqsave(&prom_entry_lock, flags); p1275buf.prom_args[0] = (unsigned long)p; /* service */ strcpy (p, service); @@ -388,7 +361,7 @@ va_end(list); x = p1275buf.prom_args [nargs + 3]; - prom_release_lock(flags); + spin_unlock_irqrestore(&prom_entry_lock, flags); if (ctx) spitfire_set_primary_context (ctx); Index: printf.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sparc64/prom/printf.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 Index: tree.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sparc64/prom/tree.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 |