[PATCH] drm/radeon/kms: correctness fixes for evergreen/cayman tiling
Alex Deucher
alexdeucher at gmail.com
Tue Jun 7 10:56:01 PDT 2011
We don't actually use the tiling setup in the CS checker for
evergreen/cayman yet, but we might as well set it up properly
in case we ever enable it.
Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
---
drivers/gpu/drm/radeon/evergreen.c | 15 ++++++++++++---
drivers/gpu/drm/radeon/evergreen_cs.c | 12 +++++++++---
drivers/gpu/drm/radeon/ni.c | 12 +++++++++++-
drivers/gpu/drm/radeon/radeon.h | 3 +++
4 files changed, 35 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
index 9c81b25..76d507c 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -2006,14 +2006,23 @@ static void evergreen_gpu_init(struct radeon_device *rdev)
rdev->config.evergreen.tile_config |= (3 << 0);
break;
}
+ rdev->config.evergreen.tiling_npipes = rdev->config.evergreen.max_tile_pipes;
/* num banks is 8 on all fusion asics */
if (rdev->flags & RADEON_IS_IGP)
- rdev->config.evergreen.tile_config |= 8 << 4;
+ rdev->config.evergreen.tiling_nbanks = 8;
else
- rdev->config.evergreen.tile_config |=
- ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT) << 4;
+ rdev->config.evergreen.tiling_nbanks =
+ ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT);
+ rdev->config.evergreen.tile_config |=
+ rdev->config.evergreen.tiling_nbanks << 4;
+ /* group size */
rdev->config.evergreen.tile_config |=
((mc_arb_ramcfg & BURSTLENGTH_MASK) >> BURSTLENGTH_SHIFT) << 8;
+ if (mc_arb_ramcfg & BURSTLENGTH_MASK)
+ rdev->config.evergreen.tiling_group_size = 512;
+ else
+ rdev->config.evergreen.tiling_group_size = 256;
+ /* row size */
rdev->config.evergreen.tile_config |=
((gb_addr_config & 0x30000000) >> 28) << 12;
diff --git a/drivers/gpu/drm/radeon/evergreen_cs.c b/drivers/gpu/drm/radeon/evergreen_cs.c
index 7a833dc..7bdaf41 100644
--- a/drivers/gpu/drm/radeon/evergreen_cs.c
+++ b/drivers/gpu/drm/radeon/evergreen_cs.c
@@ -1410,9 +1410,15 @@ int evergreen_cs_parse(struct radeon_cs_parser *p)
if (track == NULL)
return -ENOMEM;
evergreen_cs_track_init(track);
- track->npipes = p->rdev->config.evergreen.tiling_npipes;
- track->nbanks = p->rdev->config.evergreen.tiling_nbanks;
- track->group_size = p->rdev->config.evergreen.tiling_group_size;
+ if (p->rdev->family >= CHIP_CAYMAN) {
+ track->npipes = p->rdev->config.cayman.tiling_npipes;
+ track->nbanks = p->rdev->config.cayman.tiling_nbanks;
+ track->group_size = p->rdev->config.cayman.tiling_group_size;
+ } else {
+ track->npipes = p->rdev->config.evergreen.tiling_npipes;
+ track->nbanks = p->rdev->config.evergreen.tiling_nbanks;
+ track->group_size = p->rdev->config.evergreen.tiling_group_size;
+ }
p->track = track;
}
do {
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index 16caafe..05ab6f9 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -826,10 +826,20 @@ static void cayman_gpu_init(struct radeon_device *rdev)
rdev->config.cayman.tile_config |= (3 << 0);
break;
}
+ rdev->config.cayman.tiling_npipes = rdev->config.cayman.max_tile_pipes;
+ /* num banks */
+ rdev->config.cayman.tiling_nbanks =
+ ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT);
rdev->config.cayman.tile_config |=
- ((mc_arb_ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT) << 4;
+ rdev->config.cayman.tiling_nbanks << 4;
+ /* group size */
rdev->config.cayman.tile_config |=
((gb_addr_config & PIPE_INTERLEAVE_SIZE_MASK) >> PIPE_INTERLEAVE_SIZE_SHIFT) << 8;
+ if (gb_addr_config & PIPE_INTERLEAVE_SIZE_MASK)
+ rdev->config.cayman.tiling_group_size = 512;
+ else
+ rdev->config.cayman.tiling_group_size = 256;
+ /* row size */
rdev->config.cayman.tile_config |=
((gb_addr_config & ROW_SIZE_MASK) >> ROW_SIZE_SHIFT) << 12;
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 90dc53b..625f1af 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -1141,6 +1141,9 @@ struct cayman_asic {
unsigned num_gpus;
unsigned multi_gpu_tile_size;
+ unsigned tiling_nbanks;
+ unsigned tiling_npipes;
+ unsigned tiling_group_size;
unsigned tile_config;
struct r100_gpu_lockup lockup;
};
--
1.7.1.1
More information about the dri-devel
mailing list