Commit 7d3a766b authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau/pm: init only after display subsystem has been created

This patch fixes an oops cause by pm_trigger accessing the (uninitialised)
crtc list.
Reported-by: default avatarRoy Spliet <r.spliet@student.tudelft.nl>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 950c44b6
...@@ -632,8 +632,6 @@ nouveau_card_init(struct drm_device *dev) ...@@ -632,8 +632,6 @@ nouveau_card_init(struct drm_device *dev)
if (ret) if (ret)
goto out_ttmvram; goto out_ttmvram;
nouveau_pm_init(dev);
if (!dev_priv->noaccel) { if (!dev_priv->noaccel) {
switch (dev_priv->card_type) { switch (dev_priv->card_type) {
case NV_04: case NV_04:
...@@ -738,11 +736,12 @@ nouveau_card_init(struct drm_device *dev) ...@@ -738,11 +736,12 @@ nouveau_card_init(struct drm_device *dev)
goto out_irq; goto out_irq;
nouveau_backlight_init(dev); nouveau_backlight_init(dev);
nouveau_pm_init(dev);
if (dev_priv->eng[NVOBJ_ENGINE_GR]) { if (dev_priv->eng[NVOBJ_ENGINE_GR]) {
ret = nouveau_fence_init(dev); ret = nouveau_fence_init(dev);
if (ret) if (ret)
goto out_disp; goto out_pm;
ret = nouveau_channel_alloc(dev, &dev_priv->channel, NULL, ret = nouveau_channel_alloc(dev, &dev_priv->channel, NULL,
NvDmaFB, NvDmaTT); NvDmaFB, NvDmaTT);
...@@ -766,7 +765,8 @@ nouveau_card_init(struct drm_device *dev) ...@@ -766,7 +765,8 @@ nouveau_card_init(struct drm_device *dev)
nouveau_channel_put_unlocked(&dev_priv->channel); nouveau_channel_put_unlocked(&dev_priv->channel);
out_fence: out_fence:
nouveau_fence_fini(dev); nouveau_fence_fini(dev);
out_disp: out_pm:
nouveau_pm_fini(dev);
nouveau_backlight_exit(dev); nouveau_backlight_exit(dev);
nouveau_display_destroy(dev); nouveau_display_destroy(dev);
out_irq: out_irq:
...@@ -783,7 +783,6 @@ nouveau_card_init(struct drm_device *dev) ...@@ -783,7 +783,6 @@ 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);
nouveau_mem_gart_fini(dev); nouveau_mem_gart_fini(dev);
out_ttmvram: out_ttmvram:
nouveau_mem_vram_fini(dev); nouveau_mem_vram_fini(dev);
...@@ -826,6 +825,7 @@ static void nouveau_card_takedown(struct drm_device *dev) ...@@ -826,6 +825,7 @@ static void nouveau_card_takedown(struct drm_device *dev)
nouveau_fence_fini(dev); nouveau_fence_fini(dev);
} }
nouveau_pm_fini(dev);
nouveau_backlight_exit(dev); nouveau_backlight_exit(dev);
nouveau_display_destroy(dev); nouveau_display_destroy(dev);
...@@ -854,8 +854,6 @@ static void nouveau_card_takedown(struct drm_device *dev) ...@@ -854,8 +854,6 @@ 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);
nouveau_pm_fini(dev);
nouveau_gpio_destroy(dev); nouveau_gpio_destroy(dev);
engine->vram.takedown(dev); engine->vram.takedown(dev);
engine->fb.takedown(dev); engine->fb.takedown(dev);
......
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