|
@@ -72,8 +72,13 @@ nouveau_sddr3_calc(struct nouveau_ram *ram)
|
|
|
{
|
|
|
struct nouveau_bios *bios = nouveau_bios(ram);
|
|
|
int CWL, CL, WR, DLL = 0, ODT = 0;
|
|
|
+ u8 ver;
|
|
|
|
|
|
- switch (!!ram->timing.data * ram->timing.version) {
|
|
|
+ ver = !!ram->timing.data * ram->timing.version;
|
|
|
+ if (ram->next)
|
|
|
+ ver = ram->next->bios.timing_ver;
|
|
|
+
|
|
|
+ switch (ver) {
|
|
|
case 0x10:
|
|
|
if (ram->timing.size < 0x17) {
|
|
|
/* XXX: NV50: Get CWL from the timing register */
|
|
@@ -86,9 +91,9 @@ nouveau_sddr3_calc(struct nouveau_ram *ram)
|
|
|
ODT = nv_ro08(bios, ram->timing.data + 0x0e) & 0x07;
|
|
|
break;
|
|
|
case 0x20:
|
|
|
- CWL = (nv_ro16(bios, ram->timing.data + 0x04) & 0x0f80) >> 7;
|
|
|
- CL = nv_ro08(bios, ram->timing.data + 0x04) & 0x1f;
|
|
|
- WR = nv_ro08(bios, ram->timing.data + 0x0a) & 0x7f;
|
|
|
+ CWL = (ram->next->bios.timing[1] & 0x00000f80) >> 7;
|
|
|
+ CL = (ram->next->bios.timing[1] & 0x0000001f) >> 0;
|
|
|
+ WR = (ram->next->bios.timing[2] & 0x007f0000) >> 16;
|
|
|
/* XXX: Get these values from the VBIOS instead */
|
|
|
DLL = !(ram->mr[1] & 0x1);
|
|
|
ODT = (ram->mr[1] & 0x004) >> 2 |
|