nv50_audio_component_get_eld(struct device *kdev, int port, int dev_id,
                             bool *enabled, unsigned char *buf, int max_bytes)
 {
-       struct drm_device *drm_dev = dev_get_drvdata(kdev);
-       struct nouveau_drm *drm = nouveau_drm(drm_dev);
+       struct nouveau_drm *drm = dev_get_drvdata(kdev);
        struct drm_encoder *encoder;
        struct nouveau_encoder *nv_encoder;
        struct nouveau_crtc *nv_crtc;
 nv50_audio_component_bind(struct device *kdev, struct device *hda_kdev,
                          void *data)
 {
-       struct drm_device *drm_dev = dev_get_drvdata(kdev);
-       struct nouveau_drm *drm = nouveau_drm(drm_dev);
+       struct nouveau_drm *drm = dev_get_drvdata(kdev);
        struct drm_audio_component *acomp = data;
 
        if (WARN_ON(!device_link_add(hda_kdev, kdev, DL_FLAG_STATELESS)))
                return -ENOMEM;
 
-       drm_modeset_lock_all(drm_dev);
+       drm_modeset_lock_all(drm->dev);
        acomp->ops = &nv50_audio_component_ops;
        acomp->dev = kdev;
        drm->audio.component = acomp;
-       drm_modeset_unlock_all(drm_dev);
+       drm_modeset_unlock_all(drm->dev);
        return 0;
 }
 
 nv50_audio_component_unbind(struct device *kdev, struct device *hda_kdev,
                            void *data)
 {
-       struct drm_device *drm_dev = dev_get_drvdata(kdev);
-       struct nouveau_drm *drm = nouveau_drm(drm_dev);
+       struct nouveau_drm *drm = dev_get_drvdata(kdev);
        struct drm_audio_component *acomp = data;
 
-       drm_modeset_lock_all(drm_dev);
+       drm_modeset_lock_all(drm->dev);
        drm->audio.component = NULL;
        acomp->ops = NULL;
        acomp->dev = NULL;
-       drm_modeset_unlock_all(drm_dev);
+       drm_modeset_unlock_all(drm->dev);
 }
 
 static const struct component_ops nv50_audio_component_bind_ops = {
 
 };
 
 static void
-nouveau_drm_device_fini(struct drm_device *dev)
+nouveau_drm_device_fini(struct nouveau_drm *drm)
 {
+       struct drm_device *dev = drm->dev;
        struct nouveau_cli *cli, *temp_cli;
-       struct nouveau_drm *drm = nouveau_drm(dev);
 
        if (nouveau_pmops_runtime()) {
                pm_runtime_get_sync(dev->dev);
 
        ret = drm_dev_register(drm->dev, 0);
        if (ret) {
-               nouveau_drm_device_fini(drm->dev);
+               nouveau_drm_device_fini(drm);
                return ret;
        }
 
        }
 
        drm->dev->dev_private = drm;
-       dev_set_drvdata(parent, drm->dev);
+       dev_set_drvdata(parent, drm);
 
 done:
        if (ret) {
 
 static void quirk_broken_nv_runpm(struct pci_dev *pdev)
 {
-       struct drm_device *dev = pci_get_drvdata(pdev);
-       struct nouveau_drm *drm = nouveau_drm(dev);
+       struct nouveau_drm *drm = pci_get_drvdata(pdev);
        struct pci_dev *bridge = pci_upstream_bridge(pdev);
 
        if (!bridge || bridge->vendor != PCI_VENDOR_ID_INTEL)
 }
 
 void
-nouveau_drm_device_remove(struct drm_device *dev)
+nouveau_drm_device_remove(struct nouveau_drm *drm)
 {
-       struct nouveau_drm *drm = nouveau_drm(dev);
        struct nvkm_client *client;
        struct nvkm_device *device;
 
-       drm_dev_unplug(dev);
+       drm_dev_unplug(drm->dev);
 
        client = nvxx_client(&drm->client.base);
        device = nvkm_device_find(client->device);
 
-       nouveau_drm_device_fini(dev);
+       nouveau_drm_device_fini(drm);
        nouveau_drm_device_del(drm);
        nvkm_device_del(&device);
 }
 static void
 nouveau_drm_remove(struct pci_dev *pdev)
 {
-       struct drm_device *dev = pci_get_drvdata(pdev);
-       struct nouveau_drm *drm = nouveau_drm(dev);
+       struct nouveau_drm *drm = pci_get_drvdata(pdev);
 
        /* revert our workaround */
        if (drm->old_pm_cap)
                pdev->pm_cap = drm->old_pm_cap;
-       nouveau_drm_device_remove(dev);
+       nouveau_drm_device_remove(drm);
        pci_disable_device(pdev);
 }
 
 static int
-nouveau_do_suspend(struct drm_device *dev, bool runtime)
+nouveau_do_suspend(struct nouveau_drm *drm, bool runtime)
 {
-       struct nouveau_drm *drm = nouveau_drm(dev);
+       struct drm_device *dev = drm->dev;
        struct ttm_resource_manager *man;
        int ret;
 
 }
 
 static int
-nouveau_do_resume(struct drm_device *dev, bool runtime)
+nouveau_do_resume(struct nouveau_drm *drm, bool runtime)
 {
+       struct drm_device *dev = drm->dev;
        int ret = 0;
-       struct nouveau_drm *drm = nouveau_drm(dev);
 
        NV_DEBUG(drm, "resuming object tree...\n");
        ret = nvif_client_resume(&drm->master.base);
 nouveau_pmops_suspend(struct device *dev)
 {
        struct pci_dev *pdev = to_pci_dev(dev);
-       struct drm_device *drm_dev = pci_get_drvdata(pdev);
+       struct nouveau_drm *drm = pci_get_drvdata(pdev);
        int ret;
 
-       if (drm_dev->switch_power_state == DRM_SWITCH_POWER_OFF ||
-           drm_dev->switch_power_state == DRM_SWITCH_POWER_DYNAMIC_OFF)
+       if (drm->dev->switch_power_state == DRM_SWITCH_POWER_OFF ||
+           drm->dev->switch_power_state == DRM_SWITCH_POWER_DYNAMIC_OFF)
                return 0;
 
-       ret = nouveau_do_suspend(drm_dev, false);
+       ret = nouveau_do_suspend(drm, false);
        if (ret)
                return ret;
 
 nouveau_pmops_resume(struct device *dev)
 {
        struct pci_dev *pdev = to_pci_dev(dev);
-       struct drm_device *drm_dev = pci_get_drvdata(pdev);
+       struct nouveau_drm *drm = pci_get_drvdata(pdev);
        int ret;
 
-       if (drm_dev->switch_power_state == DRM_SWITCH_POWER_OFF ||
-           drm_dev->switch_power_state == DRM_SWITCH_POWER_DYNAMIC_OFF)
+       if (drm->dev->switch_power_state == DRM_SWITCH_POWER_OFF ||
+           drm->dev->switch_power_state == DRM_SWITCH_POWER_DYNAMIC_OFF)
                return 0;
 
        pci_set_power_state(pdev, PCI_D0);
                return ret;
        pci_set_master(pdev);
 
-       ret = nouveau_do_resume(drm_dev, false);
+       ret = nouveau_do_resume(drm, false);
 
        /* Monitors may have been connected / disconnected during suspend */
-       nouveau_display_hpd_resume(drm_dev);
+       nouveau_display_hpd_resume(drm);
 
        return ret;
 }
 static int
 nouveau_pmops_freeze(struct device *dev)
 {
-       struct pci_dev *pdev = to_pci_dev(dev);
-       struct drm_device *drm_dev = pci_get_drvdata(pdev);
-       return nouveau_do_suspend(drm_dev, false);
+       struct nouveau_drm *drm = dev_get_drvdata(dev);
+
+       return nouveau_do_suspend(drm, false);
 }
 
 static int
 nouveau_pmops_thaw(struct device *dev)
 {
-       struct pci_dev *pdev = to_pci_dev(dev);
-       struct drm_device *drm_dev = pci_get_drvdata(pdev);
-       return nouveau_do_resume(drm_dev, false);
+       struct nouveau_drm *drm = dev_get_drvdata(dev);
+
+       return nouveau_do_resume(drm, false);
 }
 
 bool
 nouveau_pmops_runtime_suspend(struct device *dev)
 {
        struct pci_dev *pdev = to_pci_dev(dev);
-       struct drm_device *drm_dev = pci_get_drvdata(pdev);
+       struct nouveau_drm *drm = pci_get_drvdata(pdev);
        int ret;
 
        if (!nouveau_pmops_runtime()) {
        }
 
        nouveau_switcheroo_optimus_dsm();
-       ret = nouveau_do_suspend(drm_dev, true);
+       ret = nouveau_do_suspend(drm, true);
        pci_save_state(pdev);
        pci_disable_device(pdev);
        pci_ignore_hotplug(pdev);
        pci_set_power_state(pdev, PCI_D3cold);
-       drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF;
+       drm->dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF;
        return ret;
 }
 
 nouveau_pmops_runtime_resume(struct device *dev)
 {
        struct pci_dev *pdev = to_pci_dev(dev);
-       struct drm_device *drm_dev = pci_get_drvdata(pdev);
-       struct nouveau_drm *drm = nouveau_drm(drm_dev);
-       struct nvif_device *device = &nouveau_drm(drm_dev)->client.device;
+       struct nouveau_drm *drm = pci_get_drvdata(pdev);
+       struct nvif_device *device = &drm->client.device;
        int ret;
 
        if (!nouveau_pmops_runtime()) {
                return ret;
        pci_set_master(pdev);
 
-       ret = nouveau_do_resume(drm_dev, true);
+       ret = nouveau_do_resume(drm, true);
        if (ret) {
                NV_ERROR(drm, "resume failed with: %d\n", ret);
                return ret;
 
        /* do magic */
        nvif_mask(&device->object, 0x088488, (1 << 25), (1 << 25));
-       drm_dev->switch_power_state = DRM_SWITCH_POWER_ON;
+       drm->dev->switch_power_state = DRM_SWITCH_POWER_ON;
 
        /* Monitors may have been connected / disconnected during suspend */
-       nouveau_display_hpd_resume(drm_dev);
+       nouveau_display_hpd_resume(drm);
 
        return ret;
 }
 
 static unsigned int
 nouveau_vga_set_decode(struct pci_dev *pdev, bool state)
 {
-       struct nouveau_drm *drm = nouveau_drm(pci_get_drvdata(pdev));
+       struct nouveau_drm *drm = pci_get_drvdata(pdev);
        struct nvif_object *device = &drm->client.device.object;
 
        if (drm->client.device.info.family == NV_DEVICE_INFO_V0_CURIE &&
 nouveau_switcheroo_set_state(struct pci_dev *pdev,
                             enum vga_switcheroo_state state)
 {
-       struct drm_device *dev = pci_get_drvdata(pdev);
+       struct nouveau_drm *drm = pci_get_drvdata(pdev);
+       struct drm_device *dev = drm->dev;
 
        if ((nouveau_is_optimus() || nouveau_is_v1_dsm()) && state == VGA_SWITCHEROO_OFF)
                return;
 static void
 nouveau_switcheroo_reprobe(struct pci_dev *pdev)
 {
-       struct drm_device *dev = pci_get_drvdata(pdev);
-       drm_fb_helper_output_poll_changed(dev);
+       struct nouveau_drm *drm = pci_get_drvdata(pdev);
+
+       drm_fb_helper_output_poll_changed(drm->dev);
 }
 
 static bool
 nouveau_switcheroo_can_switch(struct pci_dev *pdev)
 {
-       struct drm_device *dev = pci_get_drvdata(pdev);
+       struct nouveau_drm *drm = pci_get_drvdata(pdev);
 
        /*
         * FIXME: open_count is protected by drm_global_mutex but that would lead to
         * locking inversion with the driver load path. And the access here is
         * completely racy anyway. So don't bother with locking for now.
         */
-       return atomic_read(&dev->open_count) == 0;
+       return atomic_read(&drm->dev->open_count) == 0;
 }
 
 static const struct vga_switcheroo_client_ops