diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/arch/ppc/include/ppc4xx.h | 11 | ||||
-rwxr-xr-x | src/arch/ppc/include/ppc74xx.h | 32 | ||||
-rwxr-xr-x | src/arch/ppc/include/ppc750.h | 33 | ||||
-rw-r--r-- | src/arch/ppc/include/ppc970.h | 30 | ||||
-rw-r--r-- | src/arch/ppc/include/ppcreg.h | 86 | ||||
-rw-r--r-- | src/cpu/ppc/mpc74xx/mpc74xx.inc | 2 | ||||
-rw-r--r-- | src/cpu/ppc/ppc7xx/ppc7xx.inc | 2 | ||||
-rw-r--r-- | src/cpu/ppc/ppc970/ppc970.inc | 86 | ||||
-rw-r--r-- | src/mainboard/momentum/apache/Options.lb | 1 |
9 files changed, 179 insertions, 104 deletions
diff --git a/src/arch/ppc/include/ppc4xx.h b/src/arch/ppc/include/ppc4xx.h index 279e1aa161..48066cedc2 100644 --- a/src/arch/ppc/include/ppc4xx.h +++ b/src/arch/ppc/include/ppc4xx.h @@ -68,6 +68,17 @@ #define sprg6w 0x116 /* Special purpose general 6 - write only */ #define sprg7w 0x117 /* Special purpose general 7 - write only */ +/*----------------------------------------------------------------------------+ +| Machine State Register. MSR_EE, MSR_PR, MSR_FP, MSR_ME, MSR_FE0, MSR_FE1, ++----------------------------------------------------------------------------*/ +#define MSR_APE 0x00080000 /* wait state enable */ +#define MSR_WE 0x00040000 /* wait state enable */ +#define MSR_CE 0x00020000 /* critical interrupt enable */ +#define MSR_DWE 0x00000400 /* debug wait enable */ +#define MSR_DE 0x00000200 /* debug interrupt enable */ +#define MSR_IR 0x00000020 /* instruction relocale */ +#define MSR_DR 0x00000010 /* data relocale */ + /****************************************************************************** * Special for PPC405GP ******************************************************************************/ diff --git a/src/arch/ppc/include/ppc74xx.h b/src/arch/ppc/include/ppc74xx.h new file mode 100755 index 0000000000..121efbe28d --- /dev/null +++ b/src/arch/ppc/include/ppc74xx.h @@ -0,0 +1,32 @@ +/* We are interested in the following hid0 bits: + 6 - ECLK - Enable external test clock (603 only) + 11 - DPM - Turn on dynamic power management (603 only) + 15 - NHR - Not hard reset + 16 - ICE - Instruction cache enable + 17 - DCE - Data cache enable + 18 - ILOCK - Instruction cache lock + 19 - DLOCK - Data cache lock + 20 - ICFI - Instruction cache invalidate + 21 - DCFI - Data cache invalidate + 24 - NOSER - Serial execution disable (604 only - turbo mode) + 24 - SGE - Store gathering enable (7410 only) + 29 - BHT - Branch history table (604 only) + + I made up the tags for the 604 specific bits, as they aren't + named in the 604 book. The 603 book calls the invalidate bits + ICFI and DCI, and I have no idea why it isn't DCFI. Maybe IBM named + one, and Motorola named the other. */ + +#define HID0_ECLK 0x02000000 +#define HID0_DPM 0x00100000 +#define HID0_NHR 0x00010000 +#define HID0_ICE 0x00008000 +#define HID0_DCE 0x00004000 +#define HID0_ILOCK 0x00002000 +#define HID0_DLOCK 0x00001000 +#define HID0_ICFI 0x00000800 +#define HID0_DCFI 0x00000400 +#define HID0_NOSER 0x00000080 +#define HID0_SGE 0x00000080 +#define HID0_BTIC 0x00000020 +#define HID0_BHT 0x00000004 diff --git a/src/arch/ppc/include/ppc750.h b/src/arch/ppc/include/ppc750.h new file mode 100755 index 0000000000..05fa37e894 --- /dev/null +++ b/src/arch/ppc/include/ppc750.h @@ -0,0 +1,33 @@ +/* We are interested in the following hid0 bits: + 6 - ECLK - Enable external test clock (603 only) + 11 - DPM - Turn on dynamic power management (603 only) + 15 - NHR - Not hard reset + 16 - ICE - Instruction cache enable + 17 - DCE - Data cache enable + 18 - ILOCK - Instruction cache lock + 19 - DLOCK - Data cache lock + 20 - ICFI - Instruction cache invalidate + 21 - DCFI - Data cache invalidate + 24 - NOSER - Serial execution disable (604 only - turbo mode) + 24 - SGE - Store gathering enable (7410 only) + 29 - BHT - Branch history table (604 only) + + I made up the tags for the 604 specific bits, as they aren't + named in the 604 book. The 603 book calls the invalidate bits + ICFI and DCI, and I have no idea why it isn't DCFI. Maybe IBM named + one, and Motorola named the other. */ + +#define HID0_ECLK 0x02000000 +#define HID0_DPM 0x00100000 +#define HID0_NHR 0x00010000 +#define HID0_ICE 0x00008000 +#define HID0_DCE 0x00004000 +#define HID0_ILOCK 0x00002000 +#define HID0_DLOCK 0x00001000 +#define HID0_ICFI 0x00000800 +#define HID0_DCFI 0x00000400 +#define HID0_NOSER 0x00000080 +#define HID0_SGE 0x00000080 +#define HID0_BTIC 0x00000020 +#define HID0_BHT 0x00000004 + diff --git a/src/arch/ppc/include/ppc970.h b/src/arch/ppc/include/ppc970.h index 7358d52e44..5c0f884972 100644 --- a/src/arch/ppc/include/ppc970.h +++ b/src/arch/ppc/include/ppc970.h @@ -18,16 +18,30 @@ | 13-Oct-03 Created MPT +----------------------------------------------------------------------------*/ -#ifndef _sys_as_archppc970_h_ -#define _sys_as_archppc970_h_ +#ifndef _PPC970_H_ +#define _PPC970_H_ /*----------------------------------------------------------------------------+ -| PVR value. +| When timers are running based on CPU speed this is the timer to CPU frequency +| ratio. +----------------------------------------------------------------------------*/ -#define PVR_970_DD1 0x00391100 -#define PVR_970FX_DD2 0x003C0200 -#define PVR_970FX_DD2_1 0x003C0201 -#define PVR_970FX_DD3 0x003C0300 +#define PPC970_TB_RATIO 8 + +/*----------------------------------------------------------------------------+ +| Cache line size. ++----------------------------------------------------------------------------*/ +#define CACHE_LINE_SIZE_L1 128 +#define CACHE_LINE_SIZE_L2 128 + +/*----------------------------------------------------------------------------+ +| SLB size. ++----------------------------------------------------------------------------*/ +#define SLB_SIZE 64 + +/*----------------------------------------------------------------------------+ +| TLB size. ++----------------------------------------------------------------------------*/ +#define TLB_SIZE 1024 /*----------------------------------------------------------------------------+ | Special Purpose Registers. Xer (64), lr (64), ctr (64), srr0 (64), srr1 (64) @@ -225,4 +239,4 @@ #define SRR1_ITLB_RELOA 0x00000000000C0000 #define SRR1_RI 0x0000000000000002 -#endif /* _sys_as_archppc970_h_ */ +#endif /* _PPC970_H_ */ diff --git a/src/arch/ppc/include/ppcreg.h b/src/arch/ppc/include/ppcreg.h index a778a49377..e6bb752b6d 100644 --- a/src/arch/ppc/include/ppcreg.h +++ b/src/arch/ppc/include/ppcreg.h @@ -2,78 +2,25 @@ /* This code is distributed without warranty under the GPL v2 (see COPYING) */ /* In the MSR, not all bits are interesting to us - 13 - POW - Power management - 14 - TGPR - temporary registers for page table routines - 15 - ILE - Exception little endian 16 - EE - External interrupts 17 - PR - Privilege level 18 - FP - Floating Point available 19 - ME - Machine check exception enable 20 - FE0 - Floating exception mode 0 - 21 - SE - Single step trace mode - 22 - BE - Branch trace enable 23 - FE1 - Floating exception mode 1 - 25 - IP - Exception prefix - 26 - IR - Instruction address translation - 27 - DR - Data address translation - 30 - RI - Recoverable exception - 31 - LE - Little endian mode MSR_MASK is the bits we do not change. */ #define MSR_MASK 0xfff8008c -#define MSR_POW 0x00040000 -#define MSR_TGPR 0x00020000 -#define MSR_ILE 0x00010000 #define MSR_EE 0x00008000 #define MSR_PR 0x00004000 #define MSR_FP 0x00002000 #define MSR_ME 0x00001000 #define MSR_FE0 0x00000800 -#define MSR_SE 0x00000400 -#define MSR_BE 0x00000200 #define MSR_FE1 0x00000100 -#define MSR_IP 0x00000040 -#define MSR_IR 0x00000020 -#define MSR_DR 0x00000010 -#define MSR_RI 0x00000002 -#define MSR_LE 0x00000001 #define MSR_DEFAULT (MSR_FP | MSR_IR | MSR_DR) -/* We are interested in the following hid0 bits: - 6 - ECLK - Enable external test clock (603 only) - 11 - DPM - Turn on dynamic power management (603 only) - 15 - NHR - Not hard reset - 16 - ICE - Instruction cache enable - 17 - DCE - Data cache enable - 18 - ILOCK - Instruction cache lock - 19 - DLOCK - Data cache lock - 20 - ICFI - Instruction cache invalidate - 21 - DCFI - Data cache invalidate - 24 - NOSER - Serial execution disable (604 only - turbo mode) - 24 - SGE - Store gathering enable (7410 only) - 29 - BHT - Branch history table (604 only) - - I made up the tags for the 604 specific bits, as they aren't - named in the 604 book. The 603 book calls the invalidate bits - ICFI and DCI, and I have no idea why it isn't DCFI. Maybe IBM named - one, and Motorola named the other. */ - -#define HID0_ECLK 0x02000000 -#define HID0_DPM 0x00100000 -#define HID0_NHR 0x00010000 -#define HID0_ICE 0x00008000 -#define HID0_DCE 0x00004000 -#define HID0_ILOCK 0x00002000 -#define HID0_DLOCK 0x00001000 -#define HID0_ICFI 0x00000800 -#define HID0_DCFI 0x00000400 -#define HID0_NOSER 0x00000080 -#define HID0_SGE 0x00000080 -#define HID0_BTIC 0x00000020 -#define HID0_BHT 0x00000004 - /* * BAT defines */ @@ -181,6 +128,39 @@ #define PVR_8240 0x00810100 #define PVR_8260 PVR_8240 +/*----------------------------------------------------------------------------+ +| Processor Version Register (PVR) values ++----------------------------------------------------------------------------*/ +#define PVR_970 0x0039 /* 970 any revision*/ +#define PVR_970DD_1_0 0x00391100 /* 970 DD1.0 */ +#define PVR_970FX 0x003C /* 970FX any revision*/ +#define PVR_970FX_DD_2_0 0x003C0200 /* 970FX DD2.0 */ +#define PVR_970FX_DD_2_1 0x003C0201 /* 970FX DD2.1 */ +#define PVR_970FX_DD_3_0 0x003C0300 /* 970FX DD3.0 */ +#define PVR_RESERVED 0x000000F0 /* reserved nibble */ + +#define SPR_SRR0 0x01a +#define SPR_SRR1 0x01b +#define SPR_SPRG0 0x110 +#define SPR_SPRG1 0x111 +#define SPR_SPRG2 0x112 +#define SPR_SPRG3 0x113 +#define SPR_PVR 0x11f +#define SPR_TBLR 0x10c +#define SPR_TBUR 0x10d + +#ifdef __PPC64__ +#define LOAD_64BIT_VAL(ra,value) addis ra,r0,value@highest; \ + ori ra,ra,value@higher; \ + sldi ra,ra,32; \ + oris ra,ra,value@h; \ + ori ra,ra,value@l +#define TLBIEL(rb) .long 0x7C000000|\ + (rb<<11)|(274<<1) +#define HRFID() .long 0x4C000000|\ + (274<<1) +#endif + #ifndef ASM unsigned __getmsr(void); void __setmsr(unsigned value); diff --git a/src/cpu/ppc/mpc74xx/mpc74xx.inc b/src/cpu/ppc/mpc74xx/mpc74xx.inc index d99ec6a247..179b92c1a2 100644 --- a/src/cpu/ppc/mpc74xx/mpc74xx.inc +++ b/src/cpu/ppc/mpc74xx/mpc74xx.inc @@ -22,6 +22,8 @@ * */ +#include <ppc74xx.h> + #define BSP_IOREGION1 0x80000000 #define BSP_IOMASK1 BAT_BL_256M | BAT_VALID_SUPERVISOR | BAT_VALID_USER #define BSP_IOREGION2 0xFD000000 diff --git a/src/cpu/ppc/ppc7xx/ppc7xx.inc b/src/cpu/ppc/ppc7xx/ppc7xx.inc index c82ab2f370..b23210c260 100644 --- a/src/cpu/ppc/ppc7xx/ppc7xx.inc +++ b/src/cpu/ppc/ppc7xx/ppc7xx.inc @@ -22,6 +22,8 @@ * */ +#include <ppc750.h> + #define BSP_IOREGION1 0x80000000 #define BSP_IOMASK1 BAT_BL_256M | BAT_VALID_SUPERVISOR | BAT_VALID_USER #define BSP_IOREGION2 0xFD000000 diff --git a/src/cpu/ppc/ppc970/ppc970.inc b/src/cpu/ppc/ppc970/ppc970.inc index 3d0f8cc3d4..b9a4013aad 100644 --- a/src/cpu/ppc/ppc970/ppc970.inc +++ b/src/cpu/ppc/ppc970/ppc970.inc @@ -94,16 +94,16 @@ LOAD_64BIT_VAL(r6,INITIAL_SLB_VSID_VAL) LOAD_64BIT_VAL(r7,INITIAL_SLB_ESID_VAL) addis r8,r0,0x1000 -..slbl: slbmte r6,r7 +0: slbmte r6,r7 addi r6,r6,0x1000 add r7,r7,r8 addi r7,r7,0x0001 - bdnz ..slbl + bdnz 0b mtctr r5 LOAD_64BIT_VAL(r6,INITIAL_SLB_INVA_VAL) -..slbi: slbie r6 +1: slbie r6 add r6,r6,r8 - bdnz ..slbi + bdnz 1b /*--------------------------------------------------------------------+ | Load SLB. Following is the initial memory map. | Entry(6) ESID(36) VSID @@ -126,11 +126,11 @@ | Invalidate all 1024 instruction and data TLBs (4 way) +--------------------------------------------------------------------*/ addi r8,r0,0x0100 - mtspr ctr,r8 + mtspr CTR,r8 addi r8,r0,0x0000 -..ivt: TLBIEL(r8) +2: TLBIEL(r8) addi r8,r8,0x1000 - bdnz ..ivt + bdnz 2b ptesync /*--------------------------------------------------------------------+ | Dcbz the page table space. Calculate SDR1 address. Store SDR1 @@ -138,13 +138,13 @@ +--------------------------------------------------------------------*/ mfspr r3,SPR_PIR cmpi cr0,1,r3,0x0000 - bne ..cpu1 + bne 3f addis r3,r0,INITIAL_PAGE_TABLE_ADDR_CPU0@h ori r3,r3,INITIAL_PAGE_TABLE_ADDR_CPU0@l - b ..skcpu -..cpu1: addis r3,r0,INITIAL_PAGE_TABLE_ADDR_CPU1@h + b 4f +3: addis r3,r0,INITIAL_PAGE_TABLE_ADDR_CPU1@h ori r3,r3,INITIAL_PAGE_TABLE_ADDR_CPU1@l -..skcpu:addis r4,r0,INITIAL_PAGE_TABLE_SIZE@h +4: addis r4,r0,INITIAL_PAGE_TABLE_SIZE@h ori r4,r4,INITIAL_PAGE_TABLE_SIZE@l rlwinm r5,r4,14,14,31 cntlzw r5,r5 @@ -203,26 +203,26 @@ mtctr r3 addis r31,r0,0xF400 and r31,r31,r29 -..aF4: addi r3,r0,0x0000 +5: addi r3,r0,0x0000 ori r4,r31,0x0000 ori r5,r30,0x0000 addi r6,r0,0x000F bl .p_ptegg addi r6,r3,0x0080 -..aF4a: lwz r4,0x0004(r3) +6: lwz r4,0x0004(r3) cmpli cr0,1,r4,0x0000 - beq ..aF4s + beq 8f addi r3,r3,0x0010 cmp cr0,1,r3,r6 - blt ..aF4a -..aF4h: b ..aF4h -..aF4s: rlwinm r4,r31,16,4,24 + blt 6b +7: b 7b +8: rlwinm r4,r31,16,4,24 ori r4,r4,0x0001 stw r4,0x0004(r3) ori r4,r31,0x01AC stw r4,0x000C(r3) addi r31,r31,0x1000 - bdnz ..aF4 + bdnz 5b /*--------------------------------------------------------------------+ | Setup 16MB of addresses in NB register space (0xF8000000). +--------------------------------------------------------------------*/ @@ -230,61 +230,61 @@ mtctr r3 addis r31,r0,0xF800 and r31,r31,r29 -..aF8: addi r3,r0,0x0000 +9: addi r3,r0,0x0000 ori r4,r31,0x0000 ori r5,r30,0x0000 addi r6,r0,0x000F bl .p_ptegg addi r6,r3,0x0080 -..aF8a: lwz r4,0x0004(r3) +10: lwz r4,0x0004(r3) cmpli cr0,1,r4,0x0000 - beq ..aF8s + beq 12f addi r3,r3,0x0010 cmp cr0,1,r3,r6 - blt ..aF8a -..aF8h: b ..aF8h -..aF8s: rlwinm r4,r31,16,4,24 + blt 10b +11: b 11b +12: rlwinm r4,r31,16,4,24 ori r4,r4,0x0001 stw r4,0x0004(r3) ori r4,r31,0x01AC stw r4,0x000C(r3) addi r31,r31,0x1000 - bdnz ..aF8 + bdnz 9b /*--------------------------------------------------------------------+ | Setup 16MB or 1MB of addresses in ROM (at 0xFF000000 or 0xFFF00000). +--------------------------------------------------------------------*/ mfspr r3,SPR_HIOR LOAD_64BIT_VAL(r4,BOOT_BASE_AS) cmpd cr0,r3,r4 - beq ..big + beq 13f addi r3,r0,0x0100 mtctr r3 addis r31,r0,0xFFF0 - b ..done -..big: addi r3,r0,0x1000 + b 14f +13: addi r3,r0,0x1000 mtctr r3 addis r31,r0,0xFF00 -..done: and r31,r31,r29 -..aFF: addi r3,r0,0x0000 +14: and r31,r31,r29 +15: addi r3,r0,0x0000 ori r4,r31,0x0000 ori r5,r30,0x0000 addi r6,r0,0x000F bl .p_ptegg addi r6,r3,0x0080 -..aFFa: lwz r4,0x0004(r3) +16: lwz r4,0x0004(r3) cmpli cr0,1,r4,0x0000 - beq ..aFFs + beq 18f addi r3,r3,0x0010 cmp cr0,1,r3,r6 - blt ..aFFa -..aFFh: b ..aFFh -..aFFs: rlwinm r4,r31,16,4,24 + blt 16b +17: b 17b +18: rlwinm r4,r31,16,4,24 ori r4,r4,0x0001 stw r4,0x0004(r3) ori r4,r31,0x01A3 stw r4,0x000C(r3) addi r31,r31,0x1000 - bdnz ..aFF + bdnz 15b /*--------------------------------------------------------------------+ | Synchronize after setting up page table. +--------------------------------------------------------------------*/ @@ -321,16 +321,16 @@ LOAD_64BIT_VAL(r7,FLASH_BASE_INTEL_AS) mfspr r5,SPR_HIOR cmpdi cr0,r5,0x0000 - beq ..hior0 + beq 19f cmpd cr0,r5,r7 - beq ..hiorl + beq 20f addi r8,r0,0x0000 - b ..hiors -..hiorl:ori r8,r6,0x0000 - b ..hiors -..hior0:mfspr r5,SPR_HID0 + b 21f +20: ori r8,r6,0x0000 + b 21f +19: mfspr r5,SPR_HID0 and r8,r5,r6 -..hiors:LOAD_64BIT_VAL(r4,HID0_PREFEAR) +21: LOAD_64BIT_VAL(r4,HID0_PREFEAR) andc r4,r4,r6 or r4,r4,r8 sync diff --git a/src/mainboard/momentum/apache/Options.lb b/src/mainboard/momentum/apache/Options.lb index 697e8133ad..548c72bcb6 100644 --- a/src/mainboard/momentum/apache/Options.lb +++ b/src/mainboard/momentum/apache/Options.lb @@ -138,5 +138,6 @@ default _ROMSTART=0xfff03000 ## linuxBIOS C code runs at this location in RAM default _RAMBASE=0x00100000 +default CROSS_COMPILE="powerpc64-unknown-linux-gnu-" ### End Options.lb end |