1 #include <cpu/amd/gx2def.h>
3 static void sdram_set_registers(const struct mem_controller *ctrl)
7 static void sdram_set_spd_registers(const struct mem_controller *ctrl)
12 /* Section 6.1.3, LX processor databooks, BIOS Initialization Sequence
13 * Section 4.1.4, GX/CS5535 GeodeROM Porting guide */
14 static void sdram_enable(int controllers, const struct mem_controller *ctrl)
19 /* 1. Initialize GLMC registers base on SPD values,
20 * Hard coded as XpressROM for now */
21 print_debug("sdram_enable step 1\r\n");
22 msr = rdmsr(0x20000018);
25 wrmsr(0x20000018, msr);
27 msr = rdmsr(0x20000019);
30 wrmsr(0x20000019, msr);
32 /* 2. release from PMode */
33 msr = rdmsr(0x20002004);
36 wrmsr(0x20002004, msr);
37 /* undocmented bits in GX, in LX there are
38 * 8 bits in PM1_UP_DLY */
39 msr = rdmsr(0x2000001a);
42 wrmsr(0x2000001a, msr);
43 print_debug("sdram_enable step 2\r\n");
45 /* 3. release CKE mask to enable CKE */
46 msr = rdmsr(0x2000001d);
47 msr.lo &= !(0x03 << 8);
48 wrmsr(0x2000201d, msr);
49 print_debug("sdram_enable step 3\r\n");
52 /* 5. set refresh interval */
53 msr = rdmsr(0x20000018);
54 msr.lo |= (0x48 << 8);
55 wrmsr(0x20000018, msr);
57 /* set refresh staggering to 4 SDRAM clocks */
58 msr = rdmsr(0x20000018);
59 msr.lo &= !(0x03 << 6);
60 wrmsr(0x20000018, msr);
62 /* 6. enable RLL, load Extended Mode Register by set and clear PROG_DRAM */
63 msr = rdmsr(0x20000018);
64 msr.lo |= ((0x01 << 28) | 0x01);
65 wrmsr(0x20000018, msr);
66 msr.lo &= !((0x01 << 28) | 0x01);
67 wrmsr(0x20000018, msr);
68 print_debug("sdram_enable step 7\r\n");
70 /* 7. Reset DLL, Bit 27 is undocumented in GX datasheet,
71 * it is documented in LX datasheet */
72 /* load Mode Register by set and clear PROG_DRAM */
73 msr = rdmsr(0x20000018);
74 msr.lo |= ((0x01 << 27) | 0x01);
75 wrmsr(0x20000018, msr);
76 msr.lo &= !((0x01 << 27) | 0x01);
77 wrmsr(0x20000018, msr);
78 print_debug("sdram_enable step 9\r\n");
81 /* 8. load Mode Register by set and clear PROG_DRAM */
82 msr = rdmsr(0x20000018);
84 wrmsr(0x20000018, msr);
86 wrmsr(0x20000018, msr);
87 print_debug("sdram_enable step 10\r\n");
89 /* 4. set and clear REF_TST 16 times, more shouldn't hurt */
90 for (i = 0; i < 19; i++) {
91 msr = rdmsr(0x20000018);
92 msr.lo |= (0x01 << 3);
93 wrmsr(0x20000018, msr);
94 msr.lo &= !(0x01 << 3);
95 wrmsr(0x20000018, msr);
97 print_debug("sdram_enable step 4\r\n");
100 for (i = 0; i < 200; i++)
104 msr = rdmsr(0x2000001f);
106 wrmsr(0x2000001f, msr);
107 print_debug("sdram_enable step 10\r\n");
109 /* DRAM working now?? */