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-06-24 16:55:07 +0530
commit9cbc4e563aa4064c3dc11196b6bf6b3dd22cfd82 (patch)
treebf4cddb150b975e8f3887607d354278e5f4d2c42
parent6371a030fa843680fb755a3c7bfd825cbe061395 (diff)
downloadskiboot-9cbc4e563aa4064c3dc11196b6bf6b3dd22cfd82.zip
skiboot-9cbc4e563aa4064c3dc11196b6bf6b3dd22cfd82.tar.gz
skiboot-9cbc4e563aa4064c3dc11196b6bf6b3dd22cfd82.tar.bz2
hw/imc: Disable only nest_imc devices if pause_microcode() fails
[ Upstream commit d505f4037976ac540be1608653272ee57ae737ee ] 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);
}
/*