aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/cik.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/cik.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/cik.c128
1 files changed, 112 insertions, 16 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/cik.c b/drivers/gpu/drm/amd/amdgpu/cik.c
index 567c4a5cf90c..a296f7bbe57c 100644
--- a/drivers/gpu/drm/amd/amdgpu/cik.c
+++ b/drivers/gpu/drm/amd/amdgpu/cik.c
@@ -65,6 +65,7 @@
65#include "oss/oss_2_0_d.h" 65#include "oss/oss_2_0_d.h"
66#include "oss/oss_2_0_sh_mask.h" 66#include "oss/oss_2_0_sh_mask.h"
67 67
68#include "amdgpu_dm.h"
68#include "amdgpu_amdkfd.h" 69#include "amdgpu_amdkfd.h"
69#include "amdgpu_powerplay.h" 70#include "amdgpu_powerplay.h"
70#include "dce_virtual.h" 71#include "dce_virtual.h"
@@ -1022,22 +1023,101 @@ static const struct amdgpu_allowed_register_entry cik_allowed_read_registers[] =
1022 {mmPA_SC_RASTER_CONFIG_1, true}, 1023 {mmPA_SC_RASTER_CONFIG_1, true},
1023}; 1024};
1024 1025
1025static uint32_t cik_read_indexed_register(struct amdgpu_device *adev, 1026
1026 u32 se_num, u32 sh_num, 1027static uint32_t cik_get_register_value(struct amdgpu_device *adev,
1027 u32 reg_offset) 1028 bool indexed, u32 se_num,
1029 u32 sh_num, u32 reg_offset)
1028{ 1030{
1029 uint32_t val; 1031 if (indexed) {
1032 uint32_t val;
1033 unsigned se_idx = (se_num == 0xffffffff) ? 0 : se_num;
1034 unsigned sh_idx = (sh_num == 0xffffffff) ? 0 : sh_num;
1035
1036 switch (reg_offset) {
1037 case mmCC_RB_BACKEND_DISABLE:
1038 return adev->gfx.config.rb_config[se_idx][sh_idx].rb_backend_disable;
1039 case mmGC_USER_RB_BACKEND_DISABLE:
1040 return adev->gfx.config.rb_config[se_idx][sh_idx].user_rb_backend_disable;
1041 case mmPA_SC_RASTER_CONFIG:
1042 return adev->gfx.config.rb_config[se_idx][sh_idx].raster_config;
1043 case mmPA_SC_RASTER_CONFIG_1:
1044 return adev->gfx.config.rb_config[se_idx][sh_idx].raster_config_1;
1045 }
1030 1046
1031 mutex_lock(&adev->grbm_idx_mutex); 1047 mutex_lock(&adev->grbm_idx_mutex);
1032 if (se_num != 0xffffffff || sh_num != 0xffffffff) 1048 if (se_num != 0xffffffff || sh_num != 0xffffffff)
1033 amdgpu_gfx_select_se_sh(adev, se_num, sh_num, 0xffffffff); 1049 amdgpu_gfx_select_se_sh(adev, se_num, sh_num, 0xffffffff);
1034 1050
1035 val = RREG32(reg_offset); 1051 val = RREG32(reg_offset);
1036 1052
1037 if (se_num != 0xffffffff || sh_num != 0xffffffff) 1053 if (se_num != 0xffffffff || sh_num != 0xffffffff)
1038 amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); 1054 amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
1039 mutex_unlock(&adev->grbm_idx_mutex); 1055 mutex_unlock(&adev->grbm_idx_mutex);
1040 return val; 1056 return val;
1057 } else {
1058 unsigned idx;
1059
1060 switch (reg_offset) {
1061 case mmGB_ADDR_CONFIG:
1062 return adev->gfx.config.gb_addr_config;
1063 case mmMC_ARB_RAMCFG:
1064 return adev->gfx.config.mc_arb_ramcfg;
1065 case mmGB_TILE_MODE0:
1066 case mmGB_TILE_MODE1:
1067 case mmGB_TILE_MODE2:
1068 case mmGB_TILE_MODE3:
1069 case mmGB_TILE_MODE4:
1070 case mmGB_TILE_MODE5:
1071 case mmGB_TILE_MODE6:
1072 case mmGB_TILE_MODE7:
1073 case mmGB_TILE_MODE8:
1074 case mmGB_TILE_MODE9:
1075 case mmGB_TILE_MODE10:
1076 case mmGB_TILE_MODE11:
1077 case mmGB_TILE_MODE12:
1078 case mmGB_TILE_MODE13:
1079 case mmGB_TILE_MODE14:
1080 case mmGB_TILE_MODE15:
1081 case mmGB_TILE_MODE16:
1082 case mmGB_TILE_MODE17:
1083 case mmGB_TILE_MODE18:
1084 case mmGB_TILE_MODE19:
1085 case mmGB_TILE_MODE20:
1086 case mmGB_TILE_MODE21:
1087 case mmGB_TILE_MODE22:
1088 case mmGB_TILE_MODE23:
1089 case mmGB_TILE_MODE24:
1090 case mmGB_TILE_MODE25:
1091 case mmGB_TILE_MODE26:
1092 case mmGB_TILE_MODE27:
1093 case mmGB_TILE_MODE28:
1094 case mmGB_TILE_MODE29:
1095 case mmGB_TILE_MODE30:
1096 case mmGB_TILE_MODE31:
1097 idx = (reg_offset - mmGB_TILE_MODE0);
1098 return adev->gfx.config.tile_mode_array[idx];
1099 case mmGB_MACROTILE_MODE0:
1100 case mmGB_MACROTILE_MODE1:
1101 case mmGB_MACROTILE_MODE2:
1102 case mmGB_MACROTILE_MODE3:
1103 case mmGB_MACROTILE_MODE4:
1104 case mmGB_MACROTILE_MODE5:
1105 case mmGB_MACROTILE_MODE6:
1106 case mmGB_MACROTILE_MODE7:
1107 case mmGB_MACROTILE_MODE8:
1108 case mmGB_MACROTILE_MODE9:
1109 case mmGB_MACROTILE_MODE10:
1110 case mmGB_MACROTILE_MODE11:
1111 case mmGB_MACROTILE_MODE12:
1112 case mmGB_MACROTILE_MODE13:
1113 case mmGB_MACROTILE_MODE14:
1114 case mmGB_MACROTILE_MODE15:
1115 idx = (reg_offset - mmGB_MACROTILE_MODE0);
1116 return adev->gfx.config.macrotile_mode_array[idx];
1117 default:
1118 return RREG32(reg_offset);
1119 }
1120 }
1041} 1121}
1042 1122
1043static int cik_read_register(struct amdgpu_device *adev, u32 se_num, 1123static int cik_read_register(struct amdgpu_device *adev, u32 se_num,
@@ -1047,13 +1127,13 @@ static int cik_read_register(struct amdgpu_device *adev, u32 se_num,
1047 1127
1048 *value = 0; 1128 *value = 0;
1049 for (i = 0; i < ARRAY_SIZE(cik_allowed_read_registers); i++) { 1129 for (i = 0; i < ARRAY_SIZE(cik_allowed_read_registers); i++) {
1130 bool indexed = cik_allowed_read_registers[i].grbm_indexed;
1131
1050 if (reg_offset != cik_allowed_read_registers[i].reg_offset) 1132 if (reg_offset != cik_allowed_read_registers[i].reg_offset)
1051 continue; 1133 continue;
1052 1134
1053 *value = cik_allowed_read_registers[i].grbm_indexed ? 1135 *value = cik_get_register_value(adev, indexed, se_num, sh_num,
1054 cik_read_indexed_register(adev, se_num, 1136 reg_offset);
1055 sh_num, reg_offset) :
1056 RREG32(reg_offset);
1057 return 0; 1137 return 0;
1058 } 1138 }
1059 return -EINVAL; 1139 return -EINVAL;
@@ -1900,6 +1980,10 @@ int cik_set_ip_blocks(struct amdgpu_device *adev)
1900 amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 1980 amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block);
1901 if (adev->enable_virtual_display) 1981 if (adev->enable_virtual_display)
1902 amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 1982 amdgpu_ip_block_add(adev, &dce_virtual_ip_block);
1983#if defined(CONFIG_DRM_AMD_DC)
1984 else if (amdgpu_device_has_dc_support(adev))
1985 amdgpu_ip_block_add(adev, &dm_ip_block);
1986#endif
1903 else 1987 else
1904 amdgpu_ip_block_add(adev, &dce_v8_2_ip_block); 1988 amdgpu_ip_block_add(adev, &dce_v8_2_ip_block);
1905 amdgpu_ip_block_add(adev, &gfx_v7_2_ip_block); 1989 amdgpu_ip_block_add(adev, &gfx_v7_2_ip_block);
@@ -1914,6 +1998,10 @@ int cik_set_ip_blocks(struct amdgpu_device *adev)
1914 amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 1998 amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block);
1915 if (adev->enable_virtual_display) 1999 if (adev->enable_virtual_display)
1916 amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 2000 amdgpu_ip_block_add(adev, &dce_virtual_ip_block);
2001#if defined(CONFIG_DRM_AMD_DC)
2002 else if (amdgpu_device_has_dc_support(adev))
2003 amdgpu_ip_block_add(adev, &dm_ip_block);
2004#endif
1917 else 2005 else
1918 amdgpu_ip_block_add(adev, &dce_v8_5_ip_block); 2006 amdgpu_ip_block_add(adev, &dce_v8_5_ip_block);
1919 amdgpu_ip_block_add(adev, &gfx_v7_3_ip_block); 2007 amdgpu_ip_block_add(adev, &gfx_v7_3_ip_block);
@@ -1928,6 +2016,10 @@ int cik_set_ip_blocks(struct amdgpu_device *adev)
1928 amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 2016 amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block);
1929 if (adev->enable_virtual_display) 2017 if (adev->enable_virtual_display)
1930 amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 2018 amdgpu_ip_block_add(adev, &dce_virtual_ip_block);
2019#if defined(CONFIG_DRM_AMD_DC)
2020 else if (amdgpu_device_has_dc_support(adev))
2021 amdgpu_ip_block_add(adev, &dm_ip_block);
2022#endif
1931 else 2023 else
1932 amdgpu_ip_block_add(adev, &dce_v8_1_ip_block); 2024 amdgpu_ip_block_add(adev, &dce_v8_1_ip_block);
1933 amdgpu_ip_block_add(adev, &gfx_v7_1_ip_block); 2025 amdgpu_ip_block_add(adev, &gfx_v7_1_ip_block);
@@ -1943,6 +2035,10 @@ int cik_set_ip_blocks(struct amdgpu_device *adev)
1943 amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block); 2035 amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block);
1944 if (adev->enable_virtual_display) 2036 if (adev->enable_virtual_display)
1945 amdgpu_ip_block_add(adev, &dce_virtual_ip_block); 2037 amdgpu_ip_block_add(adev, &dce_virtual_ip_block);
2038#if defined(CONFIG_DRM_AMD_DC)
2039 else if (amdgpu_device_has_dc_support(adev))
2040 amdgpu_ip_block_add(adev, &dm_ip_block);
2041#endif
1946 else 2042 else
1947 amdgpu_ip_block_add(adev, &dce_v8_3_ip_block); 2043 amdgpu_ip_block_add(adev, &dce_v8_3_ip_block);
1948 amdgpu_ip_block_add(adev, &gfx_v7_2_ip_block); 2044 amdgpu_ip_block_add(adev, &gfx_v7_2_ip_block);