[PATCH v2 10/15] arm_mpam: propagate MSC write errors for hardware probe functions
Andre Przywara
andre.przywara at arm.com
Thu Jul 2 09:22:24 PDT 2026
Allow the MSC write accesses in the hardware probe functions to return an
error, and propagate write errors from the lower level up.
Signed-off-by: Andre Przywara <andre.przywara at arm.com>
---
drivers/resctrl/mpam_devices.c | 29 +++++++++++++++++++----------
1 file changed, 19 insertions(+), 10 deletions(-)
diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/mpam_devices.c
index 23a5deb290b3..f3558d248c38 100644
--- a/drivers/resctrl/mpam_devices.c
+++ b/drivers/resctrl/mpam_devices.c
@@ -792,24 +792,30 @@ static bool mpam_ris_hw_probe_csu_nrdy(struct mpam_msc_ris *ris)
mon_sel = FIELD_PREP(MSMON_CFG_MON_SEL_MON_SEL, 0) |
FIELD_PREP(MSMON_CFG_MON_SEL_RIS, ris->ris_idx);
- mpam_write_monsel_reg(msc, CFG_MON_SEL, mon_sel);
+ if (mpam_write_monsel_reg(msc, CFG_MON_SEL, mon_sel))
+ return false;
/* Hardware might ignore nrdy if it's not enabled */
ctl_val = MSMON_CFG_CSU_CTL_TYPE_CSU;
ctl_val |= MSMON_CFG_x_CTL_MATCH_PARTID;
ctl_val |= MSMON_CFG_x_CTL_MATCH_PMG;
ctl_val |= MSMON_CFG_x_CTL_EN;
- mpam_write_monsel_reg(msc, CFG_CSU_FLT, 0);
- mpam_write_monsel_reg(msc, CFG_CSU_CTL, ctl_val);
+ if (mpam_write_monsel_reg(msc, CFG_CSU_FLT, 0))
+ return false;
+ if (mpam_write_monsel_reg(msc, CFG_CSU_CTL, ctl_val))
+ return false;
- _mpam_write_monsel_reg(msc, MSMON_CSU, MSMON___NRDY);
+ if (_mpam_write_monsel_reg(msc, MSMON_CSU, MSMON___NRDY))
+ return false;
if (_mpam_read_monsel_reg(msc, MSMON_CSU, &now))
return false;
can_set = now & MSMON___NRDY;
- _mpam_write_monsel_reg(msc, MSMON_CSU, 0);
+ if (_mpam_write_monsel_reg(msc, MSMON_CSU, 0))
+ return false;
/* Configuration change to try and coax hardware into setting nrdy */
- mpam_write_monsel_reg(msc, CFG_CSU_FLT, 0x1);
+ if (mpam_write_monsel_reg(msc, CFG_CSU_FLT, 0x1))
+ return false;
if (_mpam_read_monsel_reg(msc, MSMON_CSU, &now))
return false;
can_clear = !(now & MSMON___NRDY);
@@ -1052,8 +1058,9 @@ static int mpam_msc_hw_probe(struct mpam_msc *msc)
for (ris_idx = 0; ris_idx <= msc->ris_max; ris_idx++) {
mutex_lock(&msc->part_sel_lock);
- __mpam_part_sel(ris_idx, 0, msc);
- ret = mpam_msc_read_idr(msc, &idr);
+ ret = __mpam_part_sel(ris_idx, 0, msc);
+ if (!ret)
+ ret = mpam_msc_read_idr(msc, &idr);
mutex_unlock(&msc->part_sel_lock);
if (ret)
return ret;
@@ -1072,9 +1079,11 @@ static int mpam_msc_hw_probe(struct mpam_msc *msc)
ris->idr = idr;
mutex_lock(&msc->part_sel_lock);
- __mpam_part_sel(ris_idx, 0, msc);
- ret = mpam_ris_hw_probe(ris);
+ ret = __mpam_part_sel(ris_idx, 0, msc);
+ if (!ret)
+ ret = mpam_ris_hw_probe(ris);
mutex_unlock(&msc->part_sel_lock);
+
if (ret)
return ret;
}
--
2.43.0
More information about the linux-arm-kernel
mailing list