#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 {
struct nvd0_display {
struct nouveau_gpuobj *mem;
- struct evo evo[3];
+ struct evo evo[9];
struct tasklet_struct tasklet;
u32 modeset;
{
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));
}
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;
}
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);
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);