summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2014-09-03 16:25:47 +1000
committerBen Skeggs <bskeggs@redhat.com>2014-10-02 13:25:44 +1000
commit4d4fbb14efa19b3cd638ca6d1772c88a12228956 (patch)
treec9e9e10df621d7d080d630525d1aaf6c2fd8645a
parentc0d66b3b8ed56f57b79a1b36bb75d604e49d2d2d (diff)
downloadnouveau-4d4fbb14efa19b3cd638ca6d1772c88a12228956.tar.gz
bios: parse another large chunk of random memory config data
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r--nvkm/include/subdev/bios/ramcfg.h11
-rw-r--r--nvkm/subdev/bios/rammap.c14
2 files changed, 24 insertions, 1 deletions
diff --git a/nvkm/include/subdev/bios/ramcfg.h b/nvkm/include/subdev/bios/ramcfg.h
index bae3ba2df..7e5b06733 100644
--- a/nvkm/include/subdev/bios/ramcfg.h
+++ b/nvkm/include/subdev/bios/ramcfg.h
@@ -11,6 +11,17 @@ struct nvbios_ramcfg {
unsigned rammap_11_08_01:1;
unsigned rammap_11_08_0c:2;
unsigned rammap_11_08_10:1;
+ unsigned rammap_11_09_01ff:9;
+ unsigned rammap_11_0a_03fe:9;
+ unsigned rammap_11_0a_0400:1;
+ unsigned rammap_11_0a_0800:1;
+ unsigned rammap_11_0b_01f0:5;
+ unsigned rammap_11_0b_0200:1;
+ unsigned rammap_11_0b_0400:1;
+ unsigned rammap_11_0b_0800:1;
+ unsigned rammap_11_0d:8;
+ unsigned rammap_11_0e:8;
+ unsigned rammap_11_0f:8;
unsigned rammap_11_11_0c:2;
unsigned ramcfg_ver;
diff --git a/nvkm/subdev/bios/rammap.c b/nvkm/subdev/bios/rammap.c
index 775f7735e..8b0dda5de 100644
--- a/nvkm/subdev/bios/rammap.c
+++ b/nvkm/subdev/bios/rammap.c
@@ -79,7 +79,7 @@ nvbios_rammapEp(struct nouveau_bios *bios, int idx,
u8 *ver, u8 *hdr, u8 *cnt, u8 *len,
struct nvbios_ramcfg *p)
{
- u32 data = nvbios_rammapEe(bios, idx, ver, hdr, cnt, len);
+ u32 data = nvbios_rammapEe(bios, idx, ver, hdr, cnt, len), temp;
memset(p, 0x00, sizeof(*p));
p->rammap_ver = *ver;
p->rammap_hdr = *hdr;
@@ -90,6 +90,18 @@ nvbios_rammapEp(struct nouveau_bios *bios, int idx,
p->rammap_11_08_01 = (nv_ro08(bios, data + 0x08) & 0x01) >> 0;
p->rammap_11_08_0c = (nv_ro08(bios, data + 0x08) & 0x0c) >> 2;
p->rammap_11_08_10 = (nv_ro08(bios, data + 0x08) & 0x10) >> 4;
+ temp = nv_ro32(bios, data + 0x09);
+ p->rammap_11_09_01ff = (temp & 0x000001ff) >> 0;
+ p->rammap_11_0a_03fe = (temp & 0x0003fe00) >> 9;
+ p->rammap_11_0a_0400 = (temp & 0x00040000) >> 18;
+ p->rammap_11_0a_0800 = (temp & 0x00080000) >> 19;
+ p->rammap_11_0b_01f0 = (temp & 0x01f00000) >> 20;
+ p->rammap_11_0b_0200 = (temp & 0x02000000) >> 25;
+ p->rammap_11_0b_0400 = (temp & 0x04000000) >> 26;
+ p->rammap_11_0b_0800 = (temp & 0x08000000) >> 27;
+ p->rammap_11_0d = nv_ro08(bios, data + 0x0d);
+ p->rammap_11_0e = nv_ro08(bios, data + 0x0e);
+ p->rammap_11_0f = nv_ro08(bios, data + 0x0f);
p->rammap_11_11_0c = (nv_ro08(bios, data + 0x11) & 0x0c) >> 2;
break;
default: