Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amd/amdgpu: add IH cg support on soc15 project

enable/disable IH clock gating on soc15 projects.

Signed-off-by: Kenneth Feng <kenneth.feng@amd.com>
Reviewed-by: Kevin Wang <kevin1.wang@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Kenneth Feng and committed by
Alex Deucher
227f7d58 95f71bfa

+45 -1
+2 -1
drivers/gpu/drm/amd/amdgpu/soc15.c
··· 1170 1170 AMD_CG_SUPPORT_SDMA_MGCG | 1171 1171 AMD_CG_SUPPORT_SDMA_LS | 1172 1172 AMD_CG_SUPPORT_MC_MGCG | 1173 - AMD_CG_SUPPORT_MC_LS; 1173 + AMD_CG_SUPPORT_MC_LS | 1174 + AMD_CG_SUPPORT_IH_CG; 1174 1175 adev->pg_flags = 0; 1175 1176 adev->external_rev_id = adev->rev_id + 0x32; 1176 1177 break;
+39
drivers/gpu/drm/amd/amdgpu/vega10_ih.c
··· 675 675 return 0; 676 676 } 677 677 678 + static void vega10_ih_update_clockgating_state(struct amdgpu_device *adev, 679 + bool enable) 680 + { 681 + uint32_t data, def, field_val; 682 + 683 + if (adev->cg_flags & AMD_CG_SUPPORT_IH_CG) { 684 + def = data = RREG32_SOC15(OSSSYS, 0, mmIH_CLK_CTRL); 685 + field_val = enable ? 0 : 1; 686 + /** 687 + * Vega10 does not have IH_RETRY_INT_CAM_MEM_CLK_SOFT_OVERRIDE 688 + * and IH_BUFFER_MEM_CLK_SOFT_OVERRIDE field. 689 + */ 690 + if (adev->asic_type > CHIP_VEGA10) { 691 + data = REG_SET_FIELD(data, IH_CLK_CTRL, 692 + IH_RETRY_INT_CAM_MEM_CLK_SOFT_OVERRIDE, field_val); 693 + data = REG_SET_FIELD(data, IH_CLK_CTRL, 694 + IH_BUFFER_MEM_CLK_SOFT_OVERRIDE, field_val); 695 + } 696 + 697 + data = REG_SET_FIELD(data, IH_CLK_CTRL, 698 + DBUS_MUX_CLK_SOFT_OVERRIDE, field_val); 699 + data = REG_SET_FIELD(data, IH_CLK_CTRL, 700 + OSSSYS_SHARE_CLK_SOFT_OVERRIDE, field_val); 701 + data = REG_SET_FIELD(data, IH_CLK_CTRL, 702 + LIMIT_SMN_CLK_SOFT_OVERRIDE, field_val); 703 + data = REG_SET_FIELD(data, IH_CLK_CTRL, 704 + DYN_CLK_SOFT_OVERRIDE, field_val); 705 + data = REG_SET_FIELD(data, IH_CLK_CTRL, 706 + REG_CLK_SOFT_OVERRIDE, field_val); 707 + if (def != data) 708 + WREG32_SOC15(OSSSYS, 0, mmIH_CLK_CTRL, data); 709 + } 710 + } 711 + 678 712 static int vega10_ih_set_clockgating_state(void *handle, 679 713 enum amd_clockgating_state state) 680 714 { 715 + struct amdgpu_device *adev = (struct amdgpu_device *)handle; 716 + 717 + vega10_ih_update_clockgating_state(adev, 718 + state == AMD_CG_STATE_GATE ? true : false); 681 719 return 0; 720 + 682 721 } 683 722 684 723 static int vega10_ih_set_powergating_state(void *handle,
+4
drivers/gpu/drm/amd/include/asic_reg/oss/osssys_4_0_sh_mask.h
··· 588 588 #define IH_STORM_CLIENT_LIST_CNTL__CLIENT30_IS_STORM_CLIENT_MASK 0x40000000L 589 589 #define IH_STORM_CLIENT_LIST_CNTL__CLIENT31_IS_STORM_CLIENT_MASK 0x80000000L 590 590 //IH_CLK_CTRL 591 + #define IH_CLK_CTRL__IH_RETRY_INT_CAM_MEM_CLK_SOFT_OVERRIDE__SHIFT 0x19 592 + #define IH_CLK_CTRL__IH_BUFFER_MEM_CLK_SOFT_OVERRIDE__SHIFT 0x1a 591 593 #define IH_CLK_CTRL__DBUS_MUX_CLK_SOFT_OVERRIDE__SHIFT 0x1b 592 594 #define IH_CLK_CTRL__OSSSYS_SHARE_CLK_SOFT_OVERRIDE__SHIFT 0x1c 593 595 #define IH_CLK_CTRL__LIMIT_SMN_CLK_SOFT_OVERRIDE__SHIFT 0x1d 594 596 #define IH_CLK_CTRL__DYN_CLK_SOFT_OVERRIDE__SHIFT 0x1e 595 597 #define IH_CLK_CTRL__REG_CLK_SOFT_OVERRIDE__SHIFT 0x1f 598 + #define IH_CLK_CTRL__IH_RETRY_INT_CAM_MEM_CLK_SOFT_OVERRIDE_MASK 0x02000000L 599 + #define IH_CLK_CTRL__IH_BUFFER_MEM_CLK_SOFT_OVERRIDE_MASK 0x04000000L 596 600 #define IH_CLK_CTRL__DBUS_MUX_CLK_SOFT_OVERRIDE_MASK 0x08000000L 597 601 #define IH_CLK_CTRL__OSSSYS_SHARE_CLK_SOFT_OVERRIDE_MASK 0x10000000L 598 602 #define IH_CLK_CTRL__LIMIT_SMN_CLK_SOFT_OVERRIDE_MASK 0x20000000L