|
108 | 108 | #define PP_OD_FEATURE_FAN_TARGET_TEMPERATURE 9 |
109 | 109 | #define PP_OD_FEATURE_FAN_MINIMUM_PWM 10 |
110 | 110 | #define PP_OD_FEATURE_FAN_ZERO_RPM_ENABLE 11 |
| 111 | +#define PP_OD_FEATURE_FAN_ZERO_RPM_STOP_TEMP 12 |
111 | 112 |
|
112 | 113 | #define LINK_SPEED_MAX 3 |
113 | 114 |
|
@@ -1135,6 +1136,10 @@ static void smu_v13_0_0_get_od_setting_limits(struct smu_context *smu, |
1135 | 1136 | od_min_setting = overdrive_lowerlimits->FanZeroRpmEnable; |
1136 | 1137 | od_max_setting = overdrive_upperlimits->FanZeroRpmEnable; |
1137 | 1138 | break; |
| 1139 | + case PP_OD_FEATURE_FAN_ZERO_RPM_STOP_TEMP: |
| 1140 | + od_min_setting = overdrive_lowerlimits->FanZeroRpmStopTemp; |
| 1141 | + od_max_setting = overdrive_upperlimits->FanZeroRpmStopTemp; |
| 1142 | + break; |
1138 | 1143 | default: |
1139 | 1144 | od_min_setting = od_max_setting = INT_MAX; |
1140 | 1145 | break; |
@@ -1473,6 +1478,24 @@ static int smu_v13_0_0_print_clk_levels(struct smu_context *smu, |
1473 | 1478 | min_value, max_value); |
1474 | 1479 | break; |
1475 | 1480 |
|
| 1481 | + case SMU_OD_FAN_ZERO_RPM_STOP_TEMP: |
| 1482 | + if (!smu_v13_0_0_is_od_feature_supported(smu, |
| 1483 | + PP_OD_FEATURE_ZERO_FAN_BIT)) |
| 1484 | + break; |
| 1485 | + |
| 1486 | + size += sysfs_emit_at(buf, size, "FAN_ZERO_RPM_STOP_TEMPERATURE:\n"); |
| 1487 | + size += sysfs_emit_at(buf, size, "%d\n", |
| 1488 | + (int)od_table->OverDriveTable.FanZeroRpmStopTemp); |
| 1489 | + |
| 1490 | + size += sysfs_emit_at(buf, size, "%s:\n", "OD_RANGE"); |
| 1491 | + smu_v13_0_0_get_od_setting_limits(smu, |
| 1492 | + PP_OD_FEATURE_FAN_ZERO_RPM_STOP_TEMP, |
| 1493 | + &min_value, |
| 1494 | + &max_value); |
| 1495 | + size += sysfs_emit_at(buf, size, "ZERO_RPM_STOP_TEMPERATURE: %u %u\n", |
| 1496 | + min_value, max_value); |
| 1497 | + break; |
| 1498 | + |
1476 | 1499 | case SMU_OD_RANGE: |
1477 | 1500 | if (!smu_v13_0_0_is_od_feature_supported(smu, PP_OD_FEATURE_GFXCLK_BIT) && |
1478 | 1501 | !smu_v13_0_0_is_od_feature_supported(smu, PP_OD_FEATURE_UCLK_BIT) && |
@@ -1575,6 +1598,11 @@ static int smu_v13_0_0_od_restore_table_single(struct smu_context *smu, long inp |
1575 | 1598 | boot_overdrive_table->OverDriveTable.FanZeroRpmEnable; |
1576 | 1599 | od_table->OverDriveTable.FeatureCtrlMask |= BIT(PP_OD_FEATURE_ZERO_FAN_BIT); |
1577 | 1600 | break; |
| 1601 | + case PP_OD_EDIT_FAN_ZERO_RPM_STOP_TEMP: |
| 1602 | + od_table->OverDriveTable.FanZeroRpmStopTemp = |
| 1603 | + boot_overdrive_table->OverDriveTable.FanZeroRpmStopTemp; |
| 1604 | + od_table->OverDriveTable.FeatureCtrlMask |= BIT(PP_OD_FEATURE_ZERO_FAN_BIT); |
| 1605 | + break; |
1578 | 1606 | default: |
1579 | 1607 | dev_info(adev->dev, "Invalid table index: %ld\n", input); |
1580 | 1608 | return -EINVAL; |
@@ -1889,6 +1917,27 @@ static int smu_v13_0_0_od_edit_dpm_table(struct smu_context *smu, |
1889 | 1917 | od_table->OverDriveTable.FeatureCtrlMask |= BIT(PP_OD_FEATURE_ZERO_FAN_BIT); |
1890 | 1918 | break; |
1891 | 1919 |
|
| 1920 | + case PP_OD_EDIT_FAN_ZERO_RPM_STOP_TEMP: |
| 1921 | + if (!smu_v13_0_0_is_od_feature_supported(smu, PP_OD_FEATURE_ZERO_FAN_BIT)) { |
| 1922 | + dev_warn(adev->dev, "Zero RPM setting not supported!\n"); |
| 1923 | + return -ENOTSUPP; |
| 1924 | + } |
| 1925 | + |
| 1926 | + smu_v13_0_0_get_od_setting_limits(smu, |
| 1927 | + PP_OD_FEATURE_FAN_ZERO_RPM_STOP_TEMP, |
| 1928 | + &minimum, |
| 1929 | + &maximum); |
| 1930 | + if (input[0] < minimum || |
| 1931 | + input[0] > maximum) { |
| 1932 | + dev_info(adev->dev, "zero RPM stop temperature setting(%ld) must be within [%d, %d]!\n", |
| 1933 | + input[0], minimum, maximum); |
| 1934 | + return -EINVAL; |
| 1935 | + } |
| 1936 | + |
| 1937 | + od_table->OverDriveTable.FanZeroRpmStopTemp = input[0]; |
| 1938 | + od_table->OverDriveTable.FeatureCtrlMask |= BIT(PP_OD_FEATURE_ZERO_FAN_BIT); |
| 1939 | + break; |
| 1940 | + |
1892 | 1941 | case PP_OD_RESTORE_DEFAULT_TABLE: |
1893 | 1942 | if (size == 1) { |
1894 | 1943 | ret = smu_v13_0_0_od_restore_table_single(smu, input[0]); |
@@ -2161,7 +2210,9 @@ static void smu_v13_0_0_set_supported_od_feature_mask(struct smu_context *smu) |
2161 | 2210 | OD_OPS_SUPPORT_FAN_MINIMUM_PWM_RETRIEVE | |
2162 | 2211 | OD_OPS_SUPPORT_FAN_MINIMUM_PWM_SET | |
2163 | 2212 | OD_OPS_SUPPORT_FAN_ZERO_RPM_ENABLE_RETRIEVE | |
2164 | | - OD_OPS_SUPPORT_FAN_ZERO_RPM_ENABLE_SET; |
| 2213 | + OD_OPS_SUPPORT_FAN_ZERO_RPM_ENABLE_SET | |
| 2214 | + OD_OPS_SUPPORT_FAN_ZERO_RPM_STOP_TEMP_RETRIEVE | |
| 2215 | + OD_OPS_SUPPORT_FAN_ZERO_RPM_STOP_TEMP_SET; |
2165 | 2216 | } |
2166 | 2217 |
|
2167 | 2218 | static int smu_v13_0_0_set_default_od_settings(struct smu_context *smu) |
@@ -2229,6 +2280,8 @@ static int smu_v13_0_0_set_default_od_settings(struct smu_context *smu) |
2229 | 2280 | user_od_table_bak.OverDriveTable.FanMinimumPwm; |
2230 | 2281 | user_od_table->OverDriveTable.FanZeroRpmEnable = |
2231 | 2282 | user_od_table_bak.OverDriveTable.FanZeroRpmEnable; |
| 2283 | + user_od_table->OverDriveTable.FanZeroRpmStopTemp = |
| 2284 | + user_od_table_bak.OverDriveTable.FanZeroRpmStopTemp; |
2232 | 2285 | } |
2233 | 2286 |
|
2234 | 2287 | smu_v13_0_0_set_supported_od_feature_mask(smu); |
|
0 commit comments