diff options
author | Josh Boyer <jwboyer@linux.vnet.ibm.com> | 2007-08-20 08:28:30 -0400 |
---|---|---|
committer | Josh Boyer <jwboyer@linux.vnet.ibm.com> | 2007-08-20 08:28:30 -0400 |
commit | e90f3b74d884d0f2826e06dbab4f615ca346eaa4 (patch) | |
tree | 19b10d012a78ec644c7ce65be5df1c9d80f96ddc /arch/powerpc/boot | |
parent | 869680c16fb028ac4ad9a449283e0514789c654a (diff) |
[POWERPC] 4xx bootwrapper reworks
Make the fixup_memsize function common for all of 4xx as several chips share
the same SDRAM controller. Also add functions to reset 40x chips and quiesce
the ethernet.
Signed-off-by: Josh Boyer <jwboyer@linux.vnet.ibm.com>
Diffstat (limited to 'arch/powerpc/boot')
-rw-r--r-- | arch/powerpc/boot/44x.h | 4 | ||||
-rw-r--r-- | arch/powerpc/boot/4xx.c | 35 | ||||
-rw-r--r-- | arch/powerpc/boot/4xx.h | 20 | ||||
-rw-r--r-- | arch/powerpc/boot/dcr.h | 3 | ||||
-rw-r--r-- | arch/powerpc/boot/ebony.c | 3 |
5 files changed, 55 insertions, 10 deletions
diff --git a/arch/powerpc/boot/44x.h b/arch/powerpc/boot/44x.h index 577982c9a3cd..490a1cbdf1ed 100644 --- a/arch/powerpc/boot/44x.h +++ b/arch/powerpc/boot/44x.h | |||
@@ -10,10 +10,6 @@ | |||
10 | #ifndef _PPC_BOOT_44X_H_ | 10 | #ifndef _PPC_BOOT_44X_H_ |
11 | #define _PPC_BOOT_44X_H_ | 11 | #define _PPC_BOOT_44X_H_ |
12 | 12 | ||
13 | void ibm44x_fixup_memsize(void); | ||
14 | void ibm4xx_fixup_ebc_ranges(const char *ebc); | ||
15 | |||
16 | void ibm44x_dbcr_reset(void); | ||
17 | void ebony_init(void *mac0, void *mac1); | 13 | void ebony_init(void *mac0, void *mac1); |
18 | 14 | ||
19 | #endif /* _PPC_BOOT_44X_H_ */ | 15 | #endif /* _PPC_BOOT_44X_H_ */ |
diff --git a/arch/powerpc/boot/4xx.c b/arch/powerpc/boot/4xx.c index 9f64e840bef6..59026e4585dc 100644 --- a/arch/powerpc/boot/4xx.c +++ b/arch/powerpc/boot/4xx.c | |||
@@ -21,8 +21,8 @@ | |||
21 | #include "reg.h" | 21 | #include "reg.h" |
22 | #include "dcr.h" | 22 | #include "dcr.h" |
23 | 23 | ||
24 | /* Read the 44x memory controller to get size of system memory. */ | 24 | /* Read the 4xx SDRAM controller to get size of system memory. */ |
25 | void ibm44x_fixup_memsize(void) | 25 | void ibm4xx_fixup_memsize(void) |
26 | { | 26 | { |
27 | int i; | 27 | int i; |
28 | unsigned long memsize, bank_config; | 28 | unsigned long memsize, bank_config; |
@@ -39,8 +39,9 @@ void ibm44x_fixup_memsize(void) | |||
39 | dt_fixup_memory(0, memsize); | 39 | dt_fixup_memory(0, memsize); |
40 | } | 40 | } |
41 | 41 | ||
42 | #define SPRN_DBCR0 0x134 | 42 | #define SPRN_DBCR0_40X 0x3F2 |
43 | #define DBCR0_RST_SYSTEM 0x30000000 | 43 | #define SPRN_DBCR0_44X 0x134 |
44 | #define DBCR0_RST_SYSTEM 0x30000000 | ||
44 | 45 | ||
45 | void ibm44x_dbcr_reset(void) | 46 | void ibm44x_dbcr_reset(void) |
46 | { | 47 | { |
@@ -50,11 +51,35 @@ void ibm44x_dbcr_reset(void) | |||
50 | "mfspr %0,%1\n" | 51 | "mfspr %0,%1\n" |
51 | "oris %0,%0,%2@h\n" | 52 | "oris %0,%0,%2@h\n" |
52 | "mtspr %1,%0" | 53 | "mtspr %1,%0" |
53 | : "=&r"(tmp) : "i"(SPRN_DBCR0), "i"(DBCR0_RST_SYSTEM) | 54 | : "=&r"(tmp) : "i"(SPRN_DBCR0_44X), "i"(DBCR0_RST_SYSTEM) |
54 | ); | 55 | ); |
55 | 56 | ||
56 | } | 57 | } |
57 | 58 | ||
59 | void ibm40x_dbcr_reset(void) | ||
60 | { | ||
61 | unsigned long tmp; | ||
62 | |||
63 | asm volatile ( | ||
64 | "mfspr %0,%1\n" | ||
65 | "oris %0,%0,%2@h\n" | ||
66 | "mtspr %1,%0" | ||
67 | : "=&r"(tmp) : "i"(SPRN_DBCR0_40X), "i"(DBCR0_RST_SYSTEM) | ||
68 | ); | ||
69 | } | ||
70 | |||
71 | #define EMAC_RESET 0x20000000 | ||
72 | void ibm4xx_quiesce_eth(u32 *emac0, u32 *emac1) | ||
73 | { | ||
74 | /* Quiesce the MAL and EMAC(s) since PIBS/OpenBIOS don't do this for us */ | ||
75 | if (emac0) | ||
76 | *emac0 = EMAC_RESET; | ||
77 | if (emac1) | ||
78 | *emac1 = EMAC_RESET; | ||
79 | |||
80 | mtdcr(DCRN_MAL0_CFG, MAL_RESET); | ||
81 | } | ||
82 | |||
58 | /* Read 4xx EBC bus bridge registers to get mappings of the peripheral | 83 | /* Read 4xx EBC bus bridge registers to get mappings of the peripheral |
59 | * banks into the OPB address space */ | 84 | * banks into the OPB address space */ |
60 | void ibm4xx_fixup_ebc_ranges(const char *ebc) | 85 | void ibm4xx_fixup_ebc_ranges(const char *ebc) |
diff --git a/arch/powerpc/boot/4xx.h b/arch/powerpc/boot/4xx.h new file mode 100644 index 000000000000..65008427e03f --- /dev/null +++ b/arch/powerpc/boot/4xx.h | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * PowerPC 4xx related functions | ||
3 | * | ||
4 | * Copyright 2007 IBM Corporation. | ||
5 | * Josh Boyer <jwboyer@linux.vnet.ibm.com> | ||
6 | * | ||
7 | * This file is licensed under the terms of the GNU General Public | ||
8 | * License version 2. This program is licensed "as is" without any | ||
9 | * warranty of any kind, whether express or implied. | ||
10 | */ | ||
11 | #ifndef _POWERPC_BOOT_4XX_H_ | ||
12 | #define _POWERPC_BOOT_4XX_H_ | ||
13 | |||
14 | void ibm4xx_fixup_memsize(void); | ||
15 | void ibm44x_dbcr_reset(void); | ||
16 | void ibm40x_dbcr_reset(void); | ||
17 | void ibm4xx_quiesce_eth(u32 *emac0, u32 *emac1); | ||
18 | void ibm4xx_fixup_ebc_ranges(const char *ebc); | ||
19 | |||
20 | #endif /* _POWERPC_BOOT_4XX_H_ */ | ||
diff --git a/arch/powerpc/boot/dcr.h b/arch/powerpc/boot/dcr.h index 14b44aa96fea..c95d1a9222c9 100644 --- a/arch/powerpc/boot/dcr.h +++ b/arch/powerpc/boot/dcr.h | |||
@@ -121,4 +121,7 @@ static const unsigned long sdram_bxcr[] = { SDRAM0_B0CR, SDRAM0_B1CR, SDRAM0_B2C | |||
121 | #define DCRN_CPC0_MIRQ1 0x0ed | 121 | #define DCRN_CPC0_MIRQ1 0x0ed |
122 | #define DCRN_CPC0_JTAGID 0x0ef | 122 | #define DCRN_CPC0_JTAGID 0x0ef |
123 | 123 | ||
124 | #define DCRN_MAL0_CFG 0x180 | ||
125 | #define MAL_RESET 0x80000000 | ||
126 | |||
124 | #endif /* _PPC_BOOT_DCR_H_ */ | 127 | #endif /* _PPC_BOOT_DCR_H_ */ |
diff --git a/arch/powerpc/boot/ebony.c b/arch/powerpc/boot/ebony.c index eaf0b9bb68d6..2b9a809bcd74 100644 --- a/arch/powerpc/boot/ebony.c +++ b/arch/powerpc/boot/ebony.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include "reg.h" | 26 | #include "reg.h" |
27 | #include "io.h" | 27 | #include "io.h" |
28 | #include "dcr.h" | 28 | #include "dcr.h" |
29 | #include "4xx.h" | ||
29 | #include "44x.h" | 30 | #include "44x.h" |
30 | 31 | ||
31 | extern char _dtb_start[]; | 32 | extern char _dtb_start[]; |
@@ -136,7 +137,7 @@ static void ebony_fixups(void) | |||
136 | unsigned long sysclk = 33000000; | 137 | unsigned long sysclk = 33000000; |
137 | 138 | ||
138 | ibm440gp_fixup_clocks(sysclk, 6 * 1843200); | 139 | ibm440gp_fixup_clocks(sysclk, 6 * 1843200); |
139 | ibm44x_fixup_memsize(); | 140 | ibm4xx_fixup_memsize(); |
140 | dt_fixup_mac_addresses(ebony_mac0, ebony_mac1); | 141 | dt_fixup_mac_addresses(ebony_mac0, ebony_mac1); |
141 | ibm4xx_fixup_ebc_ranges("/plb/opb/ebc"); | 142 | ibm4xx_fixup_ebc_ranges("/plb/opb/ebc"); |
142 | ebony_flashsel_fixup(); | 143 | ebony_flashsel_fixup(); |