meta-facebook: generate ipmb config

Rather than having each system provide a (possibly empty) IPMB config,
generate the `ipmb_channels.json` in the Yocto recipe.

Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
Change-Id: Iab42f4aa7c3c91f610d99c3742aada82aa5b9138
diff --git a/meta-facebook/meta-bletchley/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend b/meta-facebook/meta-bletchley/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend
new file mode 100644
index 0000000..ae8a15d
--- /dev/null
+++ b/meta-facebook/meta-bletchley/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend
@@ -0,0 +1 @@
+IPMB_CHANNELS:bletchley = "/dev/ipmb-13"
diff --git a/meta-facebook/meta-greatlakes/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend b/meta-facebook/meta-greatlakes/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend
new file mode 100644
index 0000000..93147e4
--- /dev/null
+++ b/meta-facebook/meta-greatlakes/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend
@@ -0,0 +1,7 @@
+IPMB_CHANNELS:greatlakes = "\
+    /dev/ipmb-0 \
+    /dev/ipmb-1 \
+    /dev/ipmb-2 \
+    /dev/ipmb-3 \
+    /dev/ipmb-9 \
+    "
diff --git a/meta-facebook/meta-tiogapass/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend b/meta-facebook/meta-tiogapass/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend
new file mode 100644
index 0000000..b97913b
--- /dev/null
+++ b/meta-facebook/meta-tiogapass/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend
@@ -0,0 +1,4 @@
+IPMB_CHANNELS:tiogapass = "\
+    /dev/ipmb-4 \
+    /dev/ipmb-9 \
+    "
diff --git a/meta-facebook/meta-yosemitev2/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend b/meta-facebook/meta-yosemitev2/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend
new file mode 100644
index 0000000..efd3aa2
--- /dev/null
+++ b/meta-facebook/meta-yosemitev2/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend
@@ -0,0 +1,7 @@
+IPMB_CHANNELS:yosemitev2 = "\
+    /dev/ipmb-1 \
+    /dev/ipmb-3 \
+    /dev/ipmb-5 \
+    /dev/ipmb-7 \
+    /dev/ipmb-13 \
+    "
diff --git a/meta-facebook/recipes-phosphor/ipmi/phosphor-ipmi-ipmb/bletchley/ipmb-channels.json b/meta-facebook/recipes-phosphor/ipmi/phosphor-ipmi-ipmb/bletchley/ipmb-channels.json
deleted file mode 100644
index 441e867..0000000
--- a/meta-facebook/recipes-phosphor/ipmi/phosphor-ipmi-ipmb/bletchley/ipmb-channels.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-    "channels": [
-        {
-            "type": "ipmb",
-            "slave-path": "/dev/ipmb-13",
-            "bmc-addr": 32,
-            "remote-addr": 64,
-            "devIndex": 0
-        }
-    ]
-}
diff --git a/meta-facebook/recipes-phosphor/ipmi/phosphor-ipmi-ipmb/greatlakes/ipmb-channels.json b/meta-facebook/recipes-phosphor/ipmi/phosphor-ipmi-ipmb/greatlakes/ipmb-channels.json
deleted file mode 100644
index 4452203..0000000
--- a/meta-facebook/recipes-phosphor/ipmi/phosphor-ipmi-ipmb/greatlakes/ipmb-channels.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-  "channels": [
-    {
-      "type": "ipmb",
-      "slave-path": "/dev/ipmb-0",
-      "bmc-addr": 32,
-      "remote-addr": 64,
-      "devIndex": 0
-    },
-    {
-      "type": "ipmb",
-      "slave-path": "/dev/ipmb-1",
-      "bmc-addr": 32,
-      "remote-addr": 64,
-      "devIndex": 1
-    },
-    {
-      "type": "ipmb",
-      "slave-path": "/dev/ipmb-2",
-      "bmc-addr": 32,
-      "remote-addr": 64,
-      "devIndex": 2
-    },
-    {
-      "type": "ipmb",
-      "slave-path": "/dev/ipmb-3",
-      "bmc-addr": 32,
-      "remote-addr": 64,
-      "devIndex": 3
-    },
-    {
-      "type": "ipmb",
-      "slave-path": "/dev/ipmb-9",
-      "bmc-addr": 32,
-      "remote-addr": 64,
-      "devIndex": 4
-    }
- ]
-}
diff --git a/meta-facebook/recipes-phosphor/ipmi/phosphor-ipmi-ipmb/tiogapass/ipmb-channels.json b/meta-facebook/recipes-phosphor/ipmi/phosphor-ipmi-ipmb/tiogapass/ipmb-channels.json
deleted file mode 100644
index 690f9e7..0000000
--- a/meta-facebook/recipes-phosphor/ipmi/phosphor-ipmi-ipmb/tiogapass/ipmb-channels.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-  "channels": [
-    {
-      "type": "me",
-      "slave-path": "/dev/ipmb-4",
-      "bmc-addr": 32,
-      "remote-addr": 44
-    },
-    {
-      "type": "ipmb",
-      "slave-path": "/dev/ipmb-9",
-      "bmc-addr": 32,
-      "remote-addr": 96
-    }
-  ]
-}
diff --git a/meta-facebook/recipes-phosphor/ipmi/phosphor-ipmi-ipmb/yosemitev2/ipmb-channels.json b/meta-facebook/recipes-phosphor/ipmi/phosphor-ipmi-ipmb/yosemitev2/ipmb-channels.json
deleted file mode 100755
index 4327613..0000000
--- a/meta-facebook/recipes-phosphor/ipmi/phosphor-ipmi-ipmb/yosemitev2/ipmb-channels.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-  "channels": [
-    {
-      "type": "ipmb",
-      "slave-path": "/dev/ipmb-1",
-      "bmc-addr": 32,
-      "remote-addr": 64,
-      "devIndex": 0
-    },
-    {
-      "type": "ipmb",
-      "slave-path": "/dev/ipmb-3",
-      "bmc-addr": 32,
-      "remote-addr": 64,
-      "devIndex": 1
-    },
-    {
-      "type": "ipmb",
-      "slave-path": "/dev/ipmb-5",
-      "bmc-addr": 32,
-      "remote-addr": 64,
-      "devIndex": 2
-    },
-    {
-      "type": "ipmb",
-      "slave-path": "/dev/ipmb-7",
-      "bmc-addr": 32,
-      "remote-addr": 64,
-      "devIndex": 3
-    },
-    {
-      "type": "ipmb",
-      "slave-path": "/dev/ipmb-13",
-      "bmc-addr": 32,
-      "remote-addr": 64,
-      "devIndex": 4
-    }
- ]
-}
diff --git a/meta-facebook/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend b/meta-facebook/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend
index 44eefb0..824718f 100644
--- a/meta-facebook/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend
+++ b/meta-facebook/recipes-phosphor/ipmi/phosphor-ipmi-ipmb_%.bbappend
@@ -1,8 +1,31 @@
 FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}/${MACHINE}:"
 
-SRC_URI:append = " file://ipmb-channels.json"
+IPMB_CHANNELS ?= ""
+
+python do_ipmb_channels() {
+    import json
+    channels = []
+
+    for channel in d.getVar('IPMB_CHANNELS').split():
+        channels.append({
+            "type": "ipmb",
+            "slave-path": channel,
+            "bmc-addr": 32,
+            "remote-addr": 64,
+            "devIndex": len(channels)
+        })
+
+    data = { "channels" : channels }
+
+    path = os.path.join(d.getVar('D') + d.getVar('datadir'),
+                        'ipmbbridge', 'ipmb-channels.json')
+
+    with open(path, 'w') as f:
+        json.dump(data, f, indent=4)
+}
+do_ipmb_channels[vardeps] += "IPMB_CHANNELS"
+addtask ipmb_channels after do_install before do_package
 
 do_install:append() {
-    install -m 0644 -D ${WORKDIR}/ipmb-channels.json \
-                   ${D}${datadir}/ipmbbridge
+    install -d ${D}${datadir}/ipmbbridge
 }