|
99 | 99 | #define mmGCR_GENERAL_CNTL_Sienna_Cichlid 0x1580 |
100 | 100 | #define mmGCR_GENERAL_CNTL_Sienna_Cichlid_BASE_IDX 0 |
101 | 101 |
|
| 102 | +#define mmGOLDEN_TSC_COUNT_UPPER_Vangogh 0x0025 |
| 103 | +#define mmGOLDEN_TSC_COUNT_UPPER_Vangogh_BASE_IDX 1 |
| 104 | +#define mmGOLDEN_TSC_COUNT_LOWER_Vangogh 0x0026 |
| 105 | +#define mmGOLDEN_TSC_COUNT_LOWER_Vangogh_BASE_IDX 1 |
102 | 106 | #define mmSPI_CONFIG_CNTL_1_Vangogh 0x2441 |
103 | 107 | #define mmSPI_CONFIG_CNTL_1_Vangogh_BASE_IDX 1 |
104 | 108 | #define mmVGT_TF_MEMORY_BASE_HI_Vangogh 0x2261 |
|
160 | 164 | #define mmGCVM_L2_CGTT_CLK_CTRL_Sienna_Cichlid 0x15db |
161 | 165 | #define mmGCVM_L2_CGTT_CLK_CTRL_Sienna_Cichlid_BASE_IDX 0 |
162 | 166 |
|
| 167 | +#define mmGC_THROTTLE_CTRL_Sienna_Cichlid 0x2030 |
| 168 | +#define mmGC_THROTTLE_CTRL_Sienna_Cichlid_BASE_IDX 0 |
| 169 | + |
163 | 170 | MODULE_FIRMWARE("amdgpu/navi10_ce.bin"); |
164 | 171 | MODULE_FIRMWARE("amdgpu/navi10_pfp.bin"); |
165 | 172 | MODULE_FIRMWARE("amdgpu/navi10_me.bin"); |
@@ -3324,6 +3331,7 @@ static void gfx_v10_0_ring_emit_de_meta(struct amdgpu_ring *ring, bool resume); |
3324 | 3331 | static void gfx_v10_0_ring_emit_frame_cntl(struct amdgpu_ring *ring, bool start, bool secure); |
3325 | 3332 | static u32 gfx_v10_3_get_disabled_sa(struct amdgpu_device *adev); |
3326 | 3333 | static void gfx_v10_3_program_pbb_mode(struct amdgpu_device *adev); |
| 3334 | +static void gfx_v10_3_set_power_brake_sequence(struct amdgpu_device *adev); |
3327 | 3335 |
|
3328 | 3336 | static void gfx10_kiq_set_resources(struct amdgpu_ring *kiq_ring, uint64_t queue_mask) |
3329 | 3337 | { |
@@ -7192,6 +7200,9 @@ static int gfx_v10_0_hw_init(void *handle) |
7192 | 7200 | if (adev->asic_type == CHIP_SIENNA_CICHLID) |
7193 | 7201 | gfx_v10_3_program_pbb_mode(adev); |
7194 | 7202 |
|
| 7203 | + if (adev->asic_type >= CHIP_SIENNA_CICHLID) |
| 7204 | + gfx_v10_3_set_power_brake_sequence(adev); |
| 7205 | + |
7195 | 7206 | return r; |
7196 | 7207 | } |
7197 | 7208 |
|
@@ -7377,8 +7388,16 @@ static uint64_t gfx_v10_0_get_gpu_clock_counter(struct amdgpu_device *adev) |
7377 | 7388 |
|
7378 | 7389 | amdgpu_gfx_off_ctrl(adev, false); |
7379 | 7390 | mutex_lock(&adev->gfx.gpu_clock_mutex); |
7380 | | - clock = (uint64_t)RREG32_SOC15(SMUIO, 0, mmGOLDEN_TSC_COUNT_LOWER) | |
7381 | | - ((uint64_t)RREG32_SOC15(SMUIO, 0, mmGOLDEN_TSC_COUNT_UPPER) << 32ULL); |
| 7391 | + switch (adev->asic_type) { |
| 7392 | + case CHIP_VANGOGH: |
| 7393 | + clock = (uint64_t)RREG32_SOC15(SMUIO, 0, mmGOLDEN_TSC_COUNT_LOWER_Vangogh) | |
| 7394 | + ((uint64_t)RREG32_SOC15(SMUIO, 0, mmGOLDEN_TSC_COUNT_UPPER_Vangogh) << 32ULL); |
| 7395 | + break; |
| 7396 | + default: |
| 7397 | + clock = (uint64_t)RREG32_SOC15(SMUIO, 0, mmGOLDEN_TSC_COUNT_LOWER) | |
| 7398 | + ((uint64_t)RREG32_SOC15(SMUIO, 0, mmGOLDEN_TSC_COUNT_UPPER) << 32ULL); |
| 7399 | + break; |
| 7400 | + } |
7382 | 7401 | mutex_unlock(&adev->gfx.gpu_clock_mutex); |
7383 | 7402 | amdgpu_gfx_off_ctrl(adev, true); |
7384 | 7403 | return clock; |
@@ -9169,6 +9188,31 @@ static void gfx_v10_3_program_pbb_mode(struct amdgpu_device *adev) |
9169 | 9188 | } |
9170 | 9189 | } |
9171 | 9190 |
|
| 9191 | +static void gfx_v10_3_set_power_brake_sequence(struct amdgpu_device *adev) |
| 9192 | +{ |
| 9193 | + WREG32_SOC15(GC, 0, mmGRBM_GFX_INDEX, |
| 9194 | + (0x1 << GRBM_GFX_INDEX__SA_BROADCAST_WRITES__SHIFT) | |
| 9195 | + (0x1 << GRBM_GFX_INDEX__INSTANCE_BROADCAST_WRITES__SHIFT) | |
| 9196 | + (0x1 << GRBM_GFX_INDEX__SE_BROADCAST_WRITES__SHIFT)); |
| 9197 | + |
| 9198 | + WREG32_SOC15(GC, 0, mmGC_CAC_IND_INDEX, ixPWRBRK_STALL_PATTERN_CTRL); |
| 9199 | + WREG32_SOC15(GC, 0, mmGC_CAC_IND_DATA, |
| 9200 | + (0x1 << PWRBRK_STALL_PATTERN_CTRL__PWRBRK_STEP_INTERVAL__SHIFT) | |
| 9201 | + (0x12 << PWRBRK_STALL_PATTERN_CTRL__PWRBRK_BEGIN_STEP__SHIFT) | |
| 9202 | + (0x13 << PWRBRK_STALL_PATTERN_CTRL__PWRBRK_END_STEP__SHIFT) | |
| 9203 | + (0xf << PWRBRK_STALL_PATTERN_CTRL__PWRBRK_THROTTLE_PATTERN_BIT_NUMS__SHIFT)); |
| 9204 | + |
| 9205 | + WREG32_SOC15(GC, 0, mmGC_THROTTLE_CTRL_Sienna_Cichlid, |
| 9206 | + (0x1 << GC_THROTTLE_CTRL__PWRBRK_STALL_EN__SHIFT) | |
| 9207 | + (0x1 << GC_THROTTLE_CTRL__PATTERN_MODE__SHIFT) | |
| 9208 | + (0x5 << GC_THROTTLE_CTRL__RELEASE_STEP_INTERVAL__SHIFT)); |
| 9209 | + |
| 9210 | + WREG32_SOC15(GC, 0, mmDIDT_IND_INDEX, ixDIDT_SQ_THROTTLE_CTRL); |
| 9211 | + |
| 9212 | + WREG32_SOC15(GC, 0, mmDIDT_IND_DATA, |
| 9213 | + (0x1 << DIDT_SQ_THROTTLE_CTRL__PWRBRK_STALL_EN__SHIFT)); |
| 9214 | +} |
| 9215 | + |
9172 | 9216 | const struct amdgpu_ip_block_version gfx_v10_0_ip_block = |
9173 | 9217 | { |
9174 | 9218 | .type = AMD_IP_BLOCK_TYPE_GFX, |
|
0 commit comments