linux-gbmc: nuvoton i2c driver fix
Cherry-picking i2c fix from nuvoton:
6e1e2c231a5c i2c: npcm: disable interrupt enable bit before devm_request_irq
https://fusion2.corp.google.com/7bf04738-0852-3765-ac2a-a181b93d27d9
https://fusion2.corp.google.com/eb49b8e6-f4bf-3b6e-b499-0e08e63b5867
Tested: local build passed and i2c init looks good.
Google-Bug-Id: 349489413
Change-Id: I9f8642df6e6b3a633db293240d0eac8e43dee852
Signed-off-by: Yuxiao Zhang <yuxiaozhang@google.com>
diff --git a/recipes-kernel/linux/5.15/1014-drivers-i2c-sync-npcm-i2c.patch b/recipes-kernel/linux/5.15/1014-drivers-i2c-sync-npcm-i2c.patch
deleted file mode 100644
index e6bd404..0000000
--- a/recipes-kernel/linux/5.15/1014-drivers-i2c-sync-npcm-i2c.patch
+++ /dev/null
@@ -1,184 +0,0 @@
-From 054b9f3ff63ba832d8aa6593c4734ab18c645252 Mon Sep 17 00:00:00 2001
-From: David Wang <davidwang@quantatw.com>
-Date: Mon, 6 Nov 2023 14:36:35 +0800
-Subject: [PATCH 14/16] drivers: i2c: sync npcm i2c
-
----
- drivers/i2c/busses/Kconfig | 8 +--
- drivers/i2c/busses/Makefile | 2 +-
- drivers/i2c/busses/i2c-npcm7xx.c | 88 ++++++++++++++++----------------
- 3 files changed, 49 insertions(+), 49 deletions(-)
-
-diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
-index fea403431f22..a42f4079e119 100644
---- a/drivers/i2c/busses/Kconfig
-+++ b/drivers/i2c/busses/Kconfig
-@@ -814,13 +814,13 @@ config I2C_NOMADIK
- I2C interface from ST-Ericsson's Nomadik and Ux500 architectures,
- as well as the STA2X11 PCIe I/O HUB.
-
--config I2C_NPCM7XX
-+config I2C_NPCM
- tristate "Nuvoton I2C Controller"
-- depends on ARCH_NPCM7XX || COMPILE_TEST
-+ depends on ARCH_NPCM || COMPILE_TEST
- help
- If you say yes to this option, support will be included for the
-- Nuvoton I2C controller, which is available on the NPCM7xx BMC
-- controller.
-+ Nuvoton I2C controller, which is available on the NPCM BMC
-+ controllers.
- Driver can also support slave mode (select I2C_SLAVE).
-
- config I2C_OCORES
-diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
-index 1336b04f40e2..90943bb84f4e 100644
---- a/drivers/i2c/busses/Makefile
-+++ b/drivers/i2c/busses/Makefile
-@@ -80,7 +80,7 @@ obj-$(CONFIG_I2C_MT7621) += i2c-mt7621.o
- obj-$(CONFIG_I2C_MV64XXX) += i2c-mv64xxx.o
- obj-$(CONFIG_I2C_MXS) += i2c-mxs.o
- obj-$(CONFIG_I2C_NOMADIK) += i2c-nomadik.o
--obj-$(CONFIG_I2C_NPCM7XX) += i2c-npcm7xx.o
-+obj-$(CONFIG_I2C_NPCM) += i2c-npcm7xx.o
- obj-$(CONFIG_I2C_OCORES) += i2c-ocores.o
- obj-$(CONFIG_I2C_OMAP) += i2c-omap.o
- obj-$(CONFIG_I2C_OWL) += i2c-owl.o
-diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c
-index 7e71b89bb1fd..3ba701dbbbaa 100644
---- a/drivers/i2c/busses/i2c-npcm7xx.c
-+++ b/drivers/i2c/busses/i2c-npcm7xx.c
-@@ -1,5 +1,4 @@
- // SPDX-License-Identifier: GPL-2.0
--// nuvoton/NPCM-6.1-OpenBMC: 13848588581d605fe538ee250009b5076164fb7d
- /*
- * Nuvoton NPCM7xx I2C Controller driver
- *
-@@ -107,7 +106,7 @@ enum i2c_addr {
- #define NPCM_I2CCST3 0x19
- #define I2C_VER 0x1F
-
--/* BANK 0 regs */
-+/*BANK0 regs*/
- #define NPCM_I2CADDR3 0x10
- #define NPCM_I2CADDR7 0x11
- #define NPCM_I2CADDR4 0x12
-@@ -116,20 +115,6 @@ enum i2c_addr {
- #define NPCM_I2CADDR9 0x15
- #define NPCM_I2CADDR6 0x16
- #define NPCM_I2CADDR10 0x17
--#define NPCM_I2CCTL4 0x1A
--#define NPCM_I2CCTL5 0x1B
--#define NPCM_I2CSCLLT 0x1C /* SCL Low Time */
--#define NPCM_I2CFIF_CTL 0x1D /* FIFO Control */
--#define NPCM_I2CSCLHT 0x1E /* SCL High Time */
--
--/* BANK 1 regs */
--#define NPCM_I2CFIF_CTS 0x10 /* Both FIFOs Control and Status */
--#define NPCM_I2CTXF_CTL 0x12 /* Tx-FIFO Control */
--#define NPCM_I2CT_OUT 0x14 /* Bus T.O. */
--#define NPCM_I2CPEC 0x16 /* PEC Data */
--#define NPCM_I2CTXF_STS 0x1A /* Tx-FIFO Status */
--#define NPCM_I2CRXF_STS 0x1C /* Rx-FIFO Status */
--#define NPCM_I2CRXF_CTL 0x1E /* Rx-FIFO Control */
-
- #if IS_ENABLED(CONFIG_I2C_SLAVE)
- /*
-@@ -146,51 +131,66 @@ static const int npcm_i2caddr[I2C_NUM_OWN_ADDR] = {
- };
- #endif
-
-+#define NPCM_I2CCTL4 0x1A
-+#define NPCM_I2CCTL5 0x1B
-+#define NPCM_I2CSCLLT 0x1C /* SCL Low Time */
-+#define NPCM_I2CFIF_CTL 0x1D /* FIFO Control */
-+#define NPCM_I2CSCLHT 0x1E /* SCL High Time */
-+
-+/* BANK 1 regs */
-+#define NPCM_I2CFIF_CTS 0x10 /* Both FIFOs Control and Status */
-+#define NPCM_I2CTXF_CTL 0x12 /* Tx-FIFO Control */
-+#define NPCM_I2CT_OUT 0x14 /* Bus T.O. */
-+#define NPCM_I2CPEC 0x16 /* PEC Data */
-+#define NPCM_I2CTXF_STS 0x1A /* Tx-FIFO Status */
-+#define NPCM_I2CRXF_STS 0x1C /* Rx-FIFO Status */
-+#define NPCM_I2CRXF_CTL 0x1E /* Rx-FIFO Control */
-+
- /* NPCM_I2CST reg fields */
--#define NPCM_I2CST_XMIT BIT(0) /* Transmit mode */
--#define NPCM_I2CST_MASTER BIT(1) /* Master mode */
--#define NPCM_I2CST_NMATCH BIT(2) /* New match */
--#define NPCM_I2CST_STASTR BIT(3) /* Stall after start */
--#define NPCM_I2CST_NEGACK BIT(4) /* Negative ACK */
--#define NPCM_I2CST_BER BIT(5) /* Bus error */
--#define NPCM_I2CST_SDAST BIT(6) /* SDA status */
--#define NPCM_I2CST_SLVSTP BIT(7) /* Slave stop */
-+#define NPCM_I2CST_XMIT BIT(0)
-+#define NPCM_I2CST_MASTER BIT(1)
-+#define NPCM_I2CST_NMATCH BIT(2)
-+#define NPCM_I2CST_STASTR BIT(3)
-+#define NPCM_I2CST_NEGACK BIT(4)
-+#define NPCM_I2CST_BER BIT(5)
-+#define NPCM_I2CST_SDAST BIT(6)
-+#define NPCM_I2CST_SLVSTP BIT(7)
-
- /* NPCM_I2CCST reg fields */
--#define NPCM_I2CCST_BUSY BIT(0) /* Busy */
--#define NPCM_I2CCST_BB BIT(1) /* Bus busy */
--#define NPCM_I2CCST_MATCH BIT(2) /* Address match */
--#define NPCM_I2CCST_GCMATCH BIT(3) /* Global call match */
--#define NPCM_I2CCST_TSDA BIT(4) /* Test SDA line */
--#define NPCM_I2CCST_TGSCL BIT(5) /* Toggle SCL line */
--#define NPCM_I2CCST_MATCHAF BIT(6) /* Match address field */
--#define NPCM_I2CCST_ARPMATCH BIT(7) /* ARP address match */
-+#define NPCM_I2CCST_BUSY BIT(0)
-+#define NPCM_I2CCST_BB BIT(1)
-+#define NPCM_I2CCST_MATCH BIT(2)
-+#define NPCM_I2CCST_GCMATCH BIT(3)
-+#define NPCM_I2CCST_TSDA BIT(4)
-+#define NPCM_I2CCST_TGSCL BIT(5)
-+#define NPCM_I2CCST_MATCHAF BIT(6)
-+#define NPCM_I2CCST_ARPMATCH BIT(7)
-
- /* NPCM_I2CCTL1 reg fields */
--#define NPCM_I2CCTL1_START BIT(0) /* Generate start condition */
--#define NPCM_I2CCTL1_STOP BIT(1) /* Generate stop condition */
--#define NPCM_I2CCTL1_INTEN BIT(2) /* Interrupt enable */
-+#define NPCM_I2CCTL1_START BIT(0)
-+#define NPCM_I2CCTL1_STOP BIT(1)
-+#define NPCM_I2CCTL1_INTEN BIT(2)
- #define NPCM_I2CCTL1_EOBINTE BIT(3)
- #define NPCM_I2CCTL1_ACK BIT(4)
--#define NPCM_I2CCTL1_GCMEN BIT(5) /* Global call match enable */
--#define NPCM_I2CCTL1_NMINTE BIT(6) /* New match interrupt enable */
--#define NPCM_I2CCTL1_STASTRE BIT(7) /* Stall after start enable */
-+#define NPCM_I2CCTL1_GCMEN BIT(5)
-+#define NPCM_I2CCTL1_NMINTE BIT(6)
-+#define NPCM_I2CCTL1_STASTRE BIT(7)
-
- /* RW1S fields (inside a RW reg): */
- #define NPCM_I2CCTL1_RWS \
- (NPCM_I2CCTL1_START | NPCM_I2CCTL1_STOP | NPCM_I2CCTL1_ACK)
-
- /* npcm_i2caddr reg fields */
--#define NPCM_I2CADDR_A GENMASK(6, 0) /* Address */
--#define NPCM_I2CADDR_SAEN BIT(7) /* Slave address enable */
-+#define NPCM_I2CADDR_A GENMASK(6, 0)
-+#define NPCM_I2CADDR_SAEN BIT(7)
-
- /* NPCM_I2CCTL2 reg fields */
--#define I2CCTL2_ENABLE BIT(0) /* Module enable */
--#define I2CCTL2_SCLFRQ6_0 GENMASK(7, 1) /* Bits 0:6 of frequency divisor */
-+#define I2CCTL2_ENABLE BIT(0)
-+#define I2CCTL2_SCLFRQ6_0 GENMASK(7, 1)
-
- /* NPCM_I2CCTL3 reg fields */
--#define I2CCTL3_SCLFRQ8_7 GENMASK(1, 0) /* Bits 7:8 of frequency divisor */
--#define I2CCTL3_ARPMEN BIT(2) /* ARP match enable */
-+#define I2CCTL3_SCLFRQ8_7 GENMASK(1, 0)
-+#define I2CCTL3_ARPMEN BIT(2)
- #define I2CCTL3_IDL_START BIT(3)
- #define I2CCTL3_400K_MODE BIT(4)
- #define I2CCTL3_BNK_SEL BIT(5)
---
-2.25.1
-
diff --git a/recipes-kernel/linux/files/linux-gbmc/drivers/i2c/busses/i2c-npcm7xx.c b/recipes-kernel/linux/files/linux-gbmc/drivers/i2c/busses/i2c-npcm7xx.c
index 7e71b89..2a54ea8 100644
--- a/recipes-kernel/linux/files/linux-gbmc/drivers/i2c/busses/i2c-npcm7xx.c
+++ b/recipes-kernel/linux/files/linux-gbmc/drivers/i2c/busses/i2c-npcm7xx.c
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: GPL-2.0
-// nuvoton/NPCM-6.1-OpenBMC: 13848588581d605fe538ee250009b5076164fb7d
+// nuvoton/NPCM-6.1-OpenBMC: 7617e2d374be849fa2dd63969e464c3fd669ec0c
/*
* Nuvoton NPCM7xx I2C Controller driver
*
@@ -2439,6 +2439,8 @@
if (irq < 0)
return irq;
+ npcm_i2c_int_enable(bus, false);
+
ret = devm_request_irq(bus->dev, irq, npcm_i2c_bus_irq, 0,
dev_name(bus->dev), bus);
if (ret)
diff --git a/recipes-kernel/linux/linux-gbmc_5.15.bb b/recipes-kernel/linux/linux-gbmc_5.15.bb
index f04282e..0f04a87 100644
--- a/recipes-kernel/linux/linux-gbmc_5.15.bb
+++ b/recipes-kernel/linux/linux-gbmc_5.15.bb
@@ -51,7 +51,6 @@
file://1011-drivers-net-stmmac-add-npcm-support.patch \
file://1012-drivers-char-sync-npcm-otp.patch \
file://1013-drivers-watchdog-sync-npcm-wdt.patch \
- file://1014-drivers-i2c-sync-npcm-i2c.patch \
file://1015-drivers-misc-sync-npcm-jtag-master.patch \
file://1016-drivers-misc-sync-npcm-lpc-and-pci-mbox.patch \
file://1017-drivers-crypto-sync-npcm-crypto.patch \