Commit 668b6c09 authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau: rework the init/takedown ordering

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent f3298532
...@@ -592,16 +592,34 @@ nouveau_card_init(struct drm_device *dev) ...@@ -592,16 +592,34 @@ nouveau_card_init(struct drm_device *dev)
nv_mask(dev, 0x00088080, 0x00000800, 0x00000000); nv_mask(dev, 0x00088080, 0x00000800, 0x00000000);
} }
nouveau_pm_init(dev); /* PMC */
ret = engine->mc.init(dev);
if (ret)
goto out_bios;
/* PTIMER */
ret = engine->timer.init(dev);
if (ret)
goto out_mc;
/* PFB */
ret = engine->fb.init(dev);
if (ret)
goto out_timer;
ret = engine->vram.init(dev); ret = engine->vram.init(dev);
if (ret) if (ret)
goto out_bios; goto out_fb;
ret = nouveau_gpuobj_init(dev); /* PGPIO */
ret = nouveau_gpio_create(dev);
if (ret) if (ret)
goto out_vram; goto out_vram;
ret = nouveau_gpuobj_init(dev);
if (ret)
goto out_gpio;
ret = engine->instmem.init(dev); ret = engine->instmem.init(dev);
if (ret) if (ret)
goto out_gpuobj; goto out_gpuobj;
...@@ -614,25 +632,7 @@ nouveau_card_init(struct drm_device *dev) ...@@ -614,25 +632,7 @@ nouveau_card_init(struct drm_device *dev)
if (ret) if (ret)
goto out_ttmvram; goto out_ttmvram;
/* PMC */ nouveau_pm_init(dev);
ret = engine->mc.init(dev);
if (ret)
goto out_gart;
/* PGPIO */
ret = nouveau_gpio_create(dev);
if (ret)
goto out_mc;
/* PTIMER */
ret = engine->timer.init(dev);
if (ret)
goto out_gpio;
/* PFB */
ret = engine->fb.init(dev);
if (ret)
goto out_timer;
if (!dev_priv->noaccel) { if (!dev_priv->noaccel) {
switch (dev_priv->card_type) { switch (dev_priv->card_type) {
...@@ -783,15 +783,7 @@ nouveau_card_init(struct drm_device *dev) ...@@ -783,15 +783,7 @@ nouveau_card_init(struct drm_device *dev)
dev_priv->eng[e]->destroy(dev,e ); dev_priv->eng[e]->destroy(dev,e );
} }
} }
nouveau_pm_fini(dev);
engine->fb.takedown(dev);
out_timer:
engine->timer.takedown(dev);
out_gpio:
nouveau_gpio_destroy(dev);
out_mc:
engine->mc.takedown(dev);
out_gart:
nouveau_mem_gart_fini(dev); nouveau_mem_gart_fini(dev);
out_ttmvram: out_ttmvram:
nouveau_mem_vram_fini(dev); nouveau_mem_vram_fini(dev);
...@@ -799,10 +791,17 @@ nouveau_card_init(struct drm_device *dev) ...@@ -799,10 +791,17 @@ nouveau_card_init(struct drm_device *dev)
engine->instmem.takedown(dev); engine->instmem.takedown(dev);
out_gpuobj: out_gpuobj:
nouveau_gpuobj_takedown(dev); nouveau_gpuobj_takedown(dev);
out_gpio:
nouveau_gpio_destroy(dev);
out_vram: out_vram:
engine->vram.takedown(dev); engine->vram.takedown(dev);
out_fb:
engine->fb.takedown(dev);
out_timer:
engine->timer.takedown(dev);
out_mc:
engine->mc.takedown(dev);
out_bios: out_bios:
nouveau_pm_fini(dev);
nouveau_bios_takedown(dev); nouveau_bios_takedown(dev);
out_display_early: out_display_early:
engine->display.late_takedown(dev); engine->display.late_takedown(dev);
...@@ -839,11 +838,6 @@ static void nouveau_card_takedown(struct drm_device *dev) ...@@ -839,11 +838,6 @@ static void nouveau_card_takedown(struct drm_device *dev)
} }
} }
} }
engine->fb.takedown(dev);
engine->timer.takedown(dev);
nouveau_gpio_destroy(dev);
engine->mc.takedown(dev);
engine->display.late_takedown(dev);
if (dev_priv->vga_ram) { if (dev_priv->vga_ram) {
nouveau_bo_unpin(dev_priv->vga_ram); nouveau_bo_unpin(dev_priv->vga_ram);
...@@ -859,12 +853,19 @@ static void nouveau_card_takedown(struct drm_device *dev) ...@@ -859,12 +853,19 @@ static void nouveau_card_takedown(struct drm_device *dev)
engine->instmem.takedown(dev); engine->instmem.takedown(dev);
nouveau_gpuobj_takedown(dev); nouveau_gpuobj_takedown(dev);
engine->vram.takedown(dev);
nouveau_irq_fini(dev);
nouveau_pm_fini(dev); nouveau_pm_fini(dev);
nouveau_gpio_destroy(dev);
engine->vram.takedown(dev);
engine->fb.takedown(dev);
engine->timer.takedown(dev);
engine->mc.takedown(dev);
nouveau_bios_takedown(dev); nouveau_bios_takedown(dev);
engine->display.late_takedown(dev);
nouveau_irq_fini(dev);
vga_client_register(dev->pdev, NULL, NULL, NULL); vga_client_register(dev->pdev, NULL, NULL, NULL);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment