From 3abc9878e862d3401f2e5b3eb9e507f10bad7e2e Mon Sep 17 00:00:00 2001
From: Jack Miller <jack@codezen.org>
Date: Tue, 23 Aug 2016 15:18:47 -0500
Subject: [PATCH 27/43] devtree: Add parsed firmware version info
We have /ibm,firmware-versions node in device tree ..which contains
various firmware version information.
Property name represents firmware component and property value
represents the version.
This patch adds support to parse above information on Power System.
Sample output:
*-firmware:0
description: buildroot
physical id: 1
version: 211bd05
*-firmware:1
description: capp-ucode
physical id: 2
version: 1bb7503
Signed-off-by: Jack Miller <jack@codezen.org>
[Minor code cleanup, updated description - Vasant]
Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
---
src/core/device-tree.cc | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/src/core/device-tree.cc b/src/core/device-tree.cc
index d61347b..0bba4e9 100644
--- a/src/core/device-tree.cc
+++ b/src/core/device-tree.cc
@@ -218,6 +218,39 @@ static void scan_devtree_bootrom(hwNode & core)
}
}
+static void scan_devtree_firmware_powernv(hwNode & core)
+{
+ int n;
+ struct dirent **namelist;
+
+ if (!exists(DEVICETREE "/ibm,firmware-versions"))
+ return;
+
+ pushd(DEVICETREE "/ibm,firmware-versions");
+ n = scandir(".", &namelist, selectfile, alphasort);
+ popd();
+
+ if (n <= 0)
+ return;
+
+ for (int i = 0; i < n; i++)
+ {
+ string sname = string(namelist[i]->d_name);
+ string fullpath = string(DEVICETREE) + "/ibm,firmware-versions/" + sname;
+
+ if (sname != "linux,phandle" && sname != "name" && sname != "phandle")
+ {
+ hwNode fwnode("firmware");
+ fwnode.setDescription(sname);
+ fwnode.setVersion(hw::strip(get_string(fullpath)));
+ fwnode.claim();
+ core.addChild(fwnode);
+ }
+ free(namelist[i]);
+ }
+
+ free(namelist);
+}
static string cpubusinfo(int cpu)
{
@@ -1111,6 +1144,7 @@ bool scan_device_tree(hwNode & n)
scan_devtree_root(*core);
scan_devtree_cpu_power(*core);
scan_devtree_memory_powernv(*core);
+ scan_devtree_firmware_powernv(*core);
n.addCapability("powernv", "Non-virtualized");
n.addCapability("opal", "OPAL firmware");
}
--
2.10.2