@@ -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