From owner-svn-src-projects@FreeBSD.ORG Wed Jul 29 19:19:13 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AFED0106566B; Wed, 29 Jul 2009 19:19:13 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9BAFB8FC18; Wed, 29 Jul 2009 19:19:13 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6TJJD6J079999; Wed, 29 Jul 2009 19:19:13 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6TJJDfU079979; Wed, 29 Jul 2009 19:19:13 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <200907291919.n6TJJDfU079979@svn.freebsd.org> From: Nathan Whitehorn Date: Wed, 29 Jul 2009 19:19:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195948 - in projects/ppc64/sys: conf powerpc/aim powerpc/aim64 powerpc/include powerpc/mambo powerpc/powerpc X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Jul 2009 19:19:13 -0000 Author: nwhitehorn Date: Wed Jul 29 19:19:13 2009 New Revision: 195948 URL: http://svn.freebsd.org/changeset/base/195948 Log: Virtual memory now really works, and the kernel boots to the point of running through device detection and complaining about not being able to find a PIC. Trap handling (especially for user-space) still has a ways to go. Added: projects/ppc64/sys/powerpc/mambo/ projects/ppc64/sys/powerpc/mambo/mambo_console.c projects/ppc64/sys/powerpc/mambo/mambocall.S projects/ppc64/sys/powerpc/mambo/mambocall.h Modified: projects/ppc64/sys/conf/files.powerpc64 projects/ppc64/sys/conf/options.powerpc64 projects/ppc64/sys/powerpc/aim/ofw_machdep.c projects/ppc64/sys/powerpc/aim/platform_chrp.c projects/ppc64/sys/powerpc/aim64/locore.S projects/ppc64/sys/powerpc/aim64/machdep.c projects/ppc64/sys/powerpc/aim64/trap_subr.S projects/ppc64/sys/powerpc/include/param.h projects/ppc64/sys/powerpc/include/pcpu.h projects/ppc64/sys/powerpc/include/pmap.h projects/ppc64/sys/powerpc/include/spr.h projects/ppc64/sys/powerpc/include/sr.h projects/ppc64/sys/powerpc/include/trap_aim.h projects/ppc64/sys/powerpc/include/vmparam.h projects/ppc64/sys/powerpc/powerpc/cpu.c projects/ppc64/sys/powerpc/powerpc/genassym.c Modified: projects/ppc64/sys/conf/files.powerpc64 ============================================================================== --- projects/ppc64/sys/conf/files.powerpc64 Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/conf/files.powerpc64 Wed Jul 29 19:19:13 2009 (r195948) @@ -34,7 +34,6 @@ dev/ofw/ofw_bus_subr.c optional aim dev/ofw/ofw_console.c optional aim dev/ofw/ofw_disk.c optional ofwd aim dev/ofw/ofw_iicbus.c optional iicbus aim -dev/ofw/ofw_standard.c optional aim dev/powermac_nvram/powermac_nvram.c optional powermac_nvram powermac dev/scc/scc_bfe_macio.c optional scc powermac dev/sound/macio/aoa.c optional snd_davbus | snd_ai2s powermac @@ -71,6 +70,8 @@ powerpc/aim64/mmu_oea64.c optional aim powerpc/aim64/swtch.S optional aim powerpc/cpufreq/dfs.c optional cpufreq powerpc/cpufreq/pcr.c optional cpufreq aim +powerpc/mambo/mambocall.S optional mambo +powerpc/mambo/mambo_console.c optional mambo powerpc/ofw/ofw_cpu.c optional aim powerpc/ofw/ofw_pcibus.c optional pci aim powerpc/ofw/ofw_pcib_pci.c optional pci aim Modified: projects/ppc64/sys/conf/options.powerpc64 ============================================================================== --- projects/ppc64/sys/conf/options.powerpc64 Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/conf/options.powerpc64 Wed Jul 29 19:19:13 2009 (r195948) @@ -3,6 +3,7 @@ AIM opt_global.h E500 opt_global.h +MAMBO GFB_DEBUG opt_gfb.h GFB_NO_FONT_LOADING opt_gfb.h Modified: projects/ppc64/sys/powerpc/aim/ofw_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/ofw_machdep.c Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/aim/ofw_machdep.c Wed Jul 29 19:19:13 2009 (r195948) @@ -83,7 +83,7 @@ struct { } ofwcall_funcdesc; #endif - +int ofw_real_mode_entry(void *); static int openfirmware(void *args); /* @@ -286,10 +286,14 @@ OF_initial_setup(void *fdt_ptr, void *ju * For PPC64, we need to hack up a function descriptor object * to be able to call a memory address. */ - ofwcall_funcdesc.funcptr = openfirm; - ofwcall_funcdesc.toc = 0; - ofwcall_funcdesc.env = 0; - ofwcall = (int (*)(void *))(&ofwcall_funcdesc); + if (ofw_real_mode) { + ofwcall = ofw_real_mode_entry; + } else { + ofwcall_funcdesc.funcptr = openfirm; + ofwcall_funcdesc.toc = 0; + ofwcall_funcdesc.env = 0; + ofwcall = (int (*)(void *))&ofwcall_funcdesc; + } #else ofwcall = openfirm; #endif @@ -334,15 +338,6 @@ openfirmware(void *args) if (pmap_bootstrapped && ofw_real_mode) args = (void *)pmap_kextract((vm_offset_t)args); - __asm __volatile( "\t" - "sync\n\t" - "mfmsr %0\n\t" - "mtmsr %1\n\t" - "isync\n" - : "=r" (oldmsr) - : "r" (ofmsr[0]) - ); - ofw_sprg_prepare(); if (pmap_bootstrapped && !ofw_real_mode) { @@ -364,8 +359,23 @@ openfirmware(void *args) isync(); } + __asm __volatile( "\t" + "sync\n\t" + "mfmsr %0\n\t" + "mtmsr %1\n\t" + "isync\n" + : "=r" (oldmsr) + : "r" (ofmsr[0]) + ); + result = ofwcall(args); + __asm( "\t" + "mtmsr %0\n\t" + "isync\n" + : : "r" (oldmsr) + ); + if (pmap_bootstrapped && !ofw_real_mode) { /* * Restore the kernel's addr space. The isync() doesn;t @@ -380,12 +390,6 @@ openfirmware(void *args) ofw_sprg_restore(); - __asm( "\t" - "mtmsr %0\n\t" - "isync\n" - : : "r" (oldmsr) - ); - return (result); } Modified: projects/ppc64/sys/powerpc/aim/platform_chrp.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/platform_chrp.c Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/aim/platform_chrp.c Wed Jul 29 19:19:13 2009 (r195948) @@ -85,7 +85,7 @@ PLATFORM_DEF(chrp_platform); static int chrp_probe(platform_t plat) { - if (OF_finddevice("/memory") != -1) + if (OF_finddevice("/memory") != -1 || OF_finddevice("/memory@0") != -1) return (BUS_PROBE_GENERIC); return (ENXIO); Modified: projects/ppc64/sys/powerpc/aim64/locore.S ============================================================================== --- projects/ppc64/sys/powerpc/aim64/locore.S Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/aim64/locore.S Wed Jul 29 19:19:13 2009 (r195948) @@ -180,13 +180,43 @@ ASENTRY(__start) nop mr %r1, %r3 li %r3, 0 - stw %r3, 0(%r1) + std %r3, 0(%r1) bl .mi_startup nop b .OF_exit nop /* + * PPC64 ABI TOC base + */ + + .align 3 +tocbase: + .llong .TOC.@tocbase + +/* + * Open Firmware Real-mode Entry Point. This is a huge pain. + */ + +ASENTRY(ofw_real_mode_entry) + mflr 0 + lis 31,openfirmware_entry@ha + ld 31,openfirmware_entry@l(31) /* read client interface handler */ + + mfmsr 30 + mtsprg3 30 + andi. 30, 30, ~(PSL_DR | PSL_IR | PSL_EE)@l + mtmsrd 30 + + mtctr 31 + bctrl + + mfsprg3 30 + mtmsrd 30 + mtlr 0 + blr + +/* * int setfault() * * Similar to setjmp to setup for handling faults on accesses to user memory. Modified: projects/ppc64/sys/powerpc/aim64/machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim64/machdep.c Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/aim64/machdep.c Wed Jul 29 19:19:13 2009 (r195948) @@ -451,7 +451,7 @@ powerpc_init(u_int startkernel, u_int en */ thread0.td_pcb = (struct pcb *) ((thread0.td_kstack + thread0.td_kstack_pages * PAGE_SIZE - - sizeof(struct pcb)) & ~15); + sizeof(struct pcb)) & ~15UL); bzero((void *)thread0.td_pcb, sizeof(struct pcb)); pc->pc_curpcb = thread0.td_pcb; @@ -464,7 +464,7 @@ powerpc_init(u_int startkernel, u_int en "Boot flags requested debugger"); #endif - return (((uintptr_t)thread0.td_pcb - 16) & ~15); + return (((uintptr_t)thread0.td_pcb - 16) & ~15UL); } void Modified: projects/ppc64/sys/powerpc/aim64/trap_subr.S ============================================================================== --- projects/ppc64/sys/powerpc/aim64/trap_subr.S Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/aim64/trap_subr.S Wed Jul 29 19:19:13 2009 (r195948) @@ -43,31 +43,62 @@ * Save/restore segment registers */ -#define RESTORE_SRS(pmap, sr) \ - slbia; +/* + * Restore SRs for a pmap + * + * Requires that r27-r31 be scratch, with r27 initialized to the pmap + */ + +restoresrs: + slbia; + li %r29, 0; + mr %r28, %r27 + lwz %r27, PM_CONTEXT(%r27); +instslb: + li %r30, 31; + sld %r30, %r27, %r30; + ld %r31, PM_SR(%r28); + + cmpli 0, %r31, 0; + beq nslb; + + srdi %r31, %r31, 1; + or %r30, %r30, %r31; + sldi %r30, %r30, 12; + ld %r31, PM_SR(%r28); + sldi %r31, %r31, 27; + or %r31, %r31, %r29; + slbmte %r30, %r31; + +nslb: + addi %r28, %r28, 8; + addi %r29, %r29, 1; + cmpli 0, %r29, 63; + blt instslb; + + blr; /* * User SRs are loaded through a pointer to the current pmap. */ -#define RESTORE_USER_SRS(pmap,sr) \ - GET_CPUINFO(pmap); \ - lwz pmap,PC_CURPMAP(pmap); \ - lwzu sr,PM_SR(pmap); \ - RESTORE_SRS(pmap,sr) +#define RESTORE_USER_SRS() \ + GET_CPUINFO(%r27); \ + ld %r27,PC_CURPMAP(%r27); \ + bl restoresrs; /* * Kernel SRs are loaded directly from kernel_pmap_ */ -#define RESTORE_KERN_SRS(pmap,sr) \ - lis pmap,CNAME(kernel_pmap_store)@ha; \ - lwzu sr,CNAME(kernel_pmap_store)+PM_SR@l(pmap); \ - RESTORE_SRS(pmap,sr) +#define RESTORE_KERN_SRS() \ + lis %r27,CNAME(kernel_pmap_store)@ha; \ + addi %r27,%r27,CNAME(kernel_pmap_store)@l; \ + bl restoresrs; /* * FRAME_SETUP assumes: * SPRG1 SP (1) * SPRG3 trap type - * savearea r28-r31,DAR,DSISR (DAR & DSISR only for DSI traps) + * savearea r27-r31,DAR,DSISR (DAR & DSISR only for DSI traps) * r28 LR * r29 CR * r30 scratch @@ -88,45 +119,46 @@ isync; \ mfsprg1 %r31; /* get saved SP */ \ stdu %r31,-FRAMELEN(%r1); /* save it in the callframe */ \ - std %r0, FRAME_0+8(%r1); /* save r0 in the trapframe */ \ - std %r31,FRAME_1+8(%r1); /* save SP " " */ \ - std %r2, FRAME_2+8(%r1); /* save r2 " " */ \ - std %r28,FRAME_LR+8(%r1); /* save LR " " */ \ - stw %r29,FRAME_CR+8(%r1); /* save CR " " */ \ + std %r0, FRAME_0+16(%r1); /* save r0 in the trapframe */ \ + std %r31,FRAME_1+16(%r1); /* save SP " " */ \ + std %r2, FRAME_2+16(%r1); /* save r2 " " */ \ + std %r28,FRAME_LR+16(%r1); /* save LR " " */ \ + stw %r29,FRAME_CR+16(%r1); /* save CR " " */ \ GET_CPUINFO(%r2); \ + ld %r27,(savearea+CPUSAVE_R27)(%r2); /* get saved r27 */ \ ld %r28,(savearea+CPUSAVE_R28)(%r2); /* get saved r28 */ \ ld %r29,(savearea+CPUSAVE_R29)(%r2); /* get saved r29 */ \ ld %r30,(savearea+CPUSAVE_R30)(%r2); /* get saved r30 */ \ ld %r31,(savearea+CPUSAVE_R31)(%r2); /* get saved r31 */ \ - std %r3, FRAME_3+8(%r1); /* save r3-r31 */ \ - std %r4, FRAME_4+8(%r1); \ - std %r5, FRAME_5+8(%r1); \ - std %r6, FRAME_6+8(%r1); \ - std %r7, FRAME_7+8(%r1); \ - std %r8, FRAME_8+8(%r1); \ - std %r9, FRAME_9+8(%r1); \ - std %r10, FRAME_10+8(%r1); \ - std %r11, FRAME_11+8(%r1); \ - std %r12, FRAME_12+8(%r1); \ - std %r13, FRAME_13+8(%r1); \ - std %r14, FRAME_14+8(%r1); \ - std %r15, FRAME_15+8(%r1); \ - std %r16, FRAME_16+8(%r1); \ - std %r17, FRAME_17+8(%r1); \ - std %r18, FRAME_18+8(%r1); \ - std %r19, FRAME_19+8(%r1); \ - std %r20, FRAME_20+8(%r1); \ - std %r21, FRAME_21+8(%r1); \ - std %r22, FRAME_22+8(%r1); \ - std %r23, FRAME_23+8(%r1); \ - std %r24, FRAME_24+8(%r1); \ - std %r25, FRAME_25+8(%r1); \ - std %r26, FRAME_26+8(%r1); \ - std %r27, FRAME_27+8(%r1); \ - std %r28, FRAME_28+8(%r1); \ - std %r29, FRAME_29+8(%r1); \ - std %r30, FRAME_30+8(%r1); \ - std %r31, FRAME_31+8(%r1); \ + std %r3, FRAME_3+16(%r1); /* save r3-r31 */ \ + std %r4, FRAME_4+16(%r1); \ + std %r5, FRAME_5+16(%r1); \ + std %r6, FRAME_6+16(%r1); \ + std %r7, FRAME_7+16(%r1); \ + std %r8, FRAME_8+16(%r1); \ + std %r9, FRAME_9+16(%r1); \ + std %r10, FRAME_10+16(%r1); \ + std %r11, FRAME_11+16(%r1); \ + std %r12, FRAME_12+16(%r1); \ + std %r13, FRAME_13+16(%r1); \ + std %r14, FRAME_14+16(%r1); \ + std %r15, FRAME_15+16(%r1); \ + std %r16, FRAME_16+16(%r1); \ + std %r17, FRAME_17+16(%r1); \ + std %r18, FRAME_18+16(%r1); \ + std %r19, FRAME_19+16(%r1); \ + std %r20, FRAME_20+16(%r1); \ + std %r21, FRAME_21+16(%r1); \ + std %r22, FRAME_22+16(%r1); \ + std %r23, FRAME_23+16(%r1); \ + std %r24, FRAME_24+16(%r1); \ + std %r25, FRAME_25+16(%r1); \ + std %r26, FRAME_26+16(%r1); \ + std %r27, FRAME_27+16(%r1); \ + std %r28, FRAME_28+16(%r1); \ + std %r29, FRAME_29+16(%r1); \ + std %r30, FRAME_30+16(%r1); \ + std %r31, FRAME_31+16(%r1); \ ld %r28,(savearea+CPUSAVE_AIM_DAR)(%r2); /* saved DAR */ \ lwz %r29,(savearea+CPUSAVE_AIM_DSISR)(%r2);/* saved DSISR */\ ld %r30,(savearea+CPUSAVE_SRR0)(%r2); /* saved SRR0 */ \ @@ -134,61 +166,61 @@ mfxer %r3; \ mfctr %r4; \ mfsprg3 %r5; \ - std %r3, FRAME_XER+8(1); /* save xer/ctr/exc */ \ - std %r4, FRAME_CTR+8(1); \ - std %r5, FRAME_EXC+8(1); \ - std %r28,FRAME_AIM_DAR+8(1); \ - stw %r29,FRAME_AIM_DSISR+8(1); /* save dsisr/srr0/srr1 */ \ - std %r30,FRAME_SRR0+8(1); \ - std %r31,FRAME_SRR1+8(1) + mtlr %r6; \ + stw %r3, FRAME_XER+16(1); /* save xer/ctr/exc */ \ + std %r4, FRAME_CTR+16(1); \ + std %r5, FRAME_EXC+16(1); \ + std %r28,FRAME_AIM_DAR+16(1); \ + stw %r29,FRAME_AIM_DSISR+16(1); /* save dsisr/srr0/srr1 */ \ + std %r30,FRAME_SRR0+16(1); \ + std %r31,FRAME_SRR1+16(1) #define FRAME_LEAVE(savearea) \ /* Now restore regs: */ \ - ld %r2,FRAME_SRR0+8(%r1); \ - ld %r3,FRAME_SRR1+8(%r1); \ - ld %r4,FRAME_CTR+8(%r1); \ - ld %r5,FRAME_XER+8(%r1); \ - ld %r6,FRAME_LR+8(%r1); \ + ld %r2,FRAME_SRR0+16(%r1); \ + ld %r3,FRAME_SRR1+16(%r1); \ + ld %r4,FRAME_CTR+16(%r1); \ + lwz %r5,FRAME_XER+16(%r1); \ + ld %r6,FRAME_LR+16(%r1); \ GET_CPUINFO(%r7); \ std %r2,(savearea+CPUSAVE_SRR0)(%r7); /* save SRR0 */ \ std %r3,(savearea+CPUSAVE_SRR1)(%r7); /* save SRR1 */ \ - lwz %r7,FRAME_CR+8(%r1); \ + lwz %r7,FRAME_CR+16(%r1); \ mtctr %r4; \ mtxer %r5; \ - mtlr %r6; \ mtsprg1 %r7; /* save cr */ \ - ld %r31,FRAME_31+8(%r1); /* restore r0-31 */ \ - ld %r30,FRAME_30+8(%r1); \ - ld %r29,FRAME_29+8(%r1); \ - ld %r28,FRAME_28+8(%r1); \ - ld %r27,FRAME_27+8(%r1); \ - ld %r26,FRAME_26+8(%r1); \ - ld %r25,FRAME_25+8(%r1); \ - ld %r24,FRAME_24+8(%r1); \ - ld %r23,FRAME_23+8(%r1); \ - ld %r22,FRAME_22+8(%r1); \ - ld %r21,FRAME_21+8(%r1); \ - ld %r20,FRAME_20+8(%r1); \ - ld %r19,FRAME_19+8(%r1); \ - ld %r18,FRAME_18+8(%r1); \ - ld %r17,FRAME_17+8(%r1); \ - ld %r16,FRAME_16+8(%r1); \ - ld %r15,FRAME_15+8(%r1); \ - ld %r14,FRAME_14+8(%r1); \ - ld %r13,FRAME_13+8(%r1); \ - ld %r12,FRAME_12+8(%r1); \ - ld %r11,FRAME_11+8(%r1); \ - ld %r10,FRAME_10+8(%r1); \ - ld %r9, FRAME_9+8(%r1); \ - ld %r8, FRAME_8+8(%r1); \ - ld %r7, FRAME_7+8(%r1); \ - ld %r6, FRAME_6+8(%r1); \ - ld %r5, FRAME_5+8(%r1); \ - ld %r4, FRAME_4+8(%r1); \ - ld %r3, FRAME_3+8(%r1); \ - ld %r2, FRAME_2+8(%r1); \ - ld %r0, FRAME_0+8(%r1); \ - ld %r1, FRAME_1+8(%r1); \ + ld %r31,FRAME_31+16(%r1); /* restore r0-31 */ \ + ld %r30,FRAME_30+16(%r1); \ + ld %r29,FRAME_29+16(%r1); \ + ld %r28,FRAME_28+16(%r1); \ + ld %r27,FRAME_27+16(%r1); \ + ld %r26,FRAME_26+16(%r1); \ + ld %r25,FRAME_25+16(%r1); \ + ld %r24,FRAME_24+16(%r1); \ + ld %r23,FRAME_23+16(%r1); \ + ld %r22,FRAME_22+16(%r1); \ + ld %r21,FRAME_21+16(%r1); \ + ld %r20,FRAME_20+16(%r1); \ + ld %r19,FRAME_19+16(%r1); \ + ld %r18,FRAME_18+16(%r1); \ + ld %r17,FRAME_17+16(%r1); \ + ld %r16,FRAME_16+16(%r1); \ + ld %r15,FRAME_15+16(%r1); \ + ld %r14,FRAME_14+16(%r1); \ + ld %r13,FRAME_13+16(%r1); \ + ld %r12,FRAME_12+16(%r1); \ + ld %r11,FRAME_11+16(%r1); \ + ld %r10,FRAME_10+16(%r1); \ + ld %r9, FRAME_9+16(%r1); \ + ld %r8, FRAME_8+16(%r1); \ + ld %r7, FRAME_7+16(%r1); \ + ld %r6, FRAME_6+16(%r1); \ + ld %r5, FRAME_5+16(%r1); \ + ld %r4, FRAME_4+16(%r1); \ + ld %r3, FRAME_3+16(%r1); \ + ld %r2, FRAME_2+16(%r1); \ + ld %r0, FRAME_0+16(%r1); \ + ld %r1, FRAME_1+16(%r1); \ /* Can't touch %r1 from here on */ \ mtsprg2 %r2; /* save r2 & r3 */ \ mtsprg3 %r3; \ @@ -203,7 +235,7 @@ mtcr %r3; \ bf 17,1f; /* branch if PSL_PR is false */ \ /* Restore user SRs */ \ - RESTORE_USER_SRS(%r2,%r3); \ + RESTORE_USER_SRS(); /* uses r27-r31 */ \ 1: mfsprg1 %r2; /* restore cr */ \ mtcr %r2; \ GET_CPUINFO(%r2); \ @@ -236,6 +268,8 @@ CNAME(rstcode): addi %r1,%r1,(124-16)@l lis %r3,1@l + lis %r3,tocbase@ha + ld %r2,tocbase@l(%r3) bla CNAME(.pmap_cpu_bootstrap) nop bla CNAME(.cpudep_ap_bootstrap) @@ -271,7 +305,8 @@ CNAME(trapsize) = .-CNAME(trapcode) CNAME(alitrap): mtsprg1 %r1 /* save SP */ GET_CPUINFO(%r1) - std %r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1) /* free r28-r31 */ + std %r27,(PC_TEMPSAVE+CPUSAVE_R27)(%r1) /* free r27-r31 */ + std %r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1) std %r29,(PC_TEMPSAVE+CPUSAVE_R29)(%r1) std %r30,(PC_TEMPSAVE+CPUSAVE_R30)(%r1) std %r31,(PC_TEMPSAVE+CPUSAVE_R31)(%r1) @@ -302,7 +337,8 @@ CNAME(alisize) = .-CNAME(alitrap) CNAME(dsitrap): mtsprg1 %r1 /* save SP */ GET_CPUINFO(%r1) - std %r28,(PC_DISISAVE+CPUSAVE_R28)(%r1) /* free r28-r31 */ + std %r27,(PC_DISISAVE+CPUSAVE_R27)(%r1) /* free r27-r31 */ + std %r28,(PC_DISISAVE+CPUSAVE_R28)(%r1) std %r29,(PC_DISISAVE+CPUSAVE_R29)(%r1) std %r30,(PC_DISISAVE+CPUSAVE_R30)(%r1) std %r31,(PC_DISISAVE+CPUSAVE_R31)(%r1) @@ -326,6 +362,8 @@ disitrap: mtsprg3 %r1 GET_CPUINFO(%r1) + ld %r31,(PC_DISISAVE+CPUSAVE_R27)(%r1) + std %r31,(PC_TEMPSAVE+CPUSAVE_R27)(%r1) ld %r30,(PC_DISISAVE+CPUSAVE_R28)(%r1) std %r30,(PC_TEMPSAVE+CPUSAVE_R28)(%r1) ld %r31,(PC_DISISAVE+CPUSAVE_R29)(%r1) @@ -357,6 +395,8 @@ disitrap: std %r30,(PC_DBSAVE +CPUSAVE_AIM_DAR)(%r1) /* save DAR */ lwz %r30,(PC_TEMPSAVE+CPUSAVE_AIM_DSISR)(%r1) /* get DSISR */ stw %r30,(PC_DBSAVE +CPUSAVE_AIM_DSISR)(%r1) /* save DSISR */ + ld %r31,(PC_DISISAVE+CPUSAVE_R27)(%r1) /* get r27 */ + std %r31,(PC_DBSAVE +CPUSAVE_R27)(%r1) /* save r27 */ ld %r30,(PC_DISISAVE+CPUSAVE_R28)(%r1) /* get r28 */ std %r30,(PC_DBSAVE +CPUSAVE_R28)(%r1) /* save r28 */ ld %r31,(PC_DISISAVE+CPUSAVE_R29)(%r1) /* get r29 */ @@ -378,7 +418,7 @@ realtrap: bf 17,k_trap /* branch if PSL_PR is false */ GET_CPUINFO(%r1) ld %r1,PC_CURPCB(%r1) - RESTORE_KERN_SRS(%r30,%r31) /* enable kernel mapping */ + RESTORE_KERN_SRS() /* enable kernel mapping */ ba s_trap /* @@ -397,7 +437,8 @@ generictrap: /* Save interesting registers */ GET_CPUINFO(%r1) - std %r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1) /* free r28-r31 */ + std %r27,(PC_TEMPSAVE+CPUSAVE_R27)(%r1) /* free r27-r31 */ + std %r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1) std %r29,(PC_TEMPSAVE+CPUSAVE_R29)(%r1) std %r30,(PC_TEMPSAVE+CPUSAVE_R30)(%r1) std %r31,(PC_TEMPSAVE+CPUSAVE_R31)(%r1) @@ -421,7 +462,7 @@ s_trap: GET_CPUINFO(%r1) u_trap: ld %r1,PC_CURPCB(%r1) - RESTORE_KERN_SRS(%r30,%r31) /* enable kernel mapping */ + RESTORE_KERN_SRS() /* enable kernel mapping */ /* * Now the common trap catching code. @@ -430,7 +471,9 @@ k_trap: FRAME_SETUP(PC_TEMPSAVE) /* Call C interrupt dispatcher: */ trapagain: - addi %r3,%r1,8 + lis %r3,tocbase@ha + ld %r2,tocbase@l(%r3) + addi %r3,%r1,16 bl CNAME(.powerpc_interrupt) nop bl CNAME(.trapexit) @@ -478,6 +521,7 @@ ASENTRY(breakpoint) mtmsr %r3 /* disable interrupts */ isync GET_CPUINFO(%r3) + std %r27,(PC_DBSAVE+CPUSAVE_R27)(%r3) std %r28,(PC_DBSAVE+CPUSAVE_R28)(%r3) std %r29,(PC_DBSAVE+CPUSAVE_R29)(%r3) std %r30,(PC_DBSAVE+CPUSAVE_R30)(%r3) @@ -502,7 +546,9 @@ dbtrap: FRAME_SETUP(PC_DBSAVE) /* Call C trap code: */ - addi %r3,%r1,8 + lis %r3,tocbase@ha + ld %r2,tocbase@l(%r3) + addi %r3,%r1,16 bl CNAME(.db_trap_glue) nop or. %r3,%r3,%r3 @@ -514,6 +560,7 @@ dbtrap: FRAME_LEAVE(PC_DBSAVE) mtsprg1 %r1 /* prepare for entrance to realtrap */ GET_CPUINFO(%r1) + std %r27,(PC_TEMPSAVE+CPUSAVE_R27)(%r1) std %r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1) std %r29,(PC_TEMPSAVE+CPUSAVE_R29)(%r1) std %r30,(PC_TEMPSAVE+CPUSAVE_R30)(%r1) @@ -551,6 +598,7 @@ CNAME(dblow): 1: /* Privileged, so drop to KDB */ GET_CPUINFO(%r1) + std %r27,(PC_DBSAVE+CPUSAVE_R27)(%r1) /* free r27 */ std %r28,(PC_DBSAVE+CPUSAVE_R28)(%r1) /* free r28 */ mfsprg2 %r28 /* r29 holds cr... */ std %r28,(PC_DBSAVE+CPUSAVE_R29)(%r1) /* free r29 */ Modified: projects/ppc64/sys/powerpc/include/param.h ============================================================================== --- projects/ppc64/sys/powerpc/include/param.h Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/include/param.h Wed Jul 29 19:19:13 2009 (r195948) @@ -95,7 +95,7 @@ #define PAGE_SHIFT 12 #define PAGE_SIZE (1 << PAGE_SHIFT) /* Page size */ -#define PAGE_MASK (PAGE_SIZE - 1) +#define PAGE_MASK (vm_offset_t)(PAGE_SIZE - 1) #define NPTEPG (PAGE_SIZE/(sizeof (pt_entry_t))) #ifndef KSTACK_PAGES Modified: projects/ppc64/sys/powerpc/include/pcpu.h ============================================================================== --- projects/ppc64/sys/powerpc/include/pcpu.h Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/include/pcpu.h Wed Jul 29 19:19:13 2009 (r195948) @@ -34,7 +34,7 @@ #include struct pmap; -#define CPUSAVE_LEN 8 +#define CPUSAVE_LEN 9 #define PCPU_MD_COMMON_FIELDS \ int pc_inside_intr; \ @@ -66,10 +66,11 @@ struct pmap; int pc_tid_next; /* Definitions for register offsets within the exception tmp save areas */ -#define CPUSAVE_R28 0 /* where r28 gets saved */ -#define CPUSAVE_R29 1 /* where r29 gets saved */ -#define CPUSAVE_R30 2 /* where r30 gets saved */ -#define CPUSAVE_R31 3 /* where r31 gets saved */ +#define CPUSAVE_R27 0 /* where r27 gets saved */ +#define CPUSAVE_R28 1 /* where r28 gets saved */ +#define CPUSAVE_R29 2 /* where r29 gets saved */ +#define CPUSAVE_R30 3 /* where r30 gets saved */ +#define CPUSAVE_R31 4 /* where r31 gets saved */ #define CPUSAVE_AIM_DAR 4 /* where SPR_DAR gets saved */ #define CPUSAVE_AIM_DSISR 5 /* where SPR_DSISR gets saved */ #define CPUSAVE_BOOKE_DEAR 4 /* where SPR_DEAR gets saved */ Modified: projects/ppc64/sys/powerpc/include/pmap.h ============================================================================== --- projects/ppc64/sys/powerpc/include/pmap.h Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/include/pmap.h Wed Jul 29 19:19:13 2009 (r195948) @@ -84,9 +84,16 @@ struct pmap_md { #define NPMAPS 32768 #endif /* !defined(NPMAPS) */ +#ifdef __powerpc64__ +#define NSEGS 64 /* Typical SLB size. */ +#else +#define NSEGS 16 +#endif + struct pmap { struct mtx pm_mtx; - u_int pm_sr[16]; + + register_t pm_sr[NSEGS]; u_int pm_active; u_int pm_context; Modified: projects/ppc64/sys/powerpc/include/spr.h ============================================================================== --- projects/ppc64/sys/powerpc/include/spr.h Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/include/spr.h Wed Jul 29 19:19:13 2009 (r195948) @@ -161,6 +161,7 @@ #define IBM970MP 0x0044 #define IBM970GX 0x0045 #define MPC860 0x0050 +#define IBMCELLBE 0x0070 #define MPC8240 0x0081 #define IBM405GP 0x4011 #define IBM405L 0x4161 Modified: projects/ppc64/sys/powerpc/include/sr.h ============================================================================== --- projects/ppc64/sys/powerpc/include/sr.h Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/include/sr.h Wed Jul 29 19:19:13 2009 (r195948) @@ -49,7 +49,7 @@ #define KERNEL_SEGMENT (0xfffff0 + KERNEL_SR) #define KERNEL2_SEGMENT (0xfffff0 + KERNEL2_SR) #define EMPTY_SEGMENT 0xfffff0 -#define USER_ADDR ((void *)(USER_SR << ADDR_SR_SHFT)) +#define USER_ADDR ((void *)((register_t)USER_SR << ADDR_SR_SHFT)) #define SEGMENT_LENGTH 0x10000000 #define SEGMENT_MASK 0xf0000000 Modified: projects/ppc64/sys/powerpc/include/trap_aim.h ============================================================================== --- projects/ppc64/sys/powerpc/include/trap_aim.h Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/include/trap_aim.h Wed Jul 29 19:19:13 2009 (r195948) @@ -39,7 +39,9 @@ #define EXC_RST 0x0100 /* Reset; all but IBM4xx */ #define EXC_MCHK 0x0200 /* Machine Check */ #define EXC_DSI 0x0300 /* Data Storage Interrupt */ +#define EXC_DSE 0x0380 /* Data Segment Interrupt */ #define EXC_ISI 0x0400 /* Instruction Storage Interrupt */ +#define EXC_ISE 0x0480 /* Instruction Segment Interrupt */ #define EXC_EXI 0x0500 /* External Interrupt */ #define EXC_ALI 0x0600 /* Alignment Interrupt */ #define EXC_PGM 0x0700 /* Program Interrupt */ Modified: projects/ppc64/sys/powerpc/include/vmparam.h ============================================================================== --- projects/ppc64/sys/powerpc/include/vmparam.h Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/include/vmparam.h Wed Jul 29 19:19:13 2009 (r195948) @@ -95,9 +95,9 @@ #if defined(AIM) /* AIM */ -#define KERNBASE 0x00100000 /* start of kernel virtual */ +#define KERNBASE 0x00100000UL /* start of kernel virtual */ -#define VM_MIN_KERNEL_ADDRESS ((vm_offset_t)(KERNEL_SR << ADDR_SR_SHFT)) +#define VM_MIN_KERNEL_ADDRESS ((vm_offset_t)KERNEL_SR << ADDR_SR_SHFT) #define VM_MAX_KERNEL_ADDRESS (VM_MIN_KERNEL_ADDRESS + 2*SEGMENT_LENGTH - 1) /* Added: projects/ppc64/sys/powerpc/mambo/mambo_console.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ppc64/sys/powerpc/mambo/mambo_console.c Wed Jul 29 19:19:13 2009 (r195948) @@ -0,0 +1,220 @@ +/*- + * Copyright (C) 2001 Benno Rice. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY Benno Rice ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD: head/sys/dev/mambo/mambo_console.c 193018 2009-05-29 06:41:23Z ed $"); + +#include "opt_comconsole.h" +#include "opt_ofw.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include "mambocall.h" + +#ifndef MAMBOCONS_POLL_HZ +#define MAMBOCONS_POLL_HZ 4 +#endif +#define MAMBOBURSTLEN 128 /* max number of bytes to write in one chunk */ + +#define MAMBO_CONSOLE_WRITE 0 +#define MAMBO_CONSOLE_READ 0 + +static tsw_open_t mambotty_open; +static tsw_close_t mambotty_close; +static tsw_outwakeup_t mambotty_outwakeup; + +static struct ttydevsw mambo_ttydevsw = { + .tsw_flags = TF_NOPREFIX, + .tsw_open = mambotty_open, + .tsw_close = mambotty_close, + .tsw_outwakeup = mambotty_outwakeup, +}; + +static int polltime; +static struct callout_handle mambo_timeouthandle + = CALLOUT_HANDLE_INITIALIZER(&mambo_timeouthandle); + +#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER) +static int alt_break_state; +#endif + +static void mambo_timeout(void *); + +static cn_probe_t mambo_cnprobe; +static cn_init_t mambo_cninit; +static cn_term_t mambo_cnterm; +static cn_getc_t mambo_cngetc; +static cn_putc_t mambo_cnputc; + +CONSOLE_DRIVER(mambo); + +static void +cn_drvinit(void *unused) +{ + char output[32]; + struct tty *tp; + + if (mambo_consdev.cn_pri != CN_DEAD && + mambo_consdev.cn_name[0] != '\0') { + if (OF_finddevice("/mambo") == -1) + return; + + tp = tty_alloc(&mambo_ttydevsw, NULL); + tty_makedev(tp, NULL, "%s", output); + tty_makealias(tp, "mambocons"); + } +} + +SYSINIT(cndev, SI_SUB_CONFIGURE, SI_ORDER_MIDDLE, cn_drvinit, NULL); + +static int +mambotty_open(struct tty *tp) +{ + polltime = hz / MAMBOCONS_POLL_HZ; + if (polltime < 1) + polltime = 1; + + mambo_timeouthandle = timeout(mambo_timeout, tp, polltime); + + return (0); +} + +static void +mambotty_close(struct tty *tp) +{ + + /* XXX Should be replaced with callout_stop(9) */ + untimeout(mambo_timeout, tp, mambo_timeouthandle); +} + +static void +mambotty_outwakeup(struct tty *tp) +{ + int len; + u_char buf[MAMBOBURSTLEN]; + + for (;;) { + len = ttydisc_getc(tp, buf, sizeof buf); + if (len == 0) + break; + mambocall(MAMBO_CONSOLE_WRITE, buf, (register_t)len, 1UL); + } +} + +static void +mambo_timeout(void *v) +{ + struct tty *tp; + int c; + + tp = (struct tty *)v; + + tty_lock(tp); + while ((c = mambo_cngetc(NULL)) != -1) + ttydisc_rint(tp, c, 0); + ttydisc_rint_done(tp); + tty_unlock(tp); + + mambo_timeouthandle = timeout(mambo_timeout, tp, polltime); +} + +static void +mambo_cnprobe(struct consdev *cp) +{ + if (OF_finddevice("/mambo") == -1) { + cp->cn_pri = CN_DEAD; + return; + } + + cp->cn_pri = CN_NORMAL; +} + +static void +mambo_cninit(struct consdev *cp) +{ + + /* XXX: This is the alias, but that should be good enough */ + strcpy(cp->cn_name, "mambocons"); +} + +static void +mambo_cnterm(struct consdev *cp) +{ +} + +static int +mambo_cngetc(struct consdev *cp) +{ + unsigned char ch; + + ch = mambocall(MAMBO_CONSOLE_READ); + + if (ch > 0) { +#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER) + int kdb_brk; + + if ((kdb_brk = kdb_alt_break(ch, &alt_break_state)) != 0) { + switch (kdb_brk) { + case KDB_REQ_DEBUGGER: + kdb_enter(KDB_WHY_BREAK, + "Break sequence on console"); + break; + case KDB_REQ_PANIC: + kdb_panic("Panic sequence on console"); + break; + case KDB_REQ_REBOOT: + kdb_reboot(); + break; + + } + } +#endif + return (ch); + } + + return (-1); +} + +static void +mambo_cnputc(struct consdev *cp, int c) +{ + char cbuf; + + cbuf = c; + mambocall(MAMBO_CONSOLE_WRITE, &cbuf, 1UL, 1UL); +} Added: projects/ppc64/sys/powerpc/mambo/mambocall.S ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ppc64/sys/powerpc/mambo/mambocall.S Wed Jul 29 19:19:13 2009 (r195948) @@ -0,0 +1,12 @@ +#include + + .text + +ASENTRY(mambocall) + /* + * Use the special Mambo callout opcode and whatever arguments we + * were passed. Then return whatever Mambo returned. + */ + .long 0x000EAEB0 + blr + Added: projects/ppc64/sys/powerpc/mambo/mambocall.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ppc64/sys/powerpc/mambo/mambocall.h Wed Jul 29 19:19:13 2009 (r195948) @@ -0,0 +1,35 @@ +/*- + * Copyright 2008 by Nathan Whitehorn. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD: src/sys/powerpc/powermac/maciovar.h,v 1.8 2008/04/26 18:35:44 marcel Exp $ + */ + +#ifndef _MAMBO_MAMBOCALL_H_ +#define _MAMBO_MAMBOCALL_H_ + +int mambocall(int op, ...); + +#endif /* _MAMBO_MAMBOCALL_H_ */ Modified: projects/ppc64/sys/powerpc/powerpc/cpu.c ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/cpu.c Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/powerpc/cpu.c Wed Jul 29 19:19:13 2009 (r195948) @@ -96,6 +96,7 @@ static const struct cputab models[] = { { "IBM PowerPC 970FX", IBM970FX, REVFMT_MAJMIN }, { "IBM PowerPC 970GX", IBM970GX, REVFMT_MAJMIN }, { "IBM PowerPC 970MP", IBM970MP, REVFMT_MAJMIN }, + { "IBM Cell Broadband Engine", IBMCELLBE, REVFMT_MAJMIN }, { "Motorola PowerPC 7400", MPC7400, REVFMT_MAJMIN }, { "Motorola PowerPC 7410", MPC7410, REVFMT_MAJMIN }, { "Motorola PowerPC 7450", MPC7450, REVFMT_MAJMIN }, Modified: projects/ppc64/sys/powerpc/powerpc/genassym.c ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/genassym.c Wed Jul 29 19:07:24 2009 (r195947) +++ projects/ppc64/sys/powerpc/powerpc/genassym.c Wed Jul 29 19:19:13 2009 (r195948) @@ -70,33 +70,34 @@ ASSYM(PC_BOOKE_TLB_LEVEL, offsetof(struc ASSYM(PC_BOOKE_TLB_LOCK, offsetof(struct pcpu, pc_booke_tlb_lock)); #endif -ASSYM(CPUSAVE_R28, CPUSAVE_R28*4); -ASSYM(CPUSAVE_R29, CPUSAVE_R29*4); -ASSYM(CPUSAVE_R30, CPUSAVE_R30*4); -ASSYM(CPUSAVE_R31, CPUSAVE_R31*4); -ASSYM(CPUSAVE_SRR0, CPUSAVE_SRR0*4); -ASSYM(CPUSAVE_SRR1, CPUSAVE_SRR1*4); -ASSYM(CPUSAVE_AIM_DAR, CPUSAVE_AIM_DAR*4); -ASSYM(CPUSAVE_AIM_DSISR, CPUSAVE_AIM_DSISR*4); -ASSYM(CPUSAVE_BOOKE_DEAR, CPUSAVE_BOOKE_DEAR*4); -ASSYM(CPUSAVE_BOOKE_ESR, CPUSAVE_BOOKE_ESR*4); - -ASSYM(TLBSAVE_BOOKE_LR, TLBSAVE_BOOKE_LR*4); -ASSYM(TLBSAVE_BOOKE_CR, TLBSAVE_BOOKE_CR*4); -ASSYM(TLBSAVE_BOOKE_SRR0, TLBSAVE_BOOKE_SRR0*4); -ASSYM(TLBSAVE_BOOKE_SRR1, TLBSAVE_BOOKE_SRR1*4); -ASSYM(TLBSAVE_BOOKE_R20, TLBSAVE_BOOKE_R20*4); -ASSYM(TLBSAVE_BOOKE_R21, TLBSAVE_BOOKE_R21*4); *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***