control:p10bmc:ibm,rainier-4u - Support setting fan floor

Add the supported list of PCIe hot adapter cards(PCIe cards without
temperature sensors) that will be used in determining the fan floor
along with the current ambient environment and power mode the system is
in. In addition, include setting the `default_floor` to the floor that
should be used when the ambient environment is above 43C.

This essentially enables full function fan control on the Rainier 4U
system by determining what floor the fans are allowed to decrease down
to.

Change-Id: I90bf5de1e79738621e1bd0777bb5921fbace0164
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/control/config_files/p10bmc/ibm,rainier-4u/events.json b/control/config_files/p10bmc/ibm,rainier-4u/events.json
index a86755f..b6add91 100644
--- a/control/config_files/p10bmc/ibm,rainier-4u/events.json
+++ b/control/config_files/p10bmc/ibm,rainier-4u/events.json
@@ -1236,5 +1236,243 @@
          "signal": "interfaces_removed"
        }
      ]
+   },
+   {
+     "name": "set pcie floor index",
+     "groups": [
+       {
+         "name": "pcie slots",
+         "interface": "xyz.openbmc_project.State.Decorator.PowerState",
+         "property": {
+           "name": "PowerState"
+         }
+       },
+       {
+         "name": "pcie cards",
+         "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
+         "property": {
+           "name": "Function0DeviceId"
+         }
+       },
+       {
+         "name": "pcie cards",
+         "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
+         "property": {
+           "name": "Function0VendorId"
+         }
+       },
+       {
+         "name": "pcie cards",
+         "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
+         "property": {
+           "name": "Function0SubsystemId"
+         }
+       },
+       {
+         "name": "pcie cards",
+         "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
+         "property": {
+           "name": "Function0SubsystemVendorId"
+         }
+       }
+     ],
+     "triggers": [
+       {
+         "class": "init",
+         "method": "get_properties"
+       },
+       {
+         "class": "signal",
+         "signal": "properties_changed"
+       },
+       {
+         "class": "signal",
+         "signal": "interfaces_added"
+       }
+     ],
+     "actions": [
+       {
+         "name": "pcie_card_floors",
+         "use_config_specific_files": true,
+         "settle_time": 2
+       }
+     ]
+   },
+   {
+     "name": "Fan floors",
+     "groups": [
+      {
+        "name": "ambient temp",
+        "interface": "xyz.openbmc_project.Sensor.Value",
+        "property": { "name": "Value" }
+      },
+      {
+        "name": "power mode",
+        "interface": "xyz.openbmc_project.Control.Power.Mode",
+        "property": { "name": "PowerMode" }
+      }
+     ],
+     "triggers": [
+       {
+         "class": "init",
+         "method": "get_properties"
+       },
+       {
+         "class": "signal",
+         "signal": "properties_changed"
+       },
+       {
+         "class": "signal",
+         "signal": "interfaces_added"
+       }
+     ],
+     "actions": [
+       {
+         "name": "mapped_floor",
+         "key_group": "ambient temp",
+         "fan_floors": [
+          {
+            // Entry valid for ambient temp < 27
+            "key": 27,
+            "floors": [
+              {
+                "group": "power mode",
+                "floors": [
+                  {
+                    "value": "xyz.openbmc_project.Control.Power.Mode.PowerMode.Static",
+                    "floor": 5000
+                  },
+                  {
+                    "value": "xyz.openbmc_project.Control.Power.Mode.PowerMode.PowerSaving",
+                    "floor": 5000
+                  },
+                  {
+                    "value": "xyz.openbmc_project.Control.Power.Mode.PowerMode.MaximumPerformance",
+                    "floor": 5000
+                  },
+                  {
+                    // OEM == MaximumPerformance
+                    "value": "xyz.openbmc_project.Control.Power.Mode.PowerMode.OEM",
+                    "floor": 5000
+                  }
+                ]
+              },
+              {
+                "parameter": "pcie_floor_index",
+                "floors": [
+                  { "value": 1, "floor": 7000 },
+                  { "value": 2, "floor": 9000 }
+                ]
+              }
+            ]
+          },
+          {
+            // Entry valid for ambient temp < 32
+            "key": 32,
+            "floors": [
+              {
+                "group": "power mode",
+                "floors": [
+                  {
+                    "value": "xyz.openbmc_project.Control.Power.Mode.PowerMode.Static",
+                    "floor": 5500
+                  },
+                  {
+                    "value": "xyz.openbmc_project.Control.Power.Mode.PowerMode.PowerSaving",
+                    "floor": 5500
+                  },
+                  {
+                    "value": "xyz.openbmc_project.Control.Power.Mode.PowerMode.MaximumPerformance",
+                    "floor": 5900
+                  },
+                  {
+                    // OEM == MaximumPerformance
+                    "value": "xyz.openbmc_project.Control.Power.Mode.PowerMode.OEM",
+                    "floor": 5900
+                  }
+                ]
+              },
+              {
+                "parameter": "pcie_floor_index",
+                "floors": [
+                  { "value": 1, "floor": 8000 },
+                  { "value": 2, "floor": 9000 }
+                ]
+              }
+            ]
+          },
+          {
+            // Entry valid for ambient temp < 37
+            "key": 37,
+            "floors": [
+              {
+                "group": "power mode",
+                "floors": [
+                  {
+                    "value": "xyz.openbmc_project.Control.Power.Mode.PowerMode.Static",
+                    "floor": 6900
+                  },
+                  {
+                    "value": "xyz.openbmc_project.Control.Power.Mode.PowerMode.PowerSaving",
+                    "floor": 6900
+                  },
+                  {
+                    "value": "xyz.openbmc_project.Control.Power.Mode.PowerMode.MaximumPerformance",
+                    "floor": 7900
+                  },
+                  {
+                    // OEM == MaximumPerformance
+                    "value": "xyz.openbmc_project.Control.Power.Mode.PowerMode.OEM",
+                    "floor": 7900
+                  }
+                ]
+              },
+              {
+                "parameter": "pcie_floor_index",
+                "floors": [
+                  { "value": 1, "floor": 8900 },
+                  { "value": 2, "floor": 9000 }
+                ]
+              }
+            ]
+          },
+          {
+            // Entry valid for ambient temp < 43
+            "key": 43,
+            "floors": [
+              {
+                "group": "power mode",
+                "floors": [
+                  {
+                    "value": "xyz.openbmc_project.Control.Power.Mode.PowerMode.Static",
+                    "floor": 8800
+                  },
+                  {
+                    "value": "xyz.openbmc_project.Control.Power.Mode.PowerMode.PowerSaving",
+                    "floor": 8800
+                  },
+                  {
+                    "value": "xyz.openbmc_project.Control.Power.Mode.PowerMode.MaximumPerformance",
+                    "floor": 8800
+                  },
+                  {
+                    // OEM == MaximumPerformance
+                    "value": "xyz.openbmc_project.Control.Power.Mode.PowerMode.OEM",
+                    "floor": 8800
+                  }
+                ]
+              },
+              {
+                "parameter": "pcie_floor_index",
+                "floors": [
+                  { "value": 1, "floor": 8900 },
+                  { "value": 2, "floor": 9000 }
+                ]
+              }
+            ]
+          }
+        ]
+       }
+     ]
    }
 ]
