Skip to content

Commit 6618813

Browse files
committed
soundwire: bus: test read status
In the existing code we may read a negative error value but still mask it and write it back. Make sure all reads are tested and errors not propagated further. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
1 parent ad380ab commit 6618813

1 file changed

Lines changed: 20 additions & 2 deletions

File tree

drivers/soundwire/bus.c

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -875,8 +875,12 @@ static int sdw_slave_clk_stop_prepare(struct sdw_slave *slave,
875875
if (wake_en)
876876
val |= SDW_SCP_SYSTEMCTRL_WAKE_UP_EN;
877877
} else {
878-
val = sdw_read_no_pm(slave, SDW_SCP_SYSTEMCTRL);
879-
878+
ret = sdw_read_no_pm(slave, SDW_SCP_SYSTEMCTRL);
879+
if (ret < 0) {
880+
dev_err(&slave->dev, "SDW_SCP_SYSTEMCTRL read failed:%d\n", ret);
881+
return ret;
882+
}
883+
val = ret;
880884
val &= ~(SDW_SCP_SYSTEMCTRL_CLK_STP_PREP);
881885
}
882886

@@ -897,6 +901,10 @@ static int sdw_bus_wait_for_clk_prep_deprep(struct sdw_bus *bus, u16 dev_num)
897901
do {
898902
val = sdw_bread_no_pm(bus, dev_num, SDW_SCP_STAT) &
899903
SDW_SCP_STAT_CLK_STP_NF;
904+
if (val < 0) {
905+
dev_err(bus->dev, "SDW_SCP_STAT bread failed:%d\n", val);
906+
return val;
907+
}
900908
if (!val) {
901909
dev_info(bus->dev, "clock stop prep/de-prep done slave:%d",
902910
dev_num);
@@ -1264,6 +1272,11 @@ static int sdw_initialize_slave(struct sdw_slave *slave)
12641272
if (slave->bus->prop.quirks & SDW_MASTER_QUIRKS_CLEAR_INITIAL_CLASH) {
12651273
/* Clear bus clash interrupt before enabling interrupt mask */
12661274
status = sdw_read_no_pm(slave, SDW_SCP_INT1);
1275+
if (status < 0) {
1276+
dev_err(&slave->dev,
1277+
"SDW_SCP_INT1 read failed:%d\n", status);
1278+
return status;
1279+
}
12671280
if (status & SDW_SCP_INT1_BUS_CLASH) {
12681281
dev_warn(&slave->dev, "Bus clash detected before INT mask is enabled\n");
12691282
sdw_write_no_pm(slave, SDW_SCP_INT1, SDW_SCP_INT1_BUS_CLASH);
@@ -1273,6 +1286,11 @@ static int sdw_initialize_slave(struct sdw_slave *slave)
12731286
!(slave->prop.quirks & SDW_SLAVE_QUIRKS_INVALID_INITIAL_PARITY)) {
12741287
/* Clear parity interrupt before enabling interrupt mask */
12751288
status = sdw_read_no_pm(slave, SDW_SCP_INT1);
1289+
if (status < 0) {
1290+
dev_err(&slave->dev,
1291+
"SDW_SCP_INT1 read failed:%d\n", status);
1292+
return status;
1293+
}
12761294
if (status & SDW_SCP_INT1_PARITY) {
12771295
dev_warn(&slave->dev, "PARITY error detected before INT mask is enabled\n");
12781296
sdw_write_no_pm(slave, SDW_SCP_INT1, SDW_SCP_INT1_PARITY);

0 commit comments

Comments
 (0)