diff options
author | Michel Dänzer <michel.daenzer@amd.com> | 2013-11-18 04:26:00 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2013-11-18 09:19:36 -0500 |
commit | 32f79a8a82b2ff6f1828b258da214869adc2a28c (patch) | |
tree | 660ce0abbf61ca8d13a8d8d5c7c2d98199d856f3 /drivers/gpu | |
parent | 1ddce27d8f0ae3f911850e06a4937de89645dfa7 (diff) |
drm/radeon/cik: Add macrotile mode array query
This is required to properly calculate the tiling parameters
in userspace.
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/radeon/cik.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_drv.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_kms.c | 9 |
4 files changed, 15 insertions, 1 deletions
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c index 08aa58ef8d0a..b43a3a3c9067 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c | |||
@@ -2427,6 +2427,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2427 | gb_tile_moden = 0; | 2427 | gb_tile_moden = 0; |
2428 | break; | 2428 | break; |
2429 | } | 2429 | } |
2430 | rdev->config.cik.macrotile_mode_array[reg_offset] = gb_tile_moden; | ||
2430 | WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), gb_tile_moden); | 2431 | WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), gb_tile_moden); |
2431 | } | 2432 | } |
2432 | } else if (num_pipe_configs == 4) { | 2433 | } else if (num_pipe_configs == 4) { |
@@ -2773,6 +2774,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2773 | gb_tile_moden = 0; | 2774 | gb_tile_moden = 0; |
2774 | break; | 2775 | break; |
2775 | } | 2776 | } |
2777 | rdev->config.cik.macrotile_mode_array[reg_offset] = gb_tile_moden; | ||
2776 | WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), gb_tile_moden); | 2778 | WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), gb_tile_moden); |
2777 | } | 2779 | } |
2778 | } else if (num_pipe_configs == 2) { | 2780 | } else if (num_pipe_configs == 2) { |
@@ -2990,6 +2992,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2990 | gb_tile_moden = 0; | 2992 | gb_tile_moden = 0; |
2991 | break; | 2993 | break; |
2992 | } | 2994 | } |
2995 | rdev->config.cik.macrotile_mode_array[reg_offset] = gb_tile_moden; | ||
2993 | WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), gb_tile_moden); | 2996 | WREG32(GB_MACROTILE_MODE0 + (reg_offset * 4), gb_tile_moden); |
2994 | } | 2997 | } |
2995 | } else | 2998 | } else |
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index 4970ac0ebc80..ecf2a3960c07 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h | |||
@@ -1982,6 +1982,7 @@ struct cik_asic { | |||
1982 | 1982 | ||
1983 | unsigned tile_config; | 1983 | unsigned tile_config; |
1984 | uint32_t tile_mode_array[32]; | 1984 | uint32_t tile_mode_array[32]; |
1985 | uint32_t macrotile_mode_array[16]; | ||
1985 | }; | 1986 | }; |
1986 | 1987 | ||
1987 | union radeon_asic_config { | 1988 | union radeon_asic_config { |
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index 1aee32213f66..9f5ff28864f6 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c | |||
@@ -76,9 +76,10 @@ | |||
76 | * 2.32.0 - new info request for rings working | 76 | * 2.32.0 - new info request for rings working |
77 | * 2.33.0 - Add SI tiling mode array query | 77 | * 2.33.0 - Add SI tiling mode array query |
78 | * 2.34.0 - Add CIK tiling mode array query | 78 | * 2.34.0 - Add CIK tiling mode array query |
79 | * 2.35.0 - Add CIK macrotile mode array query | ||
79 | */ | 80 | */ |
80 | #define KMS_DRIVER_MAJOR 2 | 81 | #define KMS_DRIVER_MAJOR 2 |
81 | #define KMS_DRIVER_MINOR 34 | 82 | #define KMS_DRIVER_MINOR 35 |
82 | #define KMS_DRIVER_PATCHLEVEL 0 | 83 | #define KMS_DRIVER_PATCHLEVEL 0 |
83 | int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags); | 84 | int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags); |
84 | int radeon_driver_unload_kms(struct drm_device *dev); | 85 | int 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 fa42c81da500..55d0b474bd37 100644 --- a/drivers/gpu/drm/radeon/radeon_kms.c +++ b/drivers/gpu/drm/radeon/radeon_kms.c | |||
@@ -449,6 +449,15 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) | |||
449 | return -EINVAL; | 449 | return -EINVAL; |
450 | } | 450 | } |
451 | break; | 451 | break; |
452 | case RADEON_INFO_CIK_MACROTILE_MODE_ARRAY: | ||
453 | if (rdev->family >= CHIP_BONAIRE) { | ||
454 | value = rdev->config.cik.macrotile_mode_array; | ||
455 | value_size = sizeof(uint32_t)*16; | ||
456 | } else { | ||
457 | DRM_DEBUG_KMS("macrotile mode array is cik+ only!\n"); | ||
458 | return -EINVAL; | ||
459 | } | ||
460 | break; | ||
452 | case RADEON_INFO_SI_CP_DMA_COMPUTE: | 461 | case RADEON_INFO_SI_CP_DMA_COMPUTE: |
453 | *value = 1; | 462 | *value = 1; |
454 | break; | 463 | break; |