0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023 #include "amdgpu.h"
0024 #include "smuio_v11_0_6.h"
0025 #include "smuio/smuio_11_0_6_offset.h"
0026 #include "smuio/smuio_11_0_6_sh_mask.h"
0027
0028 static u32 smuio_v11_0_6_get_rom_index_offset(struct amdgpu_device *adev)
0029 {
0030 return SOC15_REG_OFFSET(SMUIO, 0, mmROM_INDEX);
0031 }
0032
0033 static u32 smuio_v11_0_6_get_rom_data_offset(struct amdgpu_device *adev)
0034 {
0035 return SOC15_REG_OFFSET(SMUIO, 0, mmROM_DATA);
0036 }
0037
0038 static void smuio_v11_0_6_update_rom_clock_gating(struct amdgpu_device *adev, bool enable)
0039 {
0040 u32 def, data;
0041
0042
0043 if (adev->flags & AMD_IS_APU)
0044 return;
0045
0046 def = data = RREG32_SOC15(SMUIO, 0, mmCGTT_ROM_CLK_CTRL0);
0047
0048 if (enable && (adev->cg_flags & AMD_CG_SUPPORT_ROM_MGCG))
0049 data &= ~(CGTT_ROM_CLK_CTRL0__SOFT_OVERRIDE0_MASK |
0050 CGTT_ROM_CLK_CTRL0__SOFT_OVERRIDE1_MASK);
0051 else
0052 data |= CGTT_ROM_CLK_CTRL0__SOFT_OVERRIDE0_MASK |
0053 CGTT_ROM_CLK_CTRL0__SOFT_OVERRIDE1_MASK;
0054
0055 if (def != data)
0056 WREG32_SOC15(SMUIO, 0, mmCGTT_ROM_CLK_CTRL0, data);
0057 }
0058
0059 static void smuio_v11_0_6_get_clock_gating_state(struct amdgpu_device *adev, u64 *flags)
0060 {
0061 u32 data;
0062
0063
0064 if (adev->flags & AMD_IS_APU)
0065 return;
0066
0067 data = RREG32_SOC15(SMUIO, 0, mmCGTT_ROM_CLK_CTRL0);
0068 if (!(data & CGTT_ROM_CLK_CTRL0__SOFT_OVERRIDE0_MASK))
0069 *flags |= AMD_CG_SUPPORT_ROM_MGCG;
0070 }
0071
0072 const struct amdgpu_smuio_funcs smuio_v11_0_6_funcs = {
0073 .get_rom_index_offset = smuio_v11_0_6_get_rom_index_offset,
0074 .get_rom_data_offset = smuio_v11_0_6_get_rom_data_offset,
0075 .update_rom_clock_gating = smuio_v11_0_6_update_rom_clock_gating,
0076 .get_clock_gating_state = smuio_v11_0_6_get_clock_gating_state,
0077 };