drm/nouveau/fb/ram/gt215: allocate training buffer with nvkm_ram_get()
authorBen Skeggs <bskeggs@redhat.com>
Tue, 31 Oct 2017 17:56:19 +0000 (03:56 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 2 Nov 2017 03:32:23 +0000 (13:32 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.c

index f106643..9bace6c 100644 (file)
@@ -26,6 +26,7 @@
 #include "ram.h"
 #include "ramfuc.h"
 
+#include <core/memory.h>
 #include <core/option.h>
 #include <subdev/bios.h>
 #include <subdev/bios/M0205.h>
@@ -86,7 +87,7 @@ struct gt215_ltrain {
        u32 r_100720;
        u32 r_1111e0;
        u32 r_111400;
-       struct nvkm_mem *mem;
+       struct nvkm_memory *memory;
 };
 
 struct gt215_ram {
@@ -279,10 +280,10 @@ gt215_link_train_init(struct gt215_ram *ram)
        struct gt215_ltrain *train = &ram->ltrain;
        struct nvkm_device *device = ram->base.fb->subdev.device;
        struct nvkm_bios *bios = device->bios;
-       struct nvkm_mem *mem;
        struct nvbios_M0205E M0205E;
        u8 ver, hdr, cnt, len;
        u32 r001700;
+       u64 addr;
        int ret, i = 0;
 
        train->state = NVA3_TRAIN_UNSUPPORTED;
@@ -297,14 +298,14 @@ gt215_link_train_init(struct gt215_ram *ram)
 
        train->state = NVA3_TRAIN_ONCE;
 
-       ret = ram->base.func->get(&ram->base, 0x8000, 0x10000, 0, 0x800,
-                                 &ram->ltrain.mem);
+       ret = nvkm_ram_get(device, NVKM_RAM_MM_NORMAL, 0x01, 16, 0x8000,
+                          true, true, &ram->ltrain.memory);
        if (ret)
                return ret;
 
-       mem = ram->ltrain.mem;
+       addr = nvkm_memory_addr(ram->ltrain.memory);
 
-       nvkm_wr32(device, 0x100538, 0x10000000 | (mem->offset >> 16));
+       nvkm_wr32(device, 0x100538, 0x10000000 | (addr >> 16));
        nvkm_wr32(device, 0x1005a8, 0x0000ffff);
        nvkm_mask(device, 0x10f800, 0x00000001, 0x00000001);
 
@@ -320,7 +321,7 @@ gt215_link_train_init(struct gt215_ram *ram)
 
        /* And upload the pattern */
        r001700 = nvkm_rd32(device, 0x1700);
-       nvkm_wr32(device, 0x1700, mem->offset >> 16);
+       nvkm_wr32(device, 0x1700, addr >> 16);
        for (i = 0; i < 16; i++)
                nvkm_wr32(device, 0x700000 + (i << 2), pattern[i]);
        for (i = 0; i < 16; i++)
@@ -336,8 +337,7 @@ gt215_link_train_init(struct gt215_ram *ram)
 static void
 gt215_link_train_fini(struct gt215_ram *ram)
 {
-       if (ram->ltrain.mem)
-               ram->base.func->put(&ram->base, &ram->ltrain.mem);
+       nvkm_memory_unref(&ram->ltrain.memory);
 }
 
 /*