aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/radeon
diff options
context:
space:
mode:
authorAlex Deucher <alexdeucher@gmail.com>2010-06-04 13:10:12 -0400
committerDave Airlie <airlied@redhat.com>2010-08-01 20:00:05 -0400
commite7aeeba6a8fb86ac52bcffa0b72942f784f2b37f (patch)
tree889d8196e31ec490beba8b801236d7734e8d36bb /drivers/gpu/drm/radeon
parent40e2a5c15d09e02a71711735564151c789f95032 (diff)
drm/radeon/kms/r6xx+: add query for tile config (v2)
Userspace needs this information to access tiled buffers via the CPU. v2: rebased on evergreen accel changes Signed-off-by: Alex Deucher <alexdeucher@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/radeon')
-rw-r--r--drivers/gpu/drm/radeon/evergreen.c1
-rw-r--r--drivers/gpu/drm/radeon/r600.c2
-rw-r--r--drivers/gpu/drm/radeon/radeon.h3
-rw-r--r--drivers/gpu/drm/radeon/radeon_drv.c3
-rw-r--r--drivers/gpu/drm/radeon/radeon_kms.c12
-rw-r--r--drivers/gpu/drm/radeon/rv770.c3
6 files changed, 21 insertions, 3 deletions
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
index 1b7da39cc587..957d5067ad9c 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -1132,6 +1132,7 @@ static void evergreen_gpu_init(struct radeon_device *rdev)
1132 rdev->config.evergreen.max_backends) & 1132 rdev->config.evergreen.max_backends) &
1133 EVERGREEN_MAX_BACKENDS_MASK)); 1133 EVERGREEN_MAX_BACKENDS_MASK));
1134 1134
1135 rdev->config.evergreen.tile_config = gb_addr_config;
1135 WREG32(GB_BACKEND_MAP, gb_backend_map); 1136 WREG32(GB_BACKEND_MAP, gb_backend_map);
1136 WREG32(GB_ADDR_CONFIG, gb_addr_config); 1137 WREG32(GB_ADDR_CONFIG, gb_addr_config);
1137 WREG32(DMIF_ADDR_CONFIG, gb_addr_config); 1138 WREG32(DMIF_ADDR_CONFIG, gb_addr_config);
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 15fe6c214034..aa36ef69ba61 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -1623,7 +1623,7 @@ void r600_gpu_init(struct radeon_device *rdev)
1623 r600_count_pipe_bits((cc_rb_backend_disable & 1623 r600_count_pipe_bits((cc_rb_backend_disable &
1624 R6XX_MAX_BACKENDS_MASK) >> 16)), 1624 R6XX_MAX_BACKENDS_MASK) >> 16)),
1625 (cc_rb_backend_disable >> 16)); 1625 (cc_rb_backend_disable >> 16));
1626 1626 rdev->config.r600.tile_config = tiling_config;
1627 tiling_config |= BACKEND_MAP(backend_map); 1627 tiling_config |= BACKEND_MAP(backend_map);
1628 WREG32(GB_TILING_CONFIG, tiling_config); 1628 WREG32(GB_TILING_CONFIG, tiling_config);
1629 WREG32(DCP_TILING_CONFIG, tiling_config & 0xffff); 1629 WREG32(DCP_TILING_CONFIG, tiling_config & 0xffff);
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index d4d776d2f1e0..be8420e65f01 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -914,6 +914,7 @@ struct r600_asic {
914 unsigned tiling_nbanks; 914 unsigned tiling_nbanks;
915 unsigned tiling_npipes; 915 unsigned tiling_npipes;
916 unsigned tiling_group_size; 916 unsigned tiling_group_size;
917 unsigned tile_config;
917 struct r100_gpu_lockup lockup; 918 struct r100_gpu_lockup lockup;
918}; 919};
919 920
@@ -938,6 +939,7 @@ struct rv770_asic {
938 unsigned tiling_nbanks; 939 unsigned tiling_nbanks;
939 unsigned tiling_npipes; 940 unsigned tiling_npipes;
940 unsigned tiling_group_size; 941 unsigned tiling_group_size;
942 unsigned tile_config;
941 struct r100_gpu_lockup lockup; 943 struct r100_gpu_lockup lockup;
942}; 944};
943 945
@@ -963,6 +965,7 @@ struct evergreen_asic {
963 unsigned tiling_nbanks; 965 unsigned tiling_nbanks;
964 unsigned tiling_npipes; 966 unsigned tiling_npipes;
965 unsigned tiling_group_size; 967 unsigned tiling_group_size;
968 unsigned tile_config;
966}; 969};
967 970
968union radeon_asic_config { 971union radeon_asic_config {
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index ed0ceb3fc40a..6f8a2e572878 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -46,9 +46,10 @@
46 * - 2.3.0 - add MSPOS + 3D texture + r500 VAP regs 46 * - 2.3.0 - add MSPOS + 3D texture + r500 VAP regs
47 * - 2.4.0 - add crtc id query 47 * - 2.4.0 - add crtc id query
48 * - 2.5.0 - add get accel 2 to work around ddx breakage for evergreen 48 * - 2.5.0 - add get accel 2 to work around ddx breakage for evergreen
49 * - 2.6.0 - add tiling config query (r6xx+)
49 */ 50 */
50#define KMS_DRIVER_MAJOR 2 51#define KMS_DRIVER_MAJOR 2
51#define KMS_DRIVER_MINOR 5 52#define KMS_DRIVER_MINOR 6
52#define KMS_DRIVER_PATCHLEVEL 0 53#define KMS_DRIVER_PATCHLEVEL 0
53int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags); 54int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
54int radeon_driver_unload_kms(struct drm_device *dev); 55int radeon_driver_unload_kms(struct drm_device *dev);
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
index 70fda6361cd0..9012e6fbadb6 100644
--- a/drivers/gpu/drm/radeon/radeon_kms.c
+++ b/drivers/gpu/drm/radeon/radeon_kms.c
@@ -147,6 +147,18 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
147 case RADEON_INFO_ACCEL_WORKING2: 147 case RADEON_INFO_ACCEL_WORKING2:
148 value = rdev->accel_working; 148 value = rdev->accel_working;
149 break; 149 break;
150 case RADEON_INFO_TILING_CONFIG:
151 if (rdev->family >= CHIP_CEDAR)
152 value = rdev->config.evergreen.tile_config;
153 else if (rdev->family >= CHIP_RV770)
154 value = rdev->config.rv770.tile_config;
155 else if (rdev->family >= CHIP_R600)
156 value = rdev->config.r600.tile_config;
157 else {
158 DRM_DEBUG("tiling config is r6xx+ only!\n");
159 return -EINVAL;
160 }
161 break;
150 default: 162 default:
151 DRM_DEBUG("Invalid request %d\n", info->request); 163 DRM_DEBUG("Invalid request %d\n", info->request);
152 return -EINVAL; 164 return -EINVAL;
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
index 836c15ab84d1..236fe6681922 100644
--- a/drivers/gpu/drm/radeon/rv770.c
+++ b/drivers/gpu/drm/radeon/rv770.c
@@ -674,8 +674,9 @@ static void rv770_gpu_init(struct radeon_device *rdev)
674 r600_count_pipe_bits((cc_rb_backend_disable & 674 r600_count_pipe_bits((cc_rb_backend_disable &
675 R7XX_MAX_BACKENDS_MASK) >> 16)), 675 R7XX_MAX_BACKENDS_MASK) >> 16)),
676 (cc_rb_backend_disable >> 16)); 676 (cc_rb_backend_disable >> 16));
677 gb_tiling_config |= BACKEND_MAP(backend_map);
678 677
678 rdev->config.rv770.tile_config = gb_tiling_config;
679 gb_tiling_config |= BACKEND_MAP(backend_map);
679 680
680 WREG32(GB_TILING_CONFIG, gb_tiling_config); 681 WREG32(GB_TILING_CONFIG, gb_tiling_config);
681 WREG32(DCP_TILING_CONFIG, (gb_tiling_config & 0xffff)); 682 WREG32(DCP_TILING_CONFIG, (gb_tiling_config & 0xffff));