diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2011-11-12 17:52:07 +0400 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2011-12-21 13:01:37 +0400 |
commit | 8a46438a6a7492296c5dbfcc8e4a5106ab37bca8 (patch) | |
tree | 7eeea0d58375f973effc4d58937490955312765f /drivers/gpu/drm/nouveau/nvd0_display.c | |
parent | 3376ee374d2318d311bd3aa7b9bb0186f64ccca5 (diff) | |
download | linux-8a46438a6a7492296c5dbfcc8e4a5106ab37bca8.tar.xz |
drm/nvd0/disp: initialise overlay channels
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvd0_display.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nvd0_display.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/gpu/drm/nouveau/nvd0_display.c b/drivers/gpu/drm/nouveau/nvd0_display.c index dec1dd844d31..8fceebd110e6 100644 --- a/drivers/gpu/drm/nouveau/nvd0_display.c +++ b/drivers/gpu/drm/nouveau/nvd0_display.c @@ -35,8 +35,12 @@ #include "nouveau_fb.h" #include "nv50_display.h" +#define EVO_DMA_NR 9 + #define EVO_MASTER (0x00) #define EVO_SYNC(c) (0x01 + (c)) +#define EVO_OVLY(c) (0x05 + (c)) +#define EVO_OIMM(c) (0x09 + (c)) #define EVO_CURS(c) (0x0d + (c)) struct evo { @@ -52,7 +56,7 @@ struct evo { struct nvd0_display { struct nouveau_gpuobj *mem; - struct evo evo[3]; + struct evo evo[9]; struct tasklet_struct tasklet; u32 modeset; @@ -1642,9 +1646,11 @@ nvd0_display_fini(struct drm_device *dev) { int i; - /* fini cursors + syncs */ + /* fini cursors + overlays + syncs */ for (i = 1; i >= 0; i--) { evo_fini_pio(dev, EVO_CURS(i)); + evo_fini_pio(dev, EVO_OIMM(i)); + evo_fini_dma(dev, EVO_OVLY(i)); evo_fini_dma(dev, EVO_SYNC(i)); } @@ -1700,9 +1706,11 @@ nvd0_display_init(struct drm_device *dev) if (ret) goto error; - /* init syncs + cursors */ + /* init syncs + overlays + cursors */ for (i = 0; i < dev->mode_config.num_crtc; i++) { if ((ret = evo_init_dma(dev, EVO_SYNC(i))) || + (ret = evo_init_dma(dev, EVO_OVLY(i))) || + (ret = evo_init_pio(dev, EVO_OIMM(i))) || (ret = evo_init_pio(dev, EVO_CURS(i)))) goto error; } @@ -1736,7 +1744,7 @@ nvd0_display_destroy(struct drm_device *dev) struct pci_dev *pdev = dev->pdev; int i; - for (i = 0; i < 3; i++) { + for (i = 0; i < EVO_DMA_NR; i++) { struct evo *evo = &disp->evo[i]; nouveau_bo_unmap(evo->sem.bo); nouveau_bo_ref(NULL, &evo->sem.bo); @@ -1822,7 +1830,7 @@ nvd0_display_create(struct drm_device *dev) goto out; /* create evo dma channels */ - for (i = 0; i < 3; i++) { + for (i = 0; i < EVO_DMA_NR; i++) { struct evo *evo = &disp->evo[i]; u32 dmao = 0x1000 + (i * 0x100); u32 hash = 0x0000 + (i * 0x040); |