aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2015-08-20 00:54:23 -0400
committerBen Skeggs <bskeggs@redhat.com>2015-08-27 22:40:48 -0400
commit7e8820fed712c6de1933dcc91edbf08dcec74925 (patch)
treeee45808ba397e5bfa42014be73178d47dfba0b34
parent2b700825e7a7702fb862edba1262c98040dc1bf6 (diff)
drm/nouveau/device: cleaner abstraction for device resource functions
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r--drivers/gpu/drm/nouveau/include/nvkm/core/device.h8
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_bo.c7
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_chan.c3
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_display.c3
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_ttm.c5
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/engine/device/base.c34
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c16
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c27
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/engine/device/user.c4
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c2
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c2
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.c2
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.c2
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.c2
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.c4
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/devinit/fbmem.h4
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c6
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c2
18 files changed, 71 insertions, 62 deletions
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h
index b4974505af05..1fd0a07faadc 100644
--- a/drivers/gpu/drm/nouveau/include/nvkm/core/device.h
+++ b/drivers/gpu/drm/nouveau/include/nvkm/core/device.h
@@ -148,6 +148,8 @@ struct nvkm_device_func {
148 int (*preinit)(struct nvkm_device *); 148 int (*preinit)(struct nvkm_device *);
149 int (*init)(struct nvkm_device *); 149 int (*init)(struct nvkm_device *);
150 void (*fini)(struct nvkm_device *, bool suspend); 150 void (*fini)(struct nvkm_device *, bool suspend);
151 resource_size_t (*resource_addr)(struct nvkm_device *, unsigned bar);
152 resource_size_t (*resource_size)(struct nvkm_device *, unsigned bar);
151}; 153};
152 154
153struct nvkm_device_quirk { 155struct nvkm_device_quirk {
@@ -242,12 +244,6 @@ nv_device_base(struct nvkm_device *device)
242 &device->platformdev->dev; 244 &device->platformdev->dev;
243} 245}
244 246
245resource_size_t
246nv_device_resource_start(struct nvkm_device *device, unsigned int bar);
247
248resource_size_t
249nv_device_resource_len(struct nvkm_device *device, unsigned int bar);
250
251struct platform_device; 247struct platform_device;
252 248
253enum nv_bus_type { 249enum nv_bus_type {
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index bd33d547d574..6024edf8529e 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -1351,6 +1351,7 @@ nouveau_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem)
1351{ 1351{
1352 struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type]; 1352 struct ttm_mem_type_manager *man = &bdev->man[mem->mem_type];
1353 struct nouveau_drm *drm = nouveau_bdev(bdev); 1353 struct nouveau_drm *drm = nouveau_bdev(bdev);
1354 struct nvkm_device *device = nvxx_device(&drm->device);
1354 struct nvkm_mem *node = mem->mm_node; 1355 struct nvkm_mem *node = mem->mm_node;
1355 int ret; 1356 int ret;
1356 1357
@@ -1379,7 +1380,7 @@ nouveau_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_mem_reg *mem)
1379 /* fallthrough, tiled memory */ 1380 /* fallthrough, tiled memory */
1380 case TTM_PL_VRAM: 1381 case TTM_PL_VRAM:
1381 mem->bus.offset = mem->start << PAGE_SHIFT; 1382 mem->bus.offset = mem->start << PAGE_SHIFT;
1382 mem->bus.base = nv_device_resource_start(nvxx_device(&drm->device), 1); 1383 mem->bus.base = device->func->resource_addr(device, 1);
1383 mem->bus.is_iomem = true; 1384 mem->bus.is_iomem = true;
1384 if (drm->device.info.family >= NV_DEVICE_INFO_V0_TESLA) { 1385 if (drm->device.info.family >= NV_DEVICE_INFO_V0_TESLA) {
1385 struct nvkm_bar *bar = nvxx_bar(&drm->device); 1386 struct nvkm_bar *bar = nvxx_bar(&drm->device);
@@ -1419,8 +1420,8 @@ nouveau_ttm_fault_reserve_notify(struct ttm_buffer_object *bo)
1419{ 1420{
1420 struct nouveau_drm *drm = nouveau_bdev(bo->bdev); 1421 struct nouveau_drm *drm = nouveau_bdev(bo->bdev);
1421 struct nouveau_bo *nvbo = nouveau_bo(bo); 1422 struct nouveau_bo *nvbo = nouveau_bo(bo);
1422 struct nvif_device *device = &drm->device; 1423 struct nvkm_device *device = nvxx_device(&drm->device);
1423 u32 mappable = nv_device_resource_len(nvxx_device(device), 1) >> PAGE_SHIFT; 1424 u32 mappable = device->func->resource_size(device, 1) >> PAGE_SHIFT;
1424 int i, ret; 1425 int i, ret;
1425 1426
1426 /* as long as the bo isn't in vram, and isn't tiled, we've got 1427 /* as long as the bo isn't in vram, and isn't tiled, we've got
diff --git a/drivers/gpu/drm/nouveau/nouveau_chan.c b/drivers/gpu/drm/nouveau/nouveau_chan.c
index 8c88c5e5bf0b..f59c4f5716cc 100644
--- a/drivers/gpu/drm/nouveau/nouveau_chan.c
+++ b/drivers/gpu/drm/nouveau/nouveau_chan.c
@@ -150,7 +150,8 @@ nouveau_channel_prep(struct nouveau_drm *drm, struct nvif_device *device,
150 */ 150 */
151 args.target = NV_DMA_V0_TARGET_PCI; 151 args.target = NV_DMA_V0_TARGET_PCI;
152 args.access = NV_DMA_V0_ACCESS_RDWR; 152 args.access = NV_DMA_V0_ACCESS_RDWR;
153 args.start = nv_device_resource_start(nvxx_device(device), 1); 153 args.start = nvxx_device(device)->func->
154 resource_addr(nvxx_device(device), 1);
154 args.limit = args.start + device->info.ram_user - 1; 155 args.limit = args.start + device->info.ram_user - 1;
155 } else { 156 } else {
156 args.target = NV_DMA_V0_TARGET_VRAM; 157 args.target = NV_DMA_V0_TARGET_VRAM;
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c
index 5553caa16b9c..cc6c228e11c8 100644
--- a/drivers/gpu/drm/nouveau/nouveau_display.c
+++ b/drivers/gpu/drm/nouveau/nouveau_display.c
@@ -445,6 +445,7 @@ int
445nouveau_display_create(struct drm_device *dev) 445nouveau_display_create(struct drm_device *dev)
446{ 446{
447 struct nouveau_drm *drm = nouveau_drm(dev); 447 struct nouveau_drm *drm = nouveau_drm(dev);
448 struct nvkm_device *device = nvxx_device(&drm->device);
448 struct nouveau_display *disp; 449 struct nouveau_display *disp;
449 int ret; 450 int ret;
450 451
@@ -457,7 +458,7 @@ nouveau_display_create(struct drm_device *dev)
457 drm_mode_create_dvi_i_properties(dev); 458 drm_mode_create_dvi_i_properties(dev);
458 459
459 dev->mode_config.funcs = &nouveau_mode_config_funcs; 460 dev->mode_config.funcs = &nouveau_mode_config_funcs;
460 dev->mode_config.fb_base = nv_device_resource_start(nvxx_device(&drm->device), 1); 461 dev->mode_config.fb_base = device->func->resource_addr(device, 1);
461 462
462 dev->mode_config.min_width = 0; 463 dev->mode_config.min_width = 0;
463 dev->mode_config.min_height = 0; 464 dev->mode_config.min_height = 0;
diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
index d8999f71a798..1fd70d6900cf 100644
--- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
@@ -335,6 +335,7 @@ nouveau_ttm_global_release(struct nouveau_drm *drm)
335int 335int
336nouveau_ttm_init(struct nouveau_drm *drm) 336nouveau_ttm_init(struct nouveau_drm *drm)
337{ 337{
338 struct nvkm_device *device = nvxx_device(&drm->device);
338 struct drm_device *dev = drm->dev; 339 struct drm_device *dev = drm->dev;
339 u32 bits; 340 u32 bits;
340 int ret; 341 int ret;
@@ -381,8 +382,8 @@ nouveau_ttm_init(struct nouveau_drm *drm)
381 return ret; 382 return ret;
382 } 383 }
383 384
384 drm->ttm.mtrr = arch_phys_wc_add(nv_device_resource_start(nvxx_device(&drm->device), 1), 385 drm->ttm.mtrr = arch_phys_wc_add(device->func->resource_addr(device, 1),
385 nv_device_resource_len(nvxx_device(&drm->device), 1)); 386 device->func->resource_size(device, 1));
386 387
387 /* GART init */ 388 /* GART init */
388 if (drm->agp.stat != ENABLED) { 389 if (drm->agp.stat != ENABLED) {
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
index 5fab8384d1f4..b8d46144e68a 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
@@ -2262,36 +2262,6 @@ fail:
2262 return ret; 2262 return ret;
2263} 2263}
2264 2264
2265resource_size_t
2266nv_device_resource_start(struct nvkm_device *device, unsigned int bar)
2267{
2268 if (nv_device_is_pci(device)) {
2269 return pci_resource_start(device->pdev, bar);
2270 } else {
2271 struct resource *res;
2272 res = platform_get_resource(device->platformdev,
2273 IORESOURCE_MEM, bar);
2274 if (!res)
2275 return 0;
2276 return res->start;
2277 }
2278}
2279
2280resource_size_t
2281nv_device_resource_len(struct nvkm_device *device, unsigned int bar)
2282{
2283 if (nv_device_is_pci(device)) {
2284 return pci_resource_len(device->pdev, bar);
2285 } else {
2286 struct resource *res;
2287 res = platform_get_resource(device->platformdev,
2288 IORESOURCE_MEM, bar);
2289 if (!res)
2290 return 0;
2291 return resource_size(res);
2292 }
2293}
2294
2295void 2265void
2296nvkm_device_del(struct nvkm_device **pdevice) 2266nvkm_device_del(struct nvkm_device **pdevice)
2297{ 2267{
@@ -2363,8 +2333,8 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
2363 if (ret) 2333 if (ret)
2364 goto done; 2334 goto done;
2365 2335
2366 mmio_base = nv_device_resource_start(device, 0); 2336 mmio_base = device->func->resource_addr(device, 0);
2367 mmio_size = nv_device_resource_len(device, 0); 2337 mmio_size = device->func->resource_size(device, 0);
2368 2338
2369 /* identify the chipset, and determine classes of subdev/engines */ 2339 /* identify the chipset, and determine classes of subdev/engines */
2370 if (detect) { 2340 if (detect) {
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c
index 1a1d1e584a7f..75612faaca2c 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c
@@ -30,6 +30,20 @@ nvkm_device_pci(struct nvkm_device *device)
30 return container_of(device, struct nvkm_device_pci, device); 30 return container_of(device, struct nvkm_device_pci, device);
31} 31}
32 32
33static resource_size_t
34nvkm_device_pci_resource_addr(struct nvkm_device *device, unsigned bar)
35{
36 struct nvkm_device_pci *pdev = nvkm_device_pci(device);
37 return pci_resource_start(pdev->pdev, bar);
38}
39
40static resource_size_t
41nvkm_device_pci_resource_size(struct nvkm_device *device, unsigned bar)
42{
43 struct nvkm_device_pci *pdev = nvkm_device_pci(device);
44 return pci_resource_len(pdev->pdev, bar);
45}
46
33static void 47static void
34nvkm_device_pci_fini(struct nvkm_device *device, bool suspend) 48nvkm_device_pci_fini(struct nvkm_device *device, bool suspend)
35{ 49{
@@ -68,6 +82,8 @@ nvkm_device_pci_func = {
68 .dtor = nvkm_device_pci_dtor, 82 .dtor = nvkm_device_pci_dtor,
69 .preinit = nvkm_device_pci_preinit, 83 .preinit = nvkm_device_pci_preinit,
70 .fini = nvkm_device_pci_fini, 84 .fini = nvkm_device_pci_fini,
85 .resource_addr = nvkm_device_pci_resource_addr,
86 .resource_size = nvkm_device_pci_resource_size,
71}; 87};
72 88
73int 89int
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
index 2587a17981b2..f4bc11c1671f 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
@@ -26,9 +26,30 @@
26#include "priv.h" 26#include "priv.h"
27 27
28static struct nvkm_device_tegra * 28static struct nvkm_device_tegra *
29nvkm_device_tegra(struct nvkm_device *obj) 29nvkm_device_tegra(struct nvkm_device *device)
30{ 30{
31 return container_of(obj, struct nvkm_device_tegra, device); 31 return container_of(device, struct nvkm_device_tegra, device);
32}
33
34static struct resource *
35nvkm_device_tegra_resource(struct nvkm_device *device, unsigned bar)
36{
37 struct nvkm_device_tegra *tdev = nvkm_device_tegra(device);
38 return platform_get_resource(tdev->pdev, IORESOURCE_MEM, bar);
39}
40
41static resource_size_t
42nvkm_device_tegra_resource_addr(struct nvkm_device *device, unsigned bar)
43{
44 struct resource *res = nvkm_device_tegra_resource(device, bar);
45 return res ? res->start : 0;
46}
47
48static resource_size_t
49nvkm_device_tegra_resource_size(struct nvkm_device *device, unsigned bar)
50{
51 struct resource *res = nvkm_device_tegra_resource(device, bar);
52 return res ? resource_size(res) : 0;
32} 53}
33 54
34static irqreturn_t 55static irqreturn_t
@@ -79,6 +100,8 @@ nvkm_device_tegra_func = {
79 .tegra = nvkm_device_tegra, 100 .tegra = nvkm_device_tegra,
80 .init = nvkm_device_tegra_init, 101 .init = nvkm_device_tegra_init,
81 .fini = nvkm_device_tegra_fini, 102 .fini = nvkm_device_tegra_fini,
103 .resource_addr = nvkm_device_tegra_resource_addr,
104 .resource_size = nvkm_device_tegra_resource_size,
82}; 105};
83 106
84int 107int
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c
index a948960cc056..eddf9b1d3340 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c
@@ -198,8 +198,8 @@ nvkm_udevice_map(struct nvkm_object *object, u64 *addr, u32 *size)
198{ 198{
199 struct nvkm_udevice *udev = nvkm_udevice(object); 199 struct nvkm_udevice *udev = nvkm_udevice(object);
200 struct nvkm_device *device = udev->device; 200 struct nvkm_device *device = udev->device;
201 *addr = nv_device_resource_start(device, 0); 201 *addr = device->func->resource_addr(device, 0);
202 *size = nv_device_resource_len(device, 0); 202 *size = device->func->resource_size(device, 0);
203 return 0; 203 return 0;
204} 204}
205 205
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c
index c9cbfbd2a1ae..01803c0679b6 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c
@@ -195,7 +195,7 @@ nv50_disp_chan_map(struct nvkm_object *object, u64 *addr, u32 *size)
195 struct nv50_disp_chan *chan = nv50_disp_chan(object); 195 struct nv50_disp_chan *chan = nv50_disp_chan(object);
196 struct nv50_disp *disp = chan->root->disp; 196 struct nv50_disp *disp = chan->root->disp;
197 struct nvkm_device *device = disp->base.engine.subdev.device; 197 struct nvkm_device *device = disp->base.engine.subdev.device;
198 *addr = nv_device_resource_start(device, 0) + 198 *addr = device->func->resource_addr(device, 0) +
199 0x640000 + (chan->chid * 0x1000); 199 0x640000 + (chan->chid * 0x1000);
200 *size = 0x001000; 200 *size = 0x001000;
201 return 0; 201 return 0;
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c
index 9921482fc162..dc6d4678f228 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.c
@@ -406,7 +406,7 @@ nvkm_fifo_chan_ctor(const struct nvkm_fifo_chan_func *func,
406 spin_unlock_irqrestore(&fifo->lock, flags); 406 spin_unlock_irqrestore(&fifo->lock, flags);
407 407
408 /* determine address of this channel's user registers */ 408 /* determine address of this channel's user registers */
409 chan->addr = nv_device_resource_start(device, bar) + 409 chan->addr = device->func->resource_addr(device, bar) +
410 base + user * chan->chid; 410 base + user * chan->chid;
411 chan->size = user; 411 chan->size = user;
412 412
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.c
index 32ea28a71a41..5caef65d3c6e 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.c
@@ -296,7 +296,7 @@ nv20_gr_init(struct nvkm_gr *base)
296 nvkm_wr32(device, NV10_PGRAPH_SURFACE, tmp); 296 nvkm_wr32(device, NV10_PGRAPH_SURFACE, tmp);
297 297
298 /* begin RAM config */ 298 /* begin RAM config */
299 vramsz = nv_device_resource_len(device, 1) - 1; 299 vramsz = device->func->resource_size(device, 1) - 1;
300 nvkm_wr32(device, 0x4009A4, nvkm_rd32(device, 0x100200)); 300 nvkm_wr32(device, 0x4009A4, nvkm_rd32(device, 0x100200));
301 nvkm_wr32(device, 0x4009A8, nvkm_rd32(device, 0x100204)); 301 nvkm_wr32(device, 0x4009A8, nvkm_rd32(device, 0x100204));
302 nvkm_wr32(device, NV10_PGRAPH_RDI_INDEX, 0x00EA0000); 302 nvkm_wr32(device, NV10_PGRAPH_RDI_INDEX, 0x00EA0000);
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.c
index 7987df18415b..ffa902ece872 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.c
@@ -385,7 +385,7 @@ nv40_gr_init(struct nvkm_gr *base)
385 } 385 }
386 386
387 /* begin RAM config */ 387 /* begin RAM config */
388 vramsz = nv_device_resource_len(device, 1) - 1; 388 vramsz = device->func->resource_size(device, 1) - 1;
389 switch (device->chipset) { 389 switch (device->chipset) {
390 case 0x40: 390 case 0x40:
391 nvkm_wr32(device, 0x4009A4, nvkm_rd32(device, 0x100200)); 391 nvkm_wr32(device, 0x4009A4, nvkm_rd32(device, 0x100200));
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.c
index 2eb0a370a3a0..c794b2c2d21e 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.c
@@ -58,7 +58,7 @@ gf100_bar_ctor_vm(struct gf100_bar *bar, struct gf100_bar_vm *bar_vm,
58 if (ret) 58 if (ret)
59 return ret; 59 return ret;
60 60
61 bar_len = nv_device_resource_len(device, bar_nr); 61 bar_len = device->func->resource_size(device, bar_nr);
62 62
63 ret = nvkm_vm_new(device, 0, bar_len, 0, key, &vm); 63 ret = nvkm_vm_new(device, 0, bar_len, 0, key, &vm);
64 if (ret) 64 if (ret)
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.c
index fac54f97217e..370dcd8ff7b5 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.c
@@ -82,7 +82,7 @@ nv50_bar_oneinit(struct nvkm_bar *base)
82 82
83 /* BAR3 */ 83 /* BAR3 */
84 start = 0x0100000000ULL; 84 start = 0x0100000000ULL;
85 limit = start + nv_device_resource_len(device, 3); 85 limit = start + device->func->resource_size(device, 3);
86 86
87 ret = nvkm_vm_new(device, start, limit, start, &bar3_lock, &vm); 87 ret = nvkm_vm_new(device, start, limit, start, &bar3_lock, &vm);
88 if (ret) 88 if (ret)
@@ -115,7 +115,7 @@ nv50_bar_oneinit(struct nvkm_bar *base)
115 115
116 /* BAR1 */ 116 /* BAR1 */
117 start = 0x0000000000ULL; 117 start = 0x0000000000ULL;
118 limit = start + nv_device_resource_len(device, 1); 118 limit = start + device->func->resource_size(device, 1);
119 119
120 ret = nvkm_vm_new(device, start, limit--, start, &bar1_lock, &vm); 120 ret = nvkm_vm_new(device, start, limit--, start, &bar1_lock, &vm);
121 if (ret) 121 if (ret)
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/fbmem.h b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/fbmem.h
index 4e484c40b5c6..6c5bbff12eb4 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/fbmem.h
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/fbmem.h
@@ -47,8 +47,8 @@
47static inline struct io_mapping * 47static inline struct io_mapping *
48fbmem_init(struct nvkm_device *dev) 48fbmem_init(struct nvkm_device *dev)
49{ 49{
50 return io_mapping_create_wc(nv_device_resource_start(dev, 1), 50 return io_mapping_create_wc(dev->func->resource_addr(dev, 1),
51 nv_device_resource_len(dev, 1)); 51 dev->func->resource_size(dev, 1));
52} 52}
53 53
54static inline void 54static inline void
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c
index a170ff9b32e7..c0543875e490 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.c
@@ -243,13 +243,13 @@ nv40_instmem_new(struct nvkm_device *device, int index,
243 *pimem = &imem->base; 243 *pimem = &imem->base;
244 244
245 /* map bar */ 245 /* map bar */
246 if (nv_device_resource_len(device, 2)) 246 if (device->func->resource_size(device, 2))
247 bar = 2; 247 bar = 2;
248 else 248 else
249 bar = 3; 249 bar = 3;
250 250
251 imem->iomem = ioremap(nv_device_resource_start(device, bar), 251 imem->iomem = ioremap(device->func->resource_addr(device, bar),
252 nv_device_resource_len(device, bar)); 252 device->func->resource_size(device, bar));
253 if (!imem->iomem) { 253 if (!imem->iomem) {
254 nvkm_error(&imem->base.subdev, "unable to map PRAMIN BAR\n"); 254 nvkm_error(&imem->base.subdev, "unable to map PRAMIN BAR\n");
255 return -EFAULT; 255 return -EFAULT;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c
index ec5020e3fc42..6d512c062ae3 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.c
@@ -81,7 +81,7 @@ nv50_instobj_boot(struct nvkm_memory *memory, struct nvkm_vm *vm)
81 81
82 ret = nvkm_vm_get(vm, size, 12, NV_MEM_ACCESS_RW, &iobj->bar); 82 ret = nvkm_vm_get(vm, size, 12, NV_MEM_ACCESS_RW, &iobj->bar);
83 if (ret == 0) { 83 if (ret == 0) {
84 map = ioremap(nv_device_resource_start(device, 3) + 84 map = ioremap(device->func->resource_addr(device, 3) +
85 (u32)iobj->bar.offset, size); 85 (u32)iobj->bar.offset, size);
86 if (map) { 86 if (map) {
87 nvkm_memory_map(memory, &iobj->bar, 0); 87 nvkm_memory_map(memory, &iobj->bar, 0);