]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
drm/nouveau/platform: remove subclassing of nvkm_device
authorBen Skeggs <bskeggs@redhat.com>
Thu, 20 Aug 2015 04:54:15 +0000 (14:54 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 28 Aug 2015 02:40:30 +0000 (12:40 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/include/nvkm/core/device.h
drivers/gpu/drm/nouveau/nouveau_drm.c
drivers/gpu/drm/nouveau/nouveau_drm.h
drivers/gpu/drm/nouveau/nouveau_platform.c
drivers/gpu/drm/nouveau/nouveau_platform.h
drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.c
drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c
drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.c

index ffff6fd5a3482401ee098308af096ee2990a4090..d48e5006e14e0e249c26818988093f3169ff3c98 100644 (file)
@@ -144,6 +144,8 @@ struct nvkm_device {
        struct nvkm_sw *sw;
        struct nvkm_engine *vic;
        struct nvkm_engine *vp;
+
+       struct nouveau_platform_gpu *gpu;
 };
 
 struct nvkm_device *nvkm_device_find(u64 name);
index 4e6c1803fd37da6040938d98f3f950a2cb6224c2..9e420f6c1a74272cb508f4650253f0fadd26ccd3 100644 (file)
@@ -1056,16 +1056,16 @@ nouveau_drm_pci_driver = {
 };
 
 struct drm_device *
-nouveau_platform_device_create_(struct platform_device *pdev, int size,
-                               void **pobject)
+nouveau_platform_device_create(struct platform_device *pdev,
+                              struct nvkm_device **pdevice)
 {
        struct drm_device *drm;
        int err;
 
-       err = nvkm_device_create_(pdev, NVKM_BUS_PLATFORM,
-                                 nouveau_platform_name(pdev),
-                                 dev_name(&pdev->dev), nouveau_config,
-                                 nouveau_debug, size, pobject);
+       err = nvkm_device_create(pdev, NVKM_BUS_PLATFORM,
+                                nouveau_platform_name(pdev),
+                                dev_name(&pdev->dev), nouveau_config,
+                                nouveau_debug, pdevice);
        if (err)
                return ERR_PTR(err);
 
@@ -1085,7 +1085,7 @@ nouveau_platform_device_create_(struct platform_device *pdev, int size,
        return drm;
 
 err_free:
-       nvkm_object_ref(NULL, (struct nvkm_object **)pobject);
+       nvkm_object_ref(NULL, (struct nvkm_object **)pdevice);
 
        return ERR_PTR(err);
 }
index 81ef59272ed29d3b05bd59ac6f074aed1bc57a95..d1a4c120b71bdf09e4cc361c9733c08b0f32b147 100644 (file)
@@ -182,11 +182,8 @@ nouveau_drm(struct drm_device *dev)
 int nouveau_pmops_suspend(struct device *);
 int nouveau_pmops_resume(struct device *);
 
-#define nouveau_platform_device_create(p, u)                                   \
-       nouveau_platform_device_create_(p, sizeof(**u), (void **)u)
 struct drm_device *
-nouveau_platform_device_create_(struct platform_device *pdev,
-                               int size, void **pobject);
+nouveau_platform_device_create(struct platform_device *, struct nvkm_device **);
 void nouveau_drm_device_remove(struct drm_device *dev);
 
 #define NV_PRINTK(l,c,f,a...) do {                                             \
index 7a39d449fefa6f36c1dbdd629dd3e21068d01035..c03736bce95373293112d6e2719a731972815d59 100644 (file)
@@ -177,7 +177,7 @@ static void nouveau_platform_remove_iommu(struct device *dev,
 static int nouveau_platform_probe(struct platform_device *pdev)
 {
        struct nouveau_platform_gpu *gpu;
-       struct nouveau_platform_device *device;
+       struct nvkm_device *device;
        struct drm_device *drm;
        int err;
 
@@ -214,7 +214,7 @@ static int nouveau_platform_probe(struct platform_device *pdev)
        }
 
        device->gpu = gpu;
-       device->gpu_speedo = tegra_sku_info.gpu_speedo_value;
+       gpu->gpu_speedo = tegra_sku_info.gpu_speedo_value;
 
        err = drm_dev_register(drm, 0);
        if (err < 0)
@@ -237,7 +237,7 @@ static int nouveau_platform_remove(struct platform_device *pdev)
        struct drm_device *drm_dev = platform_get_drvdata(pdev);
        struct nouveau_drm *drm = nouveau_drm(drm_dev);
        struct nvkm_device *device = nvxx_device(&drm->device);
-       struct nouveau_platform_gpu *gpu = nv_device_to_platform(device)->gpu;
+       struct nouveau_platform_gpu *gpu = device->gpu;
        int err;
 
        nouveau_drm_device_remove(drm_dev);
index 392874cf47257b47f8e265a166851db1d25e6edd..7a4020f31cc522a3f7f916873315ee5e0e520c1e 100644 (file)
@@ -54,19 +54,9 @@ struct nouveau_platform_gpu {
                struct iommu_domain *domain;
                unsigned long pgshift;
        } iommu;
-};
-
-struct nouveau_platform_device {
-       struct nvkm_device device;
-
-       struct nouveau_platform_gpu *gpu;
 
        int gpu_speedo;
 };
 
-#define nv_device_to_platform(d)                                               \
-       container_of(d, struct nouveau_platform_device, device)
-
 extern struct platform_driver nouveau_platform_driver;
-
 #endif
index 2d10dc17238d3fb746510e6637e6ae385e30e22d..ce89955ff8f9b70005b0293e475d27921205f35b 100644 (file)
@@ -650,8 +650,8 @@ gk20a_clk_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
               struct nvkm_oclass *oclass, void *data, u32 size,
               struct nvkm_object **pobject)
 {
+       struct nvkm_device *device = (void *)parent;
        struct gk20a_clk *clk;
-       struct nouveau_platform_device *plat;
        int ret;
        int i;
 
@@ -670,8 +670,7 @@ gk20a_clk_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
 
        clk->params = &gk20a_pllg_params;
 
-       plat = nv_device_to_platform(nv_device(parent));
-       clk->parent_rate = clk_get_rate(plat->gpu->clk);
+       clk->parent_rate = clk_get_rate(device->gpu->clk);
        nvkm_info(&clk->base.subdev, "parent clock rate: %d Mhz\n",
                  clk->parent_rate / MHZ);
 
index f5642698406ae01050d4953ad8c6cfac5e0b7412..e6370382109b4a1a417878d6721e163e3ad3d79d 100644 (file)
@@ -396,8 +396,8 @@ gk20a_instmem_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
                   struct nvkm_oclass *oclass, void *data, u32 size,
                   struct nvkm_object **pobject)
 {
+       struct nvkm_device *device = (void *)parent;
        struct gk20a_instmem *imem;
-       struct nouveau_platform_device *plat;
        int ret;
 
        ret = nvkm_instmem_create(parent, engine, oclass, &imem);
@@ -407,12 +407,11 @@ gk20a_instmem_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
 
        spin_lock_init(&imem->lock);
 
-       plat = nv_device_to_platform(nv_device(parent));
-       if (plat->gpu->iommu.domain) {
-               imem->domain = plat->gpu->iommu.domain;
-               imem->mm = plat->gpu->iommu.mm;
-               imem->iommu_pgshift = plat->gpu->iommu.pgshift;
-               imem->mm_mutex = &plat->gpu->iommu.mutex;
+       if (device->gpu->iommu.domain) {
+               imem->domain = device->gpu->iommu.domain;
+               imem->mm = device->gpu->iommu.mm;
+               imem->iommu_pgshift = device->gpu->iommu.pgshift;
+               imem->mm_mutex = &device->gpu->iommu.mutex;
 
                nvkm_info(&imem->base.subdev, "using IOMMU\n");
        } else {
index d86f4eaba04c06c3cb44a02b47a0b852d57cc082..59fa2cf898d20fe1e2af143508e7071cb902e21c 100644 (file)
@@ -152,8 +152,8 @@ gk20a_volt_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
                struct nvkm_oclass *oclass, void *data, u32 size,
                struct nvkm_object **pobject)
 {
+       struct nvkm_device *device = (void *)parent;
        struct gk20a_volt *volt;
-       struct nouveau_platform_device *plat;
        int i, ret, uv;
 
        ret = nvkm_volt_create(parent, engine, oclass, &volt);
@@ -161,12 +161,10 @@ gk20a_volt_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
        if (ret)
                return ret;
 
-       plat = nv_device_to_platform(nv_device(parent));
-
-       uv = regulator_get_voltage(plat->gpu->vdd);
+       uv = regulator_get_voltage(device->gpu->vdd);
        nvkm_info(&volt->base.subdev, "The default voltage is %duV\n", uv);
 
-       volt->vdd = plat->gpu->vdd;
+       volt->vdd = device->gpu->vdd;
        volt->base.vid_get = gk20a_volt_vid_get;
        volt->base.vid_set = gk20a_volt_vid_set;
        volt->base.set_id = gk20a_volt_set_id;
@@ -178,7 +176,7 @@ gk20a_volt_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
                volt->base.vid[i].vid = i;
                volt->base.vid[i].uv =
                        gk20a_volt_calc_voltage(&gk20a_cvb_coef[i],
-                                               plat->gpu_speedo);
+                                               device->gpu->gpu_speedo);
                nvkm_debug(&volt->base.subdev, "%2d: vid=%d, uv=%d\n", i,
                           volt->base.vid[i].vid, volt->base.vid[i].uv);
        }