aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/si.c
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2017-02-26 15:34:42 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2017-02-26 15:34:42 -0500
commit8e22e1b3499a446df48c2b26667ca36c55bf864c (patch)
tree5329f98b3eb3c95a9dcbab0fa4f9b6e62f0e788d /drivers/gpu/drm/amd/amdgpu/si.c
parent00d3c14f14d51babd8aeafd5fa734ccf04f5ca3d (diff)
parent64a577196d66b44e37384bc5c4d78c61f59d5b2a (diff)
Merge airlied/drm-next into drm-misc-next
Backmerge the main pull request to sync up with all the newly landed drivers. Otherwise we'll have chaos even before 4.12 started in earnest. Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/si.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/si.c90
1 files changed, 73 insertions, 17 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/si.c b/drivers/gpu/drm/amd/amdgpu/si.c
index da46992f7b18..b71e3faa40db 100644
--- a/drivers/gpu/drm/amd/amdgpu/si.c
+++ b/drivers/gpu/drm/amd/amdgpu/si.c
@@ -1010,24 +1010,81 @@ static struct amdgpu_allowed_register_entry si_allowed_read_registers[] = {
1010 {PA_SC_RASTER_CONFIG, false, true}, 1010 {PA_SC_RASTER_CONFIG, false, true},
1011}; 1011};
1012 1012
1013static uint32_t si_read_indexed_register(struct amdgpu_device *adev, 1013static uint32_t si_get_register_value(struct amdgpu_device *adev,
1014 u32 se_num, u32 sh_num, 1014 bool indexed, u32 se_num,
1015 u32 reg_offset) 1015 u32 sh_num, u32 reg_offset)
1016{ 1016{
1017 uint32_t val; 1017 if (indexed) {
1018 uint32_t val;
1019 unsigned se_idx = (se_num == 0xffffffff) ? 0 : se_num;
1020 unsigned sh_idx = (sh_num == 0xffffffff) ? 0 : sh_num;
1021
1022 switch (reg_offset) {
1023 case mmCC_RB_BACKEND_DISABLE:
1024 return adev->gfx.config.rb_config[se_idx][sh_idx].rb_backend_disable;
1025 case mmGC_USER_RB_BACKEND_DISABLE:
1026 return adev->gfx.config.rb_config[se_idx][sh_idx].user_rb_backend_disable;
1027 case mmPA_SC_RASTER_CONFIG:
1028 return adev->gfx.config.rb_config[se_idx][sh_idx].raster_config;
1029 }
1018 1030
1019 mutex_lock(&adev->grbm_idx_mutex); 1031 mutex_lock(&adev->grbm_idx_mutex);
1020 if (se_num != 0xffffffff || sh_num != 0xffffffff) 1032 if (se_num != 0xffffffff || sh_num != 0xffffffff)
1021 amdgpu_gfx_select_se_sh(adev, se_num, sh_num, 0xffffffff); 1033 amdgpu_gfx_select_se_sh(adev, se_num, sh_num, 0xffffffff);
1022 1034
1023 val = RREG32(reg_offset); 1035 val = RREG32(reg_offset);
1024 1036
1025 if (se_num != 0xffffffff || sh_num != 0xffffffff) 1037 if (se_num != 0xffffffff || sh_num != 0xffffffff)
1026 amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); 1038 amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
1027 mutex_unlock(&adev->grbm_idx_mutex); 1039 mutex_unlock(&adev->grbm_idx_mutex);
1028 return val; 1040 return val;
1041 } else {
1042 unsigned idx;
1043
1044 switch (reg_offset) {
1045 case mmGB_ADDR_CONFIG:
1046 return adev->gfx.config.gb_addr_config;
1047 case mmMC_ARB_RAMCFG:
1048 return adev->gfx.config.mc_arb_ramcfg;
1049 case mmGB_TILE_MODE0:
1050 case mmGB_TILE_MODE1:
1051 case mmGB_TILE_MODE2:
1052 case mmGB_TILE_MODE3:
1053 case mmGB_TILE_MODE4:
1054 case mmGB_TILE_MODE5:
1055 case mmGB_TILE_MODE6:
1056 case mmGB_TILE_MODE7:
1057 case mmGB_TILE_MODE8:
1058 case mmGB_TILE_MODE9:
1059 case mmGB_TILE_MODE10:
1060 case mmGB_TILE_MODE11:
1061 case mmGB_TILE_MODE12:
1062 case mmGB_TILE_MODE13:
1063 case mmGB_TILE_MODE14:
1064 case mmGB_TILE_MODE15:
1065 case mmGB_TILE_MODE16:
1066 case mmGB_TILE_MODE17:
1067 case mmGB_TILE_MODE18:
1068 case mmGB_TILE_MODE19:
1069 case mmGB_TILE_MODE20:
1070 case mmGB_TILE_MODE21:
1071 case mmGB_TILE_MODE22:
1072 case mmGB_TILE_MODE23:
1073 case mmGB_TILE_MODE24:
1074 case mmGB_TILE_MODE25:
1075 case mmGB_TILE_MODE26:
1076 case mmGB_TILE_MODE27:
1077 case mmGB_TILE_MODE28:
1078 case mmGB_TILE_MODE29:
1079 case mmGB_TILE_MODE30:
1080 case mmGB_TILE_MODE31:
1081 idx = (reg_offset - mmGB_TILE_MODE0);
1082 return adev->gfx.config.tile_mode_array[idx];
1083 default:
1084 return RREG32(reg_offset);
1085 }
1086 }
1029} 1087}
1030
1031static int si_read_register(struct amdgpu_device *adev, u32 se_num, 1088static int si_read_register(struct amdgpu_device *adev, u32 se_num,
1032 u32 sh_num, u32 reg_offset, u32 *value) 1089 u32 sh_num, u32 reg_offset, u32 *value)
1033{ 1090{
@@ -1039,10 +1096,9 @@ static int si_read_register(struct amdgpu_device *adev, u32 se_num,
1039 continue; 1096 continue;
1040 1097
1041 if (!si_allowed_read_registers[i].untouched) 1098 if (!si_allowed_read_registers[i].untouched)
1042 *value = si_allowed_read_registers[i].grbm_indexed ? 1099 *value = si_get_register_value(adev,
1043 si_read_indexed_register(adev, se_num, 1100 si_allowed_read_registers[i].grbm_indexed,
1044 sh_num, reg_offset) : 1101 se_num, sh_num, reg_offset);
1045 RREG32(reg_offset);
1046 return 0; 1102 return 0;
1047 } 1103 }
1048 return -EINVAL; 1104 return -EINVAL;