In correspondence with the other ram_calc implementations.

Signed-off-by: Roy Spliet <nouv...@spliet.org>
---
 drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c | 37 ++++++++++++-----------
 1 file changed, 19 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c 
b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c
index 093223d..fffd01a 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.c
@@ -133,21 +133,22 @@ gf100_ram_calc(struct nvkm_ram *base, u32 freq)
        struct nvkm_device *device = subdev->device;
        struct nvkm_clk *clk = device->clk;
        struct nvkm_bios *bios = device->bios;
-       struct nvbios_ramcfg cfg;
-       u8  ver, cnt, len, strap;
-       struct {
-               u32 data;
-               u8  size;
-       } rammap, ramcfg, timing;
+       struct nvkm_ram_data *next;
+       u8  ver, hdr, cnt, len, strap;
+       u32 data;
        int ref, div, out;
        int from, mode;
        int N1, M1, P;
        int ret;
 
+       next = &ram->base.target;
+       next->freq = freq;
+       ram->base.next = next;
+
        /* lookup memory config data relevant to the target frequency */
-       rammap.data = nvbios_rammapEm(bios, freq / 1000, &ver, &rammap.size,
-                                     &cnt, &ramcfg.size, &cfg);
-       if (!rammap.data || ver != 0x10 || rammap.size < 0x0e) {
+       data = nvbios_rammapEm(bios, freq / 1000, &ver, &hdr,
+                                     &cnt, &len, &next->bios);
+       if (!data || ver != 0x10 || len < 0x0e) {
                nvkm_error(subdev, "invalid/missing rammap entry\n");
                return -EINVAL;
        }
@@ -159,23 +160,23 @@ gf100_ram_calc(struct nvkm_ram *base, u32 freq)
                return -EINVAL;
        }
 
-       ramcfg.data = rammap.data + rammap.size + (strap * ramcfg.size);
-       if (!ramcfg.data || ver != 0x10 || ramcfg.size < 0x0e) {
+       data = nvbios_rammapSp(bios, data, ver, hdr, cnt, len, strap,
+                                      &ver, &hdr, &next->bios);
+       if (!data || ver != 0x10 || hdr < 0x0e) {
                nvkm_error(subdev, "invalid/missing ramcfg entry\n");
                return -EINVAL;
        }
 
        /* lookup memory timings, if bios says they're present */
-       strap = nvbios_rd08(bios, ramcfg.data + 0x01);
-       if (strap != 0xff) {
-               timing.data = nvbios_timingEe(bios, strap, &ver, &timing.size,
-                                             &cnt, &len);
-               if (!timing.data || ver != 0x10 || timing.size < 0x19) {
+       strap = nvbios_rd08(bios, data + 0x01);
+       if (next->bios.ramcfg_timing != 0xff) {
+               data = nvbios_timingEp(bios, next->bios.ramcfg_timing,
+                                      &ver, &hdr, &cnt, &len,
+                                      &next->bios);
+               if (!data || ver != 0x10 || hdr < 0x17) {
                        nvkm_error(subdev, "invalid/missing timing entry\n");
                        return -EINVAL;
                }
-       } else {
-               timing.data = 0;
        }
 
        ret = ram_init(fuc, ram->base.fb);
-- 
2.9.3

_______________________________________________
Nouveau mailing list
Nouveau@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to