diff --git a/control/config_files/p10bmc/ibm,rainier-4u/pcie_cards.json b/control/config_files/p10bmc/ibm,rainier-4u/pcie_cards.json
new file mode 100644
index 0000000..72a36e4
--- /dev/null
+++ b/control/config_files/p10bmc/ibm,rainier-4u/pcie_cards.json
@@ -0,0 +1,292 @@
+{
+  "cards": [
+    {
+      "name": "PHYP had errors getting IDs",
+      "vendor_id": "0xFFFF",
+      "device_id": "0xFFFF",
+      "subsystem_vendor_id": "0xFFFF",
+      "subsystem_id": "0xFFFF",
+      "floor_index": 2
+    },
+    {
+      "name": "Flett",
+      "vendor_id": "0x1014",
+      "device_id": "0x04F2",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0007",
+      "has_temp_sensor": true
+    },
+    {
+      "name": "Bear Lake and Bear River",
+      "vendor_id": "0x1014",
+      "device_id": "0x04F2",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0004",
+      "has_temp_sensor": true
+    },
+    {
+      "name": "GTO",
+      "vendor_id": "0x1014",
+      "device_id": "0x034A",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x033B",
+      "floor_index": 1
+    },
+    {
+      "name": "ZR1",
+      "vendor_id": "0x1014",
+      "device_id": "0x034A",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x035E",
+      "floor_index": 1
+    },
+    {
+      "name": "Z06",
+      "vendor_id": "0x1014",
+      "device_id": "0x034A",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0355",
+      "floor_index": 1
+    },
+    {
+      "name": "Glacier Park EDR 2Port",
+      "vendor_id": "0x15B3",
+      "device_id": "0x1013",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x04F1",
+      "floor_index": 1
+    },
+    {
+      "name": "Glacier Park EDR 1Port",
+      "vendor_id": "0x15B3",
+      "device_id": "0x1013",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x04F4",
+      "floor_index": 1
+    },
+    {
+      "name": "Glacier Park EN 2Port",
+      "vendor_id": "0x15B3",
+      "device_id": "0x1013",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x04F7",
+      "floor_index": 1
+    },
+    {
+      "name": "Lassen Dual Port",
+      "vendor_id": "0x15B3",
+      "device_id": "0x1019",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0617",
+      "floor_index": 1
+    },
+    {
+      "name": "Lassen Single Port",
+      "vendor_id": "0x15B3",
+      "device_id": "0x1017",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0616",
+      "floor_index": 1
+    },
+    {
+      "name": "Everglades 10Gb 2Port",
+      "vendor_id": "0x15B3",
+      "device_id": "0x1015",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x061F",
+      "floor_index": 1
+    },
+    {
+      "name": "Everglades 25Gb 2Port",
+      "vendor_id": "0x15B3",
+      "device_id": "0x1015",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x061E",
+      "floor_index": 1
+    },
+    {
+      "name": "Bolt PCIe3 NVMe Flash Adapter II x8 1.6TB",
+      "vendor_id": "0x144D",
+      "device_id": "0xA822",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0621",
+      "floor_index": 1
+    },
+    {
+      "name": "Bolt PCIe3 NVMe Flash Adapter II x8 3.2TB",
+      "vendor_id": "0x144D",
+      "device_id": "0xA822",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0622",
+      "floor_index": 1
+    },
+    {
+      "name": "Bolt PCIe3 NVMe Flash Adapter II x8 6.4TB",
+      "vendor_id": "0x144D",
+      "device_id": "0xA822",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0629",
+      "floor_index": 1
+    },
+    {
+      "name": "Bolt PCIe3 NVMe Flash Adapter III x8 1.6TB",
+      "vendor_id": "0x144D",
+      "device_id": "0xA822",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x064A",
+      "floor_index": 1
+    },
+    {
+      "name": "Bolt PCIe3 NVMe Flash Adapter III x8 3.2TB",
+      "vendor_id": "0x144D",
+      "device_id": "0xA822",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x064B",
+      "floor_index": 1
+    },
+    {
+      "name": "Bolt PCIe3 NVMe Flash Adapter III x8 6.4TB",
+      "vendor_id": "0x144D",
+      "device_id": "0xA822",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x064C",
+      "floor_index": 1
+    },
+    {
+      "name": "Sentry",
+      "vendor_id": "0x1014",
+      "device_id": "0x0466",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0466",
+      "floor_index": 1
+    },
+    {
+      "name": "Y4 Crypto",
+      "vendor_id": "0x1014",
+      "device_id": "0x037A",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x037A",
+      "floor_index": 1
+    },
+    {
+      "name": "Haleakala EN 2Port 100Gb",
+      "vendor_id": "0x15B3",
+      "device_id": "0x1019",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0635",
+      "floor_index": 1
+    },
+    {
+      "name": "Bono HMS",
+      "vendor_id": "0x1014",
+      "device_id": "0x04F2",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0005",
+      "floor_index": 2
+    },
+    {
+      "name": "Palmita IB 1Port",
+      "vendor_id": "0x15B3",
+      "device_id": "0x101B",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0672",
+      "floor_index": 1
+    },
+    {
+      "name": "Palmita IB 2Port",
+      "vendor_id": "0x15B3",
+      "device_id": "0x101B",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0673",
+      "floor_index": 1
+    },
+    {
+      "name": "Cedar Lake 100G 2port",
+      "vendor_id": "0x15B3",
+      "device_id": "0x101D",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x06A6",
+      "floor_index": 2
+    },
+    {
+      "name": "Cedar Lake Crypto 100G 2port",
+      "vendor_id": "0x15B3",
+      "device_id": "0x101D",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x06A5",
+      "floor_index": 2
+    },
+    {
+      "name": "Crater Lake 200G 2Port",
+      "vendor_id": "0x15B3",
+      "device_id": "0x101D",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x06A4",
+      "floor_index": 1
+    },
+    {
+      "name": "Crater Lake Crypto 200G 2Port",
+      "vendor_id": "0x15B3",
+      "device_id": "0x101D",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x06A3",
+      "floor_index": 1
+    },
+    {
+      "name": "Seahawk2 PM1735 U.2 NVMe SSDs 3.2TB",
+      "vendor_id": "0x144D",
+      "device_id": "0xA824",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0680",
+      "floor_index": 1
+    },
+    {
+      "name": "Seahawk2 PM1735 U.2 NVMe SSDs 6.4TB",
+      "vendor_id": "0x144D",
+      "device_id": "0xA824",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0681",
+      "floor_index": 1
+    },
+    {
+      "name": "Poseidon PM985 U.2 NVMe SSDs 3.2TB",
+      "vendor_id": "0x144D",
+      "device_id": "0xA808",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0639",
+      "floor_index": 1
+    },
+    {
+      "name": "Kona PCIe4 NVMe U.2 Flash Adapter x8 1.6TB",
+      "vendor_id": "0x144D",
+      "device_id": "0xA824",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0682",
+      "floor_index": 2
+    },
+    {
+      "name": "Kona PCIe4 NVMe U.2 Flash Adapter x8 3.2TB",
+      "vendor_id": "0x144D",
+      "device_id": "0xA824",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0683",
+      "floor_index": 2
+    },
+    {
+      "name": "Kona PCIe4 NVMe U.2 Flash Adapter x8 6.4TB",
+      "vendor_id": "0x144D",
+      "device_id": "0xA824",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0684",
+      "floor_index": 2
+    },
+    {
+      "name": "Castello",
+      "vendor_id": "0x1014",
+      "device_id": "0x0611",
+      "subsystem_vendor_id": "0x1014",
+      "subsystem_id": "0x0611",
+      "floor_index": 1
+    }
+  ]
+}
diff --git a/control/config_files/p10bmc/ibm,rainier-4u/zones.json b/control/config_files/p10bmc/ibm,rainier-4u/zones.json
index 56ecc1a..230bce3 100644
--- a/control/config_files/p10bmc/ibm,rainier-4u/zones.json
+++ b/control/config_files/p10bmc/ibm,rainier-4u/zones.json
@@ -2,7 +2,7 @@
     {
         "name": "0",
         "poweron_target": 10000,
-        "default_floor": 10000,
+        "default_floor": 9000,
         "increase_delay": 5,
         "decrease_interval": 30
     }