i2c: designware: Enable interrupt mask workaround for HJMC3001
authorHongbo Yao <andy.xu@hj-micro.com>
Wed, 26 Aug 2026 07:05:47 +0000 (15:05 +0800)
committerAndi Shyti <andi.shyti@kernel.org>
Fri, 28 Aug 2026 00:38:00 +0000 (02:38 +0200)
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>
Cc: <stable@vger.kernel.org> # v6.13+
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
Link: https://patch.msgid.link/20260826070547.268672-1-andy.xu@hj-micro.com
drivers/i2c/busses/i2c-designware-platdrv.c

index 6d6e812..447af55 100644 (file)
@@ -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 },