@@ -2059,6 +2059,38 @@ static int pp_od_clk_voltage_attr_update(struct amdgpu_device *adev, struct amdg
2059
2059
return 0 ;
2060
2060
}
2061
2061
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
+
2062
2094
/* Following items will be read out to indicate current plpd policy:
2063
2095
* - -1: none
2064
2096
* - 0: disallow
@@ -2138,7 +2170,8 @@ static struct amdgpu_device_attr amdgpu_device_attrs[] = {
2138
2170
AMDGPU_DEVICE_ATTR_RW (pp_dpm_vclk1 , ATTR_FLAG_BASIC |ATTR_FLAG_ONEVF ),
2139
2171
AMDGPU_DEVICE_ATTR_RW (pp_dpm_dclk , ATTR_FLAG_BASIC |ATTR_FLAG_ONEVF ),
2140
2172
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 ),
2142
2175
AMDGPU_DEVICE_ATTR_RW (pp_dpm_pcie , ATTR_FLAG_BASIC |ATTR_FLAG_ONEVF ),
2143
2176
AMDGPU_DEVICE_ATTR_RW (pp_sclk_od , ATTR_FLAG_BASIC ),
2144
2177
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_
2182
2215
if (DEVICE_ATTR_IS (pp_dpm_socclk )) {
2183
2216
if (gc_ver < IP_VERSION (9 , 0 , 0 ))
2184
2217
* 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 ;
2189
2218
} else if (DEVICE_ATTR_IS (pp_dpm_fclk )) {
2190
2219
if (mp1_ver < IP_VERSION (10 , 0 , 0 ))
2191
2220
* states = ATTR_STATE_UNSUPPORTED ;
@@ -2303,14 +2332,6 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_
2303
2332
break ;
2304
2333
}
2305
2334
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
-
2314
2335
/* setting should not be allowed from VF if not in one VF mode */
2315
2336
if (amdgpu_sriov_vf (adev ) && !amdgpu_sriov_is_pp_one_vf (adev )) {
2316
2337
dev_attr -> attr .mode &= ~S_IWUGO ;
0 commit comments