Add enable fan-wdt and kick

This commit is contained in:
jostar-yang 2023-01-19 10:46:47 +08:00
parent 2315510cd2
commit f3637e4a32
2 changed files with 37 additions and 4 deletions

View File

@ -45,7 +45,6 @@ static struct as7726_32x_fan_data *as7726_32x_fan_update_device(struct device *d
static ssize_t fan_show_value(struct device *dev, struct device_attribute *da, char *buf);
static ssize_t set_duty_cycle(struct device *dev, struct device_attribute *da,
const char *buf, size_t count);
static ssize_t get_sys_temp(struct device *dev, struct device_attribute *da, char *buf);
/* fan related data, the index should match sysfs_fan_attributes
*/
@ -294,7 +293,7 @@ static ssize_t set_duty_cycle(struct device *dev, struct device_attribute *da,
if (value < 0 || value > FAN_MAX_DUTY_CYCLE)
return -EINVAL;
as7726_32x_fan_write_value(client, 0x33, 0); /* Disable fan speed watch dog */
//as7726_32x_fan_write_value(client, 0x33, 0); /* Disable fan speed watch dog */
as7726_32x_fan_write_value(client, fan_reg[FAN_DUTY_CYCLE_PERCENTAGE], duty_cycle_to_reg_val(value));
return count;
}

View File

@ -21,6 +21,7 @@
# 4/20/2018: Jostar modify for as7726_32x
# 12/03/2018:Jostar modify for as7726_32x thermal plan
# 11/16/2020:Jostar modify for as7726_32x thermal plan based on PDDF
# 11/19/2023:Jostar modify to add kick fan-wdt
# ------------------------------------------------------------------
try:
@ -32,6 +33,7 @@ try:
import logging.handlers
import time
from sonic_platform import platform
from sonic_py_common.general import getstatusoutput_noshell
except ImportError as e:
raise ImportError('%s - required module not found' % str(e))
@ -162,7 +164,7 @@ class device_monitor(object):
}
fan_dir= platform_chassis.get_fan(0).get_direction()
if fan_dir == 'EXHAUST':
if fan_dir == 'exhaust':
fan_policy = fan_policy_f2b
else:
fan_policy = fan_policy_b2f
@ -305,15 +307,47 @@ def main(argv):
global platform_chassis
platform_chassis = platform.Platform().get_chassis()
cmd_str = ["i2cset", "-y", "-f", "54", "0x66", "0x33", "0x0"]
status, output = getstatusoutput_noshell(cmd_str)
if status:
print("Warning: Fan speed watchdog could not be disabled")
cmd_str = ["i2cset", "-y", "-f", "54", "0x66", "0x33", "0x1"]
status, output = getstatusoutput_noshell(cmd_str)
if status:
print("Warning: Fan speed watchdog could not be enabled")
#Timer need to be set after enable.
#if set timer is eralier than enable wdt. Speed will become to wdt speed after 6sec.
cmd_str = ["i2cset", "-y", "-f", "54", "0x66", "0x31", "0xF0"]
status, output = getstatusoutput_noshell(cmd_str)
if status:
print("Warning: Fan speed watchdog timer could not be disabled")
platform_chassis.get_fan(0).set_speed(38)
print("set default fan speed to 37.5%")
monitor = device_monitor(log_file, log_level)
cmd_kick = ["i2cset", "-y", "-f", "54", "0x66", "0x31", "0xF0"] #kick WDT
cmd_check_wdt = ["i2cget", "-y", "-f", "54", "0x66", "0x33"]
# Loop forever, doing something useful hopefully:
while True:
monitor.manage_fans()
getstatusoutput_noshell(cmd_kick)
time.sleep(10)
#polling to check fan-wdt status
status, output = getstatusoutput_noshell(cmd_check_wdt)
if status is not None:
val= int(output,16)
if (val & 0x1) == 0:
logging.warning('Detect Fan-WDT disable')
logging.warning('Try to enable Fan-WDT')
cmd_str = ["i2cset", "-y", "-f", "54", "0x66", "0x33", "0x1"]
getstatusoutput_noshell(cmd_str)
cmd_str = ["i2cset", "-y", "-f", "54", "0x66", "0x31", "0xF0"]
getstatusoutput_noshell(cmd_str)
if __name__ == '__main__':
main(sys.argv[1:])