- removing nouveau_drm.master, and will transition to these

Signed-off-by: Ben Skeggs <bske...@nvidia.com>
---
 drivers/gpu/drm/nouveau/nouveau_drm.c | 25 ++++++++++++++++++++++++-
 drivers/gpu/drm/nouveau/nouveau_drv.h |  3 +++
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c 
b/drivers/gpu/drm/nouveau/nouveau_drm.c
index a947e1d5f309..7e651779751d 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
@@ -603,9 +603,27 @@ nouveau_drm_device_init(struct drm_device *dev)
        if (ret)
                goto fail_wq;
 
+       ret = nvif_device_ctor(&drm->master.base.object, "drmDevice", 0, 
NV_DEVICE,
+                              &(struct nv_device_v0) {
+                                       .device = ~0,
+                                       .priv = true,
+                              }, sizeof(struct nv_device_v0),
+                              &drm->device);
+       if (ret) {
+               NV_ERROR(drm, "Device allocation failed: %d\n", ret);
+               goto fail_master;
+       }
+
+       ret = nvif_mmu_ctor(&drm->device.object, "drmMmu", 
drm->master.mmu.object.oclass,
+                           &drm->mmu);
+       if (ret) {
+               NV_ERROR(drm, "MMU allocation failed: %d\n", ret);
+               goto fail_nvif;
+       }
+
        ret = nouveau_cli_init(drm, "DRM", &drm->client);
        if (ret)
-               goto fail_master;
+               goto fail_nvif;
 
        nvxx_client(&drm->client.base)->debug =
                nvkm_dbgopt(nouveau_debug, "DRM");
@@ -669,6 +687,9 @@ nouveau_drm_device_init(struct drm_device *dev)
 fail_ttm:
        nouveau_vga_fini(drm);
        nouveau_cli_fini(&drm->client);
+fail_nvif:
+       nvif_mmu_dtor(&drm->mmu);
+       nvif_device_dtor(&drm->device);
 fail_master:
        nouveau_cli_fini(&drm->master);
 fail_wq:
@@ -725,6 +746,8 @@ nouveau_drm_device_fini(struct drm_device *dev)
        mutex_unlock(&drm->clients_lock);
 
        nouveau_cli_fini(&drm->client);
+       nvif_mmu_dtor(&drm->mmu);
+       nvif_device_dtor(&drm->device);
        nouveau_cli_fini(&drm->master);
        destroy_workqueue(drm->sched_wq);
        nvif_parent_dtor(&drm->parent);
diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h 
b/drivers/gpu/drm/nouveau/nouveau_drv.h
index e239c6bf4afa..a7079efe42f3 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drv.h
+++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
@@ -202,6 +202,9 @@ u_memcpya(uint64_t user, unsigned int nmemb, unsigned int 
size)
 
 struct nouveau_drm {
        struct nvif_parent parent;
+       struct nvif_device device;
+       struct nvif_mmu mmu;
+
        struct nouveau_cli master;
        struct nouveau_cli client;
        struct drm_device *dev;
-- 
2.41.0

Reply via email to