|
@@ -91,6 +91,7 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev)
|
|
|
engine->pm.clock_pre = nv04_pm_clock_pre;
|
|
|
engine->pm.clock_set = nv04_pm_clock_set;
|
|
|
engine->vram.init = nouveau_mem_detect;
|
|
|
+ engine->vram.takedown = nouveau_stub_takedown;
|
|
|
engine->vram.flags_valid = nouveau_mem_flags_valid;
|
|
|
break;
|
|
|
case 0x10:
|
|
@@ -139,6 +140,7 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev)
|
|
|
engine->pm.clock_pre = nv04_pm_clock_pre;
|
|
|
engine->pm.clock_set = nv04_pm_clock_set;
|
|
|
engine->vram.init = nouveau_mem_detect;
|
|
|
+ engine->vram.takedown = nouveau_stub_takedown;
|
|
|
engine->vram.flags_valid = nouveau_mem_flags_valid;
|
|
|
break;
|
|
|
case 0x20:
|
|
@@ -187,6 +189,7 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev)
|
|
|
engine->pm.clock_pre = nv04_pm_clock_pre;
|
|
|
engine->pm.clock_set = nv04_pm_clock_set;
|
|
|
engine->vram.init = nouveau_mem_detect;
|
|
|
+ engine->vram.takedown = nouveau_stub_takedown;
|
|
|
engine->vram.flags_valid = nouveau_mem_flags_valid;
|
|
|
break;
|
|
|
case 0x30:
|
|
@@ -237,6 +240,7 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev)
|
|
|
engine->pm.voltage_get = nouveau_voltage_gpio_get;
|
|
|
engine->pm.voltage_set = nouveau_voltage_gpio_set;
|
|
|
engine->vram.init = nouveau_mem_detect;
|
|
|
+ engine->vram.takedown = nouveau_stub_takedown;
|
|
|
engine->vram.flags_valid = nouveau_mem_flags_valid;
|
|
|
break;
|
|
|
case 0x40:
|
|
@@ -289,6 +293,7 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev)
|
|
|
engine->pm.voltage_set = nouveau_voltage_gpio_set;
|
|
|
engine->pm.temp_get = nv40_temp_get;
|
|
|
engine->vram.init = nouveau_mem_detect;
|
|
|
+ engine->vram.takedown = nouveau_stub_takedown;
|
|
|
engine->vram.flags_valid = nouveau_mem_flags_valid;
|
|
|
break;
|
|
|
case 0x50:
|
|
@@ -366,6 +371,7 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev)
|
|
|
else
|
|
|
engine->pm.temp_get = nv40_temp_get;
|
|
|
engine->vram.init = nv50_vram_init;
|
|
|
+ engine->vram.takedown = nv50_vram_fini;
|
|
|
engine->vram.get = nv50_vram_new;
|
|
|
engine->vram.put = nv50_vram_del;
|
|
|
engine->vram.flags_valid = nv50_vram_flags_valid;
|
|
@@ -412,6 +418,7 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev)
|
|
|
engine->gpio.irq_unregister = nv50_gpio_irq_unregister;
|
|
|
engine->gpio.irq_enable = nv50_gpio_irq_enable;
|
|
|
engine->vram.init = nvc0_vram_init;
|
|
|
+ engine->vram.takedown = nv50_vram_fini;
|
|
|
engine->vram.get = nvc0_vram_new;
|
|
|
engine->vram.put = nv50_vram_del;
|
|
|
engine->vram.flags_valid = nvc0_vram_flags_valid;
|
|
@@ -529,7 +536,7 @@ nouveau_card_init(struct drm_device *dev)
|
|
|
|
|
|
nouveau_pm_init(dev);
|
|
|
|
|
|
- ret = nouveau_mem_vram_init(dev);
|
|
|
+ ret = engine->vram.init(dev);
|
|
|
if (ret)
|
|
|
goto out_bios;
|
|
|
|
|
@@ -541,10 +548,14 @@ nouveau_card_init(struct drm_device *dev)
|
|
|
if (ret)
|
|
|
goto out_gpuobj;
|
|
|
|
|
|
- ret = nouveau_mem_gart_init(dev);
|
|
|
+ ret = nouveau_mem_vram_init(dev);
|
|
|
if (ret)
|
|
|
goto out_instmem;
|
|
|
|
|
|
+ ret = nouveau_mem_gart_init(dev);
|
|
|
+ if (ret)
|
|
|
+ goto out_ttmvram;
|
|
|
+
|
|
|
/* PMC */
|
|
|
ret = engine->mc.init(dev);
|
|
|
if (ret)
|
|
@@ -698,12 +709,14 @@ out_mc:
|
|
|
engine->mc.takedown(dev);
|
|
|
out_gart:
|
|
|
nouveau_mem_gart_fini(dev);
|
|
|
+out_ttmvram:
|
|
|
+ nouveau_mem_vram_fini(dev);
|
|
|
out_instmem:
|
|
|
engine->instmem.takedown(dev);
|
|
|
out_gpuobj:
|
|
|
nouveau_gpuobj_takedown(dev);
|
|
|
out_vram:
|
|
|
- nouveau_mem_vram_fini(dev);
|
|
|
+ engine->vram.takedown(dev);
|
|
|
out_bios:
|
|
|
nouveau_pm_fini(dev);
|
|
|
nouveau_bios_takedown(dev);
|
|
@@ -755,10 +768,11 @@ static void nouveau_card_takedown(struct drm_device *dev)
|
|
|
ttm_bo_clean_mm(&dev_priv->ttm.bdev, TTM_PL_TT);
|
|
|
mutex_unlock(&dev->struct_mutex);
|
|
|
nouveau_mem_gart_fini(dev);
|
|
|
+ nouveau_mem_vram_fini(dev);
|
|
|
|
|
|
engine->instmem.takedown(dev);
|
|
|
nouveau_gpuobj_takedown(dev);
|
|
|
- nouveau_mem_vram_fini(dev);
|
|
|
+ engine->vram.takedown(dev);
|
|
|
|
|
|
nouveau_irq_fini(dev);
|
|
|
drm_vblank_cleanup(dev);
|