Skip to content

Commit d342917

Browse files
guojinhui-liamAndi Shyti
authored andcommitted
i2c: designware: Disable SMBus interrupts to prevent storms from mis-configured firmware
When probing the I2C master, disable SMBus interrupts to prevent storms caused by broken firmware mis-configuring IC_SMBUS=1; the handler never services them and a mis-configured SMBUS Master extend-clock timeout or SMBUS Slave extend-clock timeout can flood the CPU. Signed-off-by: Jinhui Guo <guojinhui.liam@bytedance.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com> Signed-off-by: Andi Shyti <andi.shyti@kernel.org> Link: https://lore.kernel.org/r/20251021075714.3712-2-guojinhui.liam@bytedance.com
1 parent 3f124b4 commit d342917

2 files changed

Lines changed: 8 additions & 0 deletions

File tree

drivers/i2c/busses/i2c-designware-core.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
#define DW_IC_TX_ABRT_SOURCE 0x80
7979
#define DW_IC_ENABLE_STATUS 0x9c
8080
#define DW_IC_CLR_RESTART_DET 0xa8
81+
#define DW_IC_SMBUS_INTR_MASK 0xcc
8182
#define DW_IC_COMP_PARAM_1 0xf4
8283
#define DW_IC_COMP_VERSION 0xf8
8384
#define DW_IC_SDA_HOLD_MIN_VERS 0x3131312A /* "111*" == v1.11* */

drivers/i2c/busses/i2c-designware-master.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,13 @@ static int i2c_dw_init_master(struct dw_i2c_dev *dev)
220220
/* Disable the adapter */
221221
__i2c_dw_disable(dev);
222222

223+
/*
224+
* Mask SMBus interrupts to block storms from broken
225+
* firmware that leaves IC_SMBUS=1; the handler never
226+
* services them.
227+
*/
228+
regmap_write(dev->map, DW_IC_SMBUS_INTR_MASK, 0);
229+
223230
/* Write standard speed timing parameters */
224231
regmap_write(dev->map, DW_IC_SS_SCL_HCNT, dev->ss_hcnt);
225232
regmap_write(dev->map, DW_IC_SS_SCL_LCNT, dev->ss_lcnt);

0 commit comments

Comments
 (0)