diff options
Diffstat (limited to 'meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control')
5 files changed, 398 insertions, 0 deletions
diff --git a/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/config.json b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/config.json new file mode 100644 index 000000000..7c817d420 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/config.json @@ -0,0 +1,342 @@ +{ + "version" : "R02", + "sensors" : [ + { + "name": "fan0", + "type": "fan", + "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan0", + "writePath": "/sys/devices/platform/ahb/ahb:apb/f0103000.pwm-fan-controller/hwmon/Fan_0_To_4_Hwmon/pwm1", + "min": 0, + "max": 255 + }, + { + "name": "fan1", + "type": "fan", + "readPath": "/xyz/openbmc_project/sensors/fan_tach/fan1", + "writePath": "/sys/devices/platform/ahb/ahb:apb/f0103000.pwm-fan-controller/hwmon/Fan_0_To_4_Hwmon/pwm2", + "min": 0, + "max": 255 + }, + { + "name": "fb_fan0", + "type": "fan", + "readPath": "/xyz/openbmc_project/sensors/fan_tach/fb_fan0", + "writePath": "/sys/devices/platform/ahb/ahb:apb/f0103000.pwm-fan-controller/hwmon/Fan_0_To_4_Hwmon/pwm3", + "min": 0, + "max": 255 + }, + { + "name": "fb_fan1", + "type": "fan", + "readPath": "/xyz/openbmc_project/sensors/fan_tach/fb_fan1", + "writePath": "/sys/devices/platform/ahb/ahb:apb/f0103000.pwm-fan-controller/hwmon/Fan_0_To_4_Hwmon/pwm4", + "min": 0, + "max": 255 + }, + { + "name": "fb_fan2", + "type": "fan", + "readPath": "/xyz/openbmc_project/sensors/fan_tach/fb_fan2", + "writePath": "/sys/devices/platform/ahb/ahb:apb/f0103000.pwm-fan-controller/hwmon/Fan_0_To_4_Hwmon/pwm5", + "min": 0, + "max": 255 + }, + { + "name": "fleeting0", + "type": "margin", + "readPath": "/xyz/openbmc_project/extsensors/margin/fleeting0", + "writePath": "", + "min": 0, + "max": 0, + "ignoreDbusMinMax": true, + "timeout": 0 + }, + { + "name": "fleeting1", + "type": "margin", + "readPath": "/xyz/openbmc_project/extsensors/margin/fleeting1", + "writePath": "", + "min": 0, + "max": 0, + "ignoreDbusMinMax": true, + "timeout": 0 + }, + { + "name": "cputemp", + "type": "margin", + "readPath": "/xyz/openbmc_project/extsensors/margin/cputemp", + "writePath": "", + "min": 0, + "max": 0, + "ignoreDbusMinMax": true, + "timeout": 0 + }, + { + "name": "zone0_vr", + "type": "margin", + "readPath": "/xyz/openbmc_project/extsensors/margin/zone0_vr", + "writePath": "", + "min": 0, + "max": 0, + "ignoreDbusMinMax": true, + "timeout": 0 + }, + { + "name": "nvme", + "type": "margin", + "readPath": "/xyz/openbmc_project/extsensors/margin/nvme", + "writePath": "", + "min": 0, + "max": 0, + "ignoreDbusMinMax": true, + "timeout": 0 + }, + { + "name": "p12v_fan", + "type": "margin", + "readPath": "/xyz/openbmc_project/extsensors/margin/p12v_fan", + "writePath": "", + "min": 0, + "max": 0, + "ignoreDbusMinMax": true, + "timeout": 0 + } + ], + "zones" : [ + { + "id": 0, + "minThermalOutput": 0.0, + "failsafePercent": 100.0, + "pids": [ + { + "name": "fan0", + "type": "fan", + "inputs": ["fan0"], + "setpoint": 0.0, + "pid": { + "samplePeriod": 0.1, + "proportionalCoeff": 0.0, + "integralCoeff": 0.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0056, + "integralLimit_min": 0.0, + "integralLimit_max": 0.0, + "outLim_min": 10.0, + "outLim_max": 100.0, + "slewNeg": 0.0, + "slewPos": 0.0 + } + }, + { + "name": "fan1", + "type": "fan", + "inputs": ["fan1"], + "setpoint": 0.0, + "pid": { + "samplePeriod": 0.1, + "proportionalCoeff": 0.0, + "integralCoeff": 0.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0056, + "integralLimit_min": 0.0, + "integralLimit_max": 0.0, + "outLim_min": 10.0, + "outLim_max": 100.0, + "slewNeg": 0.0, + "slewPos": 0.0 + } + }, + { + "name": "cputemp", + "type": "margin", + "inputs": ["cputemp"], + "setpoint": 10.0, + "pid": { + "samplePeriod": 1.0, + "proportionalCoeff": 714.0, + "integralCoeff": 9.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0, + "integralLimit_min": 1786.0, + "integralLimit_max": 18000.0, + "outLim_min": 1786.0, + "outLim_max": 18000.0, + "slewNeg": 0.0, + "slewPos": 0.0, + "positiveHysteresis": 0.0, + "negativeHysteresis": 0.0 + } + }, + { + "name": "zone0_vr", + "type": "margin", + "inputs": ["zone0_vr"], + "setpoint": 10.0, + "pid": { + "samplePeriod": 1.0, + "proportionalCoeff": 536.0, + "integralCoeff": 9.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0, + "integralLimit_min": 1786.0, + "integralLimit_max": 18000.0, + "outLim_min": 1786.0, + "outLim_max": 18000.0, + "slewNeg": 0.0, + "slewPos": 0.0, + "positiveHysteresis": 0.0, + "negativeHysteresis": 0.0 + } + }, + { + "name": "fleeting0", + "type": "margin", + "inputs": ["fleeting0"], + "setpoint": 10.0, + "pid": { + "samplePeriod": 1.0, + "proportionalCoeff": 536.0, + "integralCoeff": 9.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0, + "integralLimit_min": 1786.0, + "integralLimit_max": 18000.0, + "outLim_min": 1786.0, + "outLim_max": 18000.0, + "slewNeg": 0.0, + "slewPos": 0.0, + "positiveHysteresis": 0.0, + "negativeHysteresis": 0.0 + } + }, + { + "name": "fleeting1", + "type": "margin", + "inputs": ["fleeting1"], + "setpoint": 10.0, + "pid": { + "samplePeriod": 1.0, + "proportionalCoeff": 536.0, + "integralCoeff": 18.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0, + "integralLimit_min": 1786.0, + "integralLimit_max": 18000.0, + "outLim_min": 1786.0, + "outLim_max": 18000.0, + "slewNeg": 0.0, + "slewPos": 0.0, + "positiveHysteresis": 0.0, + "negativeHysteresis": 0.0 + } + } + ] + }, + { + "id": 1, + "minThermalOutput": 0.0, + "failsafePercent": 100.0, + "pids": [ + { + "name": "fb_fan0", + "type": "fan", + "inputs": ["fb_fan0"], + "setpoint": 0.0, + "pid": { + "samplePeriod": 0.1, + "proportionalCoeff": 0.0, + "integralCoeff": 0.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0056, + "integralLimit_min": 0.0, + "integralLimit_max": 0.0, + "outLim_min": 10.0, + "outLim_max": 100.0, + "slewNeg": 0.0, + "slewPos": 0.0 + } + }, + { + "name": "fb_fan1", + "type": "fan", + "inputs": ["fb_fan1"], + "setpoint": 0.0, + "pid": { + "samplePeriod": 0.1, + "proportionalCoeff": 0.0, + "integralCoeff": 0.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0056, + "integralLimit_min": 0.0, + "integralLimit_max": 0.0, + "outLim_min": 10.0, + "outLim_max": 100.0, + "slewNeg": 0.0, + "slewPos": 0.0 + } + }, + { + "name": "fb_fan2", + "type": "fan", + "inputs": ["fb_fan2"], + "setpoint": 0.0, + "pid": { + "samplePeriod": 0.1, + "proportionalCoeff": 0.0, + "integralCoeff": 0.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0056, + "integralLimit_min": 0.0, + "integralLimit_max": 0.0, + "outLim_min": 10.0, + "outLim_max": 100.0, + "slewNeg": 0.0, + "slewPos": 0.0 + } + }, + { + "name": "nvme", + "type": "margin", + "inputs": ["nvme"], + "setpoint": 10.0, + "pid": { + "samplePeriod": 1.0, + "proportionalCoeff": 1786.0, + "integralCoeff": 36.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0, + "integralLimit_min": 1786.0, + "integralLimit_max": 18000.0, + "outLim_min": 1786.0, + "outLim_max": 18000.0, + "slewNeg": 0.0, + "slewPos": 0.0, + "positiveHysteresis": 0.0, + "negativeHysteresis": 0.0 + } + }, + { + "name": "p12v_fan", + "type": "margin", + "inputs": ["p12v_fan"], + "setpoint": 10.0, + "pid": { + "samplePeriod": 1.0, + "proportionalCoeff": 268.0, + "integralCoeff": 4.0, + "feedFwdOffsetCoeff": 0.0, + "feedFwdGainCoeff": 0.0, + "integralLimit_min": 1786.0, + "integralLimit_max": 18000.0, + "outLim_min": 1786.0, + "outLim_max": 18000.0, + "slewNeg": 0.0, + "slewPos": 0.0, + "positiveHysteresis": 0.0, + "negativeHysteresis": 0.0 + } + } + ] + } + ] +} diff --git a/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-default-speed.sh b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-default-speed.sh new file mode 100644 index 000000000..22cfab582 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-default-speed.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +for i in {1..5}; +do + echo 255 > /sys/class/hwmon/*/pwm${i} +done diff --git a/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-reboot-control.service b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-reboot-control.service new file mode 100644 index 000000000..681bdbe00 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-reboot-control.service @@ -0,0 +1,12 @@ +[Unit] +Description=Set Fan to Default Duty as Rebooting +DefaultDependencies=no +After=shutdown.target + +[Service] +Type=oneshot +RemainAfterExit=true +ExecStart=/usr/bin/fan-default-speed.sh + +[Install] +WantedBy=shutdown.target diff --git a/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-table-init.sh b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-table-init.sh new file mode 100644 index 000000000..5706a73fb --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/fan-table-init.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# wait for fan dbus +mapper wait /xyz/openbmc_project/sensors/fan_tach/fan0 +mapper wait /xyz/openbmc_project/sensors/fan_tach/fan1 +mapper wait /xyz/openbmc_project/sensors/fan_tach/fb_fan0 +mapper wait /xyz/openbmc_project/sensors/fan_tach/fb_fan1 +mapper wait /xyz/openbmc_project/sensors/fan_tach/fb_fan2 + +/usr/bin/fan-default-speed.sh + +# generate fan table writePath +Fan_0_To_4_Hwmon="$(ls -la /sys/class/hwmon |grep pwm | head -n 1| tail -n +1|cut -d '/' -f 9)" + +if [[ "$Fan_0_To_4_Hwmon" != "" ]] +then + sed -i "s/Fan_0_To_4_Hwmon/$Fan_0_To_4_Hwmon/g" /usr/share/swampd/config.json +fi + +# start read margin temp wait +/usr/bin/read-margin-temp-wait.sh & + +exit 0 diff --git a/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/phosphor-pid-control.service b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/phosphor-pid-control.service new file mode 100644 index 000000000..33a441928 --- /dev/null +++ b/meta-quanta/meta-gbs/recipes-phosphor/fans/phosphor-pid-control/phosphor-pid-control.service @@ -0,0 +1,15 @@ +[Unit] +Description=Swampd Margin-based Fan Control Daemon +After=xyz.openbmc_project.Hwmon@-ahb-apb-pwm\x2dfan\x2dcontroller\x40103000.service + +[Service] +Type=simple +ExecStartPre=/usr/bin/fan-table-init.sh +ExecStart=/usr/bin/swampd +Restart=always +RestartSec=5 +StartLimitInterval=0 +ExecStopPost=/usr/bin/fan-default-speed.sh + +[Install] +WantedBy=basic.target |