summaryrefslogtreecommitdiff
path: root/nvkm/subdev/fb/sddr3.c
diff options
context:
space:
mode:
Diffstat (limited to 'nvkm/subdev/fb/sddr3.c')
-rw-r--r--nvkm/subdev/fb/sddr3.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/nvkm/subdev/fb/sddr3.c b/nvkm/subdev/fb/sddr3.c
index f84c6542c..3d77fc5ad 100644
--- a/nvkm/subdev/fb/sddr3.c
+++ b/nvkm/subdev/fb/sddr3.c
@@ -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 |