meta-quanta: gbs: add pid controller with config

1. add pid control with fan table config
2. add reboot control service to set fan duty to expected default
   value before pid control up
3. initial read-margin-temp with json file and the script waits
   related hwmon sensor could monitor

Signed-off-by: George Hung <george.hung@quantatw.com>
Change-Id: I6433078915b7c4df498bcb0f7a271dccaf66fbfa
diff --git a/meta-gbs/recipes-phosphor/fans/read-margin-temp/config-margin.json b/meta-gbs/recipes-phosphor/fans/read-margin-temp/config-margin.json
new file mode 100644
index 0000000..6b73e34
--- /dev/null
+++ b/meta-gbs/recipes-phosphor/fans/read-margin-temp/config-margin.json
@@ -0,0 +1,308 @@
+{
+    "sensors" : [
+        {
+            "name": "cputemp",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/cputemp",
+            "parameters": {
+                "type": "file",
+                "maxTemp": -1,
+                "path": "/sys/devices/platform/ahb/ahb:apb/f0082000.i2c/i2c-2/2-004c/hwmon/cpu_hwmon/temp1_max",
+                "sysLabel": "",
+                "targetTemp": -1,
+                "targetTempOffset": -10000,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "nvme0",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/nvme0",
+            "parameters": {
+                "type": "",
+                "maxTemp": 70000,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 60000,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "nvme1",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/nvme1",
+            "parameters": {
+                "type": "",
+                "maxTemp": 70000,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 60000,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "nvme2",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/nvme2",
+            "parameters": {
+                "type": "",
+                "maxTemp": 70000,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 60000,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "nvme3",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/nvme3",
+            "parameters": {
+                "type": "",
+                "maxTemp": 70000,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 60000,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "nvme4",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/nvme4",
+            "parameters": {
+                "type": "",
+                "maxTemp": 70000,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 60000,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "nvme5",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/nvme5",
+            "parameters": {
+                "type": "",
+                "maxTemp": 70000,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 60000,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "nvme6",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/nvme6",
+            "parameters": {
+                "type": "",
+                "maxTemp": 70000,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 60000,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "nvme7",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/nvme7",
+            "parameters": {
+                "type": "",
+                "maxTemp": 70000,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 60000,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "nvme8",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/nvme8",
+            "parameters": {
+                "type": "",
+                "maxTemp": 70000,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 60000,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "nvme9",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/nvme9",
+            "parameters": {
+                "type": "",
+                "maxTemp": 70000,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 60000,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "nvme10",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/nvme10",
+            "parameters": {
+                "type": "",
+                "maxTemp": 70000,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 60000,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "nvme11",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/nvme11",
+            "parameters": {
+                "type": "",
+                "maxTemp": 70000,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 60000,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "nvme12",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/nvme12",
+            "parameters": {
+                "type": "",
+                "maxTemp": 70000,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 60000,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "nvme13",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/nvme13",
+            "parameters": {
+                "type": "",
+                "maxTemp": 70000,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 60000,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "nvme14",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/nvme14",
+            "parameters": {
+                "type": "",
+                "maxTemp": 70000,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 60000,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "nvme15",
+            "unit": "millidegree",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/sensors/temperature/nvme15",
+            "parameters": {
+                "type": "",
+                "maxTemp": 70000,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 60000,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "fleeting0",
+            "unit": "millimargin",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/extsensors/margin/fleeting0",
+            "parameters": {
+                "type": "",
+                "maxTemp": 0,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 0,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        },
+        {
+            "name": "fleeting1",
+            "unit": "millimargin",
+            "type": "dbus",
+            "path": "/xyz/openbmc_project/extsensors/margin/fleeting1",
+            "parameters": {
+                "type": "",
+                "maxTemp": 0,
+                "path": "",
+                "sysLabel": "",
+                "targetTemp": 0,
+                "targetTempOffset": 0,
+                "scalar": 1.0
+            }
+        }
+    ],
+    "skus" : [
+        {
+            "num": 1,
+            "zones": [
+                {
+                    "id": 0,
+                    "zoneSetpoint": 10000,
+                    "target": "/xyz/openbmc_project/extsensors/margin/real_fleeting0",
+                    "components": ["cputemp", "fleeting0"]
+                },
+                {
+                    "id": 1,
+                    "zoneSetpoint": 10000,
+                    "target": "/xyz/openbmc_project/extsensors/margin/real_fleeting1",
+                    "components": ["nvme0", "nvme1", "nvme2", "nvme3", "nvme4", "nvme5", "nvme6", "nvme7", "nvme8", "nvme9", "nvme10", "nvme11", "nvme12", "nvme13", "nvme14", "nvme15"]
+                }
+            ]
+        }
+    ]
+}
diff --git a/meta-gbs/recipes-phosphor/fans/read-margin-temp/read-margin-temp-wait.sh b/meta-gbs/recipes-phosphor/fans/read-margin-temp/read-margin-temp-wait.sh
new file mode 100644
index 0000000..2e44479
--- /dev/null
+++ b/meta-gbs/recipes-phosphor/fans/read-margin-temp/read-margin-temp-wait.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+MARGIN_TABLE_FILE="/usr/share/read-margin-temp/config-margin.json"
+
+target_num="$(cat $MARGIN_TABLE_FILE | grep '"target"' | wc -l)"
+
+cpu_hwmon="$(ls -la /sys/class/hwmon | grep f0082000 |  head -n 1 | tail -n +1 | cut -d '/' -f 11)"
+
+# replace by the real cpu temperature hwmon path in runtime
+if [[ "$cpu_hwmon" != "" ]]
+then
+     sed -i "s/cpu_hwmon/$cpu_hwmon/g" $MARGIN_TABLE_FILE
+fi
+
+# wait target dbus
+for ((i=0; i<$target_num; i++))
+do
+    line_num=$((i+1))
+    path="$(cat $MARGIN_TABLE_FILE | grep '"target"' | head -n ${line_num} | tail -n +${line_num} | cut -d '"' -f 4)"
+    mapper wait $path
+done
+
+# start read margin temp
+/usr/bin/read-margin-temp &
+
+exit 0