Skip to content

Commit 190145f

Browse files
Yang Wangalexdeucher
authored andcommitted
drm/amd/pm: disable pp_dpm_dcefclk node for gfx 11.0.3 sriov
the dce dpm is not available on gfx 11.0.3 sriov device. Signed-off-by: Yang Wang <kevinyang.wang@amd.com> Reviewed-by: Kenneth Feng <kenneth.feng@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent bb8863c commit 190145f

File tree

1 file changed

+34
-13
lines changed

1 file changed

+34
-13
lines changed

drivers/gpu/drm/amd/pm/amdgpu_pm.c

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2059,6 +2059,38 @@ static int pp_od_clk_voltage_attr_update(struct amdgpu_device *adev, struct amdg
20592059
return 0;
20602060
}
20612061

2062+
static int pp_dpm_dcefclk_attr_update(struct amdgpu_device *adev, struct amdgpu_device_attr *attr,
2063+
uint32_t mask, enum amdgpu_device_attr_states *states)
2064+
{
2065+
struct device_attribute *dev_attr = &attr->dev_attr;
2066+
uint32_t gc_ver;
2067+
2068+
*states = ATTR_STATE_SUPPORTED;
2069+
2070+
if (!(attr->flags & mask)) {
2071+
*states = ATTR_STATE_UNSUPPORTED;
2072+
return 0;
2073+
}
2074+
2075+
gc_ver = amdgpu_ip_version(adev, GC_HWIP, 0);
2076+
/* dcefclk node is not available on gfx 11.0.3 sriov */
2077+
if ((gc_ver == IP_VERSION(11, 0, 3) && amdgpu_sriov_is_pp_one_vf(adev)) ||
2078+
gc_ver < IP_VERSION(9, 0, 0) ||
2079+
!amdgpu_device_has_display_hardware(adev))
2080+
*states = ATTR_STATE_UNSUPPORTED;
2081+
2082+
/* SMU MP1 does not support dcefclk level setting,
2083+
* setting should not be allowed from VF if not in one VF mode.
2084+
*/
2085+
if (gc_ver >= IP_VERSION(10, 0, 0) ||
2086+
(amdgpu_sriov_vf(adev) && !amdgpu_sriov_is_pp_one_vf(adev))) {
2087+
dev_attr->attr.mode &= ~S_IWUGO;
2088+
dev_attr->store = NULL;
2089+
}
2090+
2091+
return 0;
2092+
}
2093+
20622094
/* Following items will be read out to indicate current plpd policy:
20632095
* - -1: none
20642096
* - 0: disallow
@@ -2138,7 +2170,8 @@ static struct amdgpu_device_attr amdgpu_device_attrs[] = {
21382170
AMDGPU_DEVICE_ATTR_RW(pp_dpm_vclk1, ATTR_FLAG_BASIC|ATTR_FLAG_ONEVF),
21392171
AMDGPU_DEVICE_ATTR_RW(pp_dpm_dclk, ATTR_FLAG_BASIC|ATTR_FLAG_ONEVF),
21402172
AMDGPU_DEVICE_ATTR_RW(pp_dpm_dclk1, ATTR_FLAG_BASIC|ATTR_FLAG_ONEVF),
2141-
AMDGPU_DEVICE_ATTR_RW(pp_dpm_dcefclk, ATTR_FLAG_BASIC|ATTR_FLAG_ONEVF),
2173+
AMDGPU_DEVICE_ATTR_RW(pp_dpm_dcefclk, ATTR_FLAG_BASIC|ATTR_FLAG_ONEVF,
2174+
.attr_update = pp_dpm_dcefclk_attr_update),
21422175
AMDGPU_DEVICE_ATTR_RW(pp_dpm_pcie, ATTR_FLAG_BASIC|ATTR_FLAG_ONEVF),
21432176
AMDGPU_DEVICE_ATTR_RW(pp_sclk_od, ATTR_FLAG_BASIC),
21442177
AMDGPU_DEVICE_ATTR_RW(pp_mclk_od, ATTR_FLAG_BASIC),
@@ -2182,10 +2215,6 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_
21822215
if (DEVICE_ATTR_IS(pp_dpm_socclk)) {
21832216
if (gc_ver < IP_VERSION(9, 0, 0))
21842217
*states = ATTR_STATE_UNSUPPORTED;
2185-
} else if (DEVICE_ATTR_IS(pp_dpm_dcefclk)) {
2186-
if (gc_ver < IP_VERSION(9, 0, 0) ||
2187-
!amdgpu_device_has_display_hardware(adev))
2188-
*states = ATTR_STATE_UNSUPPORTED;
21892218
} else if (DEVICE_ATTR_IS(pp_dpm_fclk)) {
21902219
if (mp1_ver < IP_VERSION(10, 0, 0))
21912220
*states = ATTR_STATE_UNSUPPORTED;
@@ -2303,14 +2332,6 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_
23032332
break;
23042333
}
23052334

2306-
if (DEVICE_ATTR_IS(pp_dpm_dcefclk)) {
2307-
/* SMU MP1 does not support dcefclk level setting */
2308-
if (gc_ver >= IP_VERSION(10, 0, 0)) {
2309-
dev_attr->attr.mode &= ~S_IWUGO;
2310-
dev_attr->store = NULL;
2311-
}
2312-
}
2313-
23142335
/* setting should not be allowed from VF if not in one VF mode */
23152336
if (amdgpu_sriov_vf(adev) && !amdgpu_sriov_is_pp_one_vf(adev)) {
23162337
dev_attr->attr.mode &= ~S_IWUGO;

0 commit comments

Comments
 (0)