diff options
Diffstat (limited to 'arch/powerpc/boot/ebony.c')
-rw-r--r-- | arch/powerpc/boot/ebony.c | 64 |
1 files changed, 2 insertions, 62 deletions
diff --git a/arch/powerpc/boot/ebony.c b/arch/powerpc/boot/ebony.c index 86c0f5df0a86..f61364c47a76 100644 --- a/arch/powerpc/boot/ebony.c +++ b/arch/powerpc/boot/ebony.c | |||
@@ -31,66 +31,6 @@ | |||
31 | 31 | ||
32 | static u8 *ebony_mac0, *ebony_mac1; | 32 | static u8 *ebony_mac0, *ebony_mac1; |
33 | 33 | ||
34 | /* Calculate 440GP clocks */ | ||
35 | void ibm440gp_fixup_clocks(unsigned int sysclk, unsigned int ser_clk) | ||
36 | { | ||
37 | u32 sys0 = mfdcr(DCRN_CPC0_SYS0); | ||
38 | u32 cr0 = mfdcr(DCRN_CPC0_CR0); | ||
39 | u32 cpu, plb, opb, ebc, tb, uart0, uart1, m; | ||
40 | u32 opdv = CPC0_SYS0_OPDV(sys0); | ||
41 | u32 epdv = CPC0_SYS0_EPDV(sys0); | ||
42 | |||
43 | if (sys0 & CPC0_SYS0_BYPASS) { | ||
44 | /* Bypass system PLL */ | ||
45 | cpu = plb = sysclk; | ||
46 | } else { | ||
47 | if (sys0 & CPC0_SYS0_EXTSL) | ||
48 | /* PerClk */ | ||
49 | m = CPC0_SYS0_FWDVB(sys0) * opdv * epdv; | ||
50 | else | ||
51 | /* CPU clock */ | ||
52 | m = CPC0_SYS0_FBDV(sys0) * CPC0_SYS0_FWDVA(sys0); | ||
53 | cpu = sysclk * m / CPC0_SYS0_FWDVA(sys0); | ||
54 | plb = sysclk * m / CPC0_SYS0_FWDVB(sys0); | ||
55 | } | ||
56 | |||
57 | opb = plb / opdv; | ||
58 | ebc = opb / epdv; | ||
59 | |||
60 | /* FIXME: Check if this is for all 440GP, or just Ebony */ | ||
61 | if ((mfpvr() & 0xf0000fff) == 0x40000440) | ||
62 | /* Rev. B 440GP, use external system clock */ | ||
63 | tb = sysclk; | ||
64 | else | ||
65 | /* Rev. C 440GP, errata force us to use internal clock */ | ||
66 | tb = cpu; | ||
67 | |||
68 | if (cr0 & CPC0_CR0_U0EC) | ||
69 | /* External UART clock */ | ||
70 | uart0 = ser_clk; | ||
71 | else | ||
72 | /* Internal UART clock */ | ||
73 | uart0 = plb / CPC0_CR0_UDIV(cr0); | ||
74 | |||
75 | if (cr0 & CPC0_CR0_U1EC) | ||
76 | /* External UART clock */ | ||
77 | uart1 = ser_clk; | ||
78 | else | ||
79 | /* Internal UART clock */ | ||
80 | uart1 = plb / CPC0_CR0_UDIV(cr0); | ||
81 | |||
82 | printf("PPC440GP: SysClk = %dMHz (%x)\n\r", | ||
83 | (sysclk + 500000) / 1000000, sysclk); | ||
84 | |||
85 | dt_fixup_cpu_clocks(cpu, tb, 0); | ||
86 | |||
87 | dt_fixup_clock("/plb", plb); | ||
88 | dt_fixup_clock("/plb/opb", opb); | ||
89 | dt_fixup_clock("/plb/opb/ebc", ebc); | ||
90 | dt_fixup_clock("/plb/opb/serial@40000200", uart0); | ||
91 | dt_fixup_clock("/plb/opb/serial@40000300", uart1); | ||
92 | } | ||
93 | |||
94 | #define EBONY_FPGA_PATH "/plb/opb/ebc/fpga" | 34 | #define EBONY_FPGA_PATH "/plb/opb/ebc/fpga" |
95 | #define EBONY_FPGA_FLASH_SEL 0x01 | 35 | #define EBONY_FPGA_FLASH_SEL 0x01 |
96 | #define EBONY_SMALL_FLASH_PATH "/plb/opb/ebc/small-flash" | 36 | #define EBONY_SMALL_FLASH_PATH "/plb/opb/ebc/small-flash" |
@@ -134,7 +74,7 @@ static void ebony_fixups(void) | |||
134 | unsigned long sysclk = 33000000; | 74 | unsigned long sysclk = 33000000; |
135 | 75 | ||
136 | ibm440gp_fixup_clocks(sysclk, 6 * 1843200); | 76 | ibm440gp_fixup_clocks(sysclk, 6 * 1843200); |
137 | ibm4xx_fixup_memsize(); | 77 | ibm4xx_sdram_fixup_memsize(); |
138 | dt_fixup_mac_addresses(ebony_mac0, ebony_mac1); | 78 | dt_fixup_mac_addresses(ebony_mac0, ebony_mac1); |
139 | ibm4xx_fixup_ebc_ranges("/plb/opb/ebc"); | 79 | ibm4xx_fixup_ebc_ranges("/plb/opb/ebc"); |
140 | ebony_flashsel_fixup(); | 80 | ebony_flashsel_fixup(); |
@@ -146,6 +86,6 @@ void ebony_init(void *mac0, void *mac1) | |||
146 | platform_ops.exit = ibm44x_dbcr_reset; | 86 | platform_ops.exit = ibm44x_dbcr_reset; |
147 | ebony_mac0 = mac0; | 87 | ebony_mac0 = mac0; |
148 | ebony_mac1 = mac1; | 88 | ebony_mac1 = mac1; |
149 | ft_init(_dtb_start, _dtb_end - _dtb_start, 32); | 89 | fdt_init(_dtb_start); |
150 | serial_console_init(); | 90 | serial_console_init(); |
151 | } | 91 | } |