mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-21 18:14:48 +08:00
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 drm_connector *connector, *ct;
|
||||
struct nv50_display *priv;
|
||||
int i;
|
||||
int ret, i;
|
||||
|
||||
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);
|
||||
nouveau_irq_register(dev, 26, nv50_display_isr);
|
||||
|
||||
ret = nv50_evo_create(dev);
|
||||
if (ret) {
|
||||
nv50_display_destroy(dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -410,6 +417,7 @@ nv50_display_destroy(struct drm_device *dev)
|
||||
|
||||
NV_DEBUG_KMS(dev, "\n");
|
||||
|
||||
nv50_evo_destroy(dev);
|
||||
nouveau_irq_unregister(dev, 26);
|
||||
kfree(disp);
|
||||
}
|
||||
|
@ -79,6 +79,8 @@ int nv50_display_flip_next(struct drm_crtc *, struct drm_framebuffer *,
|
||||
struct nouveau_channel *chan);
|
||||
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);
|
||||
void nv50_evo_fini(struct drm_device *dev);
|
||||
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)
|
||||
{
|
||||
struct nv50_display *disp = nv50_display(dev);
|
||||
@ -235,7 +235,7 @@ nv50_evo_destroy(struct drm_device *dev)
|
||||
nv50_evo_channel_del(&disp->master);
|
||||
}
|
||||
|
||||
static int
|
||||
int
|
||||
nv50_evo_create(struct drm_device *dev)
|
||||
{
|
||||
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);
|
||||
int ret, i;
|
||||
|
||||
if (!disp->master) {
|
||||
ret = nv50_evo_create(dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = nv50_evo_channel_init(disp->master);
|
||||
if (ret)
|
||||
return ret;
|
||||
@ -420,6 +414,4 @@ nv50_evo_fini(struct drm_device *dev)
|
||||
|
||||
if (disp->master)
|
||||
nv50_evo_channel_fini(disp->master);
|
||||
|
||||
nv50_evo_destroy(dev);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user