meta-ibm: acx22: new YAML config recipe

YAML configuration files exist scattered throughout the OpenBMC tree and
how they are used is controlled with layers dependencies of virtuals and
preferred providers.

Most of the time the above scheme is very difficult to comprehend.  This
patch continues a re-thinking of that approach towards a more
centralized scheme.

Specifically this patch implements a single YAML config recipe for the
ACx22 systems.  The logic contained in the recipe was pulled from
all over the OpenBMC tree - the ability to comprehend how the different
YAML files are generated and consumed should be greatly eased.

A couple notable details:
 - Specialized tasks for doing deep YAML dictionary merges existed in
the upstream recipes (-hardcoded.yaml, -config.yaml), but it was
observed that simply concatenating the YAML files produced the same
results, so the specialized deep merge logic was not copied here and can
be deprecated upstream.
 - Unlike the upstream recipes, acx22-yaml-config is a target recipe and
as such enables MACHINE based overrides.

YAML files were copied from different locations in the tree, and run
through a styling application (pyyaml dump(load(yaml))):
  phosphor-ipmi-fru-read-bmc-inventory-native:bmc-fru-config.yaml ->
    acx22-yaml-config:acx22-ipmi-fru-bmc.yaml
  phosphor-ipmi-fru-read-not-sent-by-host-inventory-native:fru-config-not-sent-by-host.yaml ->
    acx22-yaml-config:acx22-ipmi-fru-not-sent-by-host.yaml
  phosphor-ipmi-host:occ_sensors.hardcoded.yaml ->
    acx22-yaml-config:acx22-ipmi-occ-sensors.yaml
  phosphor-ipmi-host:hwmon_sensors.hardcoded.yaml ->
    acx22-yaml-config:acx22-ipmi-hwmon-sensors.yaml
  phosphor-ipmi-host:witherspoon_hwmon_sensors.hardcoded.yaml ->
    acx22-yaml-config:ac922-ipmi-extra-hwmon-sensors.yaml
  phosphor-ipmi-sensor-inventory-mrw-config-native:config.yaml ->
    acx22-yaml-config:acx22-ipmi-sensors-mrw.yaml

(From meta-ibm rev: 3cb4a62140dca941e801026f447f13374cf68968)

Change-Id: Id0584812bbf40c0118c8c4383d9dd67c38a45dec
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/meta-ibm/meta-witherspoon/recipes-phosphor/configuration/acx22-yaml-config.bb b/meta-ibm/meta-witherspoon/recipes-phosphor/configuration/acx22-yaml-config.bb
new file mode 100644
index 0000000..efe9cd5
--- /dev/null
+++ b/meta-ibm/meta-witherspoon/recipes-phosphor/configuration/acx22-yaml-config.bb
@@ -0,0 +1,92 @@
+SUMMARY = "YAML configuration for ACx22 systems"
+PR = "r1"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${IBMBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658"
+
+inherit allarch
+inherit mrw-xml
+
+EXTRA_SRC_URI = ""
+EXTRA_SRC_URI_witherspoon = " \
+    file://ac922-ipmi-extra-hwmon-sensors.yaml \
+    "
+SRC_URI = " \
+    file://acx22-ipmi-fru-bmc.yaml \
+    file://acx22-ipmi-fru-not-sent-by-host.yaml \
+    file://acx22-ipmi-hwmon-sensors.yaml \
+    file://acx22-ipmi-inventory-sensors.yaml \
+    file://acx22-ipmi-occ-sensors.yaml \
+    file://acx22-ipmi-sensors-mrw.yaml \
+    ${EXTRA_SRC_URI} \
+    "
+
+DEPENDS = " \
+    mrw-native \
+    mrw-perl-tools-native \
+    openpower-yaml-config \
+    "
+
+S = "${WORKDIR}"
+
+ACx22_IPMI_EXTRA_FRU_READ_YAMLS = " \
+    acx22-ipmi-fru-bmc.yaml \
+    acx22-ipmi-fru-not-sent-by-host.yaml \
+    "
+ACx22_IPMI_EXTRA_MACHINE_SENSOR_YAMLS = ""
+ACx22_IPMI_EXTRA_MACHINE_SENSOR_YAMLS_witherspoon = " \
+    ac922-ipmi-extra-hwmon-sensors.yaml \
+    "
+ACx22_IPMI_EXTRA_SENSOR_YAMLS = " \
+    acx22-ipmi-hwmon-sensors.yaml \
+    acx22-ipmi-occ-sensors.yaml \
+    ${ACx22_IPMI_EXTRA_MACHINE_SENSOR_YAMLS} \
+    "
+
+do_install() {
+    perlbin="${STAGING_DIR_NATIVE}${bindir}/perl-native/perl"
+    scriptpath=${STAGING_DIR_NATIVE}${bindir}
+    mrw=${STAGING_DIR_NATIVE}${datadir}/obmc-mrw/${MRW_XML}
+    op_configpath=${STAGING_DIR_HOST}${datadir}/openpower-yaml-config
+
+    # generate extra-properties.yaml from the MRW for ipmi-fru-parser
+    $perlbin $scriptpath/gen_fru_properties.pl -m $mrw \
+        -c $op_configpath/ipmi-fru-properties-mrw.yaml \
+        -o extra-properties.yaml
+
+    # generate fru-read.yaml from the MRW, for ipmid and ipmi-fru-parser
+    $perlbin $scriptpath/gen_ipmi_fru.pl -i $mrw \
+        -m $op_configpath/ipmi-hostboot-fru-mrw.yaml \
+        -o fru-read-partial.yaml
+    cat fru-read-partial.yaml ${ACx22_IPMI_EXTRA_FRU_READ_YAMLS} \
+        > fru-read.yaml
+
+    # generate inventory-sensors.yaml from the MRW, for ipmid
+    $perlbin $scriptpath/gen_ipmi_sel.pl -i $mrw \
+        -m acx22-ipmi-inventory-sensors.yaml -o inventory-sensors.yaml
+
+    # generate sensors.yaml from the MRW, for ipmid
+    cat acx22-ipmi-sensors-mrw.yaml \
+        $op_configpath/ipmi-hostboot-volatile-sensor-mrw.yaml \
+        $op_configpath/ipmi-occ-active-sensor-mrw.yaml \
+        > sensors-mrw.yaml
+    $perlbin $scriptpath/gen_ipmi_sensor.pl -i $mrw -m sensors-mrw.yaml \
+        -o sensors-partial.yaml
+    cat sensors-partial.yaml ${ACx22_IPMI_EXTRA_SENSOR_YAMLS} \
+        > sensors.yaml
+
+    install -m 0644 -D extra-properties.yaml \
+        ${D}${datadir}/${BPN}/ipmi-extra-properties.yaml
+    install -m 0644 -D fru-read.yaml ${D}${datadir}/${BPN}/ipmi-fru-read.yaml
+    install -m 0644 -D inventory-sensors.yaml \
+        ${D}${datadir}/${BPN}/ipmi-inventory-sensors.yaml
+    install -m 0644 -D sensors.yaml ${D}${datadir}/${BPN}/ipmi-sensors.yaml
+}
+
+FILES_${PN}-dev = " \
+    ${datadir}/${BPN}/ipmi-extra-properties.yaml \
+    ${datadir}/${BPN}/ipmi-fru-read.yaml \
+    ${datadir}/${BPN}/ipmi-inventory-sensors.yaml \
+    ${datadir}/${BPN}/ipmi-sensors.yaml \
+    "
+
+ALLOW_EMPTY_${PN} = "1"