diff options
author | Francisco Jerez <currojerez@riseup.net> | 2010-10-24 10:36:12 -0400 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2010-12-03 00:11:21 -0500 |
commit | 87a326a38589e1c919af5f86a59cd571ff0aa831 (patch) | |
tree | c8e829f79f4f20bc876d73ba7c3d545b15d12ee0 /drivers/gpu/drm/nouveau/nv20_graph.c | |
parent | a5cf68b04b2b8ea716cf6fd8499c1c54d05fdf5e (diff) |
drm/nv20: Add Z compression support.
Signed-off-by: Francisco Jerez <currojerez@riseup.net>
Tested-by: Xavier Chantry <chantry.xavier@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nv20_graph.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nv20_graph.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/gpu/drm/nouveau/nv20_graph.c b/drivers/gpu/drm/nouveau/nv20_graph.c index a71871b91c69..bd065c2fcba4 100644 --- a/drivers/gpu/drm/nouveau/nv20_graph.c +++ b/drivers/gpu/drm/nouveau/nv20_graph.c | |||
@@ -526,6 +526,12 @@ nv20_graph_set_tile_region(struct drm_device *dev, int i) | |||
526 | nv_wr32(dev, NV10_PGRAPH_RDI_DATA, tile->pitch); | 526 | nv_wr32(dev, NV10_PGRAPH_RDI_DATA, tile->pitch); |
527 | nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0010 + 4 * i); | 527 | nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0010 + 4 * i); |
528 | nv_wr32(dev, NV10_PGRAPH_RDI_DATA, tile->addr); | 528 | nv_wr32(dev, NV10_PGRAPH_RDI_DATA, tile->addr); |
529 | |||
530 | if (dev_priv->card_type == NV_20) { | ||
531 | nv_wr32(dev, NV20_PGRAPH_ZCOMP(i), tile->zcomp); | ||
532 | nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00ea0090 + 4 * i); | ||
533 | nv_wr32(dev, NV10_PGRAPH_RDI_DATA, tile->zcomp); | ||
534 | } | ||
529 | } | 535 | } |
530 | 536 | ||
531 | int | 537 | int |
@@ -589,16 +595,17 @@ nv20_graph_init(struct drm_device *dev) | |||
589 | nv_wr32(dev, 0x40009C , 0x00000040); | 595 | nv_wr32(dev, 0x40009C , 0x00000040); |
590 | 596 | ||
591 | if (dev_priv->chipset >= 0x25) { | 597 | if (dev_priv->chipset >= 0x25) { |
592 | nv_wr32(dev, 0x400890, 0x00080000); | 598 | nv_wr32(dev, 0x400890, 0x00a8cfff); |
593 | nv_wr32(dev, 0x400610, 0x304B1FB6); | 599 | nv_wr32(dev, 0x400610, 0x304B1FB6); |
594 | nv_wr32(dev, 0x400B80, 0x18B82880); | 600 | nv_wr32(dev, 0x400B80, 0x1cbd3883); |
595 | nv_wr32(dev, 0x400B84, 0x44000000); | 601 | nv_wr32(dev, 0x400B84, 0x44000000); |
596 | nv_wr32(dev, 0x400098, 0x40000080); | 602 | nv_wr32(dev, 0x400098, 0x40000080); |
597 | nv_wr32(dev, 0x400B88, 0x000000ff); | 603 | nv_wr32(dev, 0x400B88, 0x000000ff); |
604 | |||
598 | } else { | 605 | } else { |
599 | nv_wr32(dev, 0x400880, 0x00080000); /* 0x0008c7df */ | 606 | nv_wr32(dev, 0x400880, 0x0008c7df); |
600 | nv_wr32(dev, 0x400094, 0x00000005); | 607 | nv_wr32(dev, 0x400094, 0x00000005); |
601 | nv_wr32(dev, 0x400B80, 0x45CAA208); /* 0x45eae20e */ | 608 | nv_wr32(dev, 0x400B80, 0x45eae20e); |
602 | nv_wr32(dev, 0x400B84, 0x24000000); | 609 | nv_wr32(dev, 0x400B84, 0x24000000); |
603 | nv_wr32(dev, 0x400098, 0x00000040); | 610 | nv_wr32(dev, 0x400098, 0x00000040); |
604 | nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00E00038); | 611 | nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00E00038); |
@@ -611,12 +618,6 @@ nv20_graph_init(struct drm_device *dev) | |||
611 | for (i = 0; i < NV10_PFB_TILE__SIZE; i++) | 618 | for (i = 0; i < NV10_PFB_TILE__SIZE; i++) |
612 | nv20_graph_set_tile_region(dev, i); | 619 | nv20_graph_set_tile_region(dev, i); |
613 | 620 | ||
614 | for (i = 0; i < 8; i++) { | ||
615 | nv_wr32(dev, 0x400980 + i * 4, nv_rd32(dev, 0x100300 + i * 4)); | ||
616 | nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA0090 + i * 4); | ||
617 | nv_wr32(dev, NV10_PGRAPH_RDI_DATA, | ||
618 | nv_rd32(dev, 0x100300 + i * 4)); | ||
619 | } | ||
620 | nv_wr32(dev, 0x4009a0, nv_rd32(dev, 0x100324)); | 621 | nv_wr32(dev, 0x4009a0, nv_rd32(dev, 0x100324)); |
621 | nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA000C); | 622 | nv_wr32(dev, NV10_PGRAPH_RDI_INDEX, 0x00EA000C); |
622 | nv_wr32(dev, NV10_PGRAPH_RDI_DATA, nv_rd32(dev, 0x100324)); | 623 | nv_wr32(dev, NV10_PGRAPH_RDI_DATA, nv_rd32(dev, 0x100324)); |