diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/1148-refine-pg-code-for-gfx_v8.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/1148-refine-pg-code-for-gfx_v8.patch | 204 |
1 files changed, 0 insertions, 204 deletions
diff --git a/common/recipes-kernel/linux/files/1148-refine-pg-code-for-gfx_v8.patch b/common/recipes-kernel/linux/files/1148-refine-pg-code-for-gfx_v8.patch deleted file mode 100644 index 4416497c..00000000 --- a/common/recipes-kernel/linux/files/1148-refine-pg-code-for-gfx_v8.patch +++ /dev/null @@ -1,204 +0,0 @@ -From c5ef870413c64c25cfe2a646c395b0c0d293a4f5 Mon Sep 17 00:00:00 2001 -From: Ravi Patlegar <ravi.patlegar@amd.com> -Date: Tue, 13 Dec 2016 16:28:54 +0530 -Subject: [PATCH 10/10] refine pg code for gfx_v8. - -1. bit CP_PG_DISABLE was reversed. -2. load RLC_SRM_INDEX_CNTL_ADDR/DATA_x pairs - with valid addr/data. -3. always init gfx pg. -4. delete repeated check for pg mask. - -Signed-off-by: Rex Zhu <Rex.Zhu@amd.com> -Signed-off-by: Ravi Patlegar <ravi.patlegar@amd.com> ---- - drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 + - drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 118 ++++++++++++---------------------- - 2 files changed, 44 insertions(+), 76 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -index 40497c2..af04d3b 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -@@ -2211,6 +2211,8 @@ bool amdgpu_device_has_dal_support(struct amdgpu_device *adev); - #define REG_GET_FIELD(value, reg, field) \ - (((value) & REG_FIELD_MASK(reg, field)) >> REG_FIELD_SHIFT(reg, field)) - -+#define WREG32_FIELD(reg, field, val) \ -+ WREG32(mm##reg, (RREG32(mm##reg) & ~REG_FIELD_MASK(reg, field)) | (val) << REG_FIELD_SHIFT(reg, field)) - /* - * BIOS helpers. - */ -diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c -index d1cb4db..b4c41f9 100644 ---- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c -+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c -@@ -3934,8 +3934,10 @@ static int gfx_v8_0_init_save_restore_list(struct amdgpu_device *adev) - temp = mmRLC_SRM_INDEX_CNTL_ADDR_0; - data = mmRLC_SRM_INDEX_CNTL_DATA_0; - for (i = 0; i < sizeof(unique_indices) / sizeof(int); i++) { -- amdgpu_mm_wreg(adev, temp + i, unique_indices[i] & 0x3FFFF, false); -- amdgpu_mm_wreg(adev, data + i, unique_indices[i] >> 20, false); -+ if (unique_indices[i] != 0) { -+ amdgpu_mm_wreg(adev, temp + i, unique_indices[i] & 0x3FFFF, false); -+ amdgpu_mm_wreg(adev, data + i, unique_indices[i] >> 20, false); -+ } - } - kfree(register_list_format); - -@@ -3955,32 +3957,17 @@ static void gfx_v8_0_init_power_gating(struct amdgpu_device *adev) - { - uint32_t data; - -- if (adev->pg_flags & (AMDGPU_PG_SUPPORT_GFX_PG | -- AMDGPU_PG_SUPPORT_GFX_SMG | -- AMDGPU_PG_SUPPORT_GFX_DMG)) { -- data = RREG32(mmCP_RB_WPTR_POLL_CNTL); -- data &= ~CP_RB_WPTR_POLL_CNTL__IDLE_POLL_COUNT_MASK; -- data |= (0x60 << CP_RB_WPTR_POLL_CNTL__IDLE_POLL_COUNT__SHIFT); -- WREG32(mmCP_RB_WPTR_POLL_CNTL, data); -- -- data = 0; -- data |= (0x10 << RLC_PG_DELAY__POWER_UP_DELAY__SHIFT); -- data |= (0x10 << RLC_PG_DELAY__POWER_DOWN_DELAY__SHIFT); -- data |= (0x10 << RLC_PG_DELAY__CMD_PROPAGATE_DELAY__SHIFT); -- data |= (0x10 << RLC_PG_DELAY__MEM_SLEEP_DELAY__SHIFT); -- WREG32(mmRLC_PG_DELAY, data); -- -- data = RREG32(mmRLC_PG_DELAY_2); -- data &= ~RLC_PG_DELAY_2__SERDES_CMD_DELAY_MASK; -- data |= (0x3 << RLC_PG_DELAY_2__SERDES_CMD_DELAY__SHIFT); -- WREG32(mmRLC_PG_DELAY_2, data); -- -- data = RREG32(mmRLC_AUTO_PG_CTRL); -- data &= ~RLC_AUTO_PG_CTRL__GRBM_REG_SAVE_GFX_IDLE_THRESHOLD_MASK; -- data |= (0x55f0 << RLC_AUTO_PG_CTRL__GRBM_REG_SAVE_GFX_IDLE_THRESHOLD__SHIFT); -- WREG32(mmRLC_AUTO_PG_CTRL, data); -- } -- } -+ WREG32_FIELD(CP_RB_WPTR_POLL_CNTL, IDLE_POLL_COUNT, 0x60); -+ -+ data = REG_SET_FIELD(0, RLC_PG_DELAY, POWER_UP_DELAY, 0x10); -+ data = REG_SET_FIELD(data, RLC_PG_DELAY, POWER_DOWN_DELAY, 0x10); -+ data = REG_SET_FIELD(data, RLC_PG_DELAY, CMD_PROPAGATE_DELAY, 0x10); -+ data = REG_SET_FIELD(data, RLC_PG_DELAY, MEM_SLEEP_DELAY, 0x10); -+ WREG32(mmRLC_PG_DELAY, data); -+ -+ WREG32_FIELD(RLC_PG_DELAY_2, SERDES_CMD_DELAY, 0x3); -+ WREG32_FIELD(RLC_AUTO_PG_CTRL, GRBM_REG_SAVE_GFX_IDLE_THRESHOLD, 0x55f0); -+} - - static void cz_enable_sck_slow_down_on_power_up(struct amdgpu_device *adev, - bool enable) -@@ -4016,18 +4003,8 @@ static void cz_enable_sck_slow_down_on_power_down(struct amdgpu_device *adev, - - static void cz_enable_cp_power_gating(struct amdgpu_device *adev, bool enable) - { -- u32 data, orig; -- -- orig = data = RREG32(mmRLC_PG_CNTL); -- -- if (enable) -- data &= ~RLC_PG_CNTL__CP_PG_DISABLE_MASK; -- else -- data |= RLC_PG_CNTL__CP_PG_DISABLE_MASK; -- -- if (orig != data) -- WREG32(mmRLC_PG_CNTL, data); -- } -+ WREG32_FIELD(RLC_PG_CNTL, CP_PG_DISABLE, enable ? 0 : 1); -+} - - static void polaris11_init_power_gating(struct amdgpu_device *adev) - { -@@ -4062,39 +4039,30 @@ static void polaris11_init_power_gating(struct amdgpu_device *adev) - - static void gfx_v8_0_init_pg(struct amdgpu_device *adev) - { -- if (adev->pg_flags & (AMD_PG_SUPPORT_GFX_PG | -- AMD_PG_SUPPORT_GFX_SMG | -- AMD_PG_SUPPORT_GFX_DMG | -- AMD_PG_SUPPORT_CP | -- AMD_PG_SUPPORT_GDS | -- AMD_PG_SUPPORT_RLC_SMU_HS)) { -- gfx_v8_0_init_csb(adev); -- gfx_v8_0_init_save_restore_list(adev); -- gfx_v8_0_enable_save_restore_machine(adev); -+ gfx_v8_0_init_csb(adev); -+ gfx_v8_0_init_save_restore_list(adev); -+ gfx_v8_0_enable_save_restore_machine(adev); - -- if ((adev->asic_type == CHIP_CARRIZO) || -- (adev->asic_type == CHIP_STONEY)) { -- struct amdgpu_cu_info cu_info; -- -- gfx_v8_0_get_cu_info(adev, &cu_info); -- -- WREG32(mmRLC_JUMP_TABLE_RESTORE, adev->gfx.rlc.cp_table_gpu_addr >> 8); -- gfx_v8_0_init_power_gating(adev); -- WREG32(mmRLC_PG_ALWAYS_ON_CU_MASK, cu_info.ao_cu_mask); -- if (adev->pg_flags & AMDGPU_PG_SUPPORT_RLC_SMU_HS) { -- cz_enable_sck_slow_down_on_power_up(adev, true); -- cz_enable_sck_slow_down_on_power_down(adev, true); -- } else { -- cz_enable_sck_slow_down_on_power_up(adev, false); -- cz_enable_sck_slow_down_on_power_down(adev, false); -- } -- if (adev->pg_flags & AMDGPU_PG_SUPPORT_CP) -- cz_enable_cp_power_gating(adev, true); -- else -- cz_enable_cp_power_gating(adev, false); -- } else if (adev->asic_type == CHIP_POLARIS11) { -- polaris11_init_power_gating(adev); -+ if ((adev->asic_type == CHIP_CARRIZO) || -+ (adev->asic_type == CHIP_STONEY)) { -+ struct amdgpu_cu_info cu_info; -+ gfx_v8_0_get_cu_info(adev, &cu_info); -+ WREG32(mmRLC_JUMP_TABLE_RESTORE, adev->gfx.rlc.cp_table_gpu_addr >> 8); -+ gfx_v8_0_init_power_gating(adev); -+ WREG32(mmRLC_PG_ALWAYS_ON_CU_MASK, cu_info.ao_cu_mask); -+ if (adev->pg_flags & AMDGPU_PG_SUPPORT_RLC_SMU_HS) { -+ cz_enable_sck_slow_down_on_power_up(adev, true); -+ cz_enable_sck_slow_down_on_power_down(adev, true); -+ } else { -+ cz_enable_sck_slow_down_on_power_up(adev, false); -+ cz_enable_sck_slow_down_on_power_down(adev, false); - } -+ if (adev->pg_flags & AMDGPU_PG_SUPPORT_CP) -+ cz_enable_cp_power_gating(adev, true); -+ else -+ cz_enable_cp_power_gating(adev, false); -+ } else if (adev->asic_type == CHIP_POLARIS11) { -+ polaris11_init_power_gating(adev); - } - } - -@@ -5513,7 +5481,7 @@ static void cz_update_gfx_cg_power_gating(struct amdgpu_device *adev, - if (adev->pg_flags & AMDGPU_PG_SUPPORT_GFX_PIPELINE) - cz_enable_gfx_pipeline_power_gating(adev, true); - } else { -- cz_enable_gfx_cg_power_gating(adev, false); -+ cz_enable_gfx_cg_power_gating(adev, true); - cz_enable_gfx_pipeline_power_gating(adev, false); - } - } -@@ -5524,14 +5492,12 @@ static int gfx_v8_0_set_powergating_state(void *handle, - struct amdgpu_device *adev = (struct amdgpu_device *)handle; - bool enable = (state == AMD_PG_STATE_GATE) ? true : false; - -- if (!(adev->pg_flags & AMDGPU_PG_SUPPORT_GFX_PG)) -- return 0; - - switch (adev->asic_type) { - case CHIP_CARRIZO: - case CHIP_STONEY: -- if (adev->pg_flags & AMDGPU_PG_SUPPORT_GFX_PG) -- cz_update_gfx_cg_power_gating(adev, enable); -+ -+ cz_update_gfx_cg_power_gating(adev, enable); - - if ((adev->pg_flags & AMDGPU_PG_SUPPORT_GFX_SMG) && enable) - gfx_v8_0_enable_gfx_static_mg_power_gating(adev, true); --- -2.7.4 - |