[PATCH] i2c: designware: Enable interrupt mask workaround for HJMC3001

Hongbo Yao posted 1 patch 1 month ago
drivers/i2c/busses/i2c-designware-platdrv.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] i2c: designware: Enable interrupt mask workaround for HJMC3001
Posted by Hongbo Yao 1 month ago
On HJMicro ARM64 servers, the DesignWare I2C controller does not
retrigger a pending interrupt if the interrupt status changes after
the current status bits have been cleared.

The issue is exposed under heavy system load when the corresponding
SPI is routed across sockets to a core in the remote socket. The
interrupt is then lost and the I2C transfer times out.

Enable ACCESS_INTR_MASK for HJMC3001. This toggles DW_IC_INTR_MASK
before returning from the interrupt handler and retriggers any
pending interrupt.

Fixes: 6816ce57c479 ("i2c: designware: Add a new ACPI HID for HJMC01 I2C controller")
Signed-off-by: Hongbo Yao <andy.xu@hj-micro.com>
---
 drivers/i2c/busses/i2c-designware-platdrv.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
index 6d6e81242f74..447af5523c2e 100644
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
@@ -272,7 +272,7 @@ static const struct acpi_device_id dw_i2c_acpi_match[] = {
 	{ "HISI02A1", 0 },
 	{ "HISI02A2", 0 },
 	{ "HISI02A3", 0 },
-	{ "HJMC3001", 0 },
+	{ "HJMC3001", ACCESS_INTR_MASK },
 	{ "HYGO0010", ACCESS_INTR_MASK },
 	{ "INT33C2", 0 },
 	{ "INT33C3", 0 },
-- 
2.43.0
Re: [PATCH] i2c: designware: Enable interrupt mask workaround for HJMC3001
Posted by Andi Shyti 1 month ago
Hi Hongbo,

On Wed, Aug 26, 2026 at 03:05:47PM +0800, Hongbo Yao wrote:
> On HJMicro ARM64 servers, the DesignWare I2C controller does not
> retrigger a pending interrupt if the interrupt status changes after
> the current status bits have been cleared.
> 
> The issue is exposed under heavy system load when the corresponding
> SPI is routed across sockets to a core in the remote socket. The
> interrupt is then lost and the I2C transfer times out.
> 
> Enable ACCESS_INTR_MASK for HJMC3001. This toggles DW_IC_INTR_MASK
> before returning from the interrupt handler and retriggers any
> pending interrupt.
> 
> Fixes: 6816ce57c479 ("i2c: designware: Add a new ACPI HID for HJMC01 I2C controller")
> Signed-off-by: Hongbo Yao <andy.xu@hj-micro.com>

merged to i2c/i2c-fixes.

Thanks,
Andi
Re: [PATCH] i2c: designware: Enable interrupt mask workaround for HJMC3001
Posted by Mika Westerberg 1 month ago
On Wed, Aug 26, 2026 at 03:05:47PM +0800, Hongbo Yao wrote:
> On HJMicro ARM64 servers, the DesignWare I2C controller does not
> retrigger a pending interrupt if the interrupt status changes after
> the current status bits have been cleared.
> 
> The issue is exposed under heavy system load when the corresponding
> SPI is routed across sockets to a core in the remote socket. The
> interrupt is then lost and the I2C transfer times out.
> 
> Enable ACCESS_INTR_MASK for HJMC3001. This toggles DW_IC_INTR_MASK
> before returning from the interrupt handler and retriggers any
> pending interrupt.
> 
> Fixes: 6816ce57c479 ("i2c: designware: Add a new ACPI HID for HJMC01 I2C controller")
> Signed-off-by: Hongbo Yao <andy.xu@hj-micro.com>

Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>