aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/vi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/vi.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/vi.c120
1 files changed, 115 insertions, 5 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c
index 68552da40287..552d9e75ad1b 100644
--- a/drivers/gpu/drm/amd/amdgpu/vi.c
+++ b/drivers/gpu/drm/amd/amdgpu/vi.c
@@ -203,6 +203,17 @@ static const u32 tonga_mgcg_cgcg_init[] =
203 mmHDP_XDP_CGTT_BLK_CTRL, 0xc0000fff, 0x00000104, 203 mmHDP_XDP_CGTT_BLK_CTRL, 0xc0000fff, 0x00000104,
204}; 204};
205 205
206static const u32 fiji_mgcg_cgcg_init[] =
207{
208 mmCGTT_DRM_CLK_CTRL0, 0xffffffff, 0x00600100,
209 mmPCIE_INDEX, 0xffffffff, 0x0140001c,
210 mmPCIE_DATA, 0x000f0000, 0x00000000,
211 mmSMC_IND_INDEX_4, 0xffffffff, 0xC060000C,
212 mmSMC_IND_DATA_4, 0xc0000fff, 0x00000100,
213 mmCGTT_DRM_CLK_CTRL0, 0xff000fff, 0x00000100,
214 mmHDP_XDP_CGTT_BLK_CTRL, 0xc0000fff, 0x00000104,
215};
216
206static const u32 iceland_mgcg_cgcg_init[] = 217static const u32 iceland_mgcg_cgcg_init[] =
207{ 218{
208 mmPCIE_INDEX, 0xffffffff, ixPCIE_CNTL2, 219 mmPCIE_INDEX, 0xffffffff, ixPCIE_CNTL2,
@@ -232,6 +243,11 @@ static void vi_init_golden_registers(struct amdgpu_device *adev)
232 iceland_mgcg_cgcg_init, 243 iceland_mgcg_cgcg_init,
233 (const u32)ARRAY_SIZE(iceland_mgcg_cgcg_init)); 244 (const u32)ARRAY_SIZE(iceland_mgcg_cgcg_init));
234 break; 245 break;
246 case CHIP_FIJI:
247 amdgpu_program_register_sequence(adev,
248 fiji_mgcg_cgcg_init,
249 (const u32)ARRAY_SIZE(fiji_mgcg_cgcg_init));
250 break;
235 case CHIP_TONGA: 251 case CHIP_TONGA:
236 amdgpu_program_register_sequence(adev, 252 amdgpu_program_register_sequence(adev,
237 tonga_mgcg_cgcg_init, 253 tonga_mgcg_cgcg_init,
@@ -261,7 +277,7 @@ static u32 vi_get_xclk(struct amdgpu_device *adev)
261 u32 reference_clock = adev->clock.spll.reference_freq; 277 u32 reference_clock = adev->clock.spll.reference_freq;
262 u32 tmp; 278 u32 tmp;
263 279
264 if (adev->flags & AMDGPU_IS_APU) 280 if (adev->flags & AMD_IS_APU)
265 return reference_clock; 281 return reference_clock;
266 282
267 tmp = RREG32_SMC(ixCG_CLKPIN_CNTL_2); 283 tmp = RREG32_SMC(ixCG_CLKPIN_CNTL_2);
@@ -362,6 +378,26 @@ static struct amdgpu_allowed_register_entry cz_allowed_read_registers[] = {
362 378
363static struct amdgpu_allowed_register_entry vi_allowed_read_registers[] = { 379static struct amdgpu_allowed_register_entry vi_allowed_read_registers[] = {
364 {mmGRBM_STATUS, false}, 380 {mmGRBM_STATUS, false},
381 {mmGRBM_STATUS2, false},
382 {mmGRBM_STATUS_SE0, false},
383 {mmGRBM_STATUS_SE1, false},
384 {mmGRBM_STATUS_SE2, false},
385 {mmGRBM_STATUS_SE3, false},
386 {mmSRBM_STATUS, false},
387 {mmSRBM_STATUS2, false},
388 {mmSRBM_STATUS3, false},
389 {mmSDMA0_STATUS_REG + SDMA0_REGISTER_OFFSET, false},
390 {mmSDMA0_STATUS_REG + SDMA1_REGISTER_OFFSET, false},
391 {mmCP_STAT, false},
392 {mmCP_STALLED_STAT1, false},
393 {mmCP_STALLED_STAT2, false},
394 {mmCP_STALLED_STAT3, false},
395 {mmCP_CPF_BUSY_STAT, false},
396 {mmCP_CPF_STALLED_STAT1, false},
397 {mmCP_CPF_STATUS, false},
398 {mmCP_CPC_BUSY_STAT, false},
399 {mmCP_CPC_STALLED_STAT1, false},
400 {mmCP_CPC_STATUS, false},
365 {mmGB_ADDR_CONFIG, false}, 401 {mmGB_ADDR_CONFIG, false},
366 {mmMC_ARB_RAMCFG, false}, 402 {mmMC_ARB_RAMCFG, false},
367 {mmGB_TILE_MODE0, false}, 403 {mmGB_TILE_MODE0, false},
@@ -449,6 +485,7 @@ static int vi_read_register(struct amdgpu_device *adev, u32 se_num,
449 asic_register_table = tonga_allowed_read_registers; 485 asic_register_table = tonga_allowed_read_registers;
450 size = ARRAY_SIZE(tonga_allowed_read_registers); 486 size = ARRAY_SIZE(tonga_allowed_read_registers);
451 break; 487 break;
488 case CHIP_FIJI:
452 case CHIP_TONGA: 489 case CHIP_TONGA:
453 case CHIP_CARRIZO: 490 case CHIP_CARRIZO:
454 asic_register_table = cz_allowed_read_registers; 491 asic_register_table = cz_allowed_read_registers;
@@ -751,7 +788,7 @@ static void vi_gpu_soft_reset(struct amdgpu_device *adev, u32 reset_mask)
751 srbm_soft_reset = 788 srbm_soft_reset =
752 REG_SET_FIELD(srbm_soft_reset, SRBM_SOFT_RESET, SOFT_RESET_VCE1, 1); 789 REG_SET_FIELD(srbm_soft_reset, SRBM_SOFT_RESET, SOFT_RESET_VCE1, 1);
753 790
754 if (!(adev->flags & AMDGPU_IS_APU)) { 791 if (!(adev->flags & AMD_IS_APU)) {
755 if (reset_mask & AMDGPU_RESET_MC) 792 if (reset_mask & AMDGPU_RESET_MC)
756 srbm_soft_reset = 793 srbm_soft_reset =
757 REG_SET_FIELD(srbm_soft_reset, SRBM_SOFT_RESET, SOFT_RESET_MC, 1); 794 REG_SET_FIELD(srbm_soft_reset, SRBM_SOFT_RESET, SOFT_RESET_MC, 1);
@@ -971,7 +1008,7 @@ static void vi_pcie_gen3_enable(struct amdgpu_device *adev)
971 if (amdgpu_pcie_gen2 == 0) 1008 if (amdgpu_pcie_gen2 == 0)
972 return; 1009 return;
973 1010
974 if (adev->flags & AMDGPU_IS_APU) 1011 if (adev->flags & AMD_IS_APU)
975 return; 1012 return;
976 1013
977 ret = drm_pcie_get_speed_cap_mask(adev->ddev, &mask); 1014 ret = drm_pcie_get_speed_cap_mask(adev->ddev, &mask);
@@ -999,7 +1036,7 @@ static void vi_enable_doorbell_aperture(struct amdgpu_device *adev,
999 u32 tmp; 1036 u32 tmp;
1000 1037
1001 /* not necessary on CZ */ 1038 /* not necessary on CZ */
1002 if (adev->flags & AMDGPU_IS_APU) 1039 if (adev->flags & AMD_IS_APU)
1003 return; 1040 return;
1004 1041
1005 tmp = RREG32(mmBIF_DOORBELL_APER_EN); 1042 tmp = RREG32(mmBIF_DOORBELL_APER_EN);
@@ -1127,6 +1164,74 @@ static const struct amdgpu_ip_block_version tonga_ip_blocks[] =
1127 }, 1164 },
1128}; 1165};
1129 1166
1167static const struct amdgpu_ip_block_version fiji_ip_blocks[] =
1168{
1169 /* ORDER MATTERS! */
1170 {
1171 .type = AMD_IP_BLOCK_TYPE_COMMON,
1172 .major = 2,
1173 .minor = 0,
1174 .rev = 0,
1175 .funcs = &vi_common_ip_funcs,
1176 },
1177 {
1178 .type = AMD_IP_BLOCK_TYPE_GMC,
1179 .major = 8,
1180 .minor = 5,
1181 .rev = 0,
1182 .funcs = &gmc_v8_0_ip_funcs,
1183 },
1184 {
1185 .type = AMD_IP_BLOCK_TYPE_IH,
1186 .major = 3,
1187 .minor = 0,
1188 .rev = 0,
1189 .funcs = &tonga_ih_ip_funcs,
1190 },
1191 {
1192 .type = AMD_IP_BLOCK_TYPE_SMC,
1193 .major = 7,
1194 .minor = 1,
1195 .rev = 0,
1196 .funcs = &fiji_dpm_ip_funcs,
1197 },
1198 {
1199 .type = AMD_IP_BLOCK_TYPE_DCE,
1200 .major = 10,
1201 .minor = 1,
1202 .rev = 0,
1203 .funcs = &dce_v10_0_ip_funcs,
1204 },
1205 {
1206 .type = AMD_IP_BLOCK_TYPE_GFX,
1207 .major = 8,
1208 .minor = 0,
1209 .rev = 0,
1210 .funcs = &gfx_v8_0_ip_funcs,
1211 },
1212 {
1213 .type = AMD_IP_BLOCK_TYPE_SDMA,
1214 .major = 3,
1215 .minor = 0,
1216 .rev = 0,
1217 .funcs = &sdma_v3_0_ip_funcs,
1218 },
1219 {
1220 .type = AMD_IP_BLOCK_TYPE_UVD,
1221 .major = 6,
1222 .minor = 0,
1223 .rev = 0,
1224 .funcs = &uvd_v6_0_ip_funcs,
1225 },
1226 {
1227 .type = AMD_IP_BLOCK_TYPE_VCE,
1228 .major = 3,
1229 .minor = 0,
1230 .rev = 0,
1231 .funcs = &vce_v3_0_ip_funcs,
1232 },
1233};
1234
1130static const struct amdgpu_ip_block_version cz_ip_blocks[] = 1235static const struct amdgpu_ip_block_version cz_ip_blocks[] =
1131{ 1236{
1132 /* ORDER MATTERS! */ 1237 /* ORDER MATTERS! */
@@ -1202,6 +1307,10 @@ int vi_set_ip_blocks(struct amdgpu_device *adev)
1202 adev->ip_blocks = topaz_ip_blocks; 1307 adev->ip_blocks = topaz_ip_blocks;
1203 adev->num_ip_blocks = ARRAY_SIZE(topaz_ip_blocks); 1308 adev->num_ip_blocks = ARRAY_SIZE(topaz_ip_blocks);
1204 break; 1309 break;
1310 case CHIP_FIJI:
1311 adev->ip_blocks = fiji_ip_blocks;
1312 adev->num_ip_blocks = ARRAY_SIZE(fiji_ip_blocks);
1313 break;
1205 case CHIP_TONGA: 1314 case CHIP_TONGA:
1206 adev->ip_blocks = tonga_ip_blocks; 1315 adev->ip_blocks = tonga_ip_blocks;
1207 adev->num_ip_blocks = ARRAY_SIZE(tonga_ip_blocks); 1316 adev->num_ip_blocks = ARRAY_SIZE(tonga_ip_blocks);
@@ -1248,7 +1357,7 @@ static int vi_common_early_init(void *handle)
1248 bool smc_enabled = false; 1357 bool smc_enabled = false;
1249 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 1358 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
1250 1359
1251 if (adev->flags & AMDGPU_IS_APU) { 1360 if (adev->flags & AMD_IS_APU) {
1252 adev->smc_rreg = &cz_smc_rreg; 1361 adev->smc_rreg = &cz_smc_rreg;
1253 adev->smc_wreg = &cz_smc_wreg; 1362 adev->smc_wreg = &cz_smc_wreg;
1254 } else { 1363 } else {
@@ -1279,6 +1388,7 @@ static int vi_common_early_init(void *handle)
1279 if (amdgpu_smc_load_fw && smc_enabled) 1388 if (amdgpu_smc_load_fw && smc_enabled)
1280 adev->firmware.smu_load = true; 1389 adev->firmware.smu_load = true;
1281 break; 1390 break;
1391 case CHIP_FIJI:
1282 case CHIP_TONGA: 1392 case CHIP_TONGA:
1283 adev->has_uvd = true; 1393 adev->has_uvd = true;
1284 adev->cg_flags = 0; 1394 adev->cg_flags = 0;