aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMadhavan Srinivasan <maddy@linux.ibm.com>2020-09-29 17:27:13 +0530
committerVasant Hegde <hegdevasant@linux.vnet.ibm.com>2021-05-13 14:44:46 +0530
commitd505f4037976ac540be1608653272ee57ae737ee (patch)
tree888104c2b8a08a3c7bccc3a39b703e8a64615339
parentfbcbd4e47cdcf00fffc7665a297c875ce9ef951a (diff)
downloadskiboot-d505f4037976ac540be1608653272ee57ae737ee.zip
skiboot-d505f4037976ac540be1608653272ee57ae737ee.tar.gz
skiboot-d505f4037976ac540be1608653272ee57ae737ee.tar.bz2
hw/imc: Disable only nest_imc devices if pause_microcode() fails
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@linux.ibm.com> Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
-rw-r--r--hw/imc.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/hw/imc.c b/hw/imc.c
index 63488b9..c186da0 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);
}
/*