]> git.sur5r.net Git - u-boot/blob - arch/powerpc/cpu/ppc4xx/denali_spd_ddr2.c
Merge branch 'master' of git://git.denx.de/u-boot
[u-boot] / arch / powerpc / cpu / ppc4xx / denali_spd_ddr2.c
1 /*
2  * arch/powerpc/cpu/ppc4xx/denali_spd_ddr2.c
3  * This SPD SDRAM detection code supports AMCC PPC44x CPUs with a Denali-core
4  * DDR2 controller, specifically the 440EPx/GRx.
5  *
6  * (C) Copyright 2007-2008
7  * Larry Johnson, lrj@acm.org.
8  *
9  * Based primarily on arch/powerpc/cpu/ppc4xx/4xx_spd_ddr2.c, which is...
10  *
11  * (C) Copyright 2007
12  * Stefan Roese, DENX Software Engineering, sr@denx.de.
13  *
14  * COPYRIGHT   AMCC   CORPORATION 2004
15  *
16  * SPDX-License-Identifier:     GPL-2.0+
17  */
18
19 /* define DEBUG for debugging output (obviously ;-)) */
20 #if 0
21 #define DEBUG
22 #endif
23
24 #include <common.h>
25 #include <command.h>
26 #include <asm/ppc4xx.h>
27 #include <i2c.h>
28 #include <asm/io.h>
29 #include <asm/processor.h>
30 #include <asm/mmu.h>
31 #include <asm/cache.h>
32
33 #if defined(CONFIG_SPD_EEPROM) &&                               \
34         (defined(CONFIG_440EPX) || defined(CONFIG_440GRX))
35
36 /*-----------------------------------------------------------------------------+
37  * Defines
38  *-----------------------------------------------------------------------------*/
39 #define MAXDIMMS        2
40 #define MAXRANKS        2
41
42 #define ONE_BILLION     1000000000
43
44 #define MULDIV64(m1, m2, d)     (u32)(((u64)(m1) * (u64)(m2)) / (u64)(d))
45
46 #define DLL_DQS_DELAY   0x19
47 #define DLL_DQS_BYPASS  0x0B
48 #define DQS_OUT_SHIFT   0x7F
49
50 /*
51  * This DDR2 setup code can dynamically setup the TLB entries for the DDR2 memory
52  * region. Right now the cache should still be disabled in U-Boot because of the
53  * EMAC driver, that need it's buffer descriptor to be located in non cached
54  * memory.
55  *
56  * If at some time this restriction doesn't apply anymore, just define
57  * CONFIG_4xx_DCACHE in the board config file and this code should setup
58  * everything correctly.
59  */
60 #if defined(CONFIG_4xx_DCACHE)
61 #define MY_TLB_WORD2_I_ENABLE   0                       /* enable caching on SDRAM */
62 #else
63 #define MY_TLB_WORD2_I_ENABLE   TLB_WORD2_I_ENABLE      /* disable caching on SDRAM */
64 #endif
65
66 /*-----------------------------------------------------------------------------+
67  * Prototypes
68  *-----------------------------------------------------------------------------*/
69 extern int denali_wait_for_dlllock(void);
70 extern void denali_core_search_data_eye(void);
71 extern void dcbz_area(u32 start_address, u32 num_bytes);
72
73 /*
74  * Board-specific Platform code can reimplement spd_ddr_init_hang () if needed
75  */
76 void __spd_ddr_init_hang(void)
77 {
78         hang();
79 }
80 void spd_ddr_init_hang(void)
81     __attribute__ ((weak, alias("__spd_ddr_init_hang")));
82
83 #if defined(DEBUG)
84 static void print_mcsr(void)
85 {
86         printf("MCSR = 0x%08X\n", mfspr(SPRN_MCSR));
87 }
88
89 static void denali_sdram_register_dump(void)
90 {
91         unsigned int sdram_data;
92
93         printf("\n  Register Dump:\n");
94         mfsdram(DDR0_00, sdram_data);
95         printf("        DDR0_00 = 0x%08X", sdram_data);
96         mfsdram(DDR0_01, sdram_data);
97         printf("        DDR0_01 = 0x%08X\n", sdram_data);
98         mfsdram(DDR0_02, sdram_data);
99         printf("        DDR0_02 = 0x%08X", sdram_data);
100         mfsdram(DDR0_03, sdram_data);
101         printf("        DDR0_03 = 0x%08X\n", sdram_data);
102         mfsdram(DDR0_04, sdram_data);
103         printf("        DDR0_04 = 0x%08X", sdram_data);
104         mfsdram(DDR0_05, sdram_data);
105         printf("        DDR0_05 = 0x%08X\n", sdram_data);
106         mfsdram(DDR0_06, sdram_data);
107         printf("        DDR0_06 = 0x%08X", sdram_data);
108         mfsdram(DDR0_07, sdram_data);
109         printf("        DDR0_07 = 0x%08X\n", sdram_data);
110         mfsdram(DDR0_08, sdram_data);
111         printf("        DDR0_08 = 0x%08X", sdram_data);
112         mfsdram(DDR0_09, sdram_data);
113         printf("        DDR0_09 = 0x%08X\n", sdram_data);
114         mfsdram(DDR0_10, sdram_data);
115         printf("        DDR0_10 = 0x%08X", sdram_data);
116         mfsdram(DDR0_11, sdram_data);
117         printf("        DDR0_11 = 0x%08X\n", sdram_data);
118         mfsdram(DDR0_12, sdram_data);
119         printf("        DDR0_12 = 0x%08X", sdram_data);
120         mfsdram(DDR0_14, sdram_data);
121         printf("        DDR0_14 = 0x%08X\n", sdram_data);
122         mfsdram(DDR0_17, sdram_data);
123         printf("        DDR0_17 = 0x%08X", sdram_data);
124         mfsdram(DDR0_18, sdram_data);
125         printf("        DDR0_18 = 0x%08X\n", sdram_data);
126         mfsdram(DDR0_19, sdram_data);
127         printf("        DDR0_19 = 0x%08X", sdram_data);
128         mfsdram(DDR0_20, sdram_data);
129         printf("        DDR0_20 = 0x%08X\n", sdram_data);
130         mfsdram(DDR0_21, sdram_data);
131         printf("        DDR0_21 = 0x%08X", sdram_data);
132         mfsdram(DDR0_22, sdram_data);
133         printf("        DDR0_22 = 0x%08X\n", sdram_data);
134         mfsdram(DDR0_23, sdram_data);
135         printf("        DDR0_23 = 0x%08X", sdram_data);
136         mfsdram(DDR0_24, sdram_data);
137         printf("        DDR0_24 = 0x%08X\n", sdram_data);
138         mfsdram(DDR0_25, sdram_data);
139         printf("        DDR0_25 = 0x%08X", sdram_data);
140         mfsdram(DDR0_26, sdram_data);
141         printf("        DDR0_26 = 0x%08X\n", sdram_data);
142         mfsdram(DDR0_27, sdram_data);
143         printf("        DDR0_27 = 0x%08X", sdram_data);
144         mfsdram(DDR0_28, sdram_data);
145         printf("        DDR0_28 = 0x%08X\n", sdram_data);
146         mfsdram(DDR0_31, sdram_data);
147         printf("        DDR0_31 = 0x%08X", sdram_data);
148         mfsdram(DDR0_32, sdram_data);
149         printf("        DDR0_32 = 0x%08X\n", sdram_data);
150         mfsdram(DDR0_33, sdram_data);
151         printf("        DDR0_33 = 0x%08X", sdram_data);
152         mfsdram(DDR0_34, sdram_data);
153         printf("        DDR0_34 = 0x%08X\n", sdram_data);
154         mfsdram(DDR0_35, sdram_data);
155         printf("        DDR0_35 = 0x%08X", sdram_data);
156         mfsdram(DDR0_36, sdram_data);
157         printf("        DDR0_36 = 0x%08X\n", sdram_data);
158         mfsdram(DDR0_37, sdram_data);
159         printf("        DDR0_37 = 0x%08X", sdram_data);
160         mfsdram(DDR0_38, sdram_data);
161         printf("        DDR0_38 = 0x%08X\n", sdram_data);
162         mfsdram(DDR0_39, sdram_data);
163         printf("        DDR0_39 = 0x%08X", sdram_data);
164         mfsdram(DDR0_40, sdram_data);
165         printf("        DDR0_40 = 0x%08X\n", sdram_data);
166         mfsdram(DDR0_41, sdram_data);
167         printf("        DDR0_41 = 0x%08X", sdram_data);
168         mfsdram(DDR0_42, sdram_data);
169         printf("        DDR0_42 = 0x%08X\n", sdram_data);
170         mfsdram(DDR0_43, sdram_data);
171         printf("        DDR0_43 = 0x%08X", sdram_data);
172         mfsdram(DDR0_44, sdram_data);
173         printf("        DDR0_44 = 0x%08X\n", sdram_data);
174 }
175 #else
176 static inline void denali_sdram_register_dump(void)
177 {
178 }
179
180 inline static void print_mcsr(void)
181 {
182 }
183 #endif /* defined(DEBUG) */
184
185 static int is_ecc_enabled(void)
186 {
187         u32 val;
188
189         mfsdram(DDR0_22, val);
190         return 0x3 == DDR0_22_CTRL_RAW_DECODE(val);
191 }
192
193 static unsigned char spd_read(u8 chip, unsigned int addr)
194 {
195         u8 data[2];
196
197         if (0 != i2c_probe(chip) || 0 != i2c_read(chip, addr, 1, data, 1)) {
198                 debug("spd_read(0x%02X, 0x%02X) failed\n", chip, addr);
199                 return 0;
200         }
201         debug("spd_read(0x%02X, 0x%02X) returned 0x%02X\n",
202               chip, addr, data[0]);
203         return data[0];
204 }
205
206 static unsigned long get_tcyc(unsigned char reg)
207 {
208         /*
209          * Byte 9, et al: Cycle time for CAS Latency=X, is split into two
210          * nibbles: the higher order nibble (bits 4-7) designates the cycle time
211          * to a granularity of 1ns; the value presented by the lower order
212          * nibble (bits 0-3) has a granularity of .1ns and is added to the value
213          * designated by the higher nibble. In addition, four lines of the lower
214          * order nibble are assigned to support +.25, +.33, +.66, and +.75.
215          */
216
217         unsigned char subfield_b = reg & 0x0F;
218
219         switch (subfield_b & 0x0F) {
220         case 0x0:
221         case 0x1:
222         case 0x2:
223         case 0x3:
224         case 0x4:
225         case 0x5:
226         case 0x6:
227         case 0x7:
228         case 0x8:
229         case 0x9:
230                 return 1000 * (reg >> 4) + 100 * subfield_b;
231         case 0xA:
232                 return 1000 * (reg >> 4) + 250;
233         case 0xB:
234                 return 1000 * (reg >> 4) + 333;
235         case 0xC:
236                 return 1000 * (reg >> 4) + 667;
237         case 0xD:
238                 return 1000 * (reg >> 4) + 750;
239         }
240         return 0;
241 }
242
243 /*------------------------------------------------------------------
244  * Find the installed DIMMs, make sure that the are DDR2, and fill
245  * in the dimm_ranks array.  Then dimm_ranks[dimm_num] > 0 iff the
246  * DIMM and dimm_num is present.
247  * Note: Because there are only two chip-select lines, it is assumed
248  * that a board with a single socket can support two ranks on that
249  * socket, while a board with two sockets can support only one rank
250  * on each socket.
251  *-----------------------------------------------------------------*/
252 static void get_spd_info(unsigned long dimm_ranks[],
253                          unsigned long *ranks,
254                          unsigned char const iic0_dimm_addr[],
255                          unsigned long num_dimm_banks)
256 {
257         unsigned long dimm_num;
258         unsigned long dimm_found = false;
259         unsigned long const max_ranks_per_dimm = (1 == num_dimm_banks) ? 2 : 1;
260         unsigned char num_of_bytes;
261         unsigned char total_size;
262
263         *ranks = 0;
264         for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
265                 num_of_bytes = 0;
266                 total_size = 0;
267
268                 num_of_bytes = spd_read(iic0_dimm_addr[dimm_num], 0);
269                 total_size = spd_read(iic0_dimm_addr[dimm_num], 1);
270                 if ((num_of_bytes != 0) && (total_size != 0)) {
271                         unsigned char const dimm_type =
272                             spd_read(iic0_dimm_addr[dimm_num], 2);
273
274                         unsigned long ranks_on_dimm =
275                             (spd_read(iic0_dimm_addr[dimm_num], 5) & 0x07) + 1;
276
277                         if (8 != dimm_type) {
278                                 switch (dimm_type) {
279                                 case 1:
280                                         printf("ERROR: Standard Fast Page Mode "
281                                                "DRAM DIMM");
282                                         break;
283                                 case 2:
284                                         printf("ERROR: EDO DIMM");
285                                         break;
286                                 case 3:
287                                         printf("ERROR: Pipelined Nibble DIMM");
288                                         break;
289                                 case 4:
290                                         printf("ERROR: SDRAM DIMM");
291                                         break;
292                                 case 5:
293                                         printf("ERROR: Multiplexed ROM DIMM");
294                                         break;
295                                 case 6:
296                                         printf("ERROR: SGRAM DIMM");
297                                         break;
298                                 case 7:
299                                         printf("ERROR: DDR1 DIMM");
300                                         break;
301                                 default:
302                                         printf("ERROR: Unknown DIMM (type %d)",
303                                                (unsigned int)dimm_type);
304                                         break;
305                                 }
306                                 printf(" detected in slot %lu.\n", dimm_num);
307                                 printf("Only DDR2 SDRAM DIMMs are supported."
308                                        "\n");
309                                 printf("Replace the module with a DDR2 DIMM."
310                                        "\n\n");
311                                 spd_ddr_init_hang();
312                         }
313                         dimm_found = true;
314                         debug("DIMM slot %lu: populated with %lu-rank DDR2 DIMM"
315                               "\n", dimm_num, ranks_on_dimm);
316                         if (ranks_on_dimm > max_ranks_per_dimm) {
317                                 printf("WARNING: DRAM DIMM in slot %lu has %lu "
318                                        "ranks.\n", dimm_num, ranks_on_dimm);
319                                 if (1 == max_ranks_per_dimm) {
320                                         printf("Only one rank will be used.\n");
321                                 } else {
322                                         printf
323                                             ("Only two ranks will be used.\n");
324                                 }
325                                 ranks_on_dimm = max_ranks_per_dimm;
326                         }
327                         dimm_ranks[dimm_num] = ranks_on_dimm;
328                         *ranks += ranks_on_dimm;
329                 } else {
330                         dimm_ranks[dimm_num] = 0;
331                         debug("DIMM slot %lu: Not populated\n", dimm_num);
332                 }
333         }
334         if (dimm_found == false) {
335                 printf("ERROR: No memory installed.\n");
336                 printf("Install at least one DDR2 DIMM.\n\n");
337                 spd_ddr_init_hang();
338         }
339         debug("Total number of ranks = %ld\n", *ranks);
340 }
341
342 /*------------------------------------------------------------------
343  * For the memory DIMMs installed, this routine verifies that
344  * frequency previously calculated is supported.
345  *-----------------------------------------------------------------*/
346 static void check_frequency(unsigned long *dimm_ranks,
347                             unsigned char const iic0_dimm_addr[],
348                             unsigned long num_dimm_banks,
349                             unsigned long sdram_freq)
350 {
351         unsigned long dimm_num;
352         unsigned long cycle_time;
353         unsigned long calc_cycle_time;
354
355         /*
356          * calc_cycle_time is calculated from DDR frequency set by board/chip
357          * and is expressed in picoseconds to match the way DIMM cycle time is
358          * calculated below.
359          */
360         calc_cycle_time = MULDIV64(ONE_BILLION, 1000, sdram_freq);
361
362         for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
363                 if (dimm_ranks[dimm_num]) {
364                         cycle_time =
365                             get_tcyc(spd_read(iic0_dimm_addr[dimm_num], 9));
366                         debug("cycle_time=%ld ps\n", cycle_time);
367
368                         if (cycle_time > (calc_cycle_time + 10)) {
369                                 /*
370                                  * the provided sdram cycle_time is too small
371                                  * for the available DIMM cycle_time. The
372                                  * additionnal 10ps is here to accept a small
373                                  * incertainty.
374                                  */
375                                 printf
376                                     ("ERROR: DRAM DIMM detected with cycle_time %d ps in "
377                                      "slot %d \n while calculated cycle time is %d ps.\n",
378                                      (unsigned int)cycle_time,
379                                      (unsigned int)dimm_num,
380                                      (unsigned int)calc_cycle_time);
381                                 printf
382                                     ("Replace the DIMM, or change DDR frequency via "
383                                      "strapping bits.\n\n");
384                                 spd_ddr_init_hang();
385                         }
386                 }
387         }
388 }
389
390 /*------------------------------------------------------------------
391  * This routine gets size information for the installed memory
392  * DIMMs.
393  *-----------------------------------------------------------------*/
394 static void get_dimm_size(unsigned long dimm_ranks[],
395                           unsigned char const iic0_dimm_addr[],
396                           unsigned long num_dimm_banks,
397                           unsigned long *const rows,
398                           unsigned long *const banks,
399                           unsigned long *const cols, unsigned long *const width)
400 {
401         unsigned long dimm_num;
402
403         *rows = 0;
404         *banks = 0;
405         *cols = 0;
406         *width = 0;
407         for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
408                 if (dimm_ranks[dimm_num]) {
409                         unsigned long t;
410
411                         /* Rows */
412                         t = spd_read(iic0_dimm_addr[dimm_num], 3);
413                         if (0 == *rows) {
414                                 *rows = t;
415                         } else if (t != *rows) {
416                                 printf("ERROR: DRAM DIMM modules do not all "
417                                        "have the same number of rows.\n\n");
418                                 spd_ddr_init_hang();
419                         }
420                         /* Banks */
421                         t = spd_read(iic0_dimm_addr[dimm_num], 17);
422                         if (0 == *banks) {
423                                 *banks = t;
424                         } else if (t != *banks) {
425                                 printf("ERROR: DRAM DIMM modules do not all "
426                                        "have the same number of banks.\n\n");
427                                 spd_ddr_init_hang();
428                         }
429                         /* Columns */
430                         t = spd_read(iic0_dimm_addr[dimm_num], 4);
431                         if (0 == *cols) {
432                                 *cols = t;
433                         } else if (t != *cols) {
434                                 printf("ERROR: DRAM DIMM modules do not all "
435                                        "have the same number of columns.\n\n");
436                                 spd_ddr_init_hang();
437                         }
438                         /* Data width */
439                         t = spd_read(iic0_dimm_addr[dimm_num], 6);
440                         if (0 == *width) {
441                                 *width = t;
442                         } else if (t != *width) {
443                                 printf("ERROR: DRAM DIMM modules do not all "
444                                        "have the same data width.\n\n");
445                                 spd_ddr_init_hang();
446                         }
447                 }
448         }
449         debug("Number of rows = %ld\n", *rows);
450         debug("Number of columns = %ld\n", *cols);
451         debug("Number of banks = %ld\n", *banks);
452         debug("Data width = %ld\n", *width);
453         if (*rows > 14) {
454                 printf("ERROR: DRAM DIMM modules have %lu address rows.\n",
455                        *rows);
456                 printf("Only modules with 14 or fewer rows are supported.\n\n");
457                 spd_ddr_init_hang();
458         }
459         if (4 != *banks && 8 != *banks) {
460                 printf("ERROR: DRAM DIMM modules have %lu banks.\n", *banks);
461                 printf("Only modules with 4 or 8 banks are supported.\n\n");
462                 spd_ddr_init_hang();
463         }
464         if (*cols > 12) {
465                 printf("ERROR: DRAM DIMM modules have %lu address columns.\n",
466                        *cols);
467                 printf("Only modules with 12 or fewer columns are "
468                        "supported.\n\n");
469                 spd_ddr_init_hang();
470         }
471         if (32 != *width && 40 != *width && 64 != *width && 72 != *width) {
472                 printf("ERROR: DRAM DIMM modules have a width of %lu bit.\n",
473                        *width);
474                 printf("Only modules with widths of 32, 40, 64, and 72 bits "
475                        "are supported.\n\n");
476                 spd_ddr_init_hang();
477         }
478 }
479
480 /*------------------------------------------------------------------
481  * Only 1.8V modules are supported.  This routine verifies this.
482  *-----------------------------------------------------------------*/
483 static void check_voltage_type(unsigned long dimm_ranks[],
484                                unsigned char const iic0_dimm_addr[],
485                                unsigned long num_dimm_banks)
486 {
487         unsigned long dimm_num;
488         unsigned long voltage_type;
489
490         for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
491                 if (dimm_ranks[dimm_num]) {
492                         voltage_type = spd_read(iic0_dimm_addr[dimm_num], 8);
493                         if (0x05 != voltage_type) {     /* 1.8V for DDR2 */
494                                 printf("ERROR: Slot %lu provides 1.8V for DDR2 "
495                                        "DIMMs.\n", dimm_num);
496                                 switch (voltage_type) {
497                                 case 0x00:
498                                         printf("This DIMM is 5.0 Volt/TTL.\n");
499                                         break;
500                                 case 0x01:
501                                         printf("This DIMM is LVTTL.\n");
502                                         break;
503                                 case 0x02:
504                                         printf("This DIMM is 1.5 Volt.\n");
505                                         break;
506                                 case 0x03:
507                                         printf("This DIMM is 3.3 Volt/TTL.\n");
508                                         break;
509                                 case 0x04:
510                                         printf("This DIMM is 2.5 Volt.\n");
511                                         break;
512                                 default:
513                                         printf("This DIMM is an unknown "
514                                                "voltage.\n");
515                                         break;
516                                 }
517                                 printf("Replace it with a 1.8V DDR2 DIMM.\n\n");
518                                 spd_ddr_init_hang();
519                         }
520                 }
521         }
522 }
523
524 static void program_ddr0_03(unsigned long dimm_ranks[],
525                             unsigned char const iic0_dimm_addr[],
526                             unsigned long num_dimm_banks,
527                             unsigned long sdram_freq,
528                             unsigned long rows, unsigned long *cas_latency)
529 {
530         unsigned long dimm_num;
531         unsigned long cas_index;
532         unsigned long cycle_2_0_clk;
533         unsigned long cycle_3_0_clk;
534         unsigned long cycle_4_0_clk;
535         unsigned long cycle_5_0_clk;
536         unsigned long max_2_0_tcyc_ps = 100;
537         unsigned long max_3_0_tcyc_ps = 100;
538         unsigned long max_4_0_tcyc_ps = 100;
539         unsigned long max_5_0_tcyc_ps = 100;
540         unsigned char cas_available = 0x3C;     /* value for DDR2 */
541         u32 ddr0_03 = DDR0_03_BSTLEN_ENCODE(0x2) | DDR0_03_INITAREF_ENCODE(0x2);
542         unsigned int const tcyc_addr[3] = { 9, 23, 25 };
543
544         /*------------------------------------------------------------------
545          * Get the board configuration info.
546          *-----------------------------------------------------------------*/
547         debug("sdram_freq = %ld\n", sdram_freq);
548
549         /*------------------------------------------------------------------
550          * Handle the timing.  We need to find the worst case timing of all
551          * the dimm modules installed.
552          *-----------------------------------------------------------------*/
553         /* loop through all the DIMM slots on the board */
554         for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
555                 /* If a dimm is installed in a particular slot ... */
556                 if (dimm_ranks[dimm_num]) {
557                         unsigned char const cas_bit =
558                             spd_read(iic0_dimm_addr[dimm_num], 18);
559                         unsigned char cas_mask;
560
561                         cas_available &= cas_bit;
562                         for (cas_mask = 0x80; cas_mask; cas_mask >>= 1) {
563                                 if (cas_bit & cas_mask)
564                                         break;
565                         }
566                         debug("cas_bit (SPD byte 18) = %02X, cas_mask = %02X\n",
567                               cas_bit, cas_mask);
568
569                         for (cas_index = 0; cas_index < 3;
570                              cas_mask >>= 1, cas_index++) {
571                                 unsigned long cycle_time_ps;
572
573                                 if (!(cas_available & cas_mask)) {
574                                         continue;
575                                 }
576                                 cycle_time_ps =
577                                     get_tcyc(spd_read(iic0_dimm_addr[dimm_num],
578                                                       tcyc_addr[cas_index]));
579
580                                 debug("cas_index = %ld: cycle_time_ps = %ld\n",
581                                       cas_index, cycle_time_ps);
582                                 /*
583                                  * DDR2 devices use the following bitmask for CAS latency:
584                                  *  Bit   7    6    5    4    3    2    1    0
585                                  *       TBD  6.0  5.0  4.0  3.0  2.0  TBD  TBD
586                                  */
587                                 switch (cas_mask) {
588                                 case 0x20:
589                                         max_5_0_tcyc_ps =
590                                             max(max_5_0_tcyc_ps, cycle_time_ps);
591                                         break;
592                                 case 0x10:
593                                         max_4_0_tcyc_ps =
594                                             max(max_4_0_tcyc_ps, cycle_time_ps);
595                                         break;
596                                 case 0x08:
597                                         max_3_0_tcyc_ps =
598                                             max(max_3_0_tcyc_ps, cycle_time_ps);
599                                         break;
600                                 case 0x04:
601                                         max_2_0_tcyc_ps =
602                                             max(max_2_0_tcyc_ps, cycle_time_ps);
603                                         break;
604                                 }
605                         }
606                 }
607         }
608         debug("cas_available (bit map) = 0x%02X\n", cas_available);
609
610         /*------------------------------------------------------------------
611          * Set the SDRAM mode, SDRAM_MMODE
612          *-----------------------------------------------------------------*/
613
614         /* add 10 here because of rounding problems */
615         cycle_2_0_clk = MULDIV64(ONE_BILLION, 1000, max_2_0_tcyc_ps) + 10;
616         cycle_3_0_clk = MULDIV64(ONE_BILLION, 1000, max_3_0_tcyc_ps) + 10;
617         cycle_4_0_clk = MULDIV64(ONE_BILLION, 1000, max_4_0_tcyc_ps) + 10;
618         cycle_5_0_clk = MULDIV64(ONE_BILLION, 1000, max_5_0_tcyc_ps) + 10;
619         debug("cycle_2_0_clk = %ld\n", cycle_2_0_clk);
620         debug("cycle_3_0_clk = %ld\n", cycle_3_0_clk);
621         debug("cycle_4_0_clk = %ld\n", cycle_4_0_clk);
622         debug("cycle_5_0_clk = %ld\n", cycle_5_0_clk);
623
624         if ((cas_available & 0x04) && (sdram_freq <= cycle_2_0_clk)) {
625                 *cas_latency = 2;
626                 ddr0_03 |= DDR0_03_CASLAT_ENCODE(0x2) |
627                     DDR0_03_CASLAT_LIN_ENCODE(0x4);
628         } else if ((cas_available & 0x08) && (sdram_freq <= cycle_3_0_clk)) {
629                 *cas_latency = 3;
630                 ddr0_03 |= DDR0_03_CASLAT_ENCODE(0x3) |
631                     DDR0_03_CASLAT_LIN_ENCODE(0x6);
632         } else if ((cas_available & 0x10) && (sdram_freq <= cycle_4_0_clk)) {
633                 *cas_latency = 4;
634                 ddr0_03 |= DDR0_03_CASLAT_ENCODE(0x4) |
635                     DDR0_03_CASLAT_LIN_ENCODE(0x8);
636         } else if ((cas_available & 0x20) && (sdram_freq <= cycle_5_0_clk)) {
637                 *cas_latency = 5;
638                 ddr0_03 |= DDR0_03_CASLAT_ENCODE(0x5) |
639                     DDR0_03_CASLAT_LIN_ENCODE(0xA);
640         } else {
641                 printf("ERROR: Cannot find a supported CAS latency with the "
642                        "installed DIMMs.\n");
643                 printf("Only DDR2 DIMMs with CAS latencies of 2.0, 3.0, 4.0, "
644                        "and 5.0 are supported.\n");
645                 printf("Make sure the PLB speed is within the supported range "
646                        "of the DIMMs.\n");
647                 printf("sdram_freq=%ld cycle2=%ld cycle3=%ld cycle4=%ld "
648                        "cycle5=%ld\n\n", sdram_freq, cycle_2_0_clk,
649                        cycle_3_0_clk, cycle_4_0_clk, cycle_5_0_clk);
650                 spd_ddr_init_hang();
651         }
652         debug("CAS latency = %ld\n", *cas_latency);
653         mtsdram(DDR0_03, ddr0_03);
654 }
655
656 static void program_ddr0_04(unsigned long dimm_ranks[],
657                             unsigned char const iic0_dimm_addr[],
658                             unsigned long num_dimm_banks,
659                             unsigned long sdram_freq)
660 {
661         unsigned long dimm_num;
662         unsigned long t_rc_ps = 0;
663         unsigned long t_rrd_ps = 0;
664         unsigned long t_rtp_ps = 0;
665         unsigned long t_rc_clk;
666         unsigned long t_rrd_clk;
667         unsigned long t_rtp_clk;
668
669         /*------------------------------------------------------------------
670          * Handle the timing.  We need to find the worst case timing of all
671          * the dimm modules installed.
672          *-----------------------------------------------------------------*/
673         /* loop through all the DIMM slots on the board */
674         for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
675                 /* If a dimm is installed in a particular slot ... */
676                 if (dimm_ranks[dimm_num]) {
677                         unsigned long ps;
678
679                         /* tRC */
680                         ps = 1000 * spd_read(iic0_dimm_addr[dimm_num], 41);
681                         switch (spd_read(iic0_dimm_addr[dimm_num], 40) >> 4) {
682                         case 0x1:
683                                 ps += 250;
684                                 break;
685                         case 0x2:
686                                 ps += 333;
687                                 break;
688                         case 0x3:
689                                 ps += 500;
690                                 break;
691                         case 0x4:
692                                 ps += 667;
693                                 break;
694                         case 0x5:
695                                 ps += 750;
696                                 break;
697                         }
698                         t_rc_ps = max(t_rc_ps, ps);
699                         /* tRRD */
700                         ps = 250 * spd_read(iic0_dimm_addr[dimm_num], 28);
701                         t_rrd_ps = max(t_rrd_ps, ps);
702                         /* tRTP */
703                         ps = 250 * spd_read(iic0_dimm_addr[dimm_num], 38);
704                         t_rtp_ps = max(t_rtp_ps, ps);
705                 }
706         }
707         debug("t_rc_ps  = %ld\n", t_rc_ps);
708         t_rc_clk = (MULDIV64(sdram_freq, t_rc_ps, ONE_BILLION) + 999) / 1000;
709         debug("t_rrd_ps = %ld\n", t_rrd_ps);
710         t_rrd_clk = (MULDIV64(sdram_freq, t_rrd_ps, ONE_BILLION) + 999) / 1000;
711         debug("t_rtp_ps = %ld\n", t_rtp_ps);
712         t_rtp_clk = (MULDIV64(sdram_freq, t_rtp_ps, ONE_BILLION) + 999) / 1000;
713         mtsdram(DDR0_04, DDR0_04_TRC_ENCODE(t_rc_clk) |
714                 DDR0_04_TRRD_ENCODE(t_rrd_clk) |
715                 DDR0_04_TRTP_ENCODE(t_rtp_clk));
716 }
717
718 static void program_ddr0_05(unsigned long dimm_ranks[],
719                             unsigned char const iic0_dimm_addr[],
720                             unsigned long num_dimm_banks,
721                             unsigned long sdram_freq)
722 {
723         unsigned long dimm_num;
724         unsigned long t_rp_ps = 0;
725         unsigned long t_ras_ps = 0;
726         unsigned long t_rp_clk;
727         unsigned long t_ras_clk;
728         u32 ddr0_05 = DDR0_05_TMRD_ENCODE(0x2) | DDR0_05_TEMRS_ENCODE(0x2);
729
730         /*------------------------------------------------------------------
731          * Handle the timing.  We need to find the worst case timing of all
732          * the dimm modules installed.
733          *-----------------------------------------------------------------*/
734         /* loop through all the DIMM slots on the board */
735         for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
736                 /* If a dimm is installed in a particular slot ... */
737                 if (dimm_ranks[dimm_num]) {
738                         unsigned long ps;
739
740                         /* tRP */
741                         ps = 250 * spd_read(iic0_dimm_addr[dimm_num], 27);
742                         t_rp_ps = max(t_rp_ps, ps);
743                         /* tRAS */
744                         ps = 1000 * spd_read(iic0_dimm_addr[dimm_num], 30);
745                         t_ras_ps = max(t_ras_ps, ps);
746                 }
747         }
748         debug("t_rp_ps  = %ld\n", t_rp_ps);
749         t_rp_clk = (MULDIV64(sdram_freq, t_rp_ps, ONE_BILLION) + 999) / 1000;
750         debug("t_ras_ps = %ld\n", t_ras_ps);
751         t_ras_clk = (MULDIV64(sdram_freq, t_ras_ps, ONE_BILLION) + 999) / 1000;
752         mtsdram(DDR0_05, ddr0_05 | DDR0_05_TRP_ENCODE(t_rp_clk) |
753                 DDR0_05_TRAS_MIN_ENCODE(t_ras_clk));
754 }
755
756 static void program_ddr0_06(unsigned long dimm_ranks[],
757                             unsigned char const iic0_dimm_addr[],
758                             unsigned long num_dimm_banks,
759                             unsigned long sdram_freq)
760 {
761         unsigned long dimm_num;
762         unsigned char spd_40;
763         unsigned long t_wtr_ps = 0;
764         unsigned long t_rfc_ps = 0;
765         unsigned long t_wtr_clk;
766         unsigned long t_rfc_clk;
767         u32 ddr0_06 =
768             DDR0_06_WRITEINTERP_ENCODE(0x1) | DDR0_06_TDLL_ENCODE(200);
769
770         /*------------------------------------------------------------------
771          * Handle the timing.  We need to find the worst case timing of all
772          * the dimm modules installed.
773          *-----------------------------------------------------------------*/
774         /* loop through all the DIMM slots on the board */
775         for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
776                 /* If a dimm is installed in a particular slot ... */
777                 if (dimm_ranks[dimm_num]) {
778                         unsigned long ps;
779
780                         /* tWTR */
781                         ps = 250 * spd_read(iic0_dimm_addr[dimm_num], 37);
782                         t_wtr_ps = max(t_wtr_ps, ps);
783                         /* tRFC */
784                         ps = 1000 * spd_read(iic0_dimm_addr[dimm_num], 42);
785                         spd_40 = spd_read(iic0_dimm_addr[dimm_num], 40);
786                         ps += 256000 * (spd_40 & 0x01);
787                         switch ((spd_40 & 0x0E) >> 1) {
788                         case 0x1:
789                                 ps += 250;
790                                 break;
791                         case 0x2:
792                                 ps += 333;
793                                 break;
794                         case 0x3:
795                                 ps += 500;
796                                 break;
797                         case 0x4:
798                                 ps += 667;
799                                 break;
800                         case 0x5:
801                                 ps += 750;
802                                 break;
803                         }
804                         t_rfc_ps = max(t_rfc_ps, ps);
805                 }
806         }
807         debug("t_wtr_ps = %ld\n", t_wtr_ps);
808         t_wtr_clk = (MULDIV64(sdram_freq, t_wtr_ps, ONE_BILLION) + 999) / 1000;
809         debug("t_rfc_ps = %ld\n", t_rfc_ps);
810         t_rfc_clk = (MULDIV64(sdram_freq, t_rfc_ps, ONE_BILLION) + 999) / 1000;
811         mtsdram(DDR0_06, ddr0_06 | DDR0_06_TWTR_ENCODE(t_wtr_clk) |
812                 DDR0_06_TRFC_ENCODE(t_rfc_clk));
813 }
814
815 static void program_ddr0_10(unsigned long dimm_ranks[], unsigned long ranks)
816 {
817         unsigned long csmap;
818
819         if (2 == ranks) {
820                 /* Both chip selects in use */
821                 csmap = 0x03;
822         } else {
823                 /* One chip select in use */
824                 csmap = (1 == dimm_ranks[0]) ? 0x1 : 0x2;
825         }
826         mtsdram(DDR0_10, DDR0_10_WRITE_MODEREG_ENCODE(0x0) |
827                 DDR0_10_CS_MAP_ENCODE(csmap) |
828                 DDR0_10_OCD_ADJUST_PUP_CS_0_ENCODE(0));
829 }
830
831 static void program_ddr0_11(unsigned long sdram_freq)
832 {
833         unsigned long const t_xsnr_ps = 200000; /* 200 ns */
834         unsigned long t_xsnr_clk;
835
836         debug("t_xsnr_ps = %ld\n", t_xsnr_ps);
837         t_xsnr_clk =
838             (MULDIV64(sdram_freq, t_xsnr_ps, ONE_BILLION) + 999) / 1000;
839         mtsdram(DDR0_11, DDR0_11_SREFRESH_ENCODE(0) |
840                 DDR0_11_TXSNR_ENCODE(t_xsnr_clk) | DDR0_11_TXSR_ENCODE(200));
841 }
842
843 static void program_ddr0_22(unsigned long dimm_ranks[],
844                             unsigned char const iic0_dimm_addr[],
845                             unsigned long num_dimm_banks, unsigned long width)
846 {
847 #if defined(CONFIG_DDR_ECC)
848         unsigned long dimm_num;
849         unsigned long ecc_available = width >= 64;
850         u32 ddr0_22 = DDR0_22_DQS_OUT_SHIFT_BYPASS_ENCODE(0x26) |
851             DDR0_22_DQS_OUT_SHIFT_ENCODE(DQS_OUT_SHIFT) |
852             DDR0_22_DLL_DQS_BYPASS_8_ENCODE(DLL_DQS_BYPASS);
853
854         /* loop through all the DIMM slots on the board */
855         for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
856                 /* If a dimm is installed in a particular slot ... */
857                 if (dimm_ranks[dimm_num]) {
858                         /* Check for ECC */
859                         if (0 == (spd_read(iic0_dimm_addr[dimm_num], 11) &
860                                   0x02)) {
861                                 ecc_available = false;
862                         }
863                 }
864         }
865         if (ecc_available) {
866                 debug("ECC found on all DIMMs present\n");
867                 mtsdram(DDR0_22, ddr0_22 | DDR0_22_CTRL_RAW_ENCODE(0x3));
868         } else {
869                 debug("ECC not found on some or all DIMMs present\n");
870                 mtsdram(DDR0_22, ddr0_22 | DDR0_22_CTRL_RAW_ENCODE(0x0));
871         }
872 #else
873         mtsdram(DDR0_22, DDR0_22_CTRL_RAW_ENCODE(0x0) |
874                 DDR0_22_DQS_OUT_SHIFT_BYPASS_ENCODE(0x26) |
875                 DDR0_22_DQS_OUT_SHIFT_ENCODE(DQS_OUT_SHIFT) |
876                 DDR0_22_DLL_DQS_BYPASS_8_ENCODE(DLL_DQS_BYPASS));
877 #endif /* defined(CONFIG_DDR_ECC) */
878 }
879
880 static void program_ddr0_24(unsigned long ranks)
881 {
882         u32 ddr0_24 = DDR0_24_RTT_PAD_TERMINATION_ENCODE(0x1) | /* 75 ohm */
883             DDR0_24_ODT_RD_MAP_CS1_ENCODE(0x0);
884
885         if (2 == ranks) {
886                 /* Both chip selects in use */
887                 ddr0_24 |= DDR0_24_ODT_WR_MAP_CS1_ENCODE(0x1) |
888                     DDR0_24_ODT_WR_MAP_CS0_ENCODE(0x2);
889         } else {
890                 /* One chip select in use */
891                 /* One of the two fields added to ddr0_24 is a "don't care" */
892                 ddr0_24 |= DDR0_24_ODT_WR_MAP_CS1_ENCODE(0x2) |
893                     DDR0_24_ODT_WR_MAP_CS0_ENCODE(0x1);
894         }
895         mtsdram(DDR0_24, ddr0_24);
896 }
897
898 static void program_ddr0_26(unsigned long sdram_freq)
899 {
900         unsigned long const t_ref_ps = 7800000; /* 7.8 us. refresh */
901         /* TODO: check definition of tRAS_MAX */
902         unsigned long const t_ras_max_ps = 9 * t_ref_ps;
903         unsigned long t_ras_max_clk;
904         unsigned long t_ref_clk;
905
906         /* Round down t_ras_max_clk and t_ref_clk */
907         debug("t_ras_max_ps = %ld\n", t_ras_max_ps);
908         t_ras_max_clk = MULDIV64(sdram_freq, t_ras_max_ps, ONE_BILLION) / 1000;
909         debug("t_ref_ps     = %ld\n", t_ref_ps);
910         t_ref_clk = MULDIV64(sdram_freq, t_ref_ps, ONE_BILLION) / 1000;
911         mtsdram(DDR0_26, DDR0_26_TRAS_MAX_ENCODE(t_ras_max_clk) |
912                 DDR0_26_TREF_ENCODE(t_ref_clk));
913 }
914
915 static void program_ddr0_27(unsigned long sdram_freq)
916 {
917         unsigned long const t_init_ps = 200000000;      /* 200 us. init */
918         unsigned long t_init_clk;
919
920         debug("t_init_ps = %ld\n", t_init_ps);
921         t_init_clk =
922             (MULDIV64(sdram_freq, t_init_ps, ONE_BILLION) + 999) / 1000;
923         mtsdram(DDR0_27, DDR0_27_EMRS_DATA_ENCODE(0x0000) |
924                 DDR0_27_TINIT_ENCODE(t_init_clk));
925 }
926
927 static void program_ddr0_43(unsigned long dimm_ranks[],
928                             unsigned char const iic0_dimm_addr[],
929                             unsigned long num_dimm_banks,
930                             unsigned long sdram_freq,
931                             unsigned long cols, unsigned long banks)
932 {
933         unsigned long dimm_num;
934         unsigned long t_wr_ps = 0;
935         unsigned long t_wr_clk;
936         u32 ddr0_43 = DDR0_43_APREBIT_ENCODE(10) |
937             DDR0_43_COLUMN_SIZE_ENCODE(12 - cols) |
938             DDR0_43_EIGHT_BANK_MODE_ENCODE(8 == banks ? 1 : 0);
939
940         /*------------------------------------------------------------------
941          * Handle the timing.  We need to find the worst case timing of all
942          * the dimm modules installed.
943          *-----------------------------------------------------------------*/
944         /* loop through all the DIMM slots on the board */
945         for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
946                 /* If a dimm is installed in a particular slot ... */
947                 if (dimm_ranks[dimm_num]) {
948                         unsigned long ps;
949
950                         ps = 250 * spd_read(iic0_dimm_addr[dimm_num], 36);
951                         t_wr_ps = max(t_wr_ps, ps);
952                 }
953         }
954         debug("t_wr_ps = %ld\n", t_wr_ps);
955         t_wr_clk = (MULDIV64(sdram_freq, t_wr_ps, ONE_BILLION) + 999) / 1000;
956         mtsdram(DDR0_43, ddr0_43 | DDR0_43_TWR_ENCODE(t_wr_clk));
957 }
958
959 static void program_ddr0_44(unsigned long dimm_ranks[],
960                             unsigned char const iic0_dimm_addr[],
961                             unsigned long num_dimm_banks,
962                             unsigned long sdram_freq)
963 {
964         unsigned long dimm_num;
965         unsigned long t_rcd_ps = 0;
966         unsigned long t_rcd_clk;
967
968         /*------------------------------------------------------------------
969          * Handle the timing.  We need to find the worst case timing of all
970          * the dimm modules installed.
971          *-----------------------------------------------------------------*/
972         /* loop through all the DIMM slots on the board */
973         for (dimm_num = 0; dimm_num < num_dimm_banks; dimm_num++) {
974                 /* If a dimm is installed in a particular slot ... */
975                 if (dimm_ranks[dimm_num]) {
976                         unsigned long ps;
977
978                         ps = 250 * spd_read(iic0_dimm_addr[dimm_num], 29);
979                         t_rcd_ps = max(t_rcd_ps, ps);
980                 }
981         }
982         debug("t_rcd_ps = %ld\n", t_rcd_ps);
983         t_rcd_clk = (MULDIV64(sdram_freq, t_rcd_ps, ONE_BILLION) + 999) / 1000;
984         mtsdram(DDR0_44, DDR0_44_TRCD_ENCODE(t_rcd_clk));
985 }
986
987 /*-----------------------------------------------------------------------------+
988  * initdram.  Initializes the 440EPx/GPx DDR SDRAM controller.
989  * Note: This routine runs from flash with a stack set up in the chip's
990  * sram space.  It is important that the routine does not require .sbss, .bss or
991  * .data sections.  It also cannot call routines that require these sections.
992  *-----------------------------------------------------------------------------*/
993 /*-----------------------------------------------------------------------------
994  * Function:     initdram
995  * Description:  Configures SDRAM memory banks for DDR operation.
996  *               Auto Memory Configuration option reads the DDR SDRAM EEPROMs
997  *               via the IIC bus and then configures the DDR SDRAM memory
998  *               banks appropriately. If Auto Memory Configuration is
999  *               not used, it is assumed that no DIMM is plugged
1000  *-----------------------------------------------------------------------------*/
1001 phys_size_t initdram(int board_type)
1002 {
1003         unsigned char const iic0_dimm_addr[] = SPD_EEPROM_ADDRESS;
1004         unsigned long dimm_ranks[MAXDIMMS];
1005         unsigned long ranks;
1006         unsigned long rows;
1007         unsigned long banks;
1008         unsigned long cols;
1009         unsigned long width;
1010         unsigned long const sdram_freq = get_bus_freq(0);
1011         unsigned long const num_dimm_banks = sizeof(iic0_dimm_addr);    /* on board dimm banks */
1012         unsigned long cas_latency = 0;  /* to quiet initialization warning */
1013         unsigned long dram_size;
1014
1015         debug("\nEntering initdram()\n");
1016
1017         /*------------------------------------------------------------------
1018          * Stop the DDR-SDRAM controller.
1019          *-----------------------------------------------------------------*/
1020         mtsdram(DDR0_02, DDR0_02_START_ENCODE(0));
1021
1022         /*
1023          * Make sure I2C controller is initialized
1024          * before continuing.
1025          */
1026         /* switch to correct I2C bus */
1027         i2c_set_bus_num(CONFIG_SYS_SPD_BUS_NUM);
1028
1029         /*------------------------------------------------------------------
1030          * Clear out the serial presence detect buffers.
1031          * Perform IIC reads from the dimm.  Fill in the spds.
1032          * Check to see if the dimm slots are populated
1033          *-----------------------------------------------------------------*/
1034         get_spd_info(dimm_ranks, &ranks, iic0_dimm_addr, num_dimm_banks);
1035
1036         /*------------------------------------------------------------------
1037          * Check the frequency supported for the dimms plugged.
1038          *-----------------------------------------------------------------*/
1039         check_frequency(dimm_ranks, iic0_dimm_addr, num_dimm_banks, sdram_freq);
1040
1041         /*------------------------------------------------------------------
1042          * Check and get size information.
1043          *-----------------------------------------------------------------*/
1044         get_dimm_size(dimm_ranks, iic0_dimm_addr, num_dimm_banks, &rows, &banks,
1045                       &cols, &width);
1046
1047         /*------------------------------------------------------------------
1048          * Check the voltage type for the dimms plugged.
1049          *-----------------------------------------------------------------*/
1050         check_voltage_type(dimm_ranks, iic0_dimm_addr, num_dimm_banks);
1051
1052         /*------------------------------------------------------------------
1053          * Program registers for SDRAM controller.
1054          *-----------------------------------------------------------------*/
1055         mtsdram(DDR0_00, DDR0_00_DLL_INCREMENT_ENCODE(0x19) |
1056                 DDR0_00_DLL_START_POINT_DECODE(0x0A));
1057
1058         mtsdram(DDR0_01, DDR0_01_PLB0_DB_CS_LOWER_ENCODE(0x01) |
1059                 DDR0_01_PLB0_DB_CS_UPPER_ENCODE(0x00) |
1060                 DDR0_01_INT_MASK_ENCODE(0xFF));
1061
1062         program_ddr0_03(dimm_ranks, iic0_dimm_addr, num_dimm_banks, sdram_freq,
1063                         rows, &cas_latency);
1064
1065         program_ddr0_04(dimm_ranks, iic0_dimm_addr, num_dimm_banks, sdram_freq);
1066
1067         program_ddr0_05(dimm_ranks, iic0_dimm_addr, num_dimm_banks, sdram_freq);
1068
1069         program_ddr0_06(dimm_ranks, iic0_dimm_addr, num_dimm_banks, sdram_freq);
1070
1071         /*
1072          * TODO: tFAW not found in SPD.  Value of 13 taken from Sequoia
1073          * board SDRAM, but may be overly conservative.
1074          */
1075         mtsdram(DDR0_07, DDR0_07_NO_CMD_INIT_ENCODE(0) |
1076                 DDR0_07_TFAW_ENCODE(13) |
1077                 DDR0_07_AUTO_REFRESH_MODE_ENCODE(1) |
1078                 DDR0_07_AREFRESH_ENCODE(0));
1079
1080         mtsdram(DDR0_08, DDR0_08_WRLAT_ENCODE(cas_latency - 1) |
1081                 DDR0_08_TCPD_ENCODE(200) | DDR0_08_DQS_N_EN_ENCODE(0) |
1082                 DDR0_08_DDRII_ENCODE(1));
1083
1084         mtsdram(DDR0_09, DDR0_09_OCD_ADJUST_PDN_CS_0_ENCODE(0x00) |
1085                 DDR0_09_RTT_0_ENCODE(0x1) |
1086                 DDR0_09_WR_DQS_SHIFT_BYPASS_ENCODE(0x1D) |
1087                 DDR0_09_WR_DQS_SHIFT_ENCODE(DQS_OUT_SHIFT - 0x20));
1088
1089         program_ddr0_10(dimm_ranks, ranks);
1090
1091         program_ddr0_11(sdram_freq);
1092
1093         mtsdram(DDR0_12, DDR0_12_TCKE_ENCODE(3));
1094
1095         mtsdram(DDR0_14, DDR0_14_DLL_BYPASS_MODE_ENCODE(0) |
1096                 DDR0_14_REDUC_ENCODE(width <= 40 ? 1 : 0) |
1097                 DDR0_14_REG_DIMM_ENABLE_ENCODE(0));
1098
1099         mtsdram(DDR0_17, DDR0_17_DLL_DQS_DELAY_0_ENCODE(DLL_DQS_DELAY));
1100
1101         mtsdram(DDR0_18, DDR0_18_DLL_DQS_DELAY_4_ENCODE(DLL_DQS_DELAY) |
1102                 DDR0_18_DLL_DQS_DELAY_3_ENCODE(DLL_DQS_DELAY) |
1103                 DDR0_18_DLL_DQS_DELAY_2_ENCODE(DLL_DQS_DELAY) |
1104                 DDR0_18_DLL_DQS_DELAY_1_ENCODE(DLL_DQS_DELAY));
1105
1106         mtsdram(DDR0_19, DDR0_19_DLL_DQS_DELAY_8_ENCODE(DLL_DQS_DELAY) |
1107                 DDR0_19_DLL_DQS_DELAY_7_ENCODE(DLL_DQS_DELAY) |
1108                 DDR0_19_DLL_DQS_DELAY_6_ENCODE(DLL_DQS_DELAY) |
1109                 DDR0_19_DLL_DQS_DELAY_5_ENCODE(DLL_DQS_DELAY));
1110
1111         mtsdram(DDR0_20, DDR0_20_DLL_DQS_BYPASS_3_ENCODE(DLL_DQS_BYPASS) |
1112                 DDR0_20_DLL_DQS_BYPASS_2_ENCODE(DLL_DQS_BYPASS) |
1113                 DDR0_20_DLL_DQS_BYPASS_1_ENCODE(DLL_DQS_BYPASS) |
1114                 DDR0_20_DLL_DQS_BYPASS_0_ENCODE(DLL_DQS_BYPASS));
1115
1116         mtsdram(DDR0_21, DDR0_21_DLL_DQS_BYPASS_7_ENCODE(DLL_DQS_BYPASS) |
1117                 DDR0_21_DLL_DQS_BYPASS_6_ENCODE(DLL_DQS_BYPASS) |
1118                 DDR0_21_DLL_DQS_BYPASS_5_ENCODE(DLL_DQS_BYPASS) |
1119                 DDR0_21_DLL_DQS_BYPASS_4_ENCODE(DLL_DQS_BYPASS));
1120
1121         program_ddr0_22(dimm_ranks, iic0_dimm_addr, num_dimm_banks, width);
1122
1123         mtsdram(DDR0_23, DDR0_23_ODT_RD_MAP_CS0_ENCODE(0x0) |
1124                 DDR0_23_FWC_ENCODE(0));
1125
1126         program_ddr0_24(ranks);
1127
1128         program_ddr0_26(sdram_freq);
1129
1130         program_ddr0_27(sdram_freq);
1131
1132         mtsdram(DDR0_28, DDR0_28_EMRS3_DATA_ENCODE(0x0000) |
1133                 DDR0_28_EMRS2_DATA_ENCODE(0x0000));
1134
1135         mtsdram(DDR0_31, DDR0_31_XOR_CHECK_BITS_ENCODE(0x0000));
1136
1137         mtsdram(DDR0_42, DDR0_42_ADDR_PINS_ENCODE(14 - rows) |
1138                 DDR0_42_CASLAT_LIN_GATE_ENCODE(2 * cas_latency));
1139
1140         program_ddr0_43(dimm_ranks, iic0_dimm_addr, num_dimm_banks, sdram_freq,
1141                         cols, banks);
1142
1143         program_ddr0_44(dimm_ranks, iic0_dimm_addr, num_dimm_banks, sdram_freq);
1144
1145         denali_sdram_register_dump();
1146
1147         dram_size = (width >= 64) ? 8 : 4;
1148         dram_size *= 1 << cols;
1149         dram_size *= banks;
1150         dram_size *= 1 << rows;
1151         dram_size *= ranks;
1152         debug("dram_size = %lu\n", dram_size);
1153
1154         /* Start the SDRAM controller */
1155         mtsdram(DDR0_02, DDR0_02_START_ENCODE(1));
1156         denali_wait_for_dlllock();
1157
1158 #if defined(CONFIG_DDR_DATA_EYE)
1159         /*
1160          * Map the first 1 MiB of memory in the TLB, and perform the data eye
1161          * search.
1162          */
1163         program_tlb(0, CONFIG_SYS_SDRAM_BASE, TLB_1MB_SIZE, TLB_WORD2_I_ENABLE);
1164         denali_core_search_data_eye();
1165         denali_sdram_register_dump();
1166         remove_tlb(CONFIG_SYS_SDRAM_BASE, TLB_1MB_SIZE);
1167 #endif
1168
1169 #if defined(CONFIG_ZERO_SDRAM) || defined(CONFIG_DDR_ECC)
1170         program_tlb(0, CONFIG_SYS_SDRAM_BASE, dram_size, 0);
1171         sync();
1172         /* Zero the memory */
1173         debug("Zeroing SDRAM...");
1174 #if defined(CONFIG_SYS_MEM_TOP_HIDE)
1175         dcbz_area(CONFIG_SYS_SDRAM_BASE, dram_size - CONFIG_SYS_MEM_TOP_HIDE);
1176 #else
1177 #error Please define CONFIG_SYS_MEM_TOP_HIDE (see README) in your board config file
1178 #endif
1179         /* Write modified dcache lines back to memory */
1180         clean_dcache_range(CONFIG_SYS_SDRAM_BASE, CONFIG_SYS_SDRAM_BASE + dram_size - CONFIG_SYS_MEM_TOP_HIDE);
1181         debug("Completed\n");
1182         sync();
1183         remove_tlb(CONFIG_SYS_SDRAM_BASE, dram_size);
1184
1185 #if defined(CONFIG_DDR_ECC)
1186         /*
1187          * If ECC is enabled, clear and enable interrupts
1188          */
1189         if (is_ecc_enabled()) {
1190                 u32 val;
1191
1192                 sync();
1193                 /* Clear error status */
1194                 mfsdram(DDR0_00, val);
1195                 mtsdram(DDR0_00, val | DDR0_00_INT_ACK_ALL);
1196                 /* Set 'int_mask' parameter to functionnal value */
1197                 mfsdram(DDR0_01, val);
1198                 mtsdram(DDR0_01, (val & ~DDR0_01_INT_MASK_MASK) |
1199                         DDR0_01_INT_MASK_ALL_OFF);
1200 #if defined(CONFIG_DDR_DATA_EYE)
1201                 /*
1202                  * Running denali_core_search_data_eye() when ECC is enabled
1203                  * causes non-ECC machine checks.  This clears them.
1204                  */
1205                 print_mcsr();
1206                 mtspr(SPRN_MCSR, mfspr(SPRN_MCSR));
1207                 print_mcsr();
1208 #endif
1209                 sync();
1210         }
1211 #endif /* defined(CONFIG_DDR_ECC) */
1212 #endif /* defined(CONFIG_ZERO_SDRAM) || defined(CONFIG_DDR_ECC) */
1213
1214         program_tlb(0, CONFIG_SYS_SDRAM_BASE, dram_size, MY_TLB_WORD2_I_ENABLE);
1215         return dram_size;
1216 }
1217
1218 void board_add_ram_info(int use_default)
1219 {
1220         u32 val;
1221
1222         printf(" (ECC");
1223         if (!is_ecc_enabled()) {
1224                 printf(" not");
1225         }
1226         printf(" enabled, %ld MHz", (2 * get_bus_freq(0)) / 1000000);
1227
1228         mfsdram(DDR0_03, val);
1229         printf(", CL%d)", DDR0_03_CASLAT_LIN_DECODE(val) >> 1);
1230 }
1231 #endif /* CONFIG_SPD_EEPROM */