case NV_30: args->v0.family = NV_DEVICE_INFO_V0_RANKINE; break;
        case NV_40: args->v0.family = NV_DEVICE_INFO_V0_CURIE; break;
        case NV_50: args->v0.family = NV_DEVICE_INFO_V0_TESLA; break;
-       case NV_C0:
-       case NV_D0: args->v0.family = NV_DEVICE_INFO_V0_FERMI; break;
+       case NV_C0: args->v0.family = NV_DEVICE_INFO_V0_FERMI; break;
        case NV_E0: args->v0.family = NV_DEVICE_INFO_V0_KEPLER; break;
        case GM100: args->v0.family = NV_DEVICE_INFO_V0_MAXWELL; break;
        default:
                        case 0x080:
                        case 0x090:
                        case 0x0a0: device->card_type = NV_50; break;
-                       case 0x0c0: device->card_type = NV_C0; break;
-                       case 0x0d0: device->card_type = NV_D0; break;
+                       case 0x0c0:
+                       case 0x0d0: device->card_type = NV_C0; break;
                        case 0x0e0:
                        case 0x0f0:
                        case 0x100: device->card_type = NV_E0; break;
                case NV_30: ret = nv30_identify(device); break;
                case NV_40: ret = nv40_identify(device); break;
                case NV_50: ret = nv50_identify(device); break;
-               case NV_C0:
-               case NV_D0: ret = nvc0_identify(device); break;
+               case NV_C0: ret = nvc0_identify(device); break;
                case NV_E0: ret = nve0_identify(device); break;
                case GM100: ret = gm100_identify(device); break;
                default:
 
        disp->fini(dev);
 }
 
-int
-nouveau_display_create(struct drm_device *dev)
+static void
+nouveau_display_create_properties(struct drm_device *dev)
 {
-       struct nouveau_drm *drm = nouveau_drm(dev);
-       struct nouveau_device *device = nouveau_dev(dev);
-       struct nouveau_display *disp;
-       int ret, gen;
-
-       disp = drm->display = kzalloc(sizeof(*disp), GFP_KERNEL);
-       if (!disp)
-               return -ENOMEM;
-
-       drm_mode_config_init(dev);
-       drm_mode_create_scaling_mode_property(dev);
-       drm_mode_create_dvi_i_properties(dev);
+       struct nouveau_display *disp = nouveau_display(dev);
+       int gen;
 
-       if (nv_device(drm->device)->card_type < NV_50)
+       if (nv_mclass(disp->core) < NV50_DISP_CLASS)
                gen = 0;
        else
-       if (nv_device(drm->device)->card_type < NV_D0)
+       if (nv_mclass(disp->core) < NVD0_DISP_CLASS)
                gen = 1;
        else
                gen = 2;
        disp->underscan_vborder_property =
                drm_property_create_range(dev, 0, "underscan vborder", 0, 128);
 
-       if (gen >= 1) {
-               /* -90..+90 */
-               disp->vibrant_hue_property =
-                       drm_property_create_range(dev, 0, "vibrant hue", 0, 180);
+       if (gen < 1)
+               return;
 
-               /* -100..+100 */
-               disp->color_vibrance_property =
-                       drm_property_create_range(dev, 0, "color vibrance", 0, 200);
-       }
+       /* -90..+90 */
+       disp->vibrant_hue_property =
+               drm_property_create_range(dev, 0, "vibrant hue", 0, 180);
+
+       /* -100..+100 */
+       disp->color_vibrance_property =
+               drm_property_create_range(dev, 0, "color vibrance", 0, 200);
+}
+
+int
+nouveau_display_create(struct drm_device *dev)
+{
+       struct nouveau_drm *drm = nouveau_drm(dev);
+       struct nouveau_device *device = nouveau_dev(dev);
+       struct nouveau_display *disp;
+       int ret;
+
+       disp = drm->display = kzalloc(sizeof(*disp), GFP_KERNEL);
+       if (!disp)
+               return -ENOMEM;
+
+       drm_mode_config_init(dev);
+       drm_mode_create_scaling_mode_property(dev);
+       drm_mode_create_dvi_i_properties(dev);
 
        dev->mode_config.funcs = &nouveau_mode_config_funcs;
        dev->mode_config.fb_base = nv_device_resource_start(device, 1);
                }
 
                if (ret == 0) {
+                       nouveau_display_create_properties(dev);
                        if (nv_mclass(disp->core) < NV50_DISP_CLASS)
                                ret = nv04_display_create(dev);
                        else