summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoy Spliet <rspliet@eclipso.eu>2015-05-24 10:43:59 +0200
committerBen Skeggs <bskeggs@redhat.com>2015-06-03 10:49:28 +1000
commitbfa15894f8e02c7b0be0bf0d0cd5497001c7b610 (patch)
treea61e8935c6f0049ad65147442073b1a2f68ef748
parentad7afef970d21daf07e7217045fb423244ba9353 (diff)
downloadnouveau-bfa15894f8e02c7b0be0bf0d0cd5497001c7b610.tar.gz
bios/ramcfg: Separate out RON pull value
Signed-off-by: Roy Spliet <rspliet@eclipso.eu> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r--drm/nouveau/include/nvkm/subdev/bios/ramcfg.h1
-rw-r--r--drm/nouveau/nvkm/subdev/bios/rammap.c3
-rw-r--r--drm/nouveau/nvkm/subdev/bios/timing.c2
-rw-r--r--drm/nouveau/nvkm/subdev/fb/gddr3.c6
4 files changed, 9 insertions, 3 deletions
diff --git a/drm/nouveau/include/nvkm/subdev/bios/ramcfg.h b/drm/nouveau/include/nvkm/subdev/bios/ramcfg.h
index 26e233a7b..3a9abd38a 100644
--- a/drm/nouveau/include/nvkm/subdev/bios/ramcfg.h
+++ b/drm/nouveau/include/nvkm/subdev/bios/ramcfg.h
@@ -38,6 +38,7 @@ struct nvbios_ramcfg {
unsigned ramcfg_hdr;
unsigned ramcfg_timing;
unsigned ramcfg_DLLoff;
+ unsigned ramcfg_RON;
union {
struct {
unsigned ramcfg_00_03_01:1;
diff --git a/drm/nouveau/nvkm/subdev/bios/rammap.c b/drm/nouveau/nvkm/subdev/bios/rammap.c
index 29ba85387..1abd9fe41 100644
--- a/drm/nouveau/nvkm/subdev/bios/rammap.c
+++ b/drm/nouveau/nvkm/subdev/bios/rammap.c
@@ -164,12 +164,13 @@ nvbios_rammapSp_from_perf(struct nvkm_bios *bios, u32 data, u8 size, int idx,
if (size < 11)
return 0x00000000;
+ p->ramcfg_ver = 0;
p->ramcfg_timing = nv_ro08(bios, data + 0x01);
p->ramcfg_00_03_01 = (nv_ro08(bios, data + 0x03) & 0x01) >> 0;
p->ramcfg_00_03_02 = (nv_ro08(bios, data + 0x03) & 0x02) >> 1;
p->ramcfg_DLLoff = (nv_ro08(bios, data + 0x03) & 0x04) >> 2;
p->ramcfg_00_03_08 = (nv_ro08(bios, data + 0x03) & 0x08) >> 3;
- p->ramcfg_00_03_10 = (nv_ro08(bios, data + 0x03) & 0x10) >> 4;
+ p->ramcfg_RON = (nv_ro08(bios, data + 0x03) & 0x10) >> 3;
p->ramcfg_00_04_02 = (nv_ro08(bios, data + 0x04) & 0x02) >> 1;
p->ramcfg_00_04_04 = (nv_ro08(bios, data + 0x04) & 0x04) >> 2;
p->ramcfg_00_04_20 = (nv_ro08(bios, data + 0x04) & 0x20) >> 5;
diff --git a/drm/nouveau/nvkm/subdev/bios/timing.c b/drm/nouveau/nvkm/subdev/bios/timing.c
index 763fd29a5..bacd43321 100644
--- a/drm/nouveau/nvkm/subdev/bios/timing.c
+++ b/drm/nouveau/nvkm/subdev/bios/timing.c
@@ -102,6 +102,8 @@ nvbios_timingEp(struct nvkm_bios *bios, int idx,
p->timing_10_RRD = nv_ro08(bios, data + 0x0c);
p->timing_10_13 = nv_ro08(bios, data + 0x0d);
p->timing_10_ODT = nv_ro08(bios, data + 0x0e) & 0x07;
+ if (p->ramcfg_ver >= 0x10)
+ p->ramcfg_RON = nv_ro08(bios, data + 0x0e) & 0x07;
p->timing_10_24 = 0xff;
p->timing_10_21 = 0;
diff --git a/drm/nouveau/nvkm/subdev/fb/gddr3.c b/drm/nouveau/nvkm/subdev/fb/gddr3.c
index e1d11f709..8d759f8a8 100644
--- a/drm/nouveau/nvkm/subdev/fb/gddr3.c
+++ b/drm/nouveau/nvkm/subdev/fb/gddr3.c
@@ -70,7 +70,7 @@ ramgddr3_wr_lo[] = {
int
nvkm_gddr3_calc(struct nvkm_ram *ram)
{
- int CL, WR, CWL, DLL = 0, ODT = 0, hi;
+ int CL, WR, CWL, DLL = 0, ODT = 0, RON, hi;
switch (ram->next->bios.timing_ver) {
case 0x10:
@@ -79,6 +79,7 @@ nvkm_gddr3_calc(struct nvkm_ram *ram)
WR = ram->next->bios.timing_10_WR;
DLL = !ram->next->bios.ramcfg_DLLoff;
ODT = ram->next->bios.timing_10_ODT;
+ RON = ram->next->bios.ramcfg_RON;
break;
case 0x20:
CWL = (ram->next->bios.timing[1] & 0x00000f80) >> 7;
@@ -89,6 +90,7 @@ nvkm_gddr3_calc(struct nvkm_ram *ram)
ODT = (ram->mr[1] & 0x004) >> 2 |
(ram->mr[1] & 0x040) >> 5 |
(ram->mr[1] & 0x200) >> 7;
+ RON = !(ram->mr[1] & 0x300) >> 8;
break;
default:
return -ENOSYS;
@@ -107,7 +109,7 @@ nvkm_gddr3_calc(struct nvkm_ram *ram)
ram->mr[1] &= ~0x3fc;
ram->mr[1] |= (ODT & 0x03) << 2;
- ram->mr[1] |= (ODT & 0x03) << 8;
+ ram->mr[1] |= (RON & 0x03) << 8;
ram->mr[1] |= (WR & 0x03) << 4;
ram->mr[1] |= (WR & 0x04) << 5;
ram->mr[1] |= !DLL << 6;