meta-nuvoton: evb-npcm845: fans: add temp and fan configuration
Enable fan control and apply configuration for Arbel EVB.
Tested:
root@:~# systemctl status phosphor-pid-control.service
* phosphor-pid-control.service - OpenBMC Fan Control Daemon
Active: active (running) since Tue 2024-02-27 17:26:53 UTC;
swampd[881]: pid: EVB_Temp failSafePercent: 0
swampd[881]: pid: Fan4 failSafePercent: 0
swampd[881]: Final zone1 failSafePercent: 100
swampd[881]: PID Zone 1 max SetPoint 20 requested by EVB_Temp
swampd[881]: pushing zone 0
swampd[881]: zone: Zone0 zoneFailSafePercent: 100
swampd[881]: pid: Fan1 failSafePercent: 0
swampd[881]: Final zone0 failSafePercent: 100
Signed-off-by: Tim Lee <timlee660101@gmail.com>
Change-Id: I9a375141d9e214be285bcd082f567afa769fe0c5
diff --git a/meta-nuvoton/meta-evb-npcm845/recipes-phosphor/fans/phosphor-pid-control/config-evb-npcm845.json b/meta-nuvoton/meta-evb-npcm845/recipes-phosphor/fans/phosphor-pid-control/config-evb-npcm845.json
new file mode 100644
index 0000000..0c54ba6
--- /dev/null
+++ b/meta-nuvoton/meta-evb-npcm845/recipes-phosphor/fans/phosphor-pid-control/config-evb-npcm845.json
@@ -0,0 +1,149 @@
+{
+ "sensors" : [
+ {
+ "name": "Fan1",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/Fan1",
+ "writePath": "/sys/devices/platform/ahb/ahb:apb/f0103000.pwm-fan-controller/hwmon/**/pwm1",
+ "min": 0,
+ "max": 255
+ },
+ {
+ "name": "Fan2",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/Fan2",
+ "writePath": "/sys/devices/platform/ahb/ahb:apb/f0103000.pwm-fan-controller/hwmon/**/pwm2",
+ "min": 0,
+ "max": 255
+ },
+ {
+ "name": "Fan3",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/Fan3",
+ "writePath": "/sys/devices/platform/ahb/ahb:apb/f0103000.pwm-fan-controller/hwmon/**/pwm3",
+ "min": 0,
+ "max": 255
+ },
+ {
+ "name": "Fan4",
+ "type": "fan",
+ "readPath": "/xyz/openbmc_project/sensors/fan_tach/Fan4",
+ "writePath": "/sys/devices/platform/ahb/ahb:apb/f0103000.pwm-fan-controller/hwmon/**/pwm4",
+ "min": 0,
+ "max": 255
+ },
+ {
+ "name": "EVB_Temp",
+ "type": "temp",
+ "readPath": "/xyz/openbmc_project/sensors/temperature/EVB_Temp",
+ "writePath": "",
+ "ignoreDbusMinMax": true,
+ "timeout": 0
+ }
+ ],
+ "zones" : [
+ {
+ "id": 0,
+ "minThermalOutput": 0.0,
+ "failsafePercent": 100.0,
+ "pids": [
+ {
+ "name": "Fan1",
+ "type": "fan",
+ "inputs": ["Fan1"],
+ "setpoint": 40.0,
+ "pid": {
+ "samplePeriod": 1.0,
+ "proportionalCoeff": 0.0,
+ "integralCoeff": 0.0,
+ "feedFwdOffsetCoeff": 0.0,
+ "feedFwdGainCoeff": 1.0,
+ "integralLimit_min": 0.0,
+ "integralLimit_max": 0.0,
+ "outLim_min": 10.0,
+ "outLim_max": 100.0,
+ "slewNeg": 0.0,
+ "slewPos": 0.0
+ }
+ }
+ ]
+ },
+ {
+ "id": 1,
+ "minThermalOutput": 0.0,
+ "failsafePercent": 100.0,
+ "pids": [
+ {
+ "name": "Fan4",
+ "type": "fan",
+ "inputs": ["Fan4"],
+ "setpoint": 90.0,
+ "pid": {
+ "samplePeriod": 0.1,
+ "proportionalCoeff": 0.0,
+ "integralCoeff": 0.0,
+ "feedFwdOffsetCoeff": 0.0,
+ "feedFwdGainCoeff": 1.0,
+ "integralLimit_min": 0.0,
+ "integralLimit_max": 0.0,
+ "outLim_min": 10.0,
+ "outLim_max": 100.0,
+ "slewNeg": 0.0,
+ "slewPos": 0.0
+ }
+ },
+ {
+ "name": "EVB_Temp",
+ "type": "stepwise",
+ "inputs": ["EVB_Temp"],
+ "setpoint": 30.0,
+ "pid": {
+ "samplePeriod": 1.0,
+ "positiveHysteresis": 0.0,
+ "negativeHysteresis": 0.0,
+ "isCeiling": false,
+ "reading": {
+ "0": 25,
+ "1": 28,
+ "2": 31,
+ "3": 34,
+ "4": 37,
+ "5": 40,
+ "6": 43,
+ "7": 46,
+ "8": 49,
+ "9": 52,
+ "10": 55,
+ "11": 58,
+ "12": 61,
+ "13": 64,
+ "14": 67,
+ "15": 70
+ },
+ "output": {
+ "0": 10,
+ "1": 10,
+ "2": 20,
+ "3": 20,
+ "4": 20,
+ "5": 30,
+ "6": 30,
+ "7": 30,
+ "8": 40,
+ "9": 50,
+ "10": 60,
+ "11": 70,
+ "12": 80,
+ "13": 90,
+ "14": 100,
+ "15": 100
+ }
+
+
+ }
+ }
+
+ ]
+ }
+ ]
+}
diff --git a/meta-nuvoton/meta-evb-npcm845/recipes-phosphor/fans/phosphor-pid-control/phosphor-pid-control.service b/meta-nuvoton/meta-evb-npcm845/recipes-phosphor/fans/phosphor-pid-control/phosphor-pid-control.service
new file mode 100644
index 0000000..19e99ec
--- /dev/null
+++ b/meta-nuvoton/meta-evb-npcm845/recipes-phosphor/fans/phosphor-pid-control/phosphor-pid-control.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=OpenBMC Fan Control Daemon
+After=xyz.openbmc_project.fansensor.service
+
+[Service]
+Type=simple
+ExecStartPre=/usr/bin/env mapper wait /xyz/openbmc_project/sensors/temperature/EVB_Temp
+ExecStart=/usr/bin/swampd
+Restart=always
+RestartSec=5
+StartLimitInterval=0
+
+[Install]
+WantedBy=basic.target
diff --git a/meta-nuvoton/meta-evb-npcm845/recipes-phosphor/fans/phosphor-pid-control_%.bbappend b/meta-nuvoton/meta-evb-npcm845/recipes-phosphor/fans/phosphor-pid-control_%.bbappend
new file mode 100644
index 0000000..a75074f
--- /dev/null
+++ b/meta-nuvoton/meta-evb-npcm845/recipes-phosphor/fans/phosphor-pid-control_%.bbappend
@@ -0,0 +1,21 @@
+FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
+
+SRC_URI:append = " \
+ file://config-evb-npcm845.json \
+ file://phosphor-pid-control.service \
+ "
+
+FILES:${PN}:append = " ${datadir}/swampd/config.json"
+RDEPENDS:${PN} += "bash"
+
+SYSTEMD_SERVICE:${PN}:append = " phosphor-pid-control.service"
+
+do_install:append() {
+ install -d ${D}${datadir}/swampd
+ install -m 0644 -D ${WORKDIR}/config-evb-npcm845.json \
+ ${D}${datadir}/swampd/config.json
+
+ install -d ${D}${systemd_system_unitdir}
+ install -m 0644 ${WORKDIR}/phosphor-pid-control.service \
+ ${D}${systemd_system_unitdir}
+}