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. clock gating for 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);
41 wrmsr(0x2000001a, msr);
42 print_debug("sdram_enable step 2\r\n");
44 /* 3. release CKE mask to enable CKE */
45 msr = rdmsr(0x2000001d);
46 msr.lo &= ~(0x03 << 8);
47 wrmsr(0x2000201d, msr);
48 print_debug("sdram_enable step 3\r\n");
50 /* 4. set and clear REF_TST 16 times, more shouldn't hurt
51 * why this is before EMRS and MRS ? */
52 for (i = 0; i < 19; i++) {
53 msr = rdmsr(0x20000018);
54 msr.lo |= (0x01 << 3);
55 wrmsr(0x20000018, msr);
56 msr.lo &= ~(0x01 << 3);
57 wrmsr(0x20000018, msr);
59 print_debug("sdram_enable step 4\r\n");
61 /* 5. set refresh interval */
62 msr = rdmsr(0x20000018);
63 msr.lo &= ~(0xffff << 8);
64 msr.lo |= (0x34 << 8);
65 wrmsr(0x20000018, msr);
66 /* set refresh staggering to 4 SDRAM clocks */
67 msr = rdmsr(0x20000018);
68 msr.lo &= ~(0x03 << 6);
69 msr.lo |= (0x00 << 6);
70 wrmsr(0x20000018, msr);
71 print_debug("sdram_enable step 5\r\n");
73 /* 6. enable DLL, load Extended Mode Register by set and clear PROG_DRAM */
74 msr = rdmsr(0x20000018);
75 msr.lo |= ((0x01 << 28) | 0x01);
76 wrmsr(0x20000018, msr);
77 msr.lo &= ~((0x01 << 28) | 0x01);
78 wrmsr(0x20000018, msr);
79 print_debug("sdram_enable step 6\r\n");
81 /* 7. Reset DLL, Bit 27 is undocumented in GX datasheet,
82 * it is documented in LX datasheet */
83 /* load Mode Register by set and clear PROG_DRAM */
84 msr = rdmsr(0x20000018);
85 msr.lo |= ((0x01 << 27) | 0x01);
86 wrmsr(0x20000018, msr);
87 msr.lo &= ~((0x01 << 27) | 0x01);
88 wrmsr(0x20000018, msr);
89 print_debug("sdram_enable step 7\r\n");
91 /* 8. load Mode Register by set and clear PROG_DRAM */
92 msr = rdmsr(0x20000018);
94 wrmsr(0x20000018, msr);
96 wrmsr(0x20000018, msr);
97 print_debug("sdram_enable step 8\r\n");
100 for (i = 0; i < 200; i++)
104 msr = rdmsr(0x2000001f);
107 wrmsr(0x2000001f, msr);
109 /* set delay control */
110 msr = rdmsr(0x4c00000f);
113 wrmsr(0x4c00000f, msr);
115 /* DRAM working now?? */