drm/nv50/disp: fix evo for create/init + destroy/fini split
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
cf41d53bf5
commit
1772fcc6f8
@ -347,7 +347,7 @@ nv50_display_create(struct drm_device *dev)
|
|||||||
struct dcb_table *dcb = &dev_priv->vbios.dcb;
|
struct dcb_table *dcb = &dev_priv->vbios.dcb;
|
||||||
struct drm_connector *connector, *ct;
|
struct drm_connector *connector, *ct;
|
||||||
struct nv50_display *priv;
|
struct nv50_display *priv;
|
||||||
int i;
|
int ret, i;
|
||||||
|
|
||||||
NV_DEBUG_KMS(dev, "\n");
|
NV_DEBUG_KMS(dev, "\n");
|
||||||
|
|
||||||
@ -400,6 +400,13 @@ nv50_display_create(struct drm_device *dev)
|
|||||||
|
|
||||||
tasklet_init(&priv->tasklet, nv50_display_bh, (unsigned long)dev);
|
tasklet_init(&priv->tasklet, nv50_display_bh, (unsigned long)dev);
|
||||||
nouveau_irq_register(dev, 26, nv50_display_isr);
|
nouveau_irq_register(dev, 26, nv50_display_isr);
|
||||||
|
|
||||||
|
ret = nv50_evo_create(dev);
|
||||||
|
if (ret) {
|
||||||
|
nv50_display_destroy(dev);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -410,6 +417,7 @@ nv50_display_destroy(struct drm_device *dev)
|
|||||||
|
|
||||||
NV_DEBUG_KMS(dev, "\n");
|
NV_DEBUG_KMS(dev, "\n");
|
||||||
|
|
||||||
|
nv50_evo_destroy(dev);
|
||||||
nouveau_irq_unregister(dev, 26);
|
nouveau_irq_unregister(dev, 26);
|
||||||
kfree(disp);
|
kfree(disp);
|
||||||
}
|
}
|
||||||
|
@ -79,6 +79,8 @@ int nv50_display_flip_next(struct drm_crtc *, struct drm_framebuffer *,
|
|||||||
struct nouveau_channel *chan);
|
struct nouveau_channel *chan);
|
||||||
void nv50_display_flip_stop(struct drm_crtc *);
|
void nv50_display_flip_stop(struct drm_crtc *);
|
||||||
|
|
||||||
|
int nv50_evo_create(struct drm_device *dev);
|
||||||
|
void nv50_evo_destroy(struct drm_device *dev);
|
||||||
int nv50_evo_init(struct drm_device *dev);
|
int nv50_evo_init(struct drm_device *dev);
|
||||||
void nv50_evo_fini(struct drm_device *dev);
|
void nv50_evo_fini(struct drm_device *dev);
|
||||||
void nv50_evo_dmaobj_init(struct nouveau_gpuobj *, u32 memtype, u64 base,
|
void nv50_evo_dmaobj_init(struct nouveau_gpuobj *, u32 memtype, u64 base,
|
||||||
|
@ -218,7 +218,7 @@ nv50_evo_channel_fini(struct nouveau_channel *evo)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
nv50_evo_destroy(struct drm_device *dev)
|
nv50_evo_destroy(struct drm_device *dev)
|
||||||
{
|
{
|
||||||
struct nv50_display *disp = nv50_display(dev);
|
struct nv50_display *disp = nv50_display(dev);
|
||||||
@ -235,7 +235,7 @@ nv50_evo_destroy(struct drm_device *dev)
|
|||||||
nv50_evo_channel_del(&disp->master);
|
nv50_evo_channel_del(&disp->master);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
int
|
||||||
nv50_evo_create(struct drm_device *dev)
|
nv50_evo_create(struct drm_device *dev)
|
||||||
{
|
{
|
||||||
struct drm_nouveau_private *dev_priv = dev->dev_private;
|
struct drm_nouveau_private *dev_priv = dev->dev_private;
|
||||||
@ -388,12 +388,6 @@ nv50_evo_init(struct drm_device *dev)
|
|||||||
struct nv50_display *disp = nv50_display(dev);
|
struct nv50_display *disp = nv50_display(dev);
|
||||||
int ret, i;
|
int ret, i;
|
||||||
|
|
||||||
if (!disp->master) {
|
|
||||||
ret = nv50_evo_create(dev);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = nv50_evo_channel_init(disp->master);
|
ret = nv50_evo_channel_init(disp->master);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
@ -420,6 +414,4 @@ nv50_evo_fini(struct drm_device *dev)
|
|||||||
|
|
||||||
if (disp->master)
|
if (disp->master)
|
||||||
nv50_evo_channel_fini(disp->master);
|
nv50_evo_channel_fini(disp->master);
|
||||||
|
|
||||||
nv50_evo_destroy(dev);
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user