[Skiboot] [PATCH 2/2] hw/imc: Disable only nest_imc devices if pause_microcode() fails

Madhavan Srinivasan maddy at linux.ibm.com
Tue Sep 29 21:57:13 AEST 2020


During opal boot, in imc_init(), 24x7/IMC microcode state is checked
and if it is not in running or pause state, currently all the
imc devices are removed from device tree. Instead, remove only
the nest imc devices. Core/Thread/Trace imc devices are not related
to 24x7 microcode. Patch adds a function to remove specific imc
device type and the same is used, when pause_microcode() fails, to
remove nest imc device types from the device tree.

Signed-off-by: Madhavan Srinivasan <maddy at linux.ibm.com>
---
 hw/imc.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/hw/imc.c b/hw/imc.c
index 63488b9b..c186da04 100644
--- a/hw/imc.c
+++ b/hw/imc.c
@@ -411,6 +411,20 @@ static void disable_unavailable_units(struct dt_node *dev)
 	return;
 }
 
+static void disable_imc_type_from_dt(struct dt_node *dev, int imc_type)
+{
+	struct dt_node *node;
+
+	dt_for_each_compatible(dev, node, "ibm,imc-counters") {
+		if (get_imc_device_type(node) == imc_type) {
+			dt_free(node);
+			node = NULL;
+		}
+	}
+
+	return;
+}
+
 /*
  * Function to queue the loading of imc catalog data
  * from the IMC pnor partition.
@@ -606,8 +620,8 @@ imc_mambo:
 	 * undesirable values. Hence pause the ucode if it is already running.
 	 */
 	if (pause_microcode_at_boot()) {
-		prerror("IMC: Pausing ucode failed\n");
-		goto err;
+		prerror("IMC: Pausing ucode failed, disabling nest imc\n");
+		disable_imc_type_from_dt(dev, IMC_COUNTER_CHIP);
 	}
 
 	/*
-- 
2.26.2



More information about the Skiboot mailing list