diff options
Diffstat (limited to 'drivers/staging/bcm/DDRInit.c')
-rw-r--r-- | drivers/staging/bcm/DDRInit.c | 1302 |
1 files changed, 1302 insertions, 0 deletions
diff --git a/drivers/staging/bcm/DDRInit.c b/drivers/staging/bcm/DDRInit.c new file mode 100644 index 00000000000..8907e211d48 --- /dev/null +++ b/drivers/staging/bcm/DDRInit.c | |||
@@ -0,0 +1,1302 @@ | |||
1 | #include "headers.h" | ||
2 | |||
3 | #ifndef BCM_SHM_INTERFACE | ||
4 | |||
5 | |||
6 | #define DDR_DUMP_INTERNAL_DEVICE_MEMORY 0xBFC02B00 | ||
7 | #define MIPS_CLOCK_REG 0x0f000820 | ||
8 | |||
9 | //DDR INIT-133Mhz | ||
10 | #define T3_SKIP_CLOCK_PROGRAM_DUMP_133MHZ 12 //index for 0x0F007000 | ||
11 | static DDR_SET_NODE asT3_DDRSetting133MHz[]= {// # DPLL Clock Setting | ||
12 | {0x0F000800,0x00007212}, | ||
13 | {0x0f000820,0x07F13FFF}, | ||
14 | {0x0f000810,0x00000F95}, | ||
15 | {0x0f000860,0x00000000}, | ||
16 | {0x0f000880,0x000003DD}, | ||
17 | // Changed source for X-bar and MIPS clock to APLL | ||
18 | {0x0f000840,0x0FFF1B00}, | ||
19 | {0x0f000870,0x00000002}, | ||
20 | {0x0F00a044,0x1fffffff}, | ||
21 | {0x0F00a040,0x1f000000}, | ||
22 | {0x0F00a084,0x1Cffffff}, | ||
23 | {0x0F00a080,0x1C000000}, | ||
24 | {0x0F00a04C,0x0000000C}, | ||
25 | //Memcontroller Default values | ||
26 | {0x0F007000,0x00010001}, | ||
27 | {0x0F007004,0x01010100}, | ||
28 | {0x0F007008,0x01000001}, | ||
29 | {0x0F00700c,0x00000000}, | ||
30 | {0x0F007010,0x01000000}, | ||
31 | {0x0F007014,0x01000100}, | ||
32 | {0x0F007018,0x01000000}, | ||
33 | {0x0F00701c,0x01020001},// POP - 0x00020001 Normal 0x01020001 | ||
34 | {0x0F007020,0x04030107}, //Normal - 0x04030107 POP - 0x05030107 | ||
35 | {0x0F007024,0x02000007}, | ||
36 | {0x0F007028,0x02020202}, | ||
37 | {0x0F00702c,0x0206060a},//ROB- 0x0205050a,//0x0206060a | ||
38 | {0x0F007030,0x05000000}, | ||
39 | {0x0F007034,0x00000003}, | ||
40 | {0x0F007038,0x110a0200},//ROB - 0x110a0200,//0x180a0200,// 0x1f0a0200 | ||
41 | {0x0F00703C,0x02101010},//ROB - 0x02101010,//0x02101018}, | ||
42 | {0x0F007040,0x45751200},//ROB - 0x45751200,//0x450f1200}, | ||
43 | {0x0F007044,0x110a0d00},//ROB - 0x110a0d00//0x111f0d00 | ||
44 | {0x0F007048,0x081b0306}, | ||
45 | {0x0F00704c,0x00000000}, | ||
46 | {0x0F007050,0x0000001c}, | ||
47 | {0x0F007054,0x00000000}, | ||
48 | {0x0F007058,0x00000000}, | ||
49 | {0x0F00705c,0x00000000}, | ||
50 | {0x0F007060,0x0010246c}, | ||
51 | {0x0F007064,0x00000010}, | ||
52 | {0x0F007068,0x00000000}, | ||
53 | {0x0F00706c,0x00000001}, | ||
54 | {0x0F007070,0x00007000}, | ||
55 | {0x0F007074,0x00000000}, | ||
56 | {0x0F007078,0x00000000}, | ||
57 | {0x0F00707C,0x00000000}, | ||
58 | {0x0F007080,0x00000000}, | ||
59 | {0x0F007084,0x00000000}, | ||
60 | //# Enable BW improvement within memory controller | ||
61 | {0x0F007094,0x00000104}, | ||
62 | //# Enable 2 ports within X-bar | ||
63 | {0x0F00A000,0x00000016}, | ||
64 | //# Enable start bit within memory controller | ||
65 | {0x0F007018,0x01010000} | ||
66 | }; | ||
67 | //80Mhz | ||
68 | #define T3_SKIP_CLOCK_PROGRAM_DUMP_80MHZ 10 //index for 0x0F007000 | ||
69 | static DDR_SET_NODE asT3_DDRSetting80MHz[]= {// # DPLL Clock Setting | ||
70 | {0x0f000810,0x00000F95}, | ||
71 | {0x0f000820,0x07f1ffff}, | ||
72 | {0x0f000860,0x00000000}, | ||
73 | {0x0f000880,0x000003DD}, | ||
74 | {0x0F00a044,0x1fffffff}, | ||
75 | {0x0F00a040,0x1f000000}, | ||
76 | {0x0F00a084,0x1Cffffff}, | ||
77 | {0x0F00a080,0x1C000000}, | ||
78 | {0x0F00a000,0x00000016}, | ||
79 | {0x0F00a04C,0x0000000C}, | ||
80 | //Memcontroller Default values | ||
81 | {0x0F007000,0x00010001}, | ||
82 | {0x0F007004,0x01000000}, | ||
83 | {0x0F007008,0x01000001}, | ||
84 | {0x0F00700c,0x00000000}, | ||
85 | {0x0F007010,0x01000000}, | ||
86 | {0x0F007014,0x01000100}, | ||
87 | {0x0F007018,0x01000000}, | ||
88 | {0x0F00701c,0x01020000}, | ||
89 | {0x0F007020,0x04020107}, | ||
90 | {0x0F007024,0x00000007}, | ||
91 | {0x0F007028,0x02020201}, | ||
92 | {0x0F00702c,0x0204040a}, | ||
93 | {0x0F007030,0x04000000}, | ||
94 | {0x0F007034,0x00000002}, | ||
95 | {0x0F007038,0x1F060200}, | ||
96 | {0x0F00703C,0x1C22221F}, | ||
97 | {0x0F007040,0x8A006600}, | ||
98 | {0x0F007044,0x221a0800}, | ||
99 | {0x0F007048,0x02690204}, | ||
100 | {0x0F00704c,0x00000000}, | ||
101 | {0x0F007050,0x0000001c}, | ||
102 | {0x0F007054,0x00000000}, | ||
103 | {0x0F007058,0x00000000}, | ||
104 | {0x0F00705c,0x00000000}, | ||
105 | {0x0F007060,0x000A15D6}, | ||
106 | {0x0F007064,0x0000000A}, | ||
107 | {0x0F007068,0x00000000}, | ||
108 | {0x0F00706c,0x00000001}, | ||
109 | {0x0F007070,0x00004000}, | ||
110 | {0x0F007074,0x00000000}, | ||
111 | {0x0F007078,0x00000000}, | ||
112 | {0x0F00707C,0x00000000}, | ||
113 | {0x0F007080,0x00000000}, | ||
114 | {0x0F007084,0x00000000}, | ||
115 | {0x0F007094,0x00000104}, | ||
116 | //# Enable start bit within memory controller | ||
117 | {0x0F007018,0x01010000} | ||
118 | }; | ||
119 | //100Mhz | ||
120 | #define T3_SKIP_CLOCK_PROGRAM_DUMP_100MHZ 13 //index for 0x0F007000 | ||
121 | static DDR_SET_NODE asT3_DDRSetting100MHz[]= {// # DPLL Clock Setting | ||
122 | {0x0F000800,0x00007008}, | ||
123 | {0x0f000810,0x00000F95}, | ||
124 | {0x0f000820,0x07F13E3F}, | ||
125 | {0x0f000860,0x00000000}, | ||
126 | {0x0f000880,0x000003DD}, | ||
127 | // Changed source for X-bar and MIPS clock to APLL | ||
128 | //0x0f000840,0x0FFF1800, | ||
129 | {0x0f000840,0x0FFF1B00}, | ||
130 | {0x0f000870,0x00000002}, | ||
131 | {0x0F00a044,0x1fffffff}, | ||
132 | {0x0F00a040,0x1f000000}, | ||
133 | {0x0F00a084,0x1Cffffff}, | ||
134 | {0x0F00a080,0x1C000000}, | ||
135 | {0x0F00a04C,0x0000000C}, | ||
136 | //# Enable 2 ports within X-bar | ||
137 | {0x0F00A000,0x00000016}, | ||
138 | //Memcontroller Default values | ||
139 | {0x0F007000,0x00010001}, | ||
140 | {0x0F007004,0x01010100}, | ||
141 | {0x0F007008,0x01000001}, | ||
142 | {0x0F00700c,0x00000000}, | ||
143 | {0x0F007010,0x01000000}, | ||
144 | {0x0F007014,0x01000100}, | ||
145 | {0x0F007018,0x01000000}, | ||
146 | {0x0F00701c,0x01020001}, // POP - 0x00020000 Normal 0x01020000 | ||
147 | {0x0F007020,0x04020107},//Normal - 0x04030107 POP - 0x05030107 | ||
148 | {0x0F007024,0x00000007}, | ||
149 | {0x0F007028,0x01020201}, | ||
150 | {0x0F00702c,0x0204040A}, | ||
151 | {0x0F007030,0x06000000}, | ||
152 | {0x0F007034,0x00000004}, | ||
153 | {0x0F007038,0x20080200}, | ||
154 | {0x0F00703C,0x02030320}, | ||
155 | {0x0F007040,0x6E7F1200}, | ||
156 | {0x0F007044,0x01190A00}, | ||
157 | {0x0F007048,0x06120305},//0x02690204 // 0x06120305 | ||
158 | {0x0F00704c,0x00000000}, | ||
159 | {0x0F007050,0x0000001C}, | ||
160 | {0x0F007054,0x00000000}, | ||
161 | {0x0F007058,0x00000000}, | ||
162 | {0x0F00705c,0x00000000}, | ||
163 | {0x0F007060,0x00082ED6}, | ||
164 | {0x0F007064,0x0000000A}, | ||
165 | {0x0F007068,0x00000000}, | ||
166 | {0x0F00706c,0x00000001}, | ||
167 | {0x0F007070,0x00005000}, | ||
168 | {0x0F007074,0x00000000}, | ||
169 | {0x0F007078,0x00000000}, | ||
170 | {0x0F00707C,0x00000000}, | ||
171 | {0x0F007080,0x00000000}, | ||
172 | {0x0F007084,0x00000000}, | ||
173 | //# Enable BW improvement within memory controller | ||
174 | {0x0F007094,0x00000104}, | ||
175 | //# Enable start bit within memory controller | ||
176 | {0x0F007018,0x01010000} | ||
177 | }; | ||
178 | |||
179 | //Net T3B DDR Settings | ||
180 | //DDR INIT-133Mhz | ||
181 | static DDR_SET_NODE asDPLL_266MHZ[] = { | ||
182 | {0x0F000800,0x00007212}, | ||
183 | {0x0f000820,0x07F13FFF}, | ||
184 | {0x0f000810,0x00000F95}, | ||
185 | {0x0f000860,0x00000000}, | ||
186 | {0x0f000880,0x000003DD}, | ||
187 | // Changed source for X-bar and MIPS clock to APLL | ||
188 | {0x0f000840,0x0FFF1B00}, | ||
189 | {0x0f000870,0x00000002} | ||
190 | }; | ||
191 | #if 0 | ||
192 | static DDR_SET_NODE asDPLL_800MHZ[] = { | ||
193 | {0x0f000810,0x00000F95}, | ||
194 | {0x0f000810,0x00000F95}, | ||
195 | {0x0f000810,0x00000F95}, | ||
196 | {0x0f000820,0x03F1365B}, | ||
197 | {0x0f000840,0x0FFF0000}, | ||
198 | {0x0f000880,0x000003DD}, | ||
199 | {0x0f000860,0x00000000} | ||
200 | }; | ||
201 | #endif | ||
202 | |||
203 | #define T3B_SKIP_CLOCK_PROGRAM_DUMP_133MHZ 11 //index for 0x0F007000 | ||
204 | static DDR_SET_NODE asT3B_DDRSetting133MHz[] = {// # DPLL Clock Setting | ||
205 | {0x0f000810,0x00000F95}, | ||
206 | {0x0f000810,0x00000F95}, | ||
207 | {0x0f000810,0x00000F95}, | ||
208 | {0x0f000820,0x07F13652}, | ||
209 | {0x0f000840,0x0FFF0800}, | ||
210 | // Changed source for X-bar and MIPS clock to APLL | ||
211 | {0x0f000880,0x000003DD}, | ||
212 | {0x0f000860,0x00000000}, | ||
213 | // Changed source for X-bar and MIPS clock to APLL | ||
214 | {0x0F00a044,0x1fffffff}, | ||
215 | {0x0F00a040,0x1f000000}, | ||
216 | {0x0F00a084,0x1Cffffff}, | ||
217 | {0x0F00a080,0x1C000000}, | ||
218 | //# Enable 2 ports within X-bar | ||
219 | {0x0F00A000,0x00000016}, | ||
220 | //Memcontroller Default values | ||
221 | {0x0F007000,0x00010001}, | ||
222 | {0x0F007004,0x01010100}, | ||
223 | {0x0F007008,0x01000001}, | ||
224 | {0x0F00700c,0x00000000}, | ||
225 | {0x0F007010,0x01000000}, | ||
226 | {0x0F007014,0x01000100}, | ||
227 | {0x0F007018,0x01000000}, | ||
228 | {0x0F00701c,0x01020001},// POP - 0x00020001 Normal 0x01020001 | ||
229 | {0x0F007020,0x04030107}, //Normal - 0x04030107 POP - 0x05030107 | ||
230 | {0x0F007024,0x02000007}, | ||
231 | {0x0F007028,0x02020202}, | ||
232 | {0x0F00702c,0x0206060a},//ROB- 0x0205050a,//0x0206060a | ||
233 | {0x0F007030,0x05000000}, | ||
234 | {0x0F007034,0x00000003}, | ||
235 | {0x0F007038,0x130a0200},//ROB - 0x110a0200,//0x180a0200,// 0x1f0a0200 | ||
236 | {0x0F00703C,0x02101012},//ROB - 0x02101010,//0x02101018}, | ||
237 | {0x0F007040,0x457D1200},//ROB - 0x45751200,//0x450f1200}, | ||
238 | {0x0F007044,0x11130d00},//ROB - 0x110a0d00//0x111f0d00 | ||
239 | {0x0F007048,0x040D0306}, | ||
240 | {0x0F00704c,0x00000000}, | ||
241 | {0x0F007050,0x0000001c}, | ||
242 | {0x0F007054,0x00000000}, | ||
243 | {0x0F007058,0x00000000}, | ||
244 | {0x0F00705c,0x00000000}, | ||
245 | {0x0F007060,0x0010246c}, | ||
246 | {0x0F007064,0x00000012}, | ||
247 | {0x0F007068,0x00000000}, | ||
248 | {0x0F00706c,0x00000001}, | ||
249 | {0x0F007070,0x00007000}, | ||
250 | {0x0F007074,0x00000000}, | ||
251 | {0x0F007078,0x00000000}, | ||
252 | {0x0F00707C,0x00000000}, | ||
253 | {0x0F007080,0x00000000}, | ||
254 | {0x0F007084,0x00000000}, | ||
255 | //# Enable BW improvement within memory controller | ||
256 | {0x0F007094,0x00000104}, | ||
257 | //# Enable start bit within memory controller | ||
258 | {0x0F007018,0x01010000}, | ||
259 | }; | ||
260 | |||
261 | #define T3B_SKIP_CLOCK_PROGRAM_DUMP_80MHZ 9 //index for 0x0F007000 | ||
262 | static DDR_SET_NODE asT3B_DDRSetting80MHz[] = {// # DPLL Clock Setting | ||
263 | {0x0f000810,0x00000F95}, | ||
264 | {0x0f000820,0x07F13FFF}, | ||
265 | {0x0f000840,0x0FFF1F00}, | ||
266 | {0x0f000880,0x000003DD}, | ||
267 | {0x0f000860,0x00000000}, | ||
268 | |||
269 | {0x0F00a044,0x1fffffff}, | ||
270 | {0x0F00a040,0x1f000000}, | ||
271 | {0x0F00a084,0x1Cffffff}, | ||
272 | {0x0F00a080,0x1C000000}, | ||
273 | {0x0F00a000,0x00000016}, | ||
274 | //Memcontroller Default values | ||
275 | {0x0F007000,0x00010001}, | ||
276 | {0x0F007004,0x01000000}, | ||
277 | {0x0F007008,0x01000001}, | ||
278 | {0x0F00700c,0x00000000}, | ||
279 | {0x0F007010,0x01000000}, | ||
280 | {0x0F007014,0x01000100}, | ||
281 | {0x0F007018,0x01000000}, | ||
282 | {0x0F00701c,0x01020000}, | ||
283 | {0x0F007020,0x04020107}, | ||
284 | {0x0F007024,0x00000007}, | ||
285 | {0x0F007028,0x02020201}, | ||
286 | {0x0F00702c,0x0204040a}, | ||
287 | {0x0F007030,0x04000000}, | ||
288 | {0x0F007034,0x02000002}, | ||
289 | {0x0F007038,0x1F060202}, | ||
290 | {0x0F00703C,0x1C22221F}, | ||
291 | {0x0F007040,0x8A006600}, | ||
292 | {0x0F007044,0x221a0800}, | ||
293 | {0x0F007048,0x02690204}, | ||
294 | {0x0F00704c,0x00000000}, | ||
295 | {0x0F007050,0x0100001c}, | ||
296 | {0x0F007054,0x00000000}, | ||
297 | {0x0F007058,0x00000000}, | ||
298 | {0x0F00705c,0x00000000}, | ||
299 | {0x0F007060,0x000A15D6}, | ||
300 | {0x0F007064,0x0000000A}, | ||
301 | {0x0F007068,0x00000000}, | ||
302 | {0x0F00706c,0x00000001}, | ||
303 | {0x0F007070,0x00004000}, | ||
304 | {0x0F007074,0x00000000}, | ||
305 | {0x0F007078,0x00000000}, | ||
306 | {0x0F00707C,0x00000000}, | ||
307 | {0x0F007080,0x00000000}, | ||
308 | {0x0F007084,0x00000000}, | ||
309 | {0x0F007094,0x00000104}, | ||
310 | //# Enable start bit within memory controller | ||
311 | {0x0F007018,0x01010000} | ||
312 | }; | ||
313 | |||
314 | //100Mhz | ||
315 | #define T3B_SKIP_CLOCK_PROGRAM_DUMP_100MHZ 9 //index for 0x0F007000 | ||
316 | static DDR_SET_NODE asT3B_DDRSetting100MHz[] = {// # DPLL Clock Setting | ||
317 | {0x0f000810,0x00000F95}, | ||
318 | {0x0f000820,0x07F1369B}, | ||
319 | {0x0f000840,0x0FFF0800}, | ||
320 | {0x0f000880,0x000003DD}, | ||
321 | {0x0f000860,0x00000000}, | ||
322 | {0x0F00a044,0x1fffffff}, | ||
323 | {0x0F00a040,0x1f000000}, | ||
324 | {0x0F00a084,0x1Cffffff}, | ||
325 | {0x0F00a080,0x1C000000}, | ||
326 | //# Enable 2 ports within X-bar | ||
327 | {0x0F00A000,0x00000016}, | ||
328 | //Memcontroller Default values | ||
329 | {0x0F007000,0x00010001}, | ||
330 | {0x0F007004,0x01010100}, | ||
331 | {0x0F007008,0x01000001}, | ||
332 | {0x0F00700c,0x00000000}, | ||
333 | {0x0F007010,0x01000000}, | ||
334 | {0x0F007014,0x01000100}, | ||
335 | {0x0F007018,0x01000000}, | ||
336 | {0x0F00701c,0x01020000}, // POP - 0x00020000 Normal 0x01020000 | ||
337 | {0x0F007020,0x04020107},//Normal - 0x04030107 POP - 0x05030107 | ||
338 | {0x0F007024,0x00000007}, | ||
339 | {0x0F007028,0x01020201}, | ||
340 | {0x0F00702c,0x0204040A}, | ||
341 | {0x0F007030,0x06000000}, | ||
342 | {0x0F007034,0x02000004}, | ||
343 | {0x0F007038,0x20080200}, | ||
344 | {0x0F00703C,0x02030320}, | ||
345 | {0x0F007040,0x6E7F1200}, | ||
346 | {0x0F007044,0x01190A00}, | ||
347 | {0x0F007048,0x06120305},//0x02690204 // 0x06120305 | ||
348 | {0x0F00704c,0x00000000}, | ||
349 | {0x0F007050,0x0100001C}, | ||
350 | {0x0F007054,0x00000000}, | ||
351 | {0x0F007058,0x00000000}, | ||
352 | {0x0F00705c,0x00000000}, | ||
353 | {0x0F007060,0x00082ED6}, | ||
354 | {0x0F007064,0x0000000A}, | ||
355 | {0x0F007068,0x00000000}, | ||
356 | {0x0F00706c,0x00000001}, | ||
357 | {0x0F007070,0x00005000}, | ||
358 | {0x0F007074,0x00000000}, | ||
359 | {0x0F007078,0x00000000}, | ||
360 | {0x0F00707C,0x00000000}, | ||
361 | {0x0F007080,0x00000000}, | ||
362 | {0x0F007084,0x00000000}, | ||
363 | //# Enable BW improvement within memory controller | ||
364 | {0x0F007094,0x00000104}, | ||
365 | //# Enable start bit within memory controller | ||
366 | {0x0F007018,0x01010000} | ||
367 | }; | ||
368 | |||
369 | |||
370 | #define T3LP_SKIP_CLOCK_PROGRAM_DUMP_133MHZ 9 //index for 0x0F007000 | ||
371 | static DDR_SET_NODE asT3LP_DDRSetting133MHz[]= {// # DPLL Clock Setting | ||
372 | {0x0f000820,0x03F1365B}, | ||
373 | {0x0f000810,0x00002F95}, | ||
374 | {0x0f000880,0x000003DD}, | ||
375 | // Changed source for X-bar and MIPS clock to APLL | ||
376 | {0x0f000840,0x0FFF0000}, | ||
377 | {0x0f000860,0x00000000}, | ||
378 | {0x0F00a044,0x1fffffff}, | ||
379 | {0x0F00a040,0x1f000000}, | ||
380 | {0x0F00a084,0x1Cffffff}, | ||
381 | {0x0F00a080,0x1C000000}, | ||
382 | {0x0F00A000,0x00000016}, | ||
383 | //Memcontroller Default values | ||
384 | {0x0F007000,0x00010001}, | ||
385 | {0x0F007004,0x01010100}, | ||
386 | {0x0F007008,0x01000001}, | ||
387 | {0x0F00700c,0x00000000}, | ||
388 | {0x0F007010,0x01000000}, | ||
389 | {0x0F007014,0x01000100}, | ||
390 | {0x0F007018,0x01000000}, | ||
391 | {0x0F00701c,0x01020001},// POP - 0x00020001 Normal 0x01020001 | ||
392 | {0x0F007020,0x04030107}, //Normal - 0x04030107 POP - 0x05030107 | ||
393 | {0x0F007024,0x02000007}, | ||
394 | {0x0F007028,0x02020200}, | ||
395 | {0x0F00702c,0x0206060a},//ROB- 0x0205050a,//0x0206060a | ||
396 | {0x0F007030,0x05000000}, | ||
397 | {0x0F007034,0x00000003}, | ||
398 | {0x0F007038,0x200a0200},//ROB - 0x110a0200,//0x180a0200,// 0x1f0a0200 | ||
399 | {0x0F00703C,0x02101020},//ROB - 0x02101010,//0x02101018, | ||
400 | {0x0F007040,0x45711200},//ROB - 0x45751200,//0x450f1200, | ||
401 | {0x0F007044,0x110D0D00},//ROB - 0x110a0d00//0x111f0d00 | ||
402 | {0x0F007048,0x04080306}, | ||
403 | {0x0F00704c,0x00000000}, | ||
404 | {0x0F007050,0x0100001c}, | ||
405 | {0x0F007054,0x00000000}, | ||
406 | {0x0F007058,0x00000000}, | ||
407 | {0x0F00705c,0x00000000}, | ||
408 | {0x0F007060,0x0010245F}, | ||
409 | {0x0F007064,0x00000010}, | ||
410 | {0x0F007068,0x00000000}, | ||
411 | {0x0F00706c,0x00000001}, | ||
412 | {0x0F007070,0x00007000}, | ||
413 | {0x0F007074,0x00000000}, | ||
414 | {0x0F007078,0x00000000}, | ||
415 | {0x0F00707C,0x00000000}, | ||
416 | {0x0F007080,0x00000000}, | ||
417 | {0x0F007084,0x00000000}, | ||
418 | {0x0F007088,0x01000001}, | ||
419 | {0x0F00708c,0x00000101}, | ||
420 | {0x0F007090,0x00000000}, | ||
421 | //# Enable BW improvement within memory controller | ||
422 | {0x0F007094,0x00040000}, | ||
423 | {0x0F007098,0x00000000}, | ||
424 | {0x0F0070c8,0x00000104}, | ||
425 | //# Enable 2 ports within X-bar | ||
426 | //# Enable start bit within memory controller | ||
427 | {0x0F007018,0x01010000} | ||
428 | }; | ||
429 | |||
430 | #define T3LP_SKIP_CLOCK_PROGRAM_DUMP_100MHZ 11 //index for 0x0F007000 | ||
431 | static DDR_SET_NODE asT3LP_DDRSetting100MHz[]= {// # DPLL Clock Setting | ||
432 | {0x0f000810,0x00002F95}, | ||
433 | {0x0f000820,0x03F1369B}, | ||
434 | {0x0f000840,0x0fff0000}, | ||
435 | {0x0f000860,0x00000000}, | ||
436 | {0x0f000880,0x000003DD}, | ||
437 | // Changed source for X-bar and MIPS clock to APLL | ||
438 | {0x0f000840,0x0FFF0000}, | ||
439 | {0x0F00a044,0x1fffffff}, | ||
440 | {0x0F00a040,0x1f000000}, | ||
441 | {0x0F00a084,0x1Cffffff}, | ||
442 | {0x0F00a080,0x1C000000}, | ||
443 | //Memcontroller Default values | ||
444 | {0x0F007000,0x00010001}, | ||
445 | {0x0F007004,0x01010100}, | ||
446 | {0x0F007008,0x01000001}, | ||
447 | {0x0F00700c,0x00000000}, | ||
448 | {0x0F007010,0x01000000}, | ||
449 | {0x0F007014,0x01000100}, | ||
450 | {0x0F007018,0x01000000}, | ||
451 | {0x0F00701c,0x01020000},// POP - 0x00020001 Normal 0x01020001 | ||
452 | {0x0F007020,0x04020107}, //Normal - 0x04030107 POP - 0x05030107 | ||
453 | {0x0F007024,0x00000007}, | ||
454 | {0x0F007028,0x01020200}, | ||
455 | {0x0F00702c,0x0204040a},//ROB- 0x0205050a,//0x0206060a | ||
456 | {0x0F007030,0x06000000}, | ||
457 | {0x0F007034,0x00000004}, | ||
458 | {0x0F007038,0x1F080200},//ROB - 0x110a0200,//0x180a0200,// 0x1f0a0200 | ||
459 | {0x0F00703C,0x0203031F},//ROB - 0x02101010,//0x02101018, | ||
460 | {0x0F007040,0x6e001200},//ROB - 0x45751200,//0x450f1200, | ||
461 | {0x0F007044,0x011a0a00},//ROB - 0x110a0d00//0x111f0d00 | ||
462 | {0x0F007048,0x03000305}, | ||
463 | {0x0F00704c,0x00000000}, | ||
464 | {0x0F007050,0x0100001c}, | ||
465 | {0x0F007054,0x00000000}, | ||
466 | {0x0F007058,0x00000000}, | ||
467 | {0x0F00705c,0x00000000}, | ||
468 | {0x0F007060,0x00082ED6}, | ||
469 | {0x0F007064,0x0000000A}, | ||
470 | {0x0F007068,0x00000000}, | ||
471 | {0x0F00706c,0x00000001}, | ||
472 | {0x0F007070,0x00005000}, | ||
473 | {0x0F007074,0x00000000}, | ||
474 | {0x0F007078,0x00000000}, | ||
475 | {0x0F00707C,0x00000000}, | ||
476 | {0x0F007080,0x00000000}, | ||
477 | {0x0F007084,0x00000000}, | ||
478 | {0x0F007088,0x01000001}, | ||
479 | {0x0F00708c,0x00000101}, | ||
480 | {0x0F007090,0x00000000}, | ||
481 | {0x0F007094,0x00010000}, | ||
482 | {0x0F007098,0x00000000}, | ||
483 | {0x0F0070C8,0x00000104}, | ||
484 | //# Enable 2 ports within X-bar | ||
485 | {0x0F00A000,0x00000016}, | ||
486 | //# Enable start bit within memory controller | ||
487 | {0x0F007018,0x01010000} | ||
488 | }; | ||
489 | |||
490 | #define T3LP_SKIP_CLOCK_PROGRAM_DUMP_80MHZ 9 //index for 0x0F007000 | ||
491 | static DDR_SET_NODE asT3LP_DDRSetting80MHz[]= {// # DPLL Clock Setting | ||
492 | {0x0f000820,0x07F13FFF}, | ||
493 | {0x0f000810,0x00002F95}, | ||
494 | {0x0f000860,0x00000000}, | ||
495 | {0x0f000880,0x000003DD}, | ||
496 | {0x0f000840,0x0FFF1F00}, | ||
497 | {0x0F00a044,0x1fffffff}, | ||
498 | {0x0F00a040,0x1f000000}, | ||
499 | {0x0F00a084,0x1Cffffff}, | ||
500 | {0x0F00a080,0x1C000000}, | ||
501 | {0x0F00A000,0x00000016}, | ||
502 | {0x0f007000,0x00010001}, | ||
503 | {0x0f007004,0x01000000}, | ||
504 | {0x0f007008,0x01000001}, | ||
505 | {0x0f00700c,0x00000000}, | ||
506 | {0x0f007010,0x01000000}, | ||
507 | {0x0f007014,0x01000100}, | ||
508 | {0x0f007018,0x01000000}, | ||
509 | {0x0f00701c,0x01020000}, | ||
510 | {0x0f007020,0x04020107}, | ||
511 | {0x0f007024,0x00000007}, | ||
512 | {0x0f007028,0x02020200}, | ||
513 | {0x0f00702c,0x0204040a}, | ||
514 | {0x0f007030,0x04000000}, | ||
515 | {0x0f007034,0x00000002}, | ||
516 | {0x0f007038,0x1d060200}, | ||
517 | {0x0f00703c,0x1c22221d}, | ||
518 | {0x0f007040,0x8A116600}, | ||
519 | {0x0f007044,0x222d0800}, | ||
520 | {0x0f007048,0x02690204}, | ||
521 | {0x0f00704c,0x00000000}, | ||
522 | {0x0f007050,0x0100001c}, | ||
523 | {0x0f007054,0x00000000}, | ||
524 | {0x0f007058,0x00000000}, | ||
525 | {0x0f00705c,0x00000000}, | ||
526 | {0x0f007060,0x000A15D6}, | ||
527 | {0x0f007064,0x0000000A}, | ||
528 | {0x0f007068,0x00000000}, | ||
529 | {0x0f00706c,0x00000001}, | ||
530 | {0x0f007070,0x00004000}, | ||
531 | {0x0f007074,0x00000000}, | ||
532 | {0x0f007078,0x00000000}, | ||
533 | {0x0f00707c,0x00000000}, | ||
534 | {0x0f007080,0x00000000}, | ||
535 | {0x0f007084,0x00000000}, | ||
536 | {0x0f007088,0x01000001}, | ||
537 | {0x0f00708c,0x00000101}, | ||
538 | {0x0f007090,0x00000000}, | ||
539 | {0x0f007094,0x00010000}, | ||
540 | {0x0f007098,0x00000000}, | ||
541 | {0x0F0070C8,0x00000104}, | ||
542 | {0x0F007018,0x01010000} | ||
543 | }; | ||
544 | |||
545 | |||
546 | |||
547 | |||
548 | ///T3 LP-B (UMA-B) | ||
549 | |||
550 | #define T3LPB_SKIP_CLOCK_PROGRAM_DUMP_160MHZ 7 //index for 0x0F007000 | ||
551 | static DDR_SET_NODE asT3LPB_DDRSetting160MHz[]= {// # DPLL Clock Setting | ||
552 | |||
553 | {0x0f000820,0x03F137DB}, | ||
554 | {0x0f000810,0x01842795}, | ||
555 | {0x0f000860,0x00000000}, | ||
556 | {0x0f000880,0x000003DD}, | ||
557 | {0x0f000840,0x0FFF0400}, | ||
558 | {0x0F00a044,0x1fffffff}, | ||
559 | {0x0F00a040,0x1f000000}, | ||
560 | {0x0f003050,0x00000021},//this is flash/eeprom clock divisor which set the flash clock to 20 MHz | ||
561 | {0x0F00a084,0x1Cffffff},//Now dump from her in internal memory | ||
562 | {0x0F00a080,0x1C000000}, | ||
563 | {0x0F00A000,0x00000016}, | ||
564 | {0x0f007000,0x00010001}, | ||
565 | {0x0f007004,0x01000001}, | ||
566 | {0x0f007008,0x01000101}, | ||
567 | {0x0f00700c,0x00000000}, | ||
568 | {0x0f007010,0x01000100}, | ||
569 | {0x0f007014,0x01000100}, | ||
570 | {0x0f007018,0x01000000}, | ||
571 | {0x0f00701c,0x01020000}, | ||
572 | {0x0f007020,0x04030107}, | ||
573 | {0x0f007024,0x02000007}, | ||
574 | {0x0f007028,0x02020200}, | ||
575 | {0x0f00702c,0x0206060a}, | ||
576 | {0x0f007030,0x050d0d00}, | ||
577 | {0x0f007034,0x00000003}, | ||
578 | {0x0f007038,0x170a0200}, | ||
579 | {0x0f00703c,0x02101012}, | ||
580 | {0x0f007040,0x45161200}, | ||
581 | {0x0f007044,0x11250c00}, | ||
582 | {0x0f007048,0x04da0307}, | ||
583 | {0x0f00704c,0x00000000}, | ||
584 | {0x0f007050,0x0000001c}, | ||
585 | {0x0f007054,0x00000000}, | ||
586 | {0x0f007058,0x00000000}, | ||
587 | {0x0f00705c,0x00000000}, | ||
588 | {0x0f007060,0x00142bb6}, | ||
589 | {0x0f007064,0x20430014}, | ||
590 | {0x0f007068,0x00000000}, | ||
591 | {0x0f00706c,0x00000001}, | ||
592 | {0x0f007070,0x00009000}, | ||
593 | {0x0f007074,0x00000000}, | ||
594 | {0x0f007078,0x00000000}, | ||
595 | {0x0f00707c,0x00000000}, | ||
596 | {0x0f007080,0x00000000}, | ||
597 | {0x0f007084,0x00000000}, | ||
598 | {0x0f007088,0x01000001}, | ||
599 | {0x0f00708c,0x00000101}, | ||
600 | {0x0f007090,0x00000000}, | ||
601 | {0x0f007094,0x00040000}, | ||
602 | {0x0f007098,0x00000000}, | ||
603 | {0x0F0070C8,0x00000104}, | ||
604 | {0x0F007018,0x01010000} | ||
605 | }; | ||
606 | |||
607 | |||
608 | #define T3LPB_SKIP_CLOCK_PROGRAM_DUMP_133MHZ 7 //index for 0x0F007000 | ||
609 | static DDR_SET_NODE asT3LPB_DDRSetting133MHz[]= {// # DPLL Clock Setting | ||
610 | {0x0f000820,0x03F1365B}, | ||
611 | {0x0f000810,0x00002F95}, | ||
612 | {0x0f000880,0x000003DD}, | ||
613 | // Changed source for X-bar and MIPS clock to APLL | ||
614 | {0x0f000840,0x0FFF0000}, | ||
615 | {0x0f000860,0x00000000}, | ||
616 | {0x0F00a044,0x1fffffff}, | ||
617 | {0x0F00a040,0x1f000000}, | ||
618 | {0x0f003050,0x00000021},//flash/eeprom clock divisor which set the flash clock to 20 MHz | ||
619 | {0x0F00a084,0x1Cffffff},//dump from here in internal memory | ||
620 | {0x0F00a080,0x1C000000}, | ||
621 | {0x0F00A000,0x00000016}, | ||
622 | //Memcontroller Default values | ||
623 | {0x0F007000,0x00010001}, | ||
624 | {0x0F007004,0x01010100}, | ||
625 | {0x0F007008,0x01000001}, | ||
626 | {0x0F00700c,0x00000000}, | ||
627 | {0x0F007010,0x01000000}, | ||
628 | {0x0F007014,0x01000100}, | ||
629 | {0x0F007018,0x01000000}, | ||
630 | {0x0F00701c,0x01020001},// POP - 0x00020001 Normal 0x01020001 | ||
631 | {0x0F007020,0x04030107}, //Normal - 0x04030107 POP - 0x05030107 | ||
632 | {0x0F007024,0x02000007}, | ||
633 | {0x0F007028,0x02020200}, | ||
634 | {0x0F00702c,0x0206060a},//ROB- 0x0205050a,//0x0206060a | ||
635 | {0x0F007030,0x05000000}, | ||
636 | {0x0F007034,0x00000003}, | ||
637 | {0x0F007038,0x190a0200},//ROB - 0x110a0200,//0x180a0200,// 0x1f0a0200 | ||
638 | {0x0F00703C,0x02101017},//ROB - 0x02101010,//0x02101018, | ||
639 | {0x0F007040,0x45171200},//ROB - 0x45751200,//0x450f1200, | ||
640 | {0x0F007044,0x11290D00},//ROB - 0x110a0d00//0x111f0d00 | ||
641 | {0x0F007048,0x04080306}, | ||
642 | {0x0F00704c,0x00000000}, | ||
643 | {0x0F007050,0x0100001c}, | ||
644 | {0x0F007054,0x00000000}, | ||
645 | {0x0F007058,0x00000000}, | ||
646 | {0x0F00705c,0x00000000}, | ||
647 | {0x0F007060,0x0010245F}, | ||
648 | {0x0F007064,0x00000010}, | ||
649 | {0x0F007068,0x00000000}, | ||
650 | {0x0F00706c,0x00000001}, | ||
651 | {0x0F007070,0x00007000}, | ||
652 | {0x0F007074,0x00000000}, | ||
653 | {0x0F007078,0x00000000}, | ||
654 | {0x0F00707C,0x00000000}, | ||
655 | {0x0F007080,0x00000000}, | ||
656 | {0x0F007084,0x00000000}, | ||
657 | {0x0F007088,0x01000001}, | ||
658 | {0x0F00708c,0x00000101}, | ||
659 | {0x0F007090,0x00000000}, | ||
660 | //# Enable BW improvement within memory controller | ||
661 | {0x0F007094,0x00040000}, | ||
662 | {0x0F007098,0x00000000}, | ||
663 | {0x0F0070c8,0x00000104}, | ||
664 | //# Enable 2 ports within X-bar | ||
665 | //# Enable start bit within memory controller | ||
666 | {0x0F007018,0x01010000} | ||
667 | }; | ||
668 | |||
669 | #define T3LPB_SKIP_CLOCK_PROGRAM_DUMP_100MHZ 8 //index for 0x0F007000 | ||
670 | static DDR_SET_NODE asT3LPB_DDRSetting100MHz[]= {// # DPLL Clock Setting | ||
671 | {0x0f000810,0x00002F95}, | ||
672 | {0x0f000820,0x03F1369B}, | ||
673 | {0x0f000840,0x0fff0000}, | ||
674 | {0x0f000860,0x00000000}, | ||
675 | {0x0f000880,0x000003DD}, | ||
676 | // Changed source for X-bar and MIPS clock to APLL | ||
677 | {0x0f000840,0x0FFF0000}, | ||
678 | {0x0F00a044,0x1fffffff}, | ||
679 | {0x0F00a040,0x1f000000}, | ||
680 | {0x0f003050,0x00000021},//flash/eeprom clock divisor which set the flash clock to 20 MHz | ||
681 | {0x0F00a084,0x1Cffffff}, //dump from here in internal memory | ||
682 | {0x0F00a080,0x1C000000}, | ||
683 | //Memcontroller Default values | ||
684 | {0x0F007000,0x00010001}, | ||
685 | {0x0F007004,0x01010100}, | ||
686 | {0x0F007008,0x01000001}, | ||
687 | {0x0F00700c,0x00000000}, | ||
688 | {0x0F007010,0x01000000}, | ||
689 | {0x0F007014,0x01000100}, | ||
690 | {0x0F007018,0x01000000}, | ||
691 | {0x0F00701c,0x01020000},// POP - 0x00020001 Normal 0x01020001 | ||
692 | {0x0F007020,0x04020107}, //Normal - 0x04030107 POP - 0x05030107 | ||
693 | {0x0F007024,0x00000007}, | ||
694 | {0x0F007028,0x01020200}, | ||
695 | {0x0F00702c,0x0204040a},//ROB- 0x0205050a,//0x0206060a | ||
696 | {0x0F007030,0x06000000}, | ||
697 | {0x0F007034,0x00000004}, | ||
698 | {0x0F007038,0x1F080200},//ROB - 0x110a0200,//0x180a0200,// 0x1f0a0200 | ||
699 | {0x0F00703C,0x0203031F},//ROB - 0x02101010,//0x02101018, | ||
700 | {0x0F007040,0x6e001200},//ROB - 0x45751200,//0x450f1200, | ||
701 | {0x0F007044,0x011a0a00},//ROB - 0x110a0d00//0x111f0d00 | ||
702 | {0x0F007048,0x03000305}, | ||
703 | {0x0F00704c,0x00000000}, | ||
704 | {0x0F007050,0x0100001c}, | ||
705 | {0x0F007054,0x00000000}, | ||
706 | {0x0F007058,0x00000000}, | ||
707 | {0x0F00705c,0x00000000}, | ||
708 | {0x0F007060,0x00082ED6}, | ||
709 | {0x0F007064,0x0000000A}, | ||
710 | {0x0F007068,0x00000000}, | ||
711 | {0x0F00706c,0x00000001}, | ||
712 | {0x0F007070,0x00005000}, | ||
713 | {0x0F007074,0x00000000}, | ||
714 | {0x0F007078,0x00000000}, | ||
715 | {0x0F00707C,0x00000000}, | ||
716 | {0x0F007080,0x00000000}, | ||
717 | {0x0F007084,0x00000000}, | ||
718 | {0x0F007088,0x01000001}, | ||
719 | {0x0F00708c,0x00000101}, | ||
720 | {0x0F007090,0x00000000}, | ||
721 | {0x0F007094,0x00010000}, | ||
722 | {0x0F007098,0x00000000}, | ||
723 | {0x0F0070C8,0x00000104}, | ||
724 | //# Enable 2 ports within X-bar | ||
725 | {0x0F00A000,0x00000016}, | ||
726 | //# Enable start bit within memory controller | ||
727 | {0x0F007018,0x01010000} | ||
728 | }; | ||
729 | |||
730 | #define T3LPB_SKIP_CLOCK_PROGRAM_DUMP_80MHZ 7 //index for 0x0F007000 | ||
731 | static DDR_SET_NODE asT3LPB_DDRSetting80MHz[]= {// # DPLL Clock Setting | ||
732 | {0x0f000820,0x07F13FFF}, | ||
733 | {0x0f000810,0x00002F95}, | ||
734 | {0x0f000860,0x00000000}, | ||
735 | {0x0f000880,0x000003DD}, | ||
736 | {0x0f000840,0x0FFF1F00}, | ||
737 | {0x0F00a044,0x1fffffff}, | ||
738 | {0x0F00a040,0x1f000000}, | ||
739 | {0x0f003050,0x00000021},//flash/eeprom clock divisor which set the flash clock to 20 MHz | ||
740 | {0x0F00a084,0x1Cffffff},// dump from here in internal memory | ||
741 | {0x0F00a080,0x1C000000}, | ||
742 | {0x0F00A000,0x00000016}, | ||
743 | {0x0f007000,0x00010001}, | ||
744 | {0x0f007004,0x01000000}, | ||
745 | {0x0f007008,0x01000001}, | ||
746 | {0x0f00700c,0x00000000}, | ||
747 | {0x0f007010,0x01000000}, | ||
748 | {0x0f007014,0x01000100}, | ||
749 | {0x0f007018,0x01000000}, | ||
750 | {0x0f00701c,0x01020000}, | ||
751 | {0x0f007020,0x04020107}, | ||
752 | {0x0f007024,0x00000007}, | ||
753 | {0x0f007028,0x02020200}, | ||
754 | {0x0f00702c,0x0204040a}, | ||
755 | {0x0f007030,0x04000000}, | ||
756 | {0x0f007034,0x00000002}, | ||
757 | {0x0f007038,0x1d060200}, | ||
758 | {0x0f00703c,0x1c22221d}, | ||
759 | {0x0f007040,0x8A116600}, | ||
760 | {0x0f007044,0x222d0800}, | ||
761 | {0x0f007048,0x02690204}, | ||
762 | {0x0f00704c,0x00000000}, | ||
763 | {0x0f007050,0x0100001c}, | ||
764 | {0x0f007054,0x00000000}, | ||
765 | {0x0f007058,0x00000000}, | ||
766 | {0x0f00705c,0x00000000}, | ||
767 | {0x0f007060,0x000A15D6}, | ||
768 | {0x0f007064,0x0000000A}, | ||
769 | {0x0f007068,0x00000000}, | ||
770 | {0x0f00706c,0x00000001}, | ||
771 | {0x0f007070,0x00004000}, | ||
772 | {0x0f007074,0x00000000}, | ||
773 | {0x0f007078,0x00000000}, | ||
774 | {0x0f00707c,0x00000000}, | ||
775 | {0x0f007080,0x00000000}, | ||
776 | {0x0f007084,0x00000000}, | ||
777 | {0x0f007088,0x01000001}, | ||
778 | {0x0f00708c,0x00000101}, | ||
779 | {0x0f007090,0x00000000}, | ||
780 | {0x0f007094,0x00010000}, | ||
781 | {0x0f007098,0x00000000}, | ||
782 | {0x0F0070C8,0x00000104}, | ||
783 | {0x0F007018,0x01010000} | ||
784 | }; | ||
785 | |||
786 | |||
787 | int ddr_init(MINI_ADAPTER *Adapter) | ||
788 | { | ||
789 | PDDR_SETTING psDDRSetting=NULL; | ||
790 | ULONG RegCount=0; | ||
791 | ULONG value = 0; | ||
792 | UINT uiResetValue = 0; | ||
793 | UINT uiClockSetting = 0; | ||
794 | int retval = STATUS_SUCCESS; | ||
795 | |||
796 | switch (Adapter->chip_id) | ||
797 | { | ||
798 | case 0xbece3200: | ||
799 | switch (Adapter->DDRSetting) | ||
800 | { | ||
801 | case DDR_80_MHZ: | ||
802 | psDDRSetting=asT3LP_DDRSetting80MHz; | ||
803 | RegCount=(sizeof(asT3LP_DDRSetting80MHz)/ | ||
804 | sizeof(DDR_SETTING)); | ||
805 | break; | ||
806 | case DDR_100_MHZ: | ||
807 | psDDRSetting=asT3LP_DDRSetting100MHz; | ||
808 | RegCount=(sizeof(asT3LP_DDRSetting100MHz)/ | ||
809 | sizeof(DDR_SETTING)); | ||
810 | break; | ||
811 | case DDR_133_MHZ: | ||
812 | psDDRSetting=asT3LP_DDRSetting133MHz; | ||
813 | RegCount=(sizeof(asT3LP_DDRSetting133MHz)/ | ||
814 | sizeof(DDR_SETTING)); | ||
815 | if(Adapter->bMipsConfig == MIPS_200_MHZ) | ||
816 | { | ||
817 | uiClockSetting = 0x03F13652; | ||
818 | } | ||
819 | else | ||
820 | { | ||
821 | uiClockSetting = 0x03F1365B; | ||
822 | } | ||
823 | break; | ||
824 | default: | ||
825 | return -EINVAL; | ||
826 | } | ||
827 | |||
828 | break; | ||
829 | case T3LPB: | ||
830 | case BCS220_2: | ||
831 | case BCS220_2BC: | ||
832 | case BCS250_BC: | ||
833 | case BCS220_3 : | ||
834 | /* Set bit 2 and bit 6 to 1 for BBIC 2mA drive | ||
835 | * (please check current value and additionally set these bits) | ||
836 | */ | ||
837 | if( (Adapter->chip_id != BCS220_2) && | ||
838 | (Adapter->chip_id != BCS220_2BC) && | ||
839 | (Adapter->chip_id != BCS220_3) ) | ||
840 | { | ||
841 | retval= rdmalt(Adapter,(UINT)0x0f000830, &uiResetValue, sizeof(uiResetValue)); | ||
842 | if(retval < 0) { | ||
843 | BCM_DEBUG_PRINT(Adapter,CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
844 | return retval; | ||
845 | } | ||
846 | uiResetValue |= 0x44; | ||
847 | retval = wrmalt(Adapter,(UINT)0x0f000830, &uiResetValue, sizeof(uiResetValue)); | ||
848 | if(retval < 0) { | ||
849 | BCM_DEBUG_PRINT(Adapter,CMHOST, WRM, DBG_LVL_ALL, "%s:%d WRM failed\n", __FUNCTION__, __LINE__); | ||
850 | return retval; | ||
851 | } | ||
852 | } | ||
853 | switch(Adapter->DDRSetting) | ||
854 | { | ||
855 | |||
856 | |||
857 | |||
858 | case DDR_80_MHZ: | ||
859 | psDDRSetting = asT3LPB_DDRSetting80MHz; | ||
860 | RegCount=(sizeof(asT3B_DDRSetting80MHz)/ | ||
861 | sizeof(DDR_SETTING)); | ||
862 | break; | ||
863 | case DDR_100_MHZ: | ||
864 | psDDRSetting=asT3LPB_DDRSetting100MHz; | ||
865 | RegCount=(sizeof(asT3B_DDRSetting100MHz)/ | ||
866 | sizeof(DDR_SETTING)); | ||
867 | break; | ||
868 | case DDR_133_MHZ: | ||
869 | psDDRSetting = asT3LPB_DDRSetting133MHz; | ||
870 | RegCount=(sizeof(asT3B_DDRSetting133MHz)/ | ||
871 | sizeof(DDR_SETTING)); | ||
872 | |||
873 | if(Adapter->bMipsConfig == MIPS_200_MHZ) | ||
874 | { | ||
875 | uiClockSetting = 0x03F13652; | ||
876 | } | ||
877 | else | ||
878 | { | ||
879 | uiClockSetting = 0x03F1365B; | ||
880 | } | ||
881 | break; | ||
882 | |||
883 | case DDR_160_MHZ: | ||
884 | psDDRSetting = asT3LPB_DDRSetting160MHz; | ||
885 | RegCount = sizeof(asT3LPB_DDRSetting160MHz)/sizeof(DDR_SETTING); | ||
886 | |||
887 | if(Adapter->bMipsConfig == MIPS_200_MHZ) | ||
888 | { | ||
889 | uiClockSetting = 0x03F137D2; | ||
890 | } | ||
891 | else | ||
892 | { | ||
893 | uiClockSetting = 0x03F137DB; | ||
894 | } | ||
895 | } | ||
896 | break; | ||
897 | |||
898 | case 0xbece0110: | ||
899 | case 0xbece0120: | ||
900 | case 0xbece0121: | ||
901 | case 0xbece0130: | ||
902 | case 0xbece0300: | ||
903 | BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "DDR Setting: %x\n", Adapter->DDRSetting); | ||
904 | switch (Adapter->DDRSetting) | ||
905 | { | ||
906 | case DDR_80_MHZ: | ||
907 | psDDRSetting = asT3_DDRSetting80MHz; | ||
908 | RegCount = (sizeof(asT3_DDRSetting80MHz)/ | ||
909 | sizeof(DDR_SETTING)); | ||
910 | break; | ||
911 | case DDR_100_MHZ: | ||
912 | psDDRSetting = asT3_DDRSetting100MHz; | ||
913 | RegCount = (sizeof(asT3_DDRSetting100MHz)/ | ||
914 | sizeof(DDR_SETTING)); | ||
915 | break; | ||
916 | case DDR_133_MHZ: | ||
917 | psDDRSetting = asT3_DDRSetting133MHz; | ||
918 | RegCount = (sizeof(asT3_DDRSetting133MHz)/ | ||
919 | sizeof(DDR_SETTING)); | ||
920 | break; | ||
921 | default: | ||
922 | return -EINVAL; | ||
923 | } | ||
924 | case 0xbece0310: | ||
925 | { | ||
926 | switch (Adapter->DDRSetting) | ||
927 | { | ||
928 | case DDR_80_MHZ: | ||
929 | psDDRSetting = asT3B_DDRSetting80MHz; | ||
930 | RegCount=(sizeof(asT3B_DDRSetting80MHz)/ | ||
931 | sizeof(DDR_SETTING)); | ||
932 | break; | ||
933 | case DDR_100_MHZ: | ||
934 | psDDRSetting=asT3B_DDRSetting100MHz; | ||
935 | RegCount=(sizeof(asT3B_DDRSetting100MHz)/ | ||
936 | sizeof(DDR_SETTING)); | ||
937 | break; | ||
938 | case DDR_133_MHZ: | ||
939 | |||
940 | if(Adapter->bDPLLConfig == PLL_266_MHZ)//266Mhz PLL selected. | ||
941 | { | ||
942 | memcpy(asT3B_DDRSetting133MHz, asDPLL_266MHZ, | ||
943 | sizeof(asDPLL_266MHZ)); | ||
944 | psDDRSetting = asT3B_DDRSetting133MHz; | ||
945 | RegCount=(sizeof(asT3B_DDRSetting133MHz)/ | ||
946 | sizeof(DDR_SETTING)); | ||
947 | } | ||
948 | else | ||
949 | { | ||
950 | psDDRSetting = asT3B_DDRSetting133MHz; | ||
951 | RegCount=(sizeof(asT3B_DDRSetting133MHz)/ | ||
952 | sizeof(DDR_SETTING)); | ||
953 | if(Adapter->bMipsConfig == MIPS_200_MHZ) | ||
954 | { | ||
955 | uiClockSetting = 0x07F13652; | ||
956 | } | ||
957 | else | ||
958 | { | ||
959 | uiClockSetting = 0x07F1365B; | ||
960 | } | ||
961 | } | ||
962 | break; | ||
963 | default: | ||
964 | return -EINVAL; | ||
965 | } | ||
966 | break; | ||
967 | |||
968 | } | ||
969 | default: | ||
970 | return -EINVAL; | ||
971 | } | ||
972 | |||
973 | value=0; | ||
974 | BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Register Count is =%lu\n", RegCount); | ||
975 | while(RegCount && !retval) | ||
976 | { | ||
977 | if(uiClockSetting && psDDRSetting->ulRegAddress == MIPS_CLOCK_REG) | ||
978 | { | ||
979 | value = uiClockSetting; | ||
980 | } | ||
981 | else | ||
982 | { | ||
983 | value = psDDRSetting->ulRegValue; | ||
984 | } | ||
985 | retval = wrmalt(Adapter, psDDRSetting->ulRegAddress, (PUINT)&value, sizeof(value)); | ||
986 | if(STATUS_SUCCESS != retval) { | ||
987 | BCM_DEBUG_PRINT(Adapter,DBG_TYPE_PRINTK, 0, 0,"%s:%d\n", __FUNCTION__, __LINE__); | ||
988 | break; | ||
989 | } | ||
990 | |||
991 | RegCount--; | ||
992 | psDDRSetting++; | ||
993 | } | ||
994 | |||
995 | if(Adapter->chip_id >= 0xbece3300 ) | ||
996 | { | ||
997 | |||
998 | mdelay(3); | ||
999 | if( (Adapter->chip_id != BCS220_2)&& | ||
1000 | (Adapter->chip_id != BCS220_2BC)&& | ||
1001 | (Adapter->chip_id != BCS220_3)) | ||
1002 | { | ||
1003 | /* drive MDDR to half in case of UMA-B: */ | ||
1004 | uiResetValue = 0x01010001; | ||
1005 | retval = wrmalt(Adapter, (UINT)0x0F007018, &uiResetValue, sizeof(uiResetValue)); | ||
1006 | if(retval < 0) { | ||
1007 | BCM_DEBUG_PRINT(Adapter,CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
1008 | return retval; | ||
1009 | } | ||
1010 | uiResetValue = 0x00040020; | ||
1011 | retval = wrmalt(Adapter, (UINT)0x0F007094, &uiResetValue, sizeof(uiResetValue)); | ||
1012 | if(retval < 0) { | ||
1013 | BCM_DEBUG_PRINT(Adapter,CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
1014 | return retval; | ||
1015 | } | ||
1016 | uiResetValue = 0x01020101; | ||
1017 | retval = wrmalt(Adapter, (UINT)0x0F00701c, &uiResetValue, sizeof(uiResetValue)); | ||
1018 | if(retval < 0) { | ||
1019 | BCM_DEBUG_PRINT(Adapter,CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
1020 | return retval; | ||
1021 | } | ||
1022 | uiResetValue = 0x01010000; | ||
1023 | retval = wrmalt(Adapter, (UINT)0x0F007018, &uiResetValue, sizeof(uiResetValue)); | ||
1024 | if(retval < 0) { | ||
1025 | BCM_DEBUG_PRINT(Adapter,CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
1026 | return retval; | ||
1027 | } | ||
1028 | } | ||
1029 | mdelay(3); | ||
1030 | |||
1031 | /* DC/DC standby change... | ||
1032 | * This is to be done only for Hybrid PMU mode. | ||
1033 | * with the current h/w there is no way to detect this. | ||
1034 | * and since we dont have internal PMU lets do it under UMA-B chip id. | ||
1035 | * we will change this when we will have internal PMU. | ||
1036 | */ | ||
1037 | if(Adapter->PmuMode == HYBRID_MODE_7C) | ||
1038 | { | ||
1039 | retval = rdmalt(Adapter,(UINT)0x0f000c00, &uiResetValue, sizeof(uiResetValue)); | ||
1040 | if(retval < 0) { | ||
1041 | BCM_DEBUG_PRINT(Adapter,CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
1042 | return retval; | ||
1043 | } | ||
1044 | retval = rdmalt(Adapter,(UINT)0x0f000c00, &uiResetValue, sizeof(uiResetValue)); | ||
1045 | if(retval < 0) { | ||
1046 | BCM_DEBUG_PRINT(Adapter,CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
1047 | return retval; | ||
1048 | } | ||
1049 | uiResetValue = 0x1322a8; | ||
1050 | retval = wrmalt(Adapter, (UINT)0x0f000d1c, &uiResetValue, sizeof(uiResetValue)); | ||
1051 | if(retval < 0) { | ||
1052 | BCM_DEBUG_PRINT(Adapter,CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
1053 | return retval; | ||
1054 | } | ||
1055 | retval = rdmalt(Adapter,(UINT)0x0f000c00, &uiResetValue, sizeof(uiResetValue)); | ||
1056 | if(retval < 0) { | ||
1057 | BCM_DEBUG_PRINT(Adapter,DBG_TYPE_PRINTK, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
1058 | return retval; | ||
1059 | } | ||
1060 | retval = rdmalt(Adapter,(UINT)0x0f000c00, &uiResetValue, sizeof(uiResetValue)); | ||
1061 | if(retval < 0) { | ||
1062 | BCM_DEBUG_PRINT(Adapter,CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
1063 | return retval; | ||
1064 | } | ||
1065 | uiResetValue = 0x132296; | ||
1066 | retval = wrmalt(Adapter, (UINT)0x0f000d14, &uiResetValue, sizeof(uiResetValue)); | ||
1067 | if(retval < 0) { | ||
1068 | BCM_DEBUG_PRINT(Adapter,CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
1069 | return retval; | ||
1070 | } | ||
1071 | } | ||
1072 | else if(Adapter->PmuMode == HYBRID_MODE_6 ) | ||
1073 | { | ||
1074 | |||
1075 | retval = rdmalt(Adapter,(UINT)0x0f000c00, &uiResetValue, sizeof(uiResetValue)); | ||
1076 | if(retval < 0) { | ||
1077 | BCM_DEBUG_PRINT(Adapter,CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
1078 | return retval; | ||
1079 | } | ||
1080 | retval = rdmalt(Adapter,(UINT)0x0f000c00, &uiResetValue, sizeof(uiResetValue)); | ||
1081 | if(retval < 0) { | ||
1082 | BCM_DEBUG_PRINT(Adapter,CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
1083 | return retval; | ||
1084 | } | ||
1085 | uiResetValue = 0x6003229a; | ||
1086 | retval = wrmalt(Adapter, (UINT)0x0f000d14, &uiResetValue, sizeof(uiResetValue)); | ||
1087 | if(retval < 0) { | ||
1088 | BCM_DEBUG_PRINT(Adapter,CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
1089 | return retval; | ||
1090 | } | ||
1091 | retval = rdmalt(Adapter,(UINT)0x0f000c00, &uiResetValue, sizeof(uiResetValue)); | ||
1092 | if(retval < 0) { | ||
1093 | BCM_DEBUG_PRINT(Adapter,CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
1094 | return retval; | ||
1095 | } | ||
1096 | retval = rdmalt(Adapter,(UINT)0x0f000c00, &uiResetValue, sizeof(uiResetValue)); | ||
1097 | if(retval < 0) { | ||
1098 | BCM_DEBUG_PRINT(Adapter,CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
1099 | return retval; | ||
1100 | } | ||
1101 | uiResetValue = 0x1322a8; | ||
1102 | retval = wrmalt(Adapter, (UINT)0x0f000d1c, &uiResetValue, sizeof(uiResetValue)); | ||
1103 | if(retval < 0) { | ||
1104 | BCM_DEBUG_PRINT(Adapter,CMHOST, RDM, DBG_LVL_ALL, "%s:%d RDM failed\n", __FUNCTION__, __LINE__); | ||
1105 | return retval; | ||
1106 | } | ||
1107 | } | ||
1108 | |||
1109 | } | ||
1110 | Adapter->bDDRInitDone = TRUE; | ||
1111 | return retval; | ||
1112 | } | ||
1113 | |||
1114 | int download_ddr_settings(PMINI_ADAPTER Adapter) | ||
1115 | { | ||
1116 | PDDR_SET_NODE psDDRSetting=NULL; | ||
1117 | ULONG RegCount=0; | ||
1118 | unsigned long ul_ddr_setting_load_addr = DDR_DUMP_INTERNAL_DEVICE_MEMORY; | ||
1119 | UINT value = 0; | ||
1120 | int retval = STATUS_SUCCESS; | ||
1121 | BOOLEAN bOverrideSelfRefresh = FALSE; | ||
1122 | |||
1123 | switch (Adapter->chip_id) | ||
1124 | { | ||
1125 | case 0xbece3200: | ||
1126 | switch (Adapter->DDRSetting) | ||
1127 | { | ||
1128 | case DDR_80_MHZ: | ||
1129 | psDDRSetting = asT3LP_DDRSetting80MHz; | ||
1130 | RegCount = (sizeof(asT3LP_DDRSetting80MHz)/sizeof(DDR_SET_NODE)); | ||
1131 | RegCount -= T3LP_SKIP_CLOCK_PROGRAM_DUMP_80MHZ ; | ||
1132 | psDDRSetting += T3LP_SKIP_CLOCK_PROGRAM_DUMP_80MHZ; | ||
1133 | break; | ||
1134 | case DDR_100_MHZ: | ||
1135 | psDDRSetting = asT3LP_DDRSetting100MHz; | ||
1136 | RegCount = (sizeof(asT3LP_DDRSetting100MHz)/sizeof(DDR_SET_NODE)); | ||
1137 | RegCount -= T3LP_SKIP_CLOCK_PROGRAM_DUMP_100MHZ ; | ||
1138 | psDDRSetting += T3LP_SKIP_CLOCK_PROGRAM_DUMP_100MHZ; | ||
1139 | break; | ||
1140 | case DDR_133_MHZ: | ||
1141 | bOverrideSelfRefresh = TRUE; | ||
1142 | psDDRSetting = asT3LP_DDRSetting133MHz; | ||
1143 | RegCount = (sizeof(asT3LP_DDRSetting133MHz)/sizeof(DDR_SET_NODE)); | ||
1144 | RegCount -= T3LP_SKIP_CLOCK_PROGRAM_DUMP_133MHZ ; | ||
1145 | psDDRSetting += T3LP_SKIP_CLOCK_PROGRAM_DUMP_133MHZ; | ||
1146 | break; | ||
1147 | default: | ||
1148 | return -EINVAL; | ||
1149 | } | ||
1150 | break; | ||
1151 | |||
1152 | case T3LPB: | ||
1153 | case BCS220_2: | ||
1154 | case BCS220_2BC: | ||
1155 | case BCS250_BC: | ||
1156 | case BCS220_3 : | ||
1157 | switch (Adapter->DDRSetting) | ||
1158 | { | ||
1159 | case DDR_80_MHZ: | ||
1160 | psDDRSetting = asT3LPB_DDRSetting80MHz; | ||
1161 | RegCount=(sizeof(asT3LPB_DDRSetting80MHz)/sizeof(DDR_SET_NODE)); | ||
1162 | RegCount -= T3LPB_SKIP_CLOCK_PROGRAM_DUMP_80MHZ ; | ||
1163 | psDDRSetting += T3LPB_SKIP_CLOCK_PROGRAM_DUMP_80MHZ; | ||
1164 | break; | ||
1165 | case DDR_100_MHZ: | ||
1166 | psDDRSetting = asT3LPB_DDRSetting100MHz; | ||
1167 | RegCount = (sizeof(asT3LPB_DDRSetting100MHz)/sizeof(DDR_SET_NODE)); | ||
1168 | RegCount -= T3LPB_SKIP_CLOCK_PROGRAM_DUMP_100MHZ ; | ||
1169 | psDDRSetting += T3LPB_SKIP_CLOCK_PROGRAM_DUMP_100MHZ; | ||
1170 | break; | ||
1171 | case DDR_133_MHZ: | ||
1172 | bOverrideSelfRefresh = TRUE; | ||
1173 | psDDRSetting = asT3LPB_DDRSetting133MHz; | ||
1174 | RegCount = (sizeof(asT3LPB_DDRSetting133MHz)/sizeof(DDR_SET_NODE)); | ||
1175 | RegCount -= T3LPB_SKIP_CLOCK_PROGRAM_DUMP_133MHZ ; | ||
1176 | psDDRSetting += T3LPB_SKIP_CLOCK_PROGRAM_DUMP_133MHZ; | ||
1177 | break; | ||
1178 | |||
1179 | case DDR_160_MHZ: | ||
1180 | bOverrideSelfRefresh = TRUE; | ||
1181 | psDDRSetting = asT3LPB_DDRSetting160MHz; | ||
1182 | RegCount = sizeof(asT3LPB_DDRSetting160MHz)/sizeof(DDR_SET_NODE); | ||
1183 | RegCount -= T3LPB_SKIP_CLOCK_PROGRAM_DUMP_160MHZ; | ||
1184 | psDDRSetting += T3LPB_SKIP_CLOCK_PROGRAM_DUMP_160MHZ; | ||
1185 | |||
1186 | break; | ||
1187 | default: | ||
1188 | return -EINVAL; | ||
1189 | } | ||
1190 | break; | ||
1191 | case 0xbece0300: | ||
1192 | switch (Adapter->DDRSetting) | ||
1193 | { | ||
1194 | case DDR_80_MHZ: | ||
1195 | psDDRSetting = asT3_DDRSetting80MHz; | ||
1196 | RegCount = (sizeof(asT3_DDRSetting80MHz)/sizeof(DDR_SET_NODE)); | ||
1197 | RegCount-=T3_SKIP_CLOCK_PROGRAM_DUMP_80MHZ ; | ||
1198 | psDDRSetting += T3_SKIP_CLOCK_PROGRAM_DUMP_80MHZ; | ||
1199 | break; | ||
1200 | case DDR_100_MHZ: | ||
1201 | psDDRSetting = asT3_DDRSetting100MHz; | ||
1202 | RegCount = (sizeof(asT3_DDRSetting100MHz)/sizeof(DDR_SET_NODE)); | ||
1203 | RegCount-=T3_SKIP_CLOCK_PROGRAM_DUMP_100MHZ ; | ||
1204 | psDDRSetting += T3_SKIP_CLOCK_PROGRAM_DUMP_100MHZ; | ||
1205 | break; | ||
1206 | case DDR_133_MHZ: | ||
1207 | psDDRSetting = asT3_DDRSetting133MHz; | ||
1208 | RegCount = (sizeof(asT3_DDRSetting133MHz)/sizeof(DDR_SET_NODE)); | ||
1209 | RegCount-=T3_SKIP_CLOCK_PROGRAM_DUMP_133MHZ ; | ||
1210 | psDDRSetting += T3_SKIP_CLOCK_PROGRAM_DUMP_133MHZ ; | ||
1211 | break; | ||
1212 | default: | ||
1213 | return -EINVAL; | ||
1214 | } | ||
1215 | break; | ||
1216 | case 0xbece0310: | ||
1217 | { | ||
1218 | switch (Adapter->DDRSetting) | ||
1219 | { | ||
1220 | case DDR_80_MHZ: | ||
1221 | psDDRSetting = asT3B_DDRSetting80MHz; | ||
1222 | RegCount = (sizeof(asT3B_DDRSetting80MHz)/sizeof(DDR_SET_NODE)); | ||
1223 | RegCount -= T3B_SKIP_CLOCK_PROGRAM_DUMP_80MHZ ; | ||
1224 | psDDRSetting += T3B_SKIP_CLOCK_PROGRAM_DUMP_80MHZ; | ||
1225 | break; | ||
1226 | case DDR_100_MHZ: | ||
1227 | psDDRSetting = asT3B_DDRSetting100MHz; | ||
1228 | RegCount = (sizeof(asT3B_DDRSetting100MHz)/sizeof(DDR_SET_NODE)); | ||
1229 | RegCount -= T3B_SKIP_CLOCK_PROGRAM_DUMP_100MHZ ; | ||
1230 | psDDRSetting += T3B_SKIP_CLOCK_PROGRAM_DUMP_100MHZ; | ||
1231 | break; | ||
1232 | case DDR_133_MHZ: | ||
1233 | bOverrideSelfRefresh = TRUE; | ||
1234 | psDDRSetting = asT3B_DDRSetting133MHz; | ||
1235 | RegCount = (sizeof(asT3B_DDRSetting133MHz)/sizeof(DDR_SET_NODE)); | ||
1236 | RegCount -= T3B_SKIP_CLOCK_PROGRAM_DUMP_133MHZ ; | ||
1237 | psDDRSetting += T3B_SKIP_CLOCK_PROGRAM_DUMP_133MHZ; | ||
1238 | break; | ||
1239 | } | ||
1240 | break; | ||
1241 | } | ||
1242 | default: | ||
1243 | return -EINVAL; | ||
1244 | } | ||
1245 | //total number of Register that has to be dumped | ||
1246 | value =RegCount ; | ||
1247 | retval = wrmalt(Adapter, ul_ddr_setting_load_addr, &value, sizeof(value)); | ||
1248 | if(retval) | ||
1249 | { | ||
1250 | BCM_DEBUG_PRINT(Adapter,DBG_TYPE_PRINTK, 0, 0,"%s:%d\n", __FUNCTION__, __LINE__); | ||
1251 | |||
1252 | return retval; | ||
1253 | } | ||
1254 | ul_ddr_setting_load_addr+=sizeof(ULONG); | ||
1255 | /*signature */ | ||
1256 | value =(0x1d1e0dd0); | ||
1257 | retval = wrmalt(Adapter, ul_ddr_setting_load_addr, &value, sizeof(value)); | ||
1258 | if(retval) | ||
1259 | { | ||
1260 | BCM_DEBUG_PRINT(Adapter,DBG_TYPE_PRINTK, 0, 0,"%s:%d\n", __FUNCTION__, __LINE__); | ||
1261 | return retval; | ||
1262 | } | ||
1263 | |||
1264 | ul_ddr_setting_load_addr+=sizeof(ULONG); | ||
1265 | RegCount*=(sizeof(DDR_SETTING)/sizeof(ULONG)); | ||
1266 | |||
1267 | while(RegCount && !retval) | ||
1268 | { | ||
1269 | value = psDDRSetting->ulRegAddress ; | ||
1270 | retval = wrmalt( Adapter, ul_ddr_setting_load_addr, &value, sizeof(value)); | ||
1271 | ul_ddr_setting_load_addr+=sizeof(ULONG); | ||
1272 | if(!retval) | ||
1273 | { | ||
1274 | if(bOverrideSelfRefresh && (psDDRSetting->ulRegAddress == 0x0F007018)) | ||
1275 | { | ||
1276 | value = (psDDRSetting->ulRegValue |(1<<8)); | ||
1277 | if(STATUS_SUCCESS != wrmalt(Adapter, ul_ddr_setting_load_addr, | ||
1278 | &value, sizeof(value))){ | ||
1279 | BCM_DEBUG_PRINT(Adapter,DBG_TYPE_PRINTK, 0, 0,"%s:%d\n", __FUNCTION__, __LINE__); | ||
1280 | break; | ||
1281 | } | ||
1282 | } | ||
1283 | else | ||
1284 | { | ||
1285 | value = psDDRSetting->ulRegValue; | ||
1286 | |||
1287 | if(STATUS_SUCCESS != wrmalt(Adapter, ul_ddr_setting_load_addr , | ||
1288 | &value, sizeof(value))){ | ||
1289 | BCM_DEBUG_PRINT(Adapter,DBG_TYPE_PRINTK, 0, 0,"%s:%d\n", __FUNCTION__, __LINE__); | ||
1290 | break; | ||
1291 | } | ||
1292 | } | ||
1293 | } | ||
1294 | ul_ddr_setting_load_addr+=sizeof(ULONG); | ||
1295 | RegCount--; | ||
1296 | psDDRSetting++; | ||
1297 | } | ||
1298 | return retval; | ||
1299 | } | ||
1300 | |||
1301 | #endif | ||
1302 | |||