diff options
author | Madhavan Srinivasan <maddy@linux.ibm.com> | 2020-09-29 17:27:13 +0530 |
---|---|---|
committer | Vasant Hegde <hegdevasant@linux.vnet.ibm.com> | 2021-05-13 14:44:46 +0530 |
commit | d505f4037976ac540be1608653272ee57ae737ee (patch) | |
tree | 888104c2b8a08a3c7bccc3a39b703e8a64615339 | |
parent | fbcbd4e47cdcf00fffc7665a297c875ce9ef951a (diff) | |
download | skiboot-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.c | 18 |
1 files changed, 16 insertions, 2 deletions
@@ -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); } /* |