|
9 | 9 | #include "common_setup.h" |
10 | 10 | #include "exynos4412_setup.h" |
11 | 11 |
|
12 | | -// TODO: 4412 and 4210 should be commonised using something like is_soc_4210 |
13 | | -void system_clock_init(void) |
14 | | -{ |
15 | | - struct exynos4x12_clock *clk = |
16 | | - (struct exynos4x12_clock *)samsung_get_base_clock(); |
17 | | - struct exynos4412_power *power = (struct exynos4412_power *)samsung_get_base_power(); |
18 | | - struct exynos4_dmc *dmc = (struct exynos4_dmc *)samsung_get_base_dmc_ctrl(); |
19 | | - struct exynos4_dmc *dmc1 = (struct exynos4_dmc *)(samsung_get_base_dmc_ctrl() + DMC_OFFSET); |
20 | | - |
21 | | - // disable WDT |
22 | | - writel(0, (unsigned int *)0x10060000); |
23 | | - |
24 | | - writel(0, &clk->src_cpu); |
25 | | - |
26 | | - sdelay(0x10000); |
27 | | - |
28 | | - writel(CLK_DIV_DMC0_VAL, &clk->div_dmc0); |
29 | | - writel(CLK_DIV_DMC1_VAL, &clk->div_dmc1); |
30 | | - |
31 | | - writel(CLK_SRC_TOP0_VAL, &clk->src_top0); |
32 | | - writel(CLK_SRC_TOP1_VAL, &clk->src_top1); |
33 | | - sdelay(0x10000); |
34 | | - writel(CLK_DIV_TOP_VAL, &clk->div_top); |
35 | | - |
36 | | - writel(CLK_SRC_LEFTBUS_VAL, &clk->src_leftbus); |
37 | | - sdelay(0x10000); |
38 | | - writel(CLK_DIV_LEFTBUS_VAL, &clk->div_leftbus); |
39 | | - |
40 | | - writel(CLK_SRC_RIGHTBUS_VAL, &clk->src_rightbus); |
41 | | - sdelay(0x10000); |
42 | | - writel(CLK_DIV_RIGHTBUS_VAL, &clk->div_rightbus); |
43 | | - |
44 | | - // setup PLLs |
45 | | - writel(0x3e8, &clk->apll_lock); |
46 | | - writel(0x2f1, &clk->mpll_lock); |
47 | | - writel(0x2321, &clk->epll_lock); |
48 | | - writel(0x2321, &clk->vpll_lock); |
49 | | - |
50 | | - writel(CLK_DIV_CPU0_VAL, &clk->div_cpu0); |
51 | | - writel(CLK_DIV_CPU1_VAL, &clk->div_cpu1); |
52 | | - |
53 | | - writel(APLL_CON1_VAL, &clk->apll_con1); |
54 | | - writel(APLL_CON0_VAL, &clk->apll_con0); |
55 | | - |
56 | | - /* don't reset MPLL in C2C case */ |
57 | | - if (readl(&clk->mpll_con1) == 0xa0640301) { |
58 | | - writel(MPLL_CON1_VAL, &clk->mpll_con1); |
59 | | - writel(MPLL_CON0_VAL, &clk->mpll_con0); |
60 | | - } |
61 | | - |
62 | | - writel(EPLL_CON2_VAL, &clk->epll_con2); |
63 | | - writel(EPLL_CON1_VAL, &clk->epll_con1); |
64 | | - writel(EPLL_CON0_VAL, &clk->epll_con0); |
65 | | - |
66 | | - writel(VPLL_CON2_VAL, &clk->vpll_con2); |
67 | | - writel(VPLL_CON1_VAL, &clk->vpll_con1); |
68 | | - writel(VPLL_CON0_VAL, &clk->vpll_con0); |
69 | | - |
70 | | - sdelay(0x10000); |
71 | | - |
72 | | - /* wtf */ |
73 | | - writel(0x01000001, &clk->src_cpu); |
74 | | - writel(0x00011000, &clk->src_dmc); |
75 | | - writel(0x00000110, &clk->src_top0); |
76 | | - writel(0x01111000, &clk->src_top1); |
77 | | - |
78 | | - sdelay(0x10000); |
79 | | - |
80 | | - if ((readl(&power->c2c_ctrl) & 1) != 0) { |
81 | | - return; |
82 | | - } |
83 | | - |
84 | | - /* todo: split this out, clean it up. Or drop it entirely? */ |
85 | | - // DRAM clocks |
86 | | - writel(0x7f10100a, &dmc->phycontrol0); |
87 | | - writel(0xe0000084, &dmc->phycontrol1); |
88 | | - writel(0x7f10100b, &dmc->phycontrol0); |
89 | | - |
90 | | - sdelay(0x20000); |
91 | | - |
92 | | - writel(0x0000008c, &dmc->phycontrol1); // force DLL resync |
93 | | - writel(0x00000084, &dmc->phycontrol1); |
94 | | - |
95 | | - sdelay(0x20000); |
96 | | - |
97 | | - writel(0x0fff30fa, &dmc->concontrol); |
98 | | - writel(0x0fff30fa, &dmc1->concontrol); |
99 | | - |
100 | | - writel(0x00202533, &dmc->memcontrol); |
101 | | - writel(0x00202533, &dmc1->memcontrol); |
102 | | -} |
103 | | - |
104 | 12 | void mem_ctrl_init(int reset) |
105 | 13 | { |
106 | 14 | struct exynos4x12_clock *clk = |
107 | 15 | (struct exynos4x12_clock *)samsung_get_base_clock(); |
108 | 16 | struct exynos4_dmc *dmc = (struct exynos4_dmc *)samsung_get_base_dmc_ctrl(); |
| 17 | + struct exynos4_dmc *dmc1 = (struct exynos4_dmc *)(samsung_get_base_dmc_ctrl() + DMC_OFFSET); |
109 | 18 |
|
110 | 19 | writel(0x00117713, &clk->div_dmc0); |
111 | 20 |
|
@@ -151,49 +60,74 @@ void mem_ctrl_init(int reset) |
151 | 60 | writel(0x810, &dmc->directcmd); |
152 | 61 | writel(0xc08, &dmc->directcmd); |
153 | 62 |
|
154 | | - dmc = (struct exynos4_dmc *)(samsung_get_base_dmc_ctrl() + DMC_OFFSET); |
| 63 | + writel(0xe3855403, &dmc1->phyzqcontrol); |
| 64 | + writel(0x71101008, &dmc1->phycontrol0); |
| 65 | + writel(0x7110100a, &dmc1->phycontrol0); |
155 | 66 |
|
156 | | - writel(0xe3855403, &dmc->phyzqcontrol); |
157 | | - writel(0x71101008, &dmc->phycontrol0); |
158 | | - writel(0x7110100a, &dmc->phycontrol0); |
| 67 | + writel(0x00000084, &dmc1->phycontrol1); |
| 68 | + writel(0x71101008, &dmc1->phycontrol0); |
| 69 | + writel(0x0000008c, &dmc1->phycontrol1); |
| 70 | + writel(0x00000084, &dmc1->phycontrol1); |
| 71 | + writel(0x0000008c, &dmc1->phycontrol1); |
| 72 | + writel(0x00000084, &dmc1->phycontrol1); |
159 | 73 |
|
160 | | - writel(0x00000084, &dmc->phycontrol1); |
161 | | - writel(0x71101008, &dmc->phycontrol0); |
162 | | - writel(0x0000008c, &dmc->phycontrol1); |
163 | | - writel(0x00000084, &dmc->phycontrol1); |
164 | | - writel(0x0000008c, &dmc->phycontrol1); |
165 | | - writel(0x00000084, &dmc->phycontrol1); |
166 | | - |
167 | | - writel(0x0fff30ca, &dmc->concontrol); |
168 | | - writel(0x00202500, &dmc->memcontrol); |
169 | | - writel(0x40c01323, &dmc->memconfig0); |
170 | | - writel(0x80000000 | 0x7, &dmc->ivcontrol); |
171 | | - writel(0x64000000, &dmc->prechconfig); |
172 | | - writel(0x9c4000ff, &dmc->phycontrol0); |
| 74 | + writel(0x0fff30ca, &dmc1->concontrol); |
| 75 | + writel(0x00202500, &dmc1->memcontrol); |
| 76 | + writel(0x40c01323, &dmc1->memconfig0); |
| 77 | + writel(0x80000000 | 0x7, &dmc1->ivcontrol); |
| 78 | + writel(0x64000000, &dmc1->prechconfig); |
| 79 | + writel(0x9c4000ff, &dmc1->phycontrol0); |
173 | 80 |
|
174 | | - writel(0x5d, &dmc->timingref); |
| 81 | + writel(0x5d, &dmc1->timingref); |
175 | 82 |
|
176 | | - writel(0x34498691, &dmc->timingrow); |
177 | | - writel(0x36330306, &dmc->timingdata); |
178 | | - writel(0x50380365, &dmc->timingpower); |
| 83 | + writel(0x34498691, &dmc1->timingrow); |
| 84 | + writel(0x36330306, &dmc1->timingdata); |
| 85 | + writel(0x50380365, &dmc1->timingpower); |
179 | 86 |
|
180 | 87 | sdelay(0x100000); |
181 | 88 |
|
182 | | - writel(0x07000000, &dmc->directcmd); |
| 89 | + writel(0x07000000, &dmc1->directcmd); |
183 | 90 |
|
184 | 91 | sdelay(0x100000); |
185 | 92 |
|
186 | | - writel(0x00071c00, &dmc->directcmd); |
| 93 | + writel(0x00071c00, &dmc1->directcmd); |
187 | 94 |
|
188 | 95 | sdelay(0x100000); |
189 | 96 |
|
190 | | - writel(0x00010bfc, &dmc->directcmd); |
| 97 | + writel(0x00010bfc, &dmc1->directcmd); |
191 | 98 |
|
192 | 99 | sdelay(0x100000); |
193 | 100 |
|
194 | | - writel(0x608, &dmc->directcmd); |
195 | | - writel(0x810, &dmc->directcmd); |
196 | | - writel(0xc08, &dmc->directcmd); |
| 101 | + writel(0x608, &dmc1->directcmd); |
| 102 | + writel(0x810, &dmc1->directcmd); |
| 103 | + writel(0xc08, &dmc1->directcmd); |
| 104 | + |
| 105 | + writel(PHYCONTROL0_VAL, &dmc->phycontrol0); |
| 106 | + writel(MEM_TERM_EN | PHY_READ_EN | CTRL_SHGATE | CTRL_REF(8) | CTRL_SHIFTC(4), &dmc->phycontrol1); |
| 107 | + writel(PHYCONTROL0_VAL | CTRL_DLL_START, &dmc->phycontrol0); |
| 108 | + sdelay(0x20000); |
| 109 | + |
| 110 | + writel(CTRL_REF(8) | CTRL_SHIFTC(4), &dmc->phycontrol1); |
| 111 | + writel(CTRL_REF(8) | FP_RESYNC | CTRL_SHIFTC(4), &dmc->phycontrol1); |
| 112 | + |
| 113 | + sdelay(0x20000); |
| 114 | + |
| 115 | + writel(PHYCONTROL0_VAL, &dmc1->phycontrol0); |
| 116 | + writel(MEM_TERM_EN | PHY_READ_EN | CTRL_SHGATE | CTRL_REF(8) | CTRL_SHIFTC(4), &dmc1->phycontrol1); |
| 117 | + writel(PHYCONTROL0_VAL | CTRL_DLL_START, &dmc1->phycontrol0); |
| 118 | + sdelay(0x20000); |
| 119 | + |
| 120 | + writel(CTRL_REF(8) | CTRL_SHIFTC(4), &dmc1->phycontrol1); |
| 121 | + writel(CTRL_REF(8) | FP_RESYNC | CTRL_SHIFTC(4), &dmc1->phycontrol1); |
| 122 | + |
| 123 | + sdelay(0x20000); |
| 124 | + |
| 125 | + writel(DMC_CONCONTROL, &dmc->concontrol); |
| 126 | + writel(DMC_CONCONTROL, &dmc1->concontrol); |
| 127 | + |
| 128 | + writel(DMC_MEMCONTROL, &dmc->memcontrol); |
| 129 | + writel(DMC_MEMCONTROL, &dmc1->memcontrol); |
| 130 | + |
197 | 131 | } |
198 | 132 |
|
199 | 133 |
|
0 commit comments