On 2/28/2024 12:08 PM, Yang Wang wrote: > v1: > enabel pp_od_clk_voltage node for gfx 9.4.3 SRIOV and BM. > > v2: > add onevf check for gfx 9.4.3 > > Signed-off-by: Yang Wang <kevinyang.wang@xxxxxxx> > --- > drivers/gpu/drm/amd/pm/amdgpu_pm.c | 35 +++++++++++++++++++++++++----- > 1 file changed, 30 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/amd/pm/amdgpu_pm.c b/drivers/gpu/drm/amd/pm/amdgpu_pm.c > index 087d57850304..7e5f00530769 100644 > --- a/drivers/gpu/drm/amd/pm/amdgpu_pm.c > +++ b/drivers/gpu/drm/amd/pm/amdgpu_pm.c > @@ -2034,6 +2034,34 @@ static int ss_bias_attr_update(struct amdgpu_device *adev, struct amdgpu_device_ > return 0; > } > > +static int pp_od_clk_voltage_attr_update(struct amdgpu_device *adev, struct amdgpu_device_attr *attr, > + uint32_t mask, enum amdgpu_device_attr_states *states) > +{ > + uint32_t gc_ver = amdgpu_ip_version(adev, GC_HWIP, 0); > + > + *states = ATTR_STATE_UNSUPPORTED; > + > + /* Enable pp_od_clk_voltage node for gc 9.4.3 SRIOV/BM support */ > + if (gc_ver == IP_VERSION(9, 4, 3)) { > + if (!amdgpu_dpm_is_overdrive_supported(adev) || A reorder may better work for readability - Move the !amdgpu_dpm_is_overdrive_supported(adev) check first, and then for 9.4.3/SMU 13.0.6, only do one-VF check. Thanks, Lijo > + (amdgpu_sriov_vf(adev) && !amdgpu_sriov_is_pp_one_vf(adev))) > + *states = ATTR_STATE_UNSUPPORTED; > + else > + *states = ATTR_STATE_SUPPORTED; > + return 0; > + } > + > + if (!(attr->flags & mask)) { > + *states = ATTR_STATE_UNSUPPORTED; > + return 0; > + } > + > + if (amdgpu_dpm_is_overdrive_supported(adev)) > + *states = ATTR_STATE_SUPPORTED; > + > + return 0; > +} > + > /* Following items will be read out to indicate current plpd policy: > * - -1: none > * - 0: disallow > @@ -2118,7 +2146,8 @@ static struct amdgpu_device_attr amdgpu_device_attrs[] = { > AMDGPU_DEVICE_ATTR_RW(pp_sclk_od, ATTR_FLAG_BASIC), > AMDGPU_DEVICE_ATTR_RW(pp_mclk_od, ATTR_FLAG_BASIC), > AMDGPU_DEVICE_ATTR_RW(pp_power_profile_mode, ATTR_FLAG_BASIC|ATTR_FLAG_ONEVF), > - AMDGPU_DEVICE_ATTR_RW(pp_od_clk_voltage, ATTR_FLAG_BASIC), > + AMDGPU_DEVICE_ATTR_RW(pp_od_clk_voltage, ATTR_FLAG_BASIC, > + .attr_update = pp_od_clk_voltage_attr_update), > AMDGPU_DEVICE_ATTR_RO(gpu_busy_percent, ATTR_FLAG_BASIC|ATTR_FLAG_ONEVF), > AMDGPU_DEVICE_ATTR_RO(mem_busy_percent, ATTR_FLAG_BASIC|ATTR_FLAG_ONEVF), > AMDGPU_DEVICE_ATTR_RO(pcie_bw, ATTR_FLAG_BASIC), > @@ -2163,10 +2192,6 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_ > } else if (DEVICE_ATTR_IS(pp_dpm_fclk)) { > if (mp1_ver < IP_VERSION(10, 0, 0)) > *states = ATTR_STATE_UNSUPPORTED; > - } else if (DEVICE_ATTR_IS(pp_od_clk_voltage)) { > - *states = ATTR_STATE_UNSUPPORTED; > - if (amdgpu_dpm_is_overdrive_supported(adev)) > - *states = ATTR_STATE_SUPPORTED; > } else if (DEVICE_ATTR_IS(mem_busy_percent)) { > if ((adev->flags & AMD_IS_APU && > gc_ver != IP_VERSION(9, 4, 3)) ||