drm/nouveau/device: remove pci/platform_device from common struct
authorBen Skeggs <bskeggs@redhat.com>
Thu, 20 Aug 2015 04:54:23 +0000 (14:54 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 28 Aug 2015 02:40:49 +0000 (12:40 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
27 files changed:
drivers/gpu/drm/nouveau/include/nvkm/core/device.h
drivers/gpu/drm/nouveau/nouveau_abi16.c
drivers/gpu/drm/nouveau/nouveau_acpi.c
drivers/gpu/drm/nouveau/nouveau_acpi.h
drivers/gpu/drm/nouveau/nouveau_agp.c
drivers/gpu/drm/nouveau/nouveau_bo.c
drivers/gpu/drm/nouveau/nouveau_sysfs.c
drivers/gpu/drm/nouveau/nouveau_ttm.c
drivers/gpu/drm/nouveau/nv50_display.c
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
drivers/gpu/drm/nouveau/nvkm/engine/device/pci.c
drivers/gpu/drm/nouveau/nvkm/engine/device/priv.h
drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.c
drivers/gpu/drm/nouveau/nvkm/engine/device/user.c
drivers/gpu/drm/nouveau/nvkm/engine/falcon.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
drivers/gpu/drm/nouveau/nvkm/engine/xtensa.c
drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c
drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowacpi.c
drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.c
drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.c
drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c
drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c
drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv04.c
drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv41.c
drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv44.c
drivers/gpu/drm/nouveau/nvkm/subdev/mxm/base.c

index 5741bf228762f26043f9dd68d55439b9d089f52c..773951bfd200ad3fd283151871ef949acf22fb05 100644 (file)
@@ -47,13 +47,21 @@ enum nvkm_devidx {
        NVKM_ENGINE_SEC,
        NVKM_ENGINE_MSPDEC,
 
-       NVKM_SUBDEV_NR,
+       NVKM_SUBDEV_NR
+};
+
+enum nvkm_device_type {
+       NVKM_DEVICE_PCI,
+       NVKM_DEVICE_AGP,
+       NVKM_DEVICE_PCIE,
+       NVKM_DEVICE_TEGRA,
 };
 
 struct nvkm_device {
        const struct nvkm_device_func *func;
        const struct nvkm_device_quirk *quirk;
        struct device *dev;
+       enum nvkm_device_type type;
        u64 handle;
        const char *name;
        const char *cfgopt;
@@ -63,9 +71,6 @@ struct nvkm_device {
        struct mutex mutex;
        int refcount;
 
-       struct pci_dev *pdev;
-       struct platform_device *platformdev;
-
        void __iomem *pri;
 
        struct nvkm_event event;
@@ -150,6 +155,7 @@ struct nvkm_device_func {
        void (*fini)(struct nvkm_device *, bool suspend);
        resource_size_t (*resource_addr)(struct nvkm_device *, unsigned bar);
        resource_size_t (*resource_size)(struct nvkm_device *, unsigned bar);
+       bool cpu_coherent;
 };
 
 struct nvkm_device_quirk {
@@ -220,32 +226,6 @@ int nvkm_device_list(u64 *name, int size);
        _temp;                                                                 \
 })
 
-static inline bool
-nv_device_is_pci(struct nvkm_device *device)
-{
-       return device->pdev != NULL;
-}
-
-static inline bool
-nv_device_is_cpu_coherent(struct nvkm_device *device)
-{
-       return (!IS_ENABLED(CONFIG_ARM) && nv_device_is_pci(device));
-}
-
-static inline struct device *
-nv_device_base(struct nvkm_device *device)
-{
-       return nv_device_is_pci(device) ? &device->pdev->dev :
-                                         &device->platformdev->dev;
-}
-
-struct platform_device;
-
-enum nv_bus_type {
-       NVKM_BUS_PCI,
-       NVKM_BUS_PLATFORM,
-};
-
 void nvkm_device_del(struct nvkm_device **);
 
 struct nvkm_device_oclass {
index 40a903b79343e84dfa74218f2156dfa72666105f..4252e7796c4c1c89f70769f664b020745a37f9c7 100644 (file)
@@ -174,19 +174,19 @@ nouveau_abi16_ioctl_getparam(ABI16_IOCTL_ARGS)
                getparam->value = device->info.chipset;
                break;
        case NOUVEAU_GETPARAM_PCI_VENDOR:
-               if (nv_device_is_pci(nvxx_device(device)))
+               if (nvxx_device(device)->func->pci)
                        getparam->value = dev->pdev->vendor;
                else
                        getparam->value = 0;
                break;
        case NOUVEAU_GETPARAM_PCI_DEVICE:
-               if (nv_device_is_pci(nvxx_device(device)))
+               if (nvxx_device(device)->func->pci)
                        getparam->value = dev->pdev->device;
                else
                        getparam->value = 0;
                break;
        case NOUVEAU_GETPARAM_BUS_TYPE:
-               if (!nv_device_is_pci(nvxx_device(device)))
+               if (!nvxx_device(device)->func->pci)
                        getparam->value = 3;
                else
                if (drm_pci_device_is_agp(dev))
index 622424692b3bddea7fb37e728e32909865da17ee..df2d9818aba3a4ce9d171b3a36cef89f525b893f 100644 (file)
@@ -372,12 +372,12 @@ static int nouveau_rom_call(acpi_handle rom_handle, uint8_t *bios,
        return len;
 }
 
-bool nouveau_acpi_rom_supported(struct pci_dev *pdev)
+bool nouveau_acpi_rom_supported(struct device *dev)
 {
        acpi_status status;
        acpi_handle dhandle, rom_handle;
 
-       dhandle = ACPI_HANDLE(&pdev->dev);
+       dhandle = ACPI_HANDLE(dev);
        if (!dhandle)
                return false;
 
index 74acf0f8778502208cacc24f862c412ef1feed5d..2f03653aff86cf0cb8730acde70b0c965cbf2b8f 100644 (file)
@@ -10,7 +10,7 @@ void nouveau_register_dsm_handler(void);
 void nouveau_unregister_dsm_handler(void);
 void nouveau_switcheroo_optimus_dsm(void);
 int nouveau_acpi_get_bios_chunk(uint8_t *bios, int offset, int len);
-bool nouveau_acpi_rom_supported(struct pci_dev *pdev);
+bool nouveau_acpi_rom_supported(struct device *);
 void *nouveau_acpi_edid(struct drm_device *, struct drm_connector *);
 #else
 static inline bool nouveau_is_optimus(void) { return false; };
@@ -18,7 +18,7 @@ static inline bool nouveau_is_v1_dsm(void) { return false; };
 static inline void nouveau_register_dsm_handler(void) {}
 static inline void nouveau_unregister_dsm_handler(void) {}
 static inline void nouveau_switcheroo_optimus_dsm(void) {}
-static inline bool nouveau_acpi_rom_supported(struct pci_dev *pdev) { return false; }
+static inline bool nouveau_acpi_rom_supported(struct device *dev) { return false; }
 static inline int nouveau_acpi_get_bios_chunk(uint8_t *bios, int offset, int len) { return -EINVAL; }
 static inline void *nouveau_acpi_edid(struct drm_device *dev, struct drm_connector *connector) { return NULL; }
 #endif
index 320f48c41fe0dd00bb51ce45c921b2c4bdc70f4a..c3f3e49e5f8f159f1e8aea00c8ba4284b7983889 100644 (file)
@@ -4,6 +4,8 @@
 #include "nouveau_agp.h"
 #include "nouveau_reg.h"
 
+#include <core/pci.h>
+
 #if __OS_HAS_AGP
 MODULE_PARM_DESC(agpmode, "AGP mode (0 to disable AGP)");
 static int nouveau_agpmode = -1;
@@ -28,6 +30,7 @@ static unsigned long
 get_agp_mode(struct nouveau_drm *drm, const struct drm_agp_info *info)
 {
        struct nvif_device *device = &drm->device;
+       struct pci_dev *pdev = nvxx_device(device)->func->pci(nvxx_device(device))->pdev;
        struct nouveau_agpmode_quirk *quirk = nouveau_agpmode_quirk_list;
        int agpmode = nouveau_agpmode;
        unsigned long mode = info->mode;
@@ -45,8 +48,8 @@ get_agp_mode(struct nouveau_drm *drm, const struct drm_agp_info *info)
        while (agpmode == -1 && quirk->hostbridge_vendor) {
                if (info->id_vendor == quirk->hostbridge_vendor &&
                    info->id_device == quirk->hostbridge_device &&
-                   nvxx_device(device)->pdev->vendor == quirk->chip_vendor &&
-                   nvxx_device(device)->pdev->device == quirk->chip_device) {
+                   pdev->vendor == quirk->chip_vendor &&
+                   pdev->device == quirk->chip_device) {
                        agpmode = quirk->mode;
                        NV_INFO(drm, "Forcing agp mode to %dX. Use agpmode to override.\n",
                                agpmode);
index 6024edf8529e5340c4a5b289b858405a52268164..373fbd2d14ffb9e7a51b610a5e34ed316dbc215a 100644 (file)
@@ -209,7 +209,7 @@ nouveau_bo_new(struct drm_device *dev, int size, int align,
        nvbo->tile_flags = tile_flags;
        nvbo->bo.bdev = &drm->ttm.bdev;
 
-       if (!nv_device_is_cpu_coherent(nvxx_device(&drm->device)))
+       if (!nvxx_device(&drm->device)->func->cpu_coherent)
                nvbo->force_coherent = flags & TTM_PL_FLAG_UNCACHED;
 
        nvbo->page_shift = 12;
@@ -466,8 +466,8 @@ nouveau_bo_sync_for_device(struct nouveau_bo *nvbo)
                return;
 
        for (i = 0; i < ttm_dma->ttm.num_pages; i++)
-               dma_sync_single_for_device(nv_device_base(device),
-                       ttm_dma->dma_address[i], PAGE_SIZE, DMA_TO_DEVICE);
+               dma_sync_single_for_device(device->dev, ttm_dma->dma_address[i],
+                                          PAGE_SIZE, DMA_TO_DEVICE);
 }
 
 void
@@ -486,8 +486,8 @@ nouveau_bo_sync_for_cpu(struct nouveau_bo *nvbo)
                return;
 
        for (i = 0; i < ttm_dma->ttm.num_pages; i++)
-               dma_sync_single_for_cpu(nv_device_base(device),
-                       ttm_dma->dma_address[i], PAGE_SIZE, DMA_FROM_DEVICE);
+               dma_sync_single_for_cpu(device->dev, ttm_dma->dma_address[i],
+                                       PAGE_SIZE, DMA_FROM_DEVICE);
 }
 
 int
@@ -1487,13 +1487,13 @@ nouveau_ttm_tt_populate(struct ttm_tt *ttm)
        drm = nouveau_bdev(ttm->bdev);
        device = nvxx_device(&drm->device);
        dev = drm->dev;
-       pdev = nv_device_base(device);
+       pdev = device->dev;
 
        /*
         * Objects matching this condition have been marked as force_coherent,
         * so use the DMA API for them.
         */
-       if (!nv_device_is_cpu_coherent(device) &&
+       if (!nvxx_device(&drm->device)->func->cpu_coherent &&
            ttm->caching_state == tt_uncached)
                return ttm_dma_populate(ttm_dma, dev->dev);
 
@@ -1552,13 +1552,13 @@ nouveau_ttm_tt_unpopulate(struct ttm_tt *ttm)
        drm = nouveau_bdev(ttm->bdev);
        device = nvxx_device(&drm->device);
        dev = drm->dev;
-       pdev = nv_device_base(device);
+       pdev = device->dev;
 
        /*
         * Objects matching this condition have been marked as force_coherent,
         * so use the DMA API for them.
         */
-       if (!nv_device_is_cpu_coherent(device) &&
+       if (!nvxx_device(&drm->device)->func->cpu_coherent &&
            ttm->caching_state == tt_uncached) {
                ttm_dma_unpopulate(ttm_dma, dev->dev);
                return;
index ce612064fa6a93d3aae2eeb734dc27d156432a0d..d12a5faee047869049d41e1a7a21b3d974a75ad7 100644 (file)
@@ -165,7 +165,7 @@ nouveau_sysfs_fini(struct drm_device *dev)
        struct nvif_device *device = &drm->device;
 
        if (sysfs && sysfs->ctrl.priv) {
-               device_remove_file(nv_device_base(nvxx_device(device)), &dev_attr_pstate);
+               device_remove_file(nvxx_device(device)->dev, &dev_attr_pstate);
                nvif_object_fini(&sysfs->ctrl);
        }
 
@@ -192,7 +192,7 @@ nouveau_sysfs_init(struct drm_device *dev)
                               NVIF_IOCTL_NEW_V0_CONTROL, NULL, 0,
                               &sysfs->ctrl);
        if (ret == 0)
-               device_create_file(nv_device_base(nvxx_device(device)), &dev_attr_pstate);
+               device_create_file(nvxx_device(device)->dev, &dev_attr_pstate);
 
        return 0;
 }
index 1fd70d6900cf7f7cefc79e4e9e92a9fd7e777d51..ba9fd151bd281f459651605b806cb39f420bd8a9 100644 (file)
@@ -341,7 +341,7 @@ nouveau_ttm_init(struct nouveau_drm *drm)
        int ret;
 
        bits = nvxx_mmu(&drm->device)->dma_bits;
-       if (nv_device_is_pci(nvxx_device(&drm->device))) {
+       if (nvxx_device(&drm->device)->func->pci) {
                if (drm->agp.stat == ENABLED ||
                     !pci_dma_supported(dev->pdev, DMA_BIT_MASK(bits)))
                        bits = 32;
index 57b13602b2c5a09d5e04e45e0711e4d1a895fc1d..4ae87aed45054899a8de0ad39fb31d817a3cf1a3 100644 (file)
@@ -210,8 +210,8 @@ nv50_dmac_destroy(struct nv50_dmac *dmac, struct nvif_object *disp)
        nv50_chan_destroy(&dmac->base);
 
        if (dmac->ptr) {
-               struct pci_dev *pdev = nvxx_device(device)->pdev;
-               pci_free_consistent(pdev, PAGE_SIZE, dmac->ptr, dmac->handle);
+               struct device *dev = nvxx_device(device)->dev;
+               dma_free_coherent(dev, PAGE_SIZE, dmac->ptr, dmac->handle);
        }
 }
 
@@ -226,8 +226,8 @@ nv50_dmac_create(struct nvif_device *device, struct nvif_object *disp,
 
        mutex_init(&dmac->lock);
 
-       dmac->ptr = pci_alloc_consistent(nvxx_device(device)->pdev,
-                                        PAGE_SIZE, &dmac->handle);
+       dmac->ptr = dma_alloc_coherent(nvxx_device(device)->dev, PAGE_SIZE,
+                                      &dmac->handle, GFP_KERNEL);
        if (!dmac->ptr)
                return -ENOMEM;
 
index b8d46144e68a6d4e8463282533050a0c5a0aef8b..94a906b8cb88b8a1daf1486a02155b6afe094dca 100644 (file)
@@ -2294,7 +2294,7 @@ nvkm_device_del(struct nvkm_device **pdevice)
 int
 nvkm_device_ctor(const struct nvkm_device_func *func,
                 const struct nvkm_device_quirk *quirk,
-                void *dev, enum nv_bus_type type, u64 handle,
+                struct device *dev, enum nvkm_device_type type, u64 handle,
                 const char *name, const char *cfg, const char *dbg,
                 bool detect, bool mmio, u64 subdev_mask,
                 struct nvkm_device *device)
@@ -2312,16 +2312,8 @@ nvkm_device_ctor(const struct nvkm_device_func *func,
 
        device->func = func;
        device->quirk = quirk;
-       switch (type) {
-       case NVKM_BUS_PCI:
-               device->pdev = dev;
-               device->dev = &device->pdev->dev;
-               break;
-       case NVKM_BUS_PLATFORM:
-               device->platformdev = dev;
-               device->dev = &device->platformdev->dev;
-               break;
-       }
+       device->dev = dev;
+       device->type = type;
        device->handle = handle;
        device->cfgopt = cfg;
        device->dbgopt = dbg;
index 8702a9efc7b4bb2d3fbd9a7427e2fdb769a08f62..9dd1cac81e808e456caa3b5fb31fa6a2bf70a8d4 100644 (file)
@@ -1621,6 +1621,7 @@ nvkm_device_pci_func = {
        .fini = nvkm_device_pci_fini,
        .resource_addr = nvkm_device_pci_resource_addr,
        .resource_size = nvkm_device_pci_resource_size,
+       .cpu_coherent = !IS_ENABLED(CONFIG_ARM),
 };
 
 int
@@ -1671,8 +1672,10 @@ nvkm_device_pci_new(struct pci_dev *pci_dev, const char *cfg, const char *dbg,
        *pdevice = &pdev->device;
        pdev->pdev = pci_dev;
 
-       return nvkm_device_ctor(&nvkm_device_pci_func, quirk,
-                               pci_dev, NVKM_BUS_PCI,
+       return nvkm_device_ctor(&nvkm_device_pci_func, quirk, &pci_dev->dev,
+                               pci_is_pcie(pci_dev) ? NVKM_DEVICE_PCIE :
+                               pci_find_capability(pci_dev, PCI_CAP_ID_AGP) ?
+                               NVKM_DEVICE_AGP : NVKM_DEVICE_PCI,
                                (u64)pci_domain_nr(pci_dev->bus) << 32 |
                                     pci_dev->bus->number << 16 |
                                     PCI_SLOT(pci_dev->devfn) << 8 |
index 6dea6e8fc854771ed6afdd48405bd1e2cde5c0cb..ed3ad2c30e17e295f47c5e962f4215b2b9bcd2c7 100644 (file)
@@ -41,7 +41,7 @@
 
 int  nvkm_device_ctor(const struct nvkm_device_func *,
                      const struct nvkm_device_quirk *,
-                     void *, enum nv_bus_type type, u64 handle,
+                     struct device *, enum nvkm_device_type, u64 handle,
                      const char *name, const char *cfg, const char *dbg,
                      bool detect, bool mmio, u64 subdev_mask,
                      struct nvkm_device *);
index f4bc11c1671feb231407bf13f640760c3c27a082..ada73e13d1af5be7c4eb97d98570e991804e6b25 100644 (file)
@@ -102,6 +102,7 @@ nvkm_device_tegra_func = {
        .fini = nvkm_device_tegra_fini,
        .resource_addr = nvkm_device_tegra_resource_addr,
        .resource_size = nvkm_device_tegra_resource_size,
+       .cpu_coherent = false,
 };
 
 int
@@ -118,8 +119,8 @@ nvkm_device_tegra_new(struct platform_device *pdev,
        tdev->pdev = pdev;
        tdev->irq = -1;
 
-       return nvkm_device_ctor(&nvkm_device_tegra_func, NULL, pdev,
-                               NVKM_BUS_PLATFORM, pdev->id, NULL,
+       return nvkm_device_ctor(&nvkm_device_tegra_func, NULL, &pdev->dev,
+                               NVKM_DEVICE_TEGRA, pdev->id, NULL,
                                cfg, dbg, detect, mmio, subdev_mask,
                                &tdev->device);
 }
index eddf9b1d3340c1fb634708f5bc62a15bbd417793..1ae48f27029d548dca534ab00f131652032b5100 100644 (file)
@@ -70,16 +70,22 @@ nvkm_udevice_info(struct nvkm_udevice *udev, void *data, u32 size)
                args->v0.platform = NV_DEVICE_INFO_V0_IGP;
                break;
        default:
-               if (device->pdev) {
-                       if (pci_find_capability(device->pdev, PCI_CAP_ID_AGP))
-                               args->v0.platform = NV_DEVICE_INFO_V0_AGP;
-                       else
-                       if (pci_is_pcie(device->pdev))
-                               args->v0.platform = NV_DEVICE_INFO_V0_PCIE;
-                       else
-                               args->v0.platform = NV_DEVICE_INFO_V0_PCI;
-               } else {
+               switch (device->type) {
+               case NVKM_DEVICE_PCI:
+                       args->v0.platform = NV_DEVICE_INFO_V0_PCI;
+                       break;
+               case NVKM_DEVICE_AGP:
+                       args->v0.platform = NV_DEVICE_INFO_V0_AGP;
+                       break;
+               case NVKM_DEVICE_PCIE:
+                       args->v0.platform = NV_DEVICE_INFO_V0_PCIE;
+                       break;
+               case NVKM_DEVICE_TEGRA:
                        args->v0.platform = NV_DEVICE_INFO_V0_SOC;
+                       break;
+               default:
+                       WARN_ON(1);
+                       break;
                }
                break;
        }
index 2d11b328bee11a01087123c108137a2ac262c7b7..74000602fbb127463c1a5d0b269adb305fc84f90 100644 (file)
@@ -190,7 +190,7 @@ nvkm_falcon_init(struct nvkm_engine *engine)
                snprintf(name, sizeof(name), "nouveau/nv%02x_fuc%03x",
                         device->chipset, falcon->addr >> 12);
 
-               ret = request_firmware(&fw, name, nv_device_base(device));
+               ret = request_firmware(&fw, name, device->dev);
                if (ret == 0) {
                        falcon->code.data = vmemdup(fw->data, fw->size);
                        falcon->code.size = fw->size;
@@ -209,7 +209,7 @@ nvkm_falcon_init(struct nvkm_engine *engine)
                snprintf(name, sizeof(name), "nouveau/nv%02x_fuc%03xd",
                         device->chipset, falcon->addr >> 12);
 
-               ret = request_firmware(&fw, name, nv_device_base(device));
+               ret = request_firmware(&fw, name, device->dev);
                if (ret) {
                        nvkm_error(subdev, "unable to load firmware data\n");
                        return -ENODEV;
@@ -224,7 +224,7 @@ nvkm_falcon_init(struct nvkm_engine *engine)
                snprintf(name, sizeof(name), "nouveau/nv%02x_fuc%03xc",
                         device->chipset, falcon->addr >> 12);
 
-               ret = request_firmware(&fw, name, nv_device_base(device));
+               ret = request_firmware(&fw, name, device->dev);
                if (ret) {
                        nvkm_error(subdev, "unable to load firmware code\n");
                        return -ENODEV;
index 1ad6785683f2cb72924141149f6eef1ccb2a1805..f1358a564e3e8ee494ba45c713699a92ed1e7e89 100644 (file)
@@ -1642,7 +1642,7 @@ gf100_gr_ctor_fw(struct gf100_gr *gr, const char *fwname,
        }
 
        snprintf(f, sizeof(f), "nvidia/%s/%s.bin", cname, fwname);
-       ret = request_firmware(&fw, f, nv_device_base(device));
+       ret = request_firmware(&fw, f, device->dev);
        if (ret) {
                nvkm_error(subdev, "failed to load %s\n", fwname);
                return ret;
index d6a2b9593538c8ca2eb434aee51a4640f23dc2ac..a3d4f5bcec7a450e522c6cdcf17d0d4901a082b9 100644 (file)
@@ -107,7 +107,7 @@ nvkm_xtensa_init(struct nvkm_engine *engine)
                snprintf(name, sizeof(name), "nouveau/nv84_xuc%03x",
                         xtensa->addr >> 12);
 
-               ret = request_firmware(&fw, name, nv_device_base(device));
+               ret = request_firmware(&fw, name, device->dev);
                if (ret) {
                        nvkm_warn(subdev, "unable to load firmware %s\n", name);
                        return ret;
index b089a11ba08cf33982e149ab379b2d651e9897d4..792f017525f689bb1d38b86c0bf2e746f9495c8d 100644 (file)
@@ -134,7 +134,7 @@ shadow_fw_read(void *data, u32 offset, u32 length, struct nvkm_bios *bios)
 static void *
 shadow_fw_init(struct nvkm_bios *bios, const char *name)
 {
-       struct device *dev = &bios->subdev.device->pdev->dev;
+       struct device *dev = bios->subdev.device->dev;
        const struct firmware *fw;
        int ret = request_firmware(&fw, name, dev);
        if (ret)
index 468066817c75c79a1d493826b96c8e3fdf3fd886..8fecb5ff22a0efaaeaed9bc2b4939072fc6513bc 100644 (file)
 
 #if defined(CONFIG_ACPI) && defined(CONFIG_X86)
 int nouveau_acpi_get_bios_chunk(uint8_t *bios, int offset, int len);
-bool nouveau_acpi_rom_supported(struct pci_dev *pdev);
+bool nouveau_acpi_rom_supported(struct device *);
 #else
 static inline bool
-nouveau_acpi_rom_supported(struct pci_dev *pdev)
+nouveau_acpi_rom_supported(struct device *dev)
 {
        return false;
 }
@@ -88,7 +88,7 @@ acpi_read_slow(void *data, u32 offset, u32 length, struct nvkm_bios *bios)
 static void *
 acpi_init(struct nvkm_bios *bios, const char *name)
 {
-       if (!nouveau_acpi_rom_supported(bios->subdev.device->pdev))
+       if (!nouveau_acpi_rom_supported(bios->subdev.device->dev))
                return ERR_PTR(-ENODEV);
        return NULL;
 }
index 0979bc89eeab035285b0ff39e60e75585c51f6f8..9b91da09dc5f88ef431d4b374017cdc138b52453 100644 (file)
@@ -22,6 +22,8 @@
  */
 #include "priv.h"
 
+#include <core/pci.h>
+
 struct priv {
        struct pci_dev *pdev;
        void __iomem *rom;
@@ -51,10 +53,16 @@ pcirom_fini(void *data)
 static void *
 pcirom_init(struct nvkm_bios *bios, const char *name)
 {
-       struct pci_dev *pdev = bios->subdev.device->pdev;
+       struct nvkm_device *device = bios->subdev.device;
        struct priv *priv = NULL;
+       struct pci_dev *pdev;
        int ret;
 
+       if (device->func->pci)
+               pdev = device->func->pci(device)->pdev;
+       else
+               return ERR_PTR(-ENODEV);
+
        if (!(ret = pci_enable_rom(pdev))) {
                if (ret = -ENOMEM,
                    (priv = kmalloc(sizeof(*priv), GFP_KERNEL))) {
@@ -83,10 +91,16 @@ nvbios_pcirom = {
 static void *
 platform_init(struct nvkm_bios *bios, const char *name)
 {
-       struct pci_dev *pdev = bios->subdev.device->pdev;
+       struct nvkm_device *device = bios->subdev.device;
+       struct pci_dev *pdev;
        struct priv *priv;
        int ret = -ENOMEM;
 
+       if (device->func->pci)
+               pdev = device->func->pci(device)->pdev;
+       else
+               return ERR_PTR(-ENODEV);
+
        if ((priv = kmalloc(sizeof(*priv), GFP_KERNEL))) {
                if (ret = -ENODEV,
                    (priv->rom = pci_platform_rom(pdev, &priv->size)))
index ef3149aa51242e3f216e4dbfcb347e8f60bbaaf6..008bb9849f3b42cf462370dfa46188e8e01f1777 100644 (file)
@@ -65,7 +65,7 @@ gf100_fb_dtor(struct nvkm_fb *base)
        struct nvkm_device *device = fb->base.subdev.device;
 
        if (fb->r100c10_page) {
-               dma_unmap_page(nv_device_base(device), fb->r100c10, PAGE_SIZE,
+               dma_unmap_page(device->dev, fb->r100c10, PAGE_SIZE,
                               DMA_BIDIRECTIONAL);
                __free_page(fb->r100c10_page);
        }
@@ -86,10 +86,9 @@ gf100_fb_new_(const struct nvkm_fb_func *func, struct nvkm_device *device,
 
        fb->r100c10_page = alloc_page(GFP_KERNEL | __GFP_ZERO);
        if (fb->r100c10_page) {
-               fb->r100c10 = dma_map_page(nv_device_base(device),
-                                            fb->r100c10_page, 0, PAGE_SIZE,
-                                            DMA_BIDIRECTIONAL);
-               if (dma_mapping_error(nv_device_base(device), fb->r100c10))
+               fb->r100c10 = dma_map_page(device->dev, fb->r100c10_page, 0,
+                                          PAGE_SIZE, DMA_BIDIRECTIONAL);
+               if (dma_mapping_error(device->dev, fb->r100c10))
                        return -EFAULT;
        }
 
index c2b6ccde7473f4f07a4a4caa197ffe880dd7d524..f5edfadb5b46c1b4a93bef2748463caf2fe5c664 100644 (file)
@@ -234,7 +234,7 @@ nv50_fb_dtor(struct nvkm_fb *base)
        struct nvkm_device *device = fb->base.subdev.device;
 
        if (fb->r100c08_page) {
-               dma_unmap_page(nv_device_base(device), fb->r100c08, PAGE_SIZE,
+               dma_unmap_page(device->dev, fb->r100c08, PAGE_SIZE,
                               DMA_BIDIRECTIONAL);
                __free_page(fb->r100c08_page);
        }
@@ -265,10 +265,9 @@ nv50_fb_new_(const struct nv50_fb_func *func, struct nvkm_device *device,
 
        fb->r100c08_page = alloc_page(GFP_KERNEL | __GFP_ZERO);
        if (fb->r100c08_page) {
-               fb->r100c08 = dma_map_page(nv_device_base(device),
-                                            fb->r100c08_page, 0, PAGE_SIZE,
-                                            DMA_BIDIRECTIONAL);
-               if (dma_mapping_error(nv_device_base(device), fb->r100c08))
+               fb->r100c08 = dma_map_page(device->dev, fb->r100c08_page, 0,
+                                          PAGE_SIZE, DMA_BIDIRECTIONAL);
+               if (dma_mapping_error(device->dev, fb->r100c08))
                        return -EFAULT;
        } else {
                nvkm_warn(&fb->base.subdev, "failed 100c08 page alloc\n");
index ab01989c34304dbd999799843b63f5ed291865c5..5ef04b72a80aeed5001a1cff8c7a52c1ee21e4e2 100644 (file)
@@ -186,7 +186,7 @@ gk20a_instobj_dtor_dma(struct gk20a_instobj *_node)
 {
        struct gk20a_instobj_dma *node = (void *)_node;
        struct gk20a_instmem *imem = _node->imem;
-       struct device *dev = nv_device_base(imem->base.subdev.device);
+       struct device *dev = imem->base.subdev.device->dev;
 
        if (unlikely(!node->cpuaddr))
                return;
index 5def412f0467e5ae1b94950a1cf1ef811b61cb8a..37927c3fdc3e6aea35032916225a5e480ad048ee 100644 (file)
@@ -110,8 +110,8 @@ nv04_mmu_dtor(struct nvkm_mmu *base)
                nvkm_vm_ref(NULL, &mmu->vm, NULL);
        }
        if (mmu->nullp) {
-               pci_free_consistent(device->pdev, 16 * 1024,
-                                   mmu->nullp, mmu->null);
+               dma_free_coherent(device->dev, 16 * 1024,
+                                 mmu->nullp, mmu->null);
        }
        return mmu;
 }
index f30c3b890626c92deede283bdd23389d334feb66..c6a26f907009cc746e8276c75272b1e74f6a9fb7 100644 (file)
@@ -133,7 +133,7 @@ nv41_mmu = {
 int
 nv41_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu)
 {
-       if (pci_find_capability(device->pdev, PCI_CAP_ID_AGP) ||
+       if (device->type == NVKM_DEVICE_AGP ||
            !nvkm_boolopt(device->cfgopt, "NvPCIE", true))
                return nv04_mmu_new(device, index, pmmu);
 
index 7c37bd84b862da3830bcef4458f2437cc13391ca..a648c2395545b49365eb41736f7ac5d14d36db0f 100644 (file)
@@ -165,7 +165,8 @@ nv44_mmu_oneinit(struct nvkm_mmu *base)
        struct nvkm_device *device = mmu->base.subdev.device;
        int ret;
 
-       mmu->nullp = pci_alloc_consistent(device->pdev, 16 * 1024, &mmu->null);
+       mmu->nullp = dma_alloc_coherent(device->dev, 16 * 1024,
+                                       &mmu->null, GFP_KERNEL);
        if (!mmu->nullp) {
                nvkm_warn(&mmu->base.subdev, "unable to allocate dummy pages\n");
                mmu->null = 0;
@@ -227,7 +228,7 @@ nv44_mmu = {
 int
 nv44_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu)
 {
-       if (pci_find_capability(device->pdev, PCI_CAP_ID_AGP) ||
+       if (device->type == NVKM_DEVICE_AGP ||
            !nvkm_boolopt(device->cfgopt, "NvPCIE", true))
                return nv04_mmu_new(device, index, pmmu);
 
index 442b5e200a7780a55dd4bdfa9e9ad40a6bc989d4..9700a7625012d7cf9724f746e77dbc87b5bd52e1 100644 (file)
@@ -95,7 +95,7 @@ mxm_shadow_dsm(struct nvkm_mxm *mxm, u8 version)
        acpi_handle handle;
        int rev;
 
-       handle = ACPI_HANDLE(nv_device_base(device));
+       handle = ACPI_HANDLE(device->dev);
        if (!handle)
                return false;
 
This page took 0.040784 seconds and 5 git commands to generate.