| @@ -232,6 +232,13 @@ static const u32 cz_mgcg_cgcg_init[] = · 231 unmodified lines |
| 232 | 232 | mmHDP_XDP_CGTT_BLK_CTRL, 0xc0000fff, 0x00000104, |
| 233 | 233 | }; |
| 234 | 234 | |
| 235 | +static const u32 stoney_mgcg_cgcg_init[] = |
| 236 | +{ |
| 237 | + mmCGTT_DRM_CLK_CTRL0, 0xffffffff, 0x00000100, |
| 238 | + mmHDP_XDP_CGTT_BLK_CTRL, 0xffffffff, 0x00000104, |
| 239 | + mmHDP_HOST_PATH_CNTL, 0xffffffff, 0x0f000027, |
| 240 | +}; |
| 241 | + |
| 235 | 242 | static void vi_init_golden_registers(struct amdgpu_device *adev) |
| 236 | 243 | { |
| 237 | 244 | /* Some of the registers might be dependent on GRBM_GFX_INDEX */ |
| @@ -258,6 +265,11 @@ static void vi_init_golden_registers(struct amdgpu_device *adev) · 20 unmodified lines |
| 258 | 265 | cz_mgcg_cgcg_init, |
| 259 | 266 | (const u32)ARRAY_SIZE(cz_mgcg_cgcg_init)); |
| 260 | 267 | break; |
| 268 | + case CHIP_STONEY: |
| 269 | + amdgpu_program_register_sequence(adev, |
| 270 | + stoney_mgcg_cgcg_init, |
| 271 | + (const u32)ARRAY_SIZE(stoney_mgcg_cgcg_init)); |
| 272 | + break; |
| 261 | 273 | default: |
| 262 | 274 | break; |
| 263 | 275 | } |
| @@ -488,6 +500,7 @@ static int vi_read_register(struct amdgpu_device *adev, u32 se_num, · 224 unmodified lines |
| 488 | 500 | case CHIP_FIJI: |
| 489 | 501 | case CHIP_TONGA: |
| 490 | 502 | case CHIP_CARRIZO: |
| 503 | + case CHIP_STONEY: |
| 491 | 504 | asic_register_table = cz_allowed_read_registers; |
| 492 | 505 | size = ARRAY_SIZE(cz_allowed_read_registers); |
| 493 | 506 | break; |
| @@ -543,8 +556,10 @@ static void vi_print_gpu_status_regs(struct amdgpu_device *adev) · 49 unmodified lines |
| 543 | 556 | RREG32(mmSRBM_STATUS2)); |
| 544 | 557 | dev_info(adev->dev, " SDMA0_STATUS_REG = 0x%08X\n", |
| 545 | 558 | RREG32(mmSDMA0_STATUS_REG + SDMA0_REGISTER_OFFSET)); |
| 546 | | − dev_info(adev->dev, " SDMA1_STATUS_REG = 0x%08X\n", |
| 547 | | − RREG32(mmSDMA0_STATUS_REG + SDMA1_REGISTER_OFFSET)); |
| 559 | + if (adev->sdma.num_instances > 1) { |
| 560 | + dev_info(adev->dev, " SDMA1_STATUS_REG = 0x%08X\n", |
| 561 | + RREG32(mmSDMA0_STATUS_REG + SDMA1_REGISTER_OFFSET)); |
| 562 | + } |
| 548 | 563 | dev_info(adev->dev, " CP_STAT = 0x%08x\n", RREG32(mmCP_STAT)); |
| 549 | 564 | dev_info(adev->dev, " CP_STALLED_STAT1 = 0x%08x\n", |
| 550 | 565 | RREG32(mmCP_STALLED_STAT1)); |
| @@ -639,9 +654,11 @@ u32 vi_gpu_check_soft_reset(struct amdgpu_device *adev) · 88 unmodified lines |
| 639 | 654 | reset_mask |= AMDGPU_RESET_DMA; |
| 640 | 655 | |
| 641 | 656 | /* SDMA1_STATUS_REG */ |
| 642 | | − tmp = RREG32(mmSDMA0_STATUS_REG + SDMA1_REGISTER_OFFSET); |
| 643 | | − if (!(tmp & SDMA0_STATUS_REG__IDLE_MASK)) |
| 644 | | − reset_mask |= AMDGPU_RESET_DMA1; |
| 657 | + if (adev->sdma.num_instances > 1) { |
| 658 | + tmp = RREG32(mmSDMA0_STATUS_REG + SDMA1_REGISTER_OFFSET); |
| 659 | + if (!(tmp & SDMA0_STATUS_REG__IDLE_MASK)) |
| 660 | + reset_mask |= AMDGPU_RESET_DMA1; |
| 661 | + } |
| 645 | 662 | #if 0 |
| 646 | 663 | /* VCE_STATUS */ |
| 647 | 664 | if (adev->asic_type != CHIP_TOPAZ) { |
| @@ -1316,6 +1333,7 @@ int vi_set_ip_blocks(struct amdgpu_device *adev) · 668 unmodified lines |
| 1316 | 1333 | adev->num_ip_blocks = ARRAY_SIZE(tonga_ip_blocks); |
| 1317 | 1334 | break; |
| 1318 | 1335 | case CHIP_CARRIZO: |
| 1336 | + case CHIP_STONEY: |
| 1319 | 1337 | adev->ip_blocks = cz_ip_blocks; |
| 1320 | 1338 | adev->num_ip_blocks = ARRAY_SIZE(cz_ip_blocks); |
| 1321 | 1339 | break; |
| @@ -1327,11 +1345,18 @@ int vi_set_ip_blocks(struct amdgpu_device *adev) · 5 unmodified lines |
| 1327 | 1345 | return 0; |
| 1328 | 1346 | } |
| 1329 | 1347 | |
| 1348 | +#define ATI_REV_ID_FUSE_MACRO__ADDRESS 0xC0014044 |
| 1349 | +#define ATI_REV_ID_FUSE_MACRO__SHIFT 9 |
| 1350 | +#define ATI_REV_ID_FUSE_MACRO__MASK 0x00001E00 |
| 1351 | + |
| 1330 | 1352 | static uint32_t vi_get_rev_id(struct amdgpu_device *adev) |
| 1331 | 1353 | { |
| 1332 | 1354 | if (adev->asic_type == CHIP_TOPAZ) |
| 1333 | 1355 | return (RREG32(mmPCIE_EFUSE4) & PCIE_EFUSE4__STRAP_BIF_ATI_REV_ID_MASK) |
| 1334 | 1356 | >> PCIE_EFUSE4__STRAP_BIF_ATI_REV_ID__SHIFT; |
| 1357 | + else if (adev->flags & AMD_IS_APU) |
| 1358 | + return (RREG32_SMC(ATI_REV_ID_FUSE_MACRO__ADDRESS) & ATI_REV_ID_FUSE_MACRO__MASK) |
| 1359 | + >> ATI_REV_ID_FUSE_MACRO__SHIFT; |
| 1335 | 1360 | else |
| 1336 | 1361 | return (RREG32(mmCC_DRM_ID_STRAPS) & CC_DRM_ID_STRAPS__ATI_REV_ID_MASK) |
| 1337 | 1362 | >> CC_DRM_ID_STRAPS__ATI_REV_ID__SHIFT; |
| @@ -1398,6 +1423,7 @@ static int vi_common_early_init(void *handle) · 60 unmodified lines |
| 1398 | 1423 | adev->firmware.smu_load = true; |
| 1399 | 1424 | break; |
| 1400 | 1425 | case CHIP_CARRIZO: |
| 1426 | + case CHIP_STONEY: |
| 1401 | 1427 | adev->has_uvd = true; |
| 1402 | 1428 | adev->cg_flags = 0; |
| 1403 | 1429 | /* Disable UVD pg */ |