openbmc.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts
@ 2022-02-20  3:53 Tyrone Ting
  2022-02-20  3:53 ` [PATCH v2 01/11] arm: dts: add new property for NPCM i2c module Tyrone Ting
                   ` (11 more replies)
  0 siblings, 12 replies; 31+ messages in thread
From: Tyrone Ting @ 2022-02-20  3:53 UTC (permalink / raw)
  To: avifishman70, tmaimon77, tali.perry1, venture, yuenn,
	benjaminfair, robh+dt, krzysztof.kozlowski, semen.protsenko,
	yangyicong, wsa, jie.deng, sven, bence98, christophe.leroy,
	lukas.bulwahn, olof, arnd, digetx, andriy.shevchenko, warp5tw,
	tali.perry, Avi.Fishman, tomer.maimon, KWLIU, JJLIU0, kfting
  Cc: devicetree, openbmc, linux-i2c, linux-kernel

From: Tyrone Ting <kfting@nuvoton.com>

This patchset includes the following fixes:

- Add dt-bindings description for NPCM845.
- Bug fix for timeout calculation.
- Better handling of spurious interrupts.
- Fix for event type in slave mode.
- Removal of own slave addresses [2:10].
- Support for next gen BMC (NPCM845).

The NPCM I2C driver is tested on NPCM750 and NPCM845 evaluation boards.

Addressed comments from:
 - Jonathan Neuschäfer : https://lkml.org/lkml/2022/2/7/670
 - Krzysztof Kozlowski : https://lkml.org/lkml/2022/2/7/760
 - Rob Herring : https://lkml.org/lkml/2022/2/7/1166
                 https://lkml.org/lkml/2022/2/11/711
 - Krzysztof Kozlowski : https://lkml.org/lkml/2022/2/7/742
 - Jonathan Neuschäfer : https://lkml.org/lkml/2022/2/7/934
 - Jonathan Neuschäfer : https://lkml.org/lkml/2022/2/7/947
 - Jonathan Neuschäfer : https://lkml.org/lkml/2022/2/7/1057
 - Krzysztof Kozlowski : https://lkml.org/lkml/2022/2/7/1192
 - kernel test robot : https://lore.kernel.org/all/
                       202202072020.toQ349pg-lkp@intel.com/
 
Changes since version 1:
 - Add nuvoton,sys-mgr property in NPCM devicetree.
 - Describe the commit message in imperative mood.
 - Modify the description in i2c binding document to cover NPCM series.
 - Add new property in i2c binding document.
 - Create a new patch for client address calculation.
 - Create a new patch for updating gcr property name.
 - Create a new patch for removing unused clock node.
 - Explain EOB in the commit description.
 - Create a new patch for correcting NPCM register access width.
 - Remove some comment since the corresponding logic no longer exists.
 - Remove fixes tag while the patch adds an additional feature.
 - Use devicetree data field to support NPCM845.

Tali Perry (7):
  i2c: npcm: Fix client address calculation
  i2c: npcm: Update gcr property name
  i2c: npcm: Remove unused clock node
  i2c: npcm: Fix timeout calculation
  i2c: npcm: Add tx complete counter
  i2c: npcm: Handle spurious interrupts
  i2c: npcm: Remove own slave addresses 2:10

Tyrone Ting (4):
  arm: dts: add new property for NPCM i2c module
  dt-bindings: i2c: npcm: support NPCM845
  i2c: npcm: Correct register access width
  i2c: npcm: Support NPCM845

 .../bindings/i2c/nuvoton,npcm7xx-i2c.yaml     |  17 +-
 arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi |  16 ++
 drivers/i2c/busses/Kconfig                    |   8 +-
 drivers/i2c/busses/Makefile                   |   2 +-
 drivers/i2c/busses/i2c-npcm7xx.c              | 251 +++++++++++-------
 5 files changed, 193 insertions(+), 101 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 31+ messages in thread

* [PATCH v2 01/11] arm: dts: add new property for NPCM i2c module
  2022-02-20  3:53 [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Tyrone Ting
@ 2022-02-20  3:53 ` Tyrone Ting
  2022-02-20  3:53 ` [PATCH v2 02/11] dt-bindings: i2c: npcm: support NPCM845 Tyrone Ting
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 31+ messages in thread
From: Tyrone Ting @ 2022-02-20  3:53 UTC (permalink / raw)
  To: avifishman70, tmaimon77, tali.perry1, venture, yuenn,
	benjaminfair, robh+dt, krzysztof.kozlowski, semen.protsenko,
	yangyicong, wsa, jie.deng, sven, bence98, christophe.leroy,
	lukas.bulwahn, olof, arnd, digetx, andriy.shevchenko, warp5tw,
	tali.perry, Avi.Fishman, tomer.maimon, KWLIU, JJLIU0, kfting
  Cc: devicetree, openbmc, linux-i2c, linux-kernel

From: Tyrone Ting <kfting@nuvoton.com>

Add nuvoton,sys-mgr property for controlling NPCM gcr register.

Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
Signed-off-by: Tali Perry <tali.perry1@gmail.com>
---
 arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi b/arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi
index 3696980a3da1..0fee5fc67e02 100644
--- a/arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi
+++ b/arch/arm/boot/dts/nuvoton-common-npcm7xx.dtsi
@@ -371,6 +371,7 @@
 				interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
 				pinctrl-names = "default";
 				pinctrl-0 = <&smb0_pins>;
+				nuvoton,sys-mgr = <&gcr>;
 				status = "disabled";
 			};
 
@@ -383,6 +384,7 @@
 				interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
 				pinctrl-names = "default";
 				pinctrl-0 = <&smb1_pins>;
+				nuvoton,sys-mgr = <&gcr>;
 				status = "disabled";
 			};
 
@@ -395,6 +397,7 @@
 				interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
 				pinctrl-names = "default";
 				pinctrl-0 = <&smb2_pins>;
+				nuvoton,sys-mgr = <&gcr>;
 				status = "disabled";
 			};
 
@@ -407,6 +410,7 @@
 				interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
 				pinctrl-names = "default";
 				pinctrl-0 = <&smb3_pins>;
+				nuvoton,sys-mgr = <&gcr>;
 				status = "disabled";
 			};
 
@@ -419,6 +423,7 @@
 				interrupts = <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>;
 				pinctrl-names = "default";
 				pinctrl-0 = <&smb4_pins>;
+				nuvoton,sys-mgr = <&gcr>;
 				status = "disabled";
 			};
 
@@ -431,6 +436,7 @@
 				interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
 				pinctrl-names = "default";
 				pinctrl-0 = <&smb5_pins>;
+				nuvoton,sys-mgr = <&gcr>;
 				status = "disabled";
 			};
 
@@ -443,6 +449,7 @@
 				interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>;
 				pinctrl-names = "default";
 				pinctrl-0 = <&smb6_pins>;
+				nuvoton,sys-mgr = <&gcr>;
 				status = "disabled";
 			};
 
@@ -455,6 +462,7 @@
 				interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
 				pinctrl-names = "default";
 				pinctrl-0 = <&smb7_pins>;
+				nuvoton,sys-mgr = <&gcr>;
 				status = "disabled";
 			};
 
@@ -467,6 +475,7 @@
 				interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
 				pinctrl-names = "default";
 				pinctrl-0 = <&smb8_pins>;
+				nuvoton,sys-mgr = <&gcr>;
 				status = "disabled";
 			};
 
@@ -479,6 +488,7 @@
 				interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
 				pinctrl-names = "default";
 				pinctrl-0 = <&smb9_pins>;
+				nuvoton,sys-mgr = <&gcr>;
 				status = "disabled";
 			};
 
@@ -491,6 +501,7 @@
 				interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
 				pinctrl-names = "default";
 				pinctrl-0 = <&smb10_pins>;
+				nuvoton,sys-mgr = <&gcr>;
 				status = "disabled";
 			};
 
@@ -503,6 +514,7 @@
 				interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
 				pinctrl-names = "default";
 				pinctrl-0 = <&smb11_pins>;
+				nuvoton,sys-mgr = <&gcr>;
 				status = "disabled";
 			};
 
@@ -515,6 +527,7 @@
 				interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
 				pinctrl-names = "default";
 				pinctrl-0 = <&smb12_pins>;
+				nuvoton,sys-mgr = <&gcr>;
 				status = "disabled";
 			};
 
@@ -527,6 +540,7 @@
 				interrupts = <GIC_SPI 77 IRQ_TYPE_LEVEL_HIGH>;
 				pinctrl-names = "default";
 				pinctrl-0 = <&smb13_pins>;
+				nuvoton,sys-mgr = <&gcr>;
 				status = "disabled";
 			};
 
@@ -539,6 +553,7 @@
 				interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
 				pinctrl-names = "default";
 				pinctrl-0 = <&smb14_pins>;
+				nuvoton,sys-mgr = <&gcr>;
 				status = "disabled";
 			};
 
@@ -551,6 +566,7 @@
 				interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
 				pinctrl-names = "default";
 				pinctrl-0 = <&smb15_pins>;
+				nuvoton,sys-mgr = <&gcr>;
 				status = "disabled";
 			};
 		};
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH v2 02/11] dt-bindings: i2c: npcm: support NPCM845
  2022-02-20  3:53 [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Tyrone Ting
  2022-02-20  3:53 ` [PATCH v2 01/11] arm: dts: add new property for NPCM i2c module Tyrone Ting
@ 2022-02-20  3:53 ` Tyrone Ting
  2022-02-21  2:36   ` Rob Herring
  2022-02-22 17:56   ` Rob Herring
  2022-02-20  3:53 ` [PATCH v2 03/11] i2c: npcm: Fix client address calculation Tyrone Ting
                   ` (9 subsequent siblings)
  11 siblings, 2 replies; 31+ messages in thread
From: Tyrone Ting @ 2022-02-20  3:53 UTC (permalink / raw)
  To: avifishman70, tmaimon77, tali.perry1, venture, yuenn,
	benjaminfair, robh+dt, krzysztof.kozlowski, semen.protsenko,
	yangyicong, wsa, jie.deng, sven, bence98, christophe.leroy,
	lukas.bulwahn, olof, arnd, digetx, andriy.shevchenko, warp5tw,
	tali.perry, Avi.Fishman, tomer.maimon, KWLIU, JJLIU0, kfting
  Cc: devicetree, openbmc, linux-i2c, linux-kernel

From: Tyrone Ting <kfting@nuvoton.com>

Add compatible and nuvoton,sys-mgr description for NPCM i2c module.

Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
Signed-off-by: Tali Perry <tali.perry1@gmail.com>
---
 .../bindings/i2c/nuvoton,npcm7xx-i2c.yaml       | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml b/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml
index 128444942aec..809c51ac32fe 100644
--- a/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml
+++ b/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml
@@ -7,17 +7,18 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
 title: nuvoton NPCM7XX I2C Controller Device Tree Bindings
 
 description: |
-  The NPCM750x includes sixteen I2C bus controllers. All Controllers support
-  both master and slave mode. Each controller can switch between master and slave
-  at run time (i.e. IPMB mode). Each controller has two 16 byte HW FIFO for TX and
-  RX.
+  I2C bus controllers of the NPCM series support both master and
+  slave mode. Each controller can switch between master and slave at run time
+  (i.e. IPMB mode). HW FIFO for TX and RX are supported.
 
 maintainers:
   - Tali Perry <tali.perry1@gmail.com>
 
 properties:
   compatible:
-    const: nuvoton,npcm750-i2c
+     enum:
+      - nuvoton,npcm750-i2c
+      - nuvoton,npcm845-i2c
 
   reg:
     maxItems: 1
@@ -36,11 +37,16 @@ properties:
     default: 100000
     enum: [100000, 400000, 1000000]
 
+  nuvoton,sys-mgr:
+    $ref: "/schemas/types.yaml#/definitions/phandle"
+    description: The phandle of system manager register node.
+
 required:
   - compatible
   - reg
   - interrupts
   - clocks
+  - nuvoton,sys-mgr
 
 allOf:
   - $ref: /schemas/i2c/i2c-controller.yaml#
@@ -57,6 +63,7 @@ examples:
         clock-frequency = <100000>;
         interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
         compatible = "nuvoton,npcm750-i2c";
+        nuvoton,sys-mgr = <&gcr>;
     };
 
 ...
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH v2 03/11] i2c: npcm: Fix client address calculation
  2022-02-20  3:53 [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Tyrone Ting
  2022-02-20  3:53 ` [PATCH v2 01/11] arm: dts: add new property for NPCM i2c module Tyrone Ting
  2022-02-20  3:53 ` [PATCH v2 02/11] dt-bindings: i2c: npcm: support NPCM845 Tyrone Ting
@ 2022-02-20  3:53 ` Tyrone Ting
  2022-02-20  3:53 ` [PATCH v2 04/11] i2c: npcm: Update gcr property name Tyrone Ting
                   ` (8 subsequent siblings)
  11 siblings, 0 replies; 31+ messages in thread
From: Tyrone Ting @ 2022-02-20  3:53 UTC (permalink / raw)
  To: avifishman70, tmaimon77, tali.perry1, venture, yuenn,
	benjaminfair, robh+dt, krzysztof.kozlowski, semen.protsenko,
	yangyicong, wsa, jie.deng, sven, bence98, christophe.leroy,
	lukas.bulwahn, olof, arnd, digetx, andriy.shevchenko, warp5tw,
	tali.perry, Avi.Fishman, tomer.maimon, KWLIU, JJLIU0, kfting
  Cc: devicetree, openbmc, linux-i2c, linux-kernel

From: Tali Perry <tali.perry1@gmail.com>

Fix i2c client address by left-shifting 1 bit before
applying it to the data register.

Fixes: 56a1485b102e ("i2c: npcm7xx: Add Nuvoton NPCM I2C controller driver")
Signed-off-by: Tali Perry <tali.perry1@gmail.com>
Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
---
 drivers/i2c/busses/i2c-npcm7xx.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c
index 2ad166355ec9..4c225e1a058f 100644
--- a/drivers/i2c/busses/i2c-npcm7xx.c
+++ b/drivers/i2c/busses/i2c-npcm7xx.c
@@ -2131,7 +2131,7 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
 	}
 
 	npcm_i2c_init_params(bus);
-	bus->dest_addr = slave_addr;
+	bus->dest_addr = slave_addr << 1;
 	bus->msgs = msgs;
 	bus->msgs_num = num;
 	bus->cmd_err = 0;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH v2 04/11] i2c: npcm: Update gcr property name
  2022-02-20  3:53 [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Tyrone Ting
                   ` (2 preceding siblings ...)
  2022-02-20  3:53 ` [PATCH v2 03/11] i2c: npcm: Fix client address calculation Tyrone Ting
@ 2022-02-20  3:53 ` Tyrone Ting
  2022-02-20  9:32   ` Krzysztof Kozlowski
  2022-02-20  3:53 ` [PATCH v2 05/11] i2c: npcm: Remove unused clock node Tyrone Ting
                   ` (7 subsequent siblings)
  11 siblings, 1 reply; 31+ messages in thread
From: Tyrone Ting @ 2022-02-20  3:53 UTC (permalink / raw)
  To: avifishman70, tmaimon77, tali.perry1, venture, yuenn,
	benjaminfair, robh+dt, krzysztof.kozlowski, semen.protsenko,
	yangyicong, wsa, jie.deng, sven, bence98, christophe.leroy,
	lukas.bulwahn, olof, arnd, digetx, andriy.shevchenko, warp5tw,
	tali.perry, Avi.Fishman, tomer.maimon, KWLIU, JJLIU0, kfting
  Cc: devicetree, openbmc, linux-i2c, linux-kernel

From: Tali Perry <tali.perry1@gmail.com>

Use a generic name for NPCM system manager reigster.

Fixes: 56a1485b102e ("i2c: npcm7xx: Add Nuvoton NPCM I2C controller driver")
Signed-off-by: Tali Perry <tali.perry1@gmail.com>
Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
---
 drivers/i2c/busses/i2c-npcm7xx.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c
index 4c225e1a058f..a51db3f50274 100644
--- a/drivers/i2c/busses/i2c-npcm7xx.c
+++ b/drivers/i2c/busses/i2c-npcm7xx.c
@@ -2236,6 +2236,7 @@ static int npcm_i2c_probe_bus(struct platform_device *pdev)
 	static struct regmap *clk_regmap;
 	int irq;
 	int ret;
+	struct device_node *np = pdev->dev.of_node;
 
 	bus = devm_kzalloc(&pdev->dev, sizeof(*bus), GFP_KERNEL);
 	if (!bus)
@@ -2250,7 +2251,7 @@ static int npcm_i2c_probe_bus(struct platform_device *pdev)
 		return PTR_ERR(i2c_clk);
 	bus->apb_clk = clk_get_rate(i2c_clk);
 
-	gcr_regmap = syscon_regmap_lookup_by_compatible("nuvoton,npcm750-gcr");
+	gcr_regmap = syscon_regmap_lookup_by_phandle(np, "nuvoton,sys-mgr");
 	if (IS_ERR(gcr_regmap))
 		return PTR_ERR(gcr_regmap);
 	regmap_write(gcr_regmap, NPCM_I2CSEGCTL, NPCM_I2CSEGCTL_INIT_VAL);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH v2 05/11] i2c: npcm: Remove unused clock node
  2022-02-20  3:53 [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Tyrone Ting
                   ` (3 preceding siblings ...)
  2022-02-20  3:53 ` [PATCH v2 04/11] i2c: npcm: Update gcr property name Tyrone Ting
@ 2022-02-20  3:53 ` Tyrone Ting
  2022-02-21 11:49   ` Jonathan Neuschäfer
  2022-02-20  3:53 ` [PATCH v2 06/11] i2c: npcm: Fix timeout calculation Tyrone Ting
                   ` (6 subsequent siblings)
  11 siblings, 1 reply; 31+ messages in thread
From: Tyrone Ting @ 2022-02-20  3:53 UTC (permalink / raw)
  To: avifishman70, tmaimon77, tali.perry1, venture, yuenn,
	benjaminfair, robh+dt, krzysztof.kozlowski, semen.protsenko,
	yangyicong, wsa, jie.deng, sven, bence98, christophe.leroy,
	lukas.bulwahn, olof, arnd, digetx, andriy.shevchenko, warp5tw,
	tali.perry, Avi.Fishman, tomer.maimon, KWLIU, JJLIU0, kfting
  Cc: devicetree, openbmc, linux-i2c, linux-kernel

From: Tali Perry <tali.perry1@gmail.com>

Remove unused npcm750-clk node.

Fixes: 56a1485b102e ("i2c: npcm7xx: Add Nuvoton NPCM I2C controller driver")
Signed-off-by: Tali Perry <tali.perry1@gmail.com>
Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
---
 drivers/i2c/busses/i2c-npcm7xx.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c
index a51db3f50274..9ccb9958945e 100644
--- a/drivers/i2c/busses/i2c-npcm7xx.c
+++ b/drivers/i2c/busses/i2c-npcm7xx.c
@@ -2233,7 +2233,6 @@ static int npcm_i2c_probe_bus(struct platform_device *pdev)
 	struct i2c_adapter *adap;
 	struct clk *i2c_clk;
 	static struct regmap *gcr_regmap;
-	static struct regmap *clk_regmap;
 	int irq;
 	int ret;
 	struct device_node *np = pdev->dev.of_node;
@@ -2256,10 +2255,6 @@ static int npcm_i2c_probe_bus(struct platform_device *pdev)
 		return PTR_ERR(gcr_regmap);
 	regmap_write(gcr_regmap, NPCM_I2CSEGCTL, NPCM_I2CSEGCTL_INIT_VAL);
 
-	clk_regmap = syscon_regmap_lookup_by_compatible("nuvoton,npcm750-clk");
-	if (IS_ERR(clk_regmap))
-		return PTR_ERR(clk_regmap);
-
 	bus->reg = devm_platform_ioremap_resource(pdev, 0);
 	if (IS_ERR(bus->reg))
 		return PTR_ERR(bus->reg);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH v2 06/11] i2c: npcm: Fix timeout calculation
  2022-02-20  3:53 [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Tyrone Ting
                   ` (4 preceding siblings ...)
  2022-02-20  3:53 ` [PATCH v2 05/11] i2c: npcm: Remove unused clock node Tyrone Ting
@ 2022-02-20  3:53 ` Tyrone Ting
  2022-02-20  3:53 ` [PATCH v2 07/11] i2c: npcm: Add tx complete counter Tyrone Ting
                   ` (5 subsequent siblings)
  11 siblings, 0 replies; 31+ messages in thread
From: Tyrone Ting @ 2022-02-20  3:53 UTC (permalink / raw)
  To: avifishman70, tmaimon77, tali.perry1, venture, yuenn,
	benjaminfair, robh+dt, krzysztof.kozlowski, semen.protsenko,
	yangyicong, wsa, jie.deng, sven, bence98, christophe.leroy,
	lukas.bulwahn, olof, arnd, digetx, andriy.shevchenko, warp5tw,
	tali.perry, Avi.Fishman, tomer.maimon, KWLIU, JJLIU0, kfting
  Cc: devicetree, openbmc, linux-i2c, linux-kernel

From: Tali Perry <tali.perry1@gmail.com>

Use adap.timeout for timeout calculation instead of hard-coded
value of 35ms.

Fixes: 56a1485b102e ("i2c: npcm7xx: Add Nuvoton NPCM I2C controller driver")
Signed-off-by: Tali Perry <tali.perry1@gmail.com>
Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
Reported-by: kernel test robot <lkp@intel.com>
---
 drivers/i2c/busses/i2c-npcm7xx.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c
index 9ccb9958945e..1e6e3f7f59a3 100644
--- a/drivers/i2c/busses/i2c-npcm7xx.c
+++ b/drivers/i2c/busses/i2c-npcm7xx.c
@@ -2047,7 +2047,7 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
 	u16 nwrite, nread;
 	u8 *write_data, *read_data;
 	u8 slave_addr;
-	int timeout;
+	unsigned long timeout;
 	int ret = 0;
 	bool read_block = false;
 	bool read_PEC = false;
@@ -2099,13 +2099,13 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
 	 * 9: bits per transaction (including the ack/nack)
 	 */
 	timeout_usec = (2 * 9 * USEC_PER_SEC / bus->bus_freq) * (2 + nread + nwrite);
-	timeout = max(msecs_to_jiffies(35), usecs_to_jiffies(timeout_usec));
+	timeout = max_t(unsigned long, bus->adap.timeout, usecs_to_jiffies(timeout_usec));
 	if (nwrite >= 32 * 1024 || nread >= 32 * 1024) {
 		dev_err(bus->dev, "i2c%d buffer too big\n", bus->num);
 		return -EINVAL;
 	}
 
-	time_left = jiffies + msecs_to_jiffies(DEFAULT_STALL_COUNT) + 1;
+	time_left = jiffies + timeout + 1;
 	do {
 		/*
 		 * we must clear slave address immediately when the bus is not
@@ -2265,7 +2265,7 @@ static int npcm_i2c_probe_bus(struct platform_device *pdev)
 	adap = &bus->adap;
 	adap->owner = THIS_MODULE;
 	adap->retries = 3;
-	adap->timeout = HZ;
+	adap->timeout = msecs_to_jiffies(35);
 	adap->algo = &npcm_i2c_algo;
 	adap->quirks = &npcm_i2c_quirks;
 	adap->algo_data = bus;
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH v2 07/11] i2c: npcm: Add tx complete counter
  2022-02-20  3:53 [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Tyrone Ting
                   ` (5 preceding siblings ...)
  2022-02-20  3:53 ` [PATCH v2 06/11] i2c: npcm: Fix timeout calculation Tyrone Ting
@ 2022-02-20  3:53 ` Tyrone Ting
  2022-02-20  3:53 ` [PATCH v2 08/11] i2c: npcm: Correct register access width Tyrone Ting
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 31+ messages in thread
From: Tyrone Ting @ 2022-02-20  3:53 UTC (permalink / raw)
  To: avifishman70, tmaimon77, tali.perry1, venture, yuenn,
	benjaminfair, robh+dt, krzysztof.kozlowski, semen.protsenko,
	yangyicong, wsa, jie.deng, sven, bence98, christophe.leroy,
	lukas.bulwahn, olof, arnd, digetx, andriy.shevchenko, warp5tw,
	tali.perry, Avi.Fishman, tomer.maimon, KWLIU, JJLIU0, kfting
  Cc: devicetree, openbmc, linux-i2c, linux-kernel

From: Tali Perry <tali.perry1@gmail.com>

tx_complete counter is used to indicate successful transaction
count.
Similar counters for failed tx were previously added.

Fixes: 56a1485b102e ("i2c: npcm7xx: Add Nuvoton NPCM I2C controller driver")
Signed-off-by: Tali Perry <tali.perry1@gmail.com>
Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
---
 drivers/i2c/busses/i2c-npcm7xx.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c
index 1e6e3f7f59a3..ee4757eff4b3 100644
--- a/drivers/i2c/busses/i2c-npcm7xx.c
+++ b/drivers/i2c/busses/i2c-npcm7xx.c
@@ -314,6 +314,7 @@ struct npcm_i2c {
 	u64 rec_fail_cnt;
 	u64 nack_cnt;
 	u64 timeout_cnt;
+	u64 tx_complete_cnt;
 };
 
 static inline void npcm_i2c_select_bank(struct npcm_i2c *bus,
@@ -684,6 +685,8 @@ static void npcm_i2c_callback(struct npcm_i2c *bus,
 	switch (op_status) {
 	case I2C_MASTER_DONE_IND:
 		bus->cmd_err = bus->msgs_num;
+		if (bus->tx_complete_cnt < ULLONG_MAX)
+			bus->tx_complete_cnt++;
 		fallthrough;
 	case I2C_BLOCK_BYTES_ERR_IND:
 		/* Master tx finished and all transmit bytes were sent */
@@ -2223,6 +2226,7 @@ static void npcm_i2c_init_debugfs(struct platform_device *pdev,
 	debugfs_create_u64("rec_succ_cnt", 0444, d, &bus->rec_succ_cnt);
 	debugfs_create_u64("rec_fail_cnt", 0444, d, &bus->rec_fail_cnt);
 	debugfs_create_u64("timeout_cnt", 0444, d, &bus->timeout_cnt);
+	debugfs_create_u64("tx_complete_cnt", 0444, d, &bus->tx_complete_cnt);
 
 	bus->debugfs = d;
 }
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH v2 08/11] i2c: npcm: Correct register access width
  2022-02-20  3:53 [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Tyrone Ting
                   ` (6 preceding siblings ...)
  2022-02-20  3:53 ` [PATCH v2 07/11] i2c: npcm: Add tx complete counter Tyrone Ting
@ 2022-02-20  3:53 ` Tyrone Ting
  2022-02-21 11:55   ` Jonathan Neuschäfer
  2022-02-20  3:53 ` [PATCH v2 09/11] i2c: npcm: Handle spurious interrupts Tyrone Ting
                   ` (3 subsequent siblings)
  11 siblings, 1 reply; 31+ messages in thread
From: Tyrone Ting @ 2022-02-20  3:53 UTC (permalink / raw)
  To: avifishman70, tmaimon77, tali.perry1, venture, yuenn,
	benjaminfair, robh+dt, krzysztof.kozlowski, semen.protsenko,
	yangyicong, wsa, jie.deng, sven, bence98, christophe.leroy,
	lukas.bulwahn, olof, arnd, digetx, andriy.shevchenko, warp5tw,
	tali.perry, Avi.Fishman, tomer.maimon, KWLIU, JJLIU0, kfting
  Cc: devicetree, openbmc, linux-i2c, linux-kernel

From: Tyrone Ting <kfting@nuvoton.com>

Use ioread8 instead of ioread32 to access the SMBnCTL3 register since
the register is only 8-bit wide.

Fixes: 56a1485b102e ("i2c: npcm7xx: Add Nuvoton NPCM I2C controller driver")
Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
Signed-off-by: Tali Perry <tali.perry1@gmail.com>
---
 drivers/i2c/busses/i2c-npcm7xx.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c
index ee4757eff4b3..4715afcf9ac4 100644
--- a/drivers/i2c/busses/i2c-npcm7xx.c
+++ b/drivers/i2c/busses/i2c-npcm7xx.c
@@ -360,14 +360,14 @@ static int npcm_i2c_get_SCL(struct i2c_adapter *_adap)
 {
 	struct npcm_i2c *bus = container_of(_adap, struct npcm_i2c, adap);
 
-	return !!(I2CCTL3_SCL_LVL & ioread32(bus->reg + NPCM_I2CCTL3));
+	return !!(I2CCTL3_SCL_LVL & ioread8(bus->reg + NPCM_I2CCTL3));
 }
 
 static int npcm_i2c_get_SDA(struct i2c_adapter *_adap)
 {
 	struct npcm_i2c *bus = container_of(_adap, struct npcm_i2c, adap);
 
-	return !!(I2CCTL3_SDA_LVL & ioread32(bus->reg + NPCM_I2CCTL3));
+	return !!(I2CCTL3_SDA_LVL & ioread8(bus->reg + NPCM_I2CCTL3));
 }
 
 static inline u16 npcm_i2c_get_index(struct npcm_i2c *bus)
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH v2 09/11] i2c: npcm: Handle spurious interrupts
  2022-02-20  3:53 [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Tyrone Ting
                   ` (7 preceding siblings ...)
  2022-02-20  3:53 ` [PATCH v2 08/11] i2c: npcm: Correct register access width Tyrone Ting
@ 2022-02-20  3:53 ` Tyrone Ting
  2022-02-20  3:53 ` [PATCH v2 10/11] i2c: npcm: Remove own slave addresses 2:10 Tyrone Ting
                   ` (2 subsequent siblings)
  11 siblings, 0 replies; 31+ messages in thread
From: Tyrone Ting @ 2022-02-20  3:53 UTC (permalink / raw)
  To: avifishman70, tmaimon77, tali.perry1, venture, yuenn,
	benjaminfair, robh+dt, krzysztof.kozlowski, semen.protsenko,
	yangyicong, wsa, jie.deng, sven, bence98, christophe.leroy,
	lukas.bulwahn, olof, arnd, digetx, andriy.shevchenko, warp5tw,
	tali.perry, Avi.Fishman, tomer.maimon, KWLIU, JJLIU0, kfting
  Cc: devicetree, openbmc, linux-i2c, linux-kernel

From: Tali Perry <tali.perry1@gmail.com>

In order to better handle spurious interrupts:
1. Disable incoming interrupts in master only mode.
2. Clear end of busy (EOB) after every interrupt.
3. Return correct status during interrupt.

Fixes: 56a1485b102e ("i2c: npcm7xx: Add Nuvoton NPCM I2C controller driver")
Signed-off-by: Tali Perry <tali.perry1@gmail.com>
Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
---
 drivers/i2c/busses/i2c-npcm7xx.c | 92 ++++++++++++++++++++++----------
 1 file changed, 63 insertions(+), 29 deletions(-)

diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c
index 4715afcf9ac4..a265f6fdbf5c 100644
--- a/drivers/i2c/busses/i2c-npcm7xx.c
+++ b/drivers/i2c/busses/i2c-npcm7xx.c
@@ -564,6 +564,15 @@ static inline void npcm_i2c_nack(struct npcm_i2c *bus)
 	iowrite8(val, bus->reg + NPCM_I2CCTL1);
 }
 
+static inline void npcm_i2c_clear_master_status(struct npcm_i2c *bus)
+{
+	u8 val;
+
+	/* Clear NEGACK, STASTR and BER bits */
+	val = NPCM_I2CST_BER | NPCM_I2CST_NEGACK | NPCM_I2CST_STASTR;
+	iowrite8(val, bus->reg + NPCM_I2CST);
+}
+
 #if IS_ENABLED(CONFIG_I2C_SLAVE)
 static void npcm_i2c_slave_int_enable(struct npcm_i2c *bus, bool enable)
 {
@@ -643,8 +652,8 @@ static void npcm_i2c_reset(struct npcm_i2c *bus)
 	iowrite8(NPCM_I2CCST_BB, bus->reg + NPCM_I2CCST);
 	iowrite8(0xFF, bus->reg + NPCM_I2CST);
 
-	/* Clear EOB bit */
-	iowrite8(NPCM_I2CCST3_EO_BUSY, bus->reg + NPCM_I2CCST3);
+	/* Clear and disable EOB */
+	npcm_i2c_eob_int(bus, false);
 
 	/* Clear all fifo bits: */
 	iowrite8(NPCM_I2CFIF_CTS_CLR_FIFO, bus->reg + NPCM_I2CFIF_CTS);
@@ -656,6 +665,9 @@ static void npcm_i2c_reset(struct npcm_i2c *bus)
 	}
 #endif
 
+	/* clear status bits for spurious interrupts */
+	npcm_i2c_clear_master_status(bus);
+
 	bus->state = I2C_IDLE;
 }
 
@@ -818,15 +830,6 @@ static void npcm_i2c_read_fifo(struct npcm_i2c *bus, u8 bytes_in_fifo)
 	}
 }
 
-static inline void npcm_i2c_clear_master_status(struct npcm_i2c *bus)
-{
-	u8 val;
-
-	/* Clear NEGACK, STASTR and BER bits */
-	val = NPCM_I2CST_BER | NPCM_I2CST_NEGACK | NPCM_I2CST_STASTR;
-	iowrite8(val, bus->reg + NPCM_I2CST);
-}
-
 static void npcm_i2c_master_abort(struct npcm_i2c *bus)
 {
 	/* Only current master is allowed to issue a stop condition */
@@ -1234,7 +1237,16 @@ static irqreturn_t npcm_i2c_int_slave_handler(struct npcm_i2c *bus)
 		ret = IRQ_HANDLED;
 	} /* SDAST */
 
-	return ret;
+	/*
+	 * if irq is not one of the above, make sure EOB is disabled and all
+	 * status bits are cleared.
+	 */
+	if (ret == IRQ_NONE) {
+		npcm_i2c_eob_int(bus, false);
+		npcm_i2c_clear_master_status(bus);
+	}
+
+	return IRQ_HANDLED;
 }
 
 static int npcm_i2c_reg_slave(struct i2c_client *client)
@@ -1470,6 +1482,9 @@ static void npcm_i2c_irq_handle_nack(struct npcm_i2c *bus)
 		npcm_i2c_eob_int(bus, false);
 		npcm_i2c_master_stop(bus);
 
+		/* Clear SDA Status bit (by reading dummy byte) */
+		npcm_i2c_rd_byte(bus);
+
 		/*
 		 * The bus is released from stall only after the SW clears
 		 * NEGACK bit. Then a Stop condition is sent.
@@ -1477,6 +1492,8 @@ static void npcm_i2c_irq_handle_nack(struct npcm_i2c *bus)
 		npcm_i2c_clear_master_status(bus);
 		readx_poll_timeout_atomic(ioread8, bus->reg + NPCM_I2CCST, val,
 					  !(val & NPCM_I2CCST_BUSY), 10, 200);
+		/* verify no status bits are still set after bus is released */
+		npcm_i2c_clear_master_status(bus);
 	}
 	bus->state = I2C_IDLE;
 
@@ -1675,10 +1692,10 @@ static int npcm_i2c_recovery_tgclk(struct i2c_adapter *_adap)
 	int              iter = 27;
 
 	if ((npcm_i2c_get_SDA(_adap) == 1) && (npcm_i2c_get_SCL(_adap) == 1)) {
-		dev_dbg(bus->dev, "bus%d recovery skipped, bus not stuck",
-			bus->num);
+		dev_dbg(bus->dev, "bus%d-0x%x recovery skipped, bus not stuck",
+			bus->num, bus->dest_addr);
 		npcm_i2c_reset(bus);
-		return status;
+		return 0;
 	}
 
 	npcm_i2c_int_enable(bus, false);
@@ -1912,6 +1929,7 @@ static int npcm_i2c_init_module(struct npcm_i2c *bus, enum i2c_mode mode,
 	    bus_freq_hz < I2C_FREQ_MIN_HZ || bus_freq_hz > I2C_FREQ_MAX_HZ)
 		return -EINVAL;
 
+	npcm_i2c_int_enable(bus, false);
 	npcm_i2c_disable(bus);
 
 	/* Configure FIFO mode : */
@@ -1940,10 +1958,18 @@ static int npcm_i2c_init_module(struct npcm_i2c *bus, enum i2c_mode mode,
 	val = (val | NPCM_I2CCTL1_NMINTE) & ~NPCM_I2CCTL1_RWS;
 	iowrite8(val, bus->reg + NPCM_I2CCTL1);
 
-	npcm_i2c_int_enable(bus, true);
-
 	npcm_i2c_reset(bus);
 
+	/* check HW is OK: SDA and SCL should be high at this point. */
+	if ((npcm_i2c_get_SDA(&bus->adap) == 0) ||
+	    (npcm_i2c_get_SCL(&bus->adap) == 0)) {
+		dev_err(bus->dev, "I2C%d init fail: lines are low", bus->num);
+		dev_err(bus->dev, "SDA=%d SCL=%d", npcm_i2c_get_SDA(&bus->adap),
+			npcm_i2c_get_SCL(&bus->adap));
+		return -ENXIO;
+	}
+
+	npcm_i2c_int_enable(bus, true);
 	return 0;
 }
 
@@ -1991,10 +2017,14 @@ static irqreturn_t npcm_i2c_bus_irq(int irq, void *dev_id)
 #if IS_ENABLED(CONFIG_I2C_SLAVE)
 	if (bus->slave) {
 		bus->master_or_slave = I2C_SLAVE;
-		return npcm_i2c_int_slave_handler(bus);
+		if (npcm_i2c_int_slave_handler(bus))
+			return IRQ_HANDLED;
 	}
 #endif
-	return IRQ_NONE;
+	/* clear status bits for spurious interrupts */
+	npcm_i2c_clear_master_status(bus);
+
+	return IRQ_HANDLED;
 }
 
 static bool npcm_i2c_master_start_xmit(struct npcm_i2c *bus,
@@ -2051,7 +2081,6 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
 	u8 *write_data, *read_data;
 	u8 slave_addr;
 	unsigned long timeout;
-	int ret = 0;
 	bool read_block = false;
 	bool read_PEC = false;
 	u8 bus_busy;
@@ -2141,12 +2170,12 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
 	bus->read_block_use = read_block;
 
 	reinit_completion(&bus->cmd_complete);
-	if (!npcm_i2c_master_start_xmit(bus, slave_addr, nwrite, nread,
-					write_data, read_data, read_PEC,
-					read_block))
-		ret = -EBUSY;
 
-	if (ret != -EBUSY) {
+	npcm_i2c_int_enable(bus, true);
+
+	if (npcm_i2c_master_start_xmit(bus, slave_addr, nwrite, nread,
+				       write_data, read_data, read_PEC,
+				       read_block)) {
 		time_left = wait_for_completion_timeout(&bus->cmd_complete,
 							timeout);
 
@@ -2160,26 +2189,31 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
 			}
 		}
 	}
-	ret = bus->cmd_err;
 
 	/* if there was BER, check if need to recover the bus: */
 	if (bus->cmd_err == -EAGAIN)
-		ret = i2c_recover_bus(adap);
+		bus->cmd_err = i2c_recover_bus(adap);
 
 	/*
 	 * After any type of error, check if LAST bit is still set,
 	 * due to a HW issue.
 	 * It cannot be cleared without resetting the module.
 	 */
-	if (bus->cmd_err &&
-	    (NPCM_I2CRXF_CTL_LAST_PEC & ioread8(bus->reg + NPCM_I2CRXF_CTL)))
+	else if (bus->cmd_err &&
+		 (NPCM_I2CRXF_CTL_LAST_PEC & ioread8(bus->reg + NPCM_I2CRXF_CTL)))
 		npcm_i2c_reset(bus);
 
+	/* after any xfer, successful or not, stall and EOB must be disabled */
+	npcm_i2c_stall_after_start(bus, false);
+	npcm_i2c_eob_int(bus, false);
+
 #if IS_ENABLED(CONFIG_I2C_SLAVE)
 	/* reenable slave if it was enabled */
 	if (bus->slave)
 		iowrite8((bus->slave->addr & 0x7F) | NPCM_I2CADDR_SAEN,
 			 bus->reg + NPCM_I2CADDR1);
+#else
+	npcm_i2c_int_enable(bus, false);
 #endif
 	return bus->cmd_err;
 }
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH v2 10/11] i2c: npcm: Remove own slave addresses 2:10
  2022-02-20  3:53 [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Tyrone Ting
                   ` (8 preceding siblings ...)
  2022-02-20  3:53 ` [PATCH v2 09/11] i2c: npcm: Handle spurious interrupts Tyrone Ting
@ 2022-02-20  3:53 ` Tyrone Ting
  2022-02-20  3:53 ` [PATCH v2 11/11] i2c: npcm: Support NPCM845 Tyrone Ting
  2022-02-20  9:30 ` [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Krzysztof Kozlowski
  11 siblings, 0 replies; 31+ messages in thread
From: Tyrone Ting @ 2022-02-20  3:53 UTC (permalink / raw)
  To: avifishman70, tmaimon77, tali.perry1, venture, yuenn,
	benjaminfair, robh+dt, krzysztof.kozlowski, semen.protsenko,
	yangyicong, wsa, jie.deng, sven, bence98, christophe.leroy,
	lukas.bulwahn, olof, arnd, digetx, andriy.shevchenko, warp5tw,
	tali.perry, Avi.Fishman, tomer.maimon, KWLIU, JJLIU0, kfting
  Cc: devicetree, openbmc, linux-i2c, linux-kernel

From: Tali Perry <tali.perry1@gmail.com>

NPCM can support up to 10 own slave addresses.
In practice, only one address is actually being used.
In order to access addresses 2 and above, need to switch
register banks. The switch needs spinlock.
To avoid using spinlock for this useless feature
removed support of SA >= 2.

Also fix returned slave event enum.

Remove some comment since the bank selection is not
required. The bank selection is not required since
the supported slave addresses are reduced.

Fixes: 56a1485b102e ("i2c: npcm7xx: Add Nuvoton NPCM I2C controller driver")
Signed-off-by: Tali Perry <tali.perry1@gmail.com>
Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
---
 drivers/i2c/busses/i2c-npcm7xx.c | 46 ++++++++++++++++----------------
 1 file changed, 23 insertions(+), 23 deletions(-)

diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c
index a265f6fdbf5c..2cbf9c679aed 100644
--- a/drivers/i2c/busses/i2c-npcm7xx.c
+++ b/drivers/i2c/busses/i2c-npcm7xx.c
@@ -124,6 +124,8 @@ enum i2c_addr {
  * use this array to get the address or each register.
  */
 #define I2C_NUM_OWN_ADDR 10
+#define I2C_NUM_OWN_ADDR_SUPPORTED 2
+
 static const int npcm_i2caddr[I2C_NUM_OWN_ADDR] = {
 	NPCM_I2CADDR1, NPCM_I2CADDR2, NPCM_I2CADDR3, NPCM_I2CADDR4,
 	NPCM_I2CADDR5, NPCM_I2CADDR6, NPCM_I2CADDR7, NPCM_I2CADDR8,
@@ -392,14 +394,10 @@ static void npcm_i2c_disable(struct npcm_i2c *bus)
 #if IS_ENABLED(CONFIG_I2C_SLAVE)
 	int i;
 
-	/* select bank 0 for I2C addresses */
-	npcm_i2c_select_bank(bus, I2C_BANK_0);
-
 	/* Slave addresses removal */
-	for (i = I2C_SLAVE_ADDR1; i < I2C_NUM_OWN_ADDR; i++)
+	for (i = I2C_SLAVE_ADDR1; i < I2C_NUM_OWN_ADDR_SUPPORTED; i++)
 		iowrite8(0, bus->reg + npcm_i2caddr[i]);
 
-	npcm_i2c_select_bank(bus, I2C_BANK_1);
 #endif
 	/* Disable module */
 	i2cctl2 = ioread8(bus->reg + NPCM_I2CCTL2);
@@ -604,8 +602,7 @@ static int npcm_i2c_slave_enable(struct npcm_i2c *bus, enum i2c_addr addr_type,
 			i2cctl1 &= ~NPCM_I2CCTL1_GCMEN;
 		iowrite8(i2cctl1, bus->reg + NPCM_I2CCTL1);
 		return 0;
-	}
-	if (addr_type == I2C_ARP_ADDR) {
+	} else if (addr_type == I2C_ARP_ADDR) {
 		i2cctl3 = ioread8(bus->reg + NPCM_I2CCTL3);
 		if (enable)
 			i2cctl3 |= I2CCTL3_ARPMEN;
@@ -614,16 +611,18 @@ static int npcm_i2c_slave_enable(struct npcm_i2c *bus, enum i2c_addr addr_type,
 		iowrite8(i2cctl3, bus->reg + NPCM_I2CCTL3);
 		return 0;
 	}
+	if (addr_type > I2C_SLAVE_ADDR2 && addr_type <= I2C_SLAVE_ADDR10) {
+		dev_err(bus->dev,
+			"try to enable more then 2 SA not supported\n");
+	}
 	if (addr_type >= I2C_ARP_ADDR)
 		return -EFAULT;
 	/* select bank 0 for address 3 to 10 */
-	if (addr_type > I2C_SLAVE_ADDR2)
-		npcm_i2c_select_bank(bus, I2C_BANK_0);
+
 	/* Set and enable the address */
 	iowrite8(sa_reg, bus->reg + npcm_i2caddr[addr_type]);
 	npcm_i2c_slave_int_enable(bus, enable);
-	if (addr_type > I2C_SLAVE_ADDR2)
-		npcm_i2c_select_bank(bus, I2C_BANK_1);
+
 	return 0;
 }
 #endif
@@ -846,15 +845,13 @@ static u8 npcm_i2c_get_slave_addr(struct npcm_i2c *bus, enum i2c_addr addr_type)
 {
 	u8 slave_add;
 
-	/* select bank 0 for address 3 to 10 */
-	if (addr_type > I2C_SLAVE_ADDR2)
-		npcm_i2c_select_bank(bus, I2C_BANK_0);
+	if (addr_type > I2C_SLAVE_ADDR2 && addr_type <= I2C_SLAVE_ADDR10) {
+		dev_err(bus->dev,
+			"get slave: try to use more then 2 slave addresses not supported\n");
+	}
 
 	slave_add = ioread8(bus->reg + npcm_i2caddr[(int)addr_type]);
 
-	if (addr_type > I2C_SLAVE_ADDR2)
-		npcm_i2c_select_bank(bus, I2C_BANK_1);
-
 	return slave_add;
 }
 
@@ -864,12 +861,12 @@ static int npcm_i2c_remove_slave_addr(struct npcm_i2c *bus, u8 slave_add)
 
 	/* Set the enable bit */
 	slave_add |= 0x80;
-	npcm_i2c_select_bank(bus, I2C_BANK_0);
-	for (i = I2C_SLAVE_ADDR1; i < I2C_NUM_OWN_ADDR; i++) {
+
+	for (i = I2C_SLAVE_ADDR1; i < I2C_NUM_OWN_ADDR_SUPPORTED; i++) {
 		if (ioread8(bus->reg + npcm_i2caddr[i]) == slave_add)
 			iowrite8(0, bus->reg + npcm_i2caddr[i]);
 	}
-	npcm_i2c_select_bank(bus, I2C_BANK_1);
+
 	return 0;
 }
 
@@ -924,11 +921,15 @@ static int npcm_i2c_slave_get_wr_buf(struct npcm_i2c *bus)
 	for (i = 0; i < I2C_HW_FIFO_SIZE; i++) {
 		if (bus->slv_wr_size >= I2C_HW_FIFO_SIZE)
 			break;
-		i2c_slave_event(bus->slave, I2C_SLAVE_READ_REQUESTED, &value);
+		if (bus->state == I2C_SLAVE_MATCH) {
+			i2c_slave_event(bus->slave, I2C_SLAVE_READ_REQUESTED, &value);
+			bus->state = I2C_OPER_STARTED;
+		} else {
+			i2c_slave_event(bus->slave, I2C_SLAVE_READ_PROCESSED, &value);
+		}
 		ind = (bus->slv_wr_ind + bus->slv_wr_size) % I2C_HW_FIFO_SIZE;
 		bus->slv_wr_buf[ind] = value;
 		bus->slv_wr_size++;
-		i2c_slave_event(bus->slave, I2C_SLAVE_READ_PROCESSED, &value);
 	}
 	return I2C_HW_FIFO_SIZE - ret;
 }
@@ -976,7 +977,6 @@ static void npcm_i2c_slave_xmit(struct npcm_i2c *bus, u16 nwrite,
 	if (nwrite == 0)
 		return;
 
-	bus->state = I2C_OPER_STARTED;
 	bus->operation = I2C_WRITE_OPER;
 
 	/* get the next buffer */
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* [PATCH v2 11/11] i2c: npcm: Support NPCM845
  2022-02-20  3:53 [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Tyrone Ting
                   ` (9 preceding siblings ...)
  2022-02-20  3:53 ` [PATCH v2 10/11] i2c: npcm: Remove own slave addresses 2:10 Tyrone Ting
@ 2022-02-20  3:53 ` Tyrone Ting
  2022-02-20  9:36   ` Krzysztof Kozlowski
  2022-02-20  9:30 ` [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Krzysztof Kozlowski
  11 siblings, 1 reply; 31+ messages in thread
From: Tyrone Ting @ 2022-02-20  3:53 UTC (permalink / raw)
  To: avifishman70, tmaimon77, tali.perry1, venture, yuenn,
	benjaminfair, robh+dt, krzysztof.kozlowski, semen.protsenko,
	yangyicong, wsa, jie.deng, sven, bence98, christophe.leroy,
	lukas.bulwahn, olof, arnd, digetx, andriy.shevchenko, warp5tw,
	tali.perry, Avi.Fishman, tomer.maimon, KWLIU, JJLIU0, kfting
  Cc: devicetree, openbmc, linux-i2c, linux-kernel

From: Tyrone Ting <kfting@nuvoton.com>

Add NPCM8XX I2C support.
The NPCM8XX uses a similar i2c module as NPCM7XX.
The internal HW FIFO is larger in NPCM8XX.

Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
Signed-off-by: Tali Perry <tali.perry1@gmail.com>
---
 drivers/i2c/busses/Kconfig       |  8 +--
 drivers/i2c/busses/Makefile      |  2 +-
 drivers/i2c/busses/i2c-npcm7xx.c | 87 ++++++++++++++++++++++----------
 3 files changed, 66 insertions(+), 31 deletions(-)

diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
index 42da31c1ab70..ab9ee2de5e00 100644
--- a/drivers/i2c/busses/Kconfig
+++ b/drivers/i2c/busses/Kconfig
@@ -817,13 +817,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 1d00dce77098..01fdf74a5565 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 2cbf9c679aed..b281e0424e3e 100644
--- a/drivers/i2c/busses/i2c-npcm7xx.c
+++ b/drivers/i2c/busses/i2c-npcm7xx.c
@@ -17,6 +17,7 @@
 #include <linux/mfd/syscon.h>
 #include <linux/module.h>
 #include <linux/of.h>
+#include <linux/of_device.h>
 #include <linux/platform_device.h>
 #include <linux/regmap.h>
 
@@ -91,7 +92,7 @@ enum i2c_addr {
 
 /* init register and default value required to enable module */
 #define NPCM_I2CSEGCTL			0xE4
-#define NPCM_I2CSEGCTL_INIT_VAL		0x0333F000
+#define NPCM_I2CSEGCTL_INIT_VAL		bus->data->segctl_init_val
 
 /* Common regs */
 #define NPCM_I2CSDA			0x00
@@ -228,8 +229,7 @@ static const int npcm_i2caddr[I2C_NUM_OWN_ADDR] = {
 #define NPCM_I2CFIF_CTS_CLR_FIFO	BIT(6)
 #define NPCM_I2CFIF_CTS_SLVRSTR		BIT(7)
 
-/* NPCM_I2CTXF_CTL reg fields */
-#define NPCM_I2CTXF_CTL_TX_THR		GENMASK(4, 0)
+/* NPCM_I2CTXF_CTL reg field */
 #define NPCM_I2CTXF_CTL_THR_TXIE	BIT(6)
 
 /* NPCM_I2CT_OUT reg fields */
@@ -238,22 +238,22 @@ static const int npcm_i2caddr[I2C_NUM_OWN_ADDR] = {
 #define NPCM_I2CT_OUT_T_OUTST		BIT(7)
 
 /* NPCM_I2CTXF_STS reg fields */
-#define NPCM_I2CTXF_STS_TX_BYTES	GENMASK(4, 0)
+#define NPCM_I2CTXF_STS_TX_BYTES	bus->data->txf_sts_tx_bytes
 #define NPCM_I2CTXF_STS_TX_THST		BIT(6)
 
 /* NPCM_I2CRXF_STS reg fields */
-#define NPCM_I2CRXF_STS_RX_BYTES	GENMASK(4, 0)
+#define NPCM_I2CRXF_STS_RX_BYTES	bus->data->rxf_sts_rx_bytes
 #define NPCM_I2CRXF_STS_RX_THST		BIT(6)
 
 /* NPCM_I2CFIF_CTL reg fields */
 #define NPCM_I2CFIF_CTL_FIFO_EN		BIT(4)
 
 /* NPCM_I2CRXF_CTL reg fields */
-#define NPCM_I2CRXF_CTL_RX_THR		GENMASK(4, 0)
-#define NPCM_I2CRXF_CTL_LAST_PEC	BIT(5)
+#define NPCM_I2CRXF_CTL_LAST_PEC	bus->data->rxf_ctl_last_pec
 #define NPCM_I2CRXF_CTL_THR_RXIE	BIT(6)
 
-#define I2C_HW_FIFO_SIZE		16
+#define MAX_I2C_HW_FIFO_SIZE		32
+#define I2C_HW_FIFO_SIZE		bus->data->fifo_size
 
 /* I2C_VER reg fields */
 #define I2C_VER_VERSION			GENMASK(6, 0)
@@ -270,11 +270,36 @@ static const int npcm_i2caddr[I2C_NUM_OWN_ADDR] = {
 #define I2C_FREQ_MIN_HZ			10000
 #define I2C_FREQ_MAX_HZ			I2C_MAX_FAST_MODE_PLUS_FREQ
 
+struct npcm_i2c_data {
+	u8 fifo_size;
+	u32 segctl_init_val;
+	u8 txf_sts_tx_bytes;
+	u8 rxf_sts_rx_bytes;
+	u8 rxf_ctl_last_pec;
+};
+
+static const struct npcm_i2c_data npxm7xx_i2c_data = {
+	.fifo_size = 16,
+	.segctl_init_val = 0x0333F000,
+	.txf_sts_tx_bytes = GENMASK(4, 0),
+	.rxf_sts_rx_bytes = GENMASK(4, 0),
+	.rxf_ctl_last_pec = BIT(5)
+};
+
+static const struct npcm_i2c_data npxm8xx_i2c_data = {
+	.fifo_size = 32,
+	.segctl_init_val = 0x9333F000,
+	.txf_sts_tx_bytes = GENMASK(5, 0),
+	.rxf_sts_rx_bytes = GENMASK(5, 0),
+	.rxf_ctl_last_pec = BIT(7)
+};
+
 /* Status of one I2C module */
 struct npcm_i2c {
 	struct i2c_adapter adap;
 	struct device *dev;
 	unsigned char __iomem *reg;
+	const struct npcm_i2c_data *data;
 	spinlock_t lock;   /* IRQ synchronization */
 	struct completion cmd_complete;
 	int cmd_err;
@@ -307,8 +332,8 @@ struct npcm_i2c {
 	int slv_rd_ind;
 	int slv_wr_size;
 	int slv_wr_ind;
-	u8 slv_rd_buf[I2C_HW_FIFO_SIZE];
-	u8 slv_wr_buf[I2C_HW_FIFO_SIZE];
+	u8 slv_rd_buf[MAX_I2C_HW_FIFO_SIZE];
+	u8 slv_wr_buf[MAX_I2C_HW_FIFO_SIZE];
 #endif
 	struct dentry *debugfs; /* debugfs device directory */
 	u64 ber_cnt;
@@ -743,11 +768,11 @@ static void npcm_i2c_callback(struct npcm_i2c *bus,
 static u8 npcm_i2c_fifo_usage(struct npcm_i2c *bus)
 {
 	if (bus->operation == I2C_WRITE_OPER)
-		return FIELD_GET(NPCM_I2CTXF_STS_TX_BYTES,
-				 ioread8(bus->reg + NPCM_I2CTXF_STS));
+		return (NPCM_I2CTXF_STS_TX_BYTES &
+			ioread8(bus->reg + NPCM_I2CTXF_STS));
 	if (bus->operation == I2C_READ_OPER)
-		return FIELD_GET(NPCM_I2CRXF_STS_RX_BYTES,
-				 ioread8(bus->reg + NPCM_I2CRXF_STS));
+		return (NPCM_I2CRXF_STS_RX_BYTES &
+			ioread8(bus->reg + NPCM_I2CRXF_STS));
 	return 0;
 }
 
@@ -882,10 +907,10 @@ static void npcm_i2c_write_fifo_slave(struct npcm_i2c *bus, u16 max_bytes)
 	while (max_bytes-- && I2C_HW_FIFO_SIZE != npcm_i2c_fifo_usage(bus)) {
 		if (bus->slv_wr_size <= 0)
 			break;
-		bus->slv_wr_ind = bus->slv_wr_ind % I2C_HW_FIFO_SIZE;
+		bus->slv_wr_ind = bus->slv_wr_ind & (I2C_HW_FIFO_SIZE - 1);
 		npcm_i2c_wr_byte(bus, bus->slv_wr_buf[bus->slv_wr_ind]);
 		bus->slv_wr_ind++;
-		bus->slv_wr_ind = bus->slv_wr_ind % I2C_HW_FIFO_SIZE;
+		bus->slv_wr_ind = bus->slv_wr_ind & (I2C_HW_FIFO_SIZE - 1);
 		bus->slv_wr_size--;
 	}
 }
@@ -900,7 +925,7 @@ static void npcm_i2c_read_fifo_slave(struct npcm_i2c *bus, u8 bytes_in_fifo)
 	while (bytes_in_fifo--) {
 		data = npcm_i2c_rd_byte(bus);
 
-		bus->slv_rd_ind = bus->slv_rd_ind % I2C_HW_FIFO_SIZE;
+		bus->slv_rd_ind = bus->slv_rd_ind & (I2C_HW_FIFO_SIZE - 1);
 		bus->slv_rd_buf[bus->slv_rd_ind] = data;
 		bus->slv_rd_ind++;
 
@@ -927,7 +952,7 @@ static int npcm_i2c_slave_get_wr_buf(struct npcm_i2c *bus)
 		} else {
 			i2c_slave_event(bus->slave, I2C_SLAVE_READ_PROCESSED, &value);
 		}
-		ind = (bus->slv_wr_ind + bus->slv_wr_size) % I2C_HW_FIFO_SIZE;
+		ind = (bus->slv_wr_ind + bus->slv_wr_size) & (I2C_HW_FIFO_SIZE - 1);
 		bus->slv_wr_buf[ind] = value;
 		bus->slv_wr_size++;
 	}
@@ -999,8 +1024,8 @@ static void npcm_i2c_slave_wr_buf_sync(struct npcm_i2c *bus)
 {
 	int left_in_fifo;
 
-	left_in_fifo = FIELD_GET(NPCM_I2CTXF_STS_TX_BYTES,
-				 ioread8(bus->reg + NPCM_I2CTXF_STS));
+	left_in_fifo = (NPCM_I2CTXF_STS_TX_BYTES &
+			ioread8(bus->reg + NPCM_I2CTXF_STS));
 
 	/* fifo already full: */
 	if (left_in_fifo >= I2C_HW_FIFO_SIZE ||
@@ -2265,12 +2290,21 @@ static void npcm_i2c_init_debugfs(struct platform_device *pdev,
 	bus->debugfs = d;
 }
 
+static const struct of_device_id npcm_i2c_bus_of_table[] = {
+	{ .compatible = "nuvoton,npcm750-i2c", .data = &npxm7xx_i2c_data },
+	{ .compatible = "nuvoton,npcm845-i2c", .data = &npxm8xx_i2c_data },
+	{}
+};
+MODULE_DEVICE_TABLE(of, npcm_i2c_bus_of_table);
+
 static int npcm_i2c_probe_bus(struct platform_device *pdev)
 {
 	struct npcm_i2c *bus;
 	struct i2c_adapter *adap;
 	struct clk *i2c_clk;
 	static struct regmap *gcr_regmap;
+	struct device *dev = &pdev->dev;
+	const struct of_device_id *match;
 	int irq;
 	int ret;
 	struct device_node *np = pdev->dev.of_node;
@@ -2281,6 +2315,13 @@ static int npcm_i2c_probe_bus(struct platform_device *pdev)
 
 	bus->dev = &pdev->dev;
 
+	match = of_match_device(npcm_i2c_bus_of_table, dev);
+	if (!match) {
+		dev_err(dev, "OF data missing\n");
+		return -EINVAL;
+	}
+	bus->data = match->data;
+
 	bus->num = of_alias_get_id(pdev->dev.of_node, "i2c");
 	/* core clk must be acquired to calculate module timing settings */
 	i2c_clk = devm_clk_get(&pdev->dev, NULL);
@@ -2352,12 +2393,6 @@ static int npcm_i2c_remove_bus(struct platform_device *pdev)
 	return 0;
 }
 
-static const struct of_device_id npcm_i2c_bus_of_table[] = {
-	{ .compatible = "nuvoton,npcm750-i2c", },
-	{}
-};
-MODULE_DEVICE_TABLE(of, npcm_i2c_bus_of_table);
-
 static struct platform_driver npcm_i2c_bus_driver = {
 	.probe = npcm_i2c_probe_bus,
 	.remove = npcm_i2c_remove_bus,
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts
  2022-02-20  3:53 [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Tyrone Ting
                   ` (10 preceding siblings ...)
  2022-02-20  3:53 ` [PATCH v2 11/11] i2c: npcm: Support NPCM845 Tyrone Ting
@ 2022-02-20  9:30 ` Krzysztof Kozlowski
  2022-02-21  8:16   ` Tyrone Ting
  11 siblings, 1 reply; 31+ messages in thread
From: Krzysztof Kozlowski @ 2022-02-20  9:30 UTC (permalink / raw)
  To: Tyrone Ting, avifishman70, tmaimon77, tali.perry1, venture,
	yuenn, benjaminfair, robh+dt, semen.protsenko, yangyicong, wsa,
	jie.deng, sven, bence98, christophe.leroy, lukas.bulwahn, olof,
	arnd, digetx, andriy.shevchenko, tali.perry, Avi.Fishman,
	tomer.maimon, KWLIU, JJLIU0, kfting
  Cc: devicetree, openbmc, linux-i2c, linux-kernel

On 20/02/2022 04:53, Tyrone Ting wrote:
> From: Tyrone Ting <kfting@nuvoton.com>
> 
> This patchset includes the following fixes:
> 
> - Add dt-bindings description for NPCM845.
> - Bug fix for timeout calculation.
> - Better handling of spurious interrupts.
> - Fix for event type in slave mode.
> - Removal of own slave addresses [2:10].
> - Support for next gen BMC (NPCM845).
> 
> The NPCM I2C driver is tested on NPCM750 and NPCM845 evaluation boards.
> 
> Addressed comments from:
>  - Jonathan Neuschäfer : https://lkml.org/lkml/2022/2/7/670
>  - Krzysztof Kozlowski : https://lkml.org/lkml/2022/2/7/760

How did you address the ABI change comment? I still see you break the
ABI with the introduction of a new, required property.


Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 04/11] i2c: npcm: Update gcr property name
  2022-02-20  3:53 ` [PATCH v2 04/11] i2c: npcm: Update gcr property name Tyrone Ting
@ 2022-02-20  9:32   ` Krzysztof Kozlowski
  2022-02-21  8:29     ` Tyrone Ting
  0 siblings, 1 reply; 31+ messages in thread
From: Krzysztof Kozlowski @ 2022-02-20  9:32 UTC (permalink / raw)
  To: Tyrone Ting, avifishman70, tmaimon77, tali.perry1, venture,
	yuenn, benjaminfair, robh+dt, semen.protsenko, yangyicong, wsa,
	jie.deng, sven, bence98, christophe.leroy, lukas.bulwahn, olof,
	arnd, digetx, andriy.shevchenko, tali.perry, Avi.Fishman,
	tomer.maimon, KWLIU, JJLIU0, kfting
  Cc: devicetree, openbmc, linux-i2c, linux-kernel

On 20/02/2022 04:53, Tyrone Ting wrote:
> From: Tali Perry <tali.perry1@gmail.com>
> 
> Use a generic name for NPCM system manager reigster.

The subject is not accurate and you entirely skipped in commit msg the
fact of an ABI break.

You do not update a property name but you change the way of getting GCR
regmap.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 11/11] i2c: npcm: Support NPCM845
  2022-02-20  3:53 ` [PATCH v2 11/11] i2c: npcm: Support NPCM845 Tyrone Ting
@ 2022-02-20  9:36   ` Krzysztof Kozlowski
  2022-02-21  8:33     ` Tyrone Ting
  0 siblings, 1 reply; 31+ messages in thread
From: Krzysztof Kozlowski @ 2022-02-20  9:36 UTC (permalink / raw)
  To: Tyrone Ting, avifishman70, tmaimon77, tali.perry1, venture,
	yuenn, benjaminfair, robh+dt, semen.protsenko, yangyicong, wsa,
	jie.deng, sven, bence98, christophe.leroy, lukas.bulwahn, olof,
	arnd, digetx, andriy.shevchenko, tali.perry, Avi.Fishman,
	tomer.maimon, KWLIU, JJLIU0, kfting
  Cc: devicetree, openbmc, linux-i2c, linux-kernel

On 20/02/2022 04:53, Tyrone Ting wrote:
> From: Tyrone Ting <kfting@nuvoton.com>
> 
> Add NPCM8XX I2C support.
> The NPCM8XX uses a similar i2c module as NPCM7XX.
> The internal HW FIFO is larger in NPCM8XX.
> 
> Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
> Signed-off-by: Tali Perry <tali.perry1@gmail.com>
> ---
>  drivers/i2c/busses/Kconfig       |  8 +--
>  drivers/i2c/busses/Makefile      |  2 +-
>  drivers/i2c/busses/i2c-npcm7xx.c | 87 ++++++++++++++++++++++----------
>  3 files changed, 66 insertions(+), 31 deletions(-)
> 
> diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
> index 42da31c1ab70..ab9ee2de5e00 100644
> --- a/drivers/i2c/busses/Kconfig
> +++ b/drivers/i2c/busses/Kconfig
> @@ -817,13 +817,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 1d00dce77098..01fdf74a5565 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 2cbf9c679aed..b281e0424e3e 100644
> --- a/drivers/i2c/busses/i2c-npcm7xx.c
> +++ b/drivers/i2c/busses/i2c-npcm7xx.c
> @@ -17,6 +17,7 @@
>  #include <linux/mfd/syscon.h>
>  #include <linux/module.h>
>  #include <linux/of.h>
> +#include <linux/of_device.h>
>  #include <linux/platform_device.h>
>  #include <linux/regmap.h>
>  
> @@ -91,7 +92,7 @@ enum i2c_addr {
>  
>  /* init register and default value required to enable module */
>  #define NPCM_I2CSEGCTL			0xE4
> -#define NPCM_I2CSEGCTL_INIT_VAL		0x0333F000
> +#define NPCM_I2CSEGCTL_INIT_VAL		bus->data->segctl_init_val
>  
>  /* Common regs */
>  #define NPCM_I2CSDA			0x00
> @@ -228,8 +229,7 @@ static const int npcm_i2caddr[I2C_NUM_OWN_ADDR] = {
>  #define NPCM_I2CFIF_CTS_CLR_FIFO	BIT(6)
>  #define NPCM_I2CFIF_CTS_SLVRSTR		BIT(7)
>  
> -/* NPCM_I2CTXF_CTL reg fields */
> -#define NPCM_I2CTXF_CTL_TX_THR		GENMASK(4, 0)
> +/* NPCM_I2CTXF_CTL reg field */
>  #define NPCM_I2CTXF_CTL_THR_TXIE	BIT(6)
>  
>  /* NPCM_I2CT_OUT reg fields */
> @@ -238,22 +238,22 @@ static const int npcm_i2caddr[I2C_NUM_OWN_ADDR] = {
>  #define NPCM_I2CT_OUT_T_OUTST		BIT(7)
>  
>  /* NPCM_I2CTXF_STS reg fields */
> -#define NPCM_I2CTXF_STS_TX_BYTES	GENMASK(4, 0)
> +#define NPCM_I2CTXF_STS_TX_BYTES	bus->data->txf_sts_tx_bytes

It's not a clean code to use defines for complex types. It's not a
constant anymore, so just use bus->data->txf_sts_tx_bytes directly.

The same in other places.

>  #define NPCM_I2CTXF_STS_TX_THST		BIT(6)
>  

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 02/11] dt-bindings: i2c: npcm: support NPCM845
  2022-02-20  3:53 ` [PATCH v2 02/11] dt-bindings: i2c: npcm: support NPCM845 Tyrone Ting
@ 2022-02-21  2:36   ` Rob Herring
  2022-02-21  8:31     ` Tyrone Ting
  2022-02-22 17:56   ` Rob Herring
  1 sibling, 1 reply; 31+ messages in thread
From: Rob Herring @ 2022-02-21  2:36 UTC (permalink / raw)
  To: Tyrone Ting
  Cc: tmaimon77, KWLIU, tali.perry1, linux-i2c, digetx, benjaminfair,
	krzysztof.kozlowski, openbmc, JJLIU0, christophe.leroy,
	lukas.bulwahn, tomer.maimon, devicetree, bence98, arnd, sven,
	robh+dt, Avi.Fishman, andriy.shevchenko, semen.protsenko,
	jie.deng, avifishman70, venture, yangyicong, linux-kernel, wsa,
	kfting, tali.perry, olof

On Sun, 20 Feb 2022 11:53:12 +0800, Tyrone Ting wrote:
> From: Tyrone Ting <kfting@nuvoton.com>
> 
> Add compatible and nuvoton,sys-mgr description for NPCM i2c module.
> 
> Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
> Signed-off-by: Tali Perry <tali.perry1@gmail.com>
> ---
>  .../bindings/i2c/nuvoton,npcm7xx-i2c.yaml       | 17 ++++++++++++-----
>  1 file changed, 12 insertions(+), 5 deletions(-)
> 

My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
on your patch (DT_CHECKER_FLAGS is new in v5.13):

yamllint warnings/errors:
./Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml:19:6: [warning] wrong indentation: expected 4 but found 5 (indentation)
./Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml:20:7: [warning] wrong indentation: expected 7 but found 6 (indentation)

dtschema/dtc warnings/errors:

doc reference errors (make refcheckdocs):

See https://patchwork.ozlabs.org/patch/1595125

This check can fail if there are any dependencies. The base for a patch
series is generally the most recent rc1.

If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:

pip3 install dtschema --upgrade

Please check and re-submit.


^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts
  2022-02-20  9:30 ` [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Krzysztof Kozlowski
@ 2022-02-21  8:16   ` Tyrone Ting
  2022-02-21  8:32     ` Krzysztof Kozlowski
  0 siblings, 1 reply; 31+ messages in thread
From: Tyrone Ting @ 2022-02-21  8:16 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: tmaimon77, devicetree, tali.perry1, linux-i2c, digetx,
	benjaminfair, openbmc, JJLIU0, christophe.leroy, lukas.bulwahn,
	tomer.maimon, KWLIU, bence98, arnd, sven, robh+dt, Avi.Fishman,
	andriy.shevchenko, semen.protsenko, jie.deng, avifishman70,
	venture, yangyicong, linux-kernel, wsa, kfting, tali.perry, olof

Hi Krzysztof:

Thank you for your comments and please find my reply next to your comments.

Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> 於 2022年2月20日
週日 下午5:30寫道:
>
> On 20/02/2022 04:53, Tyrone Ting wrote:
> > From: Tyrone Ting <kfting@nuvoton.com>
> >
> > This patchset includes the following fixes:
> >
> > - Add dt-bindings description for NPCM845.
> > - Bug fix for timeout calculation.
> > - Better handling of spurious interrupts.
> > - Fix for event type in slave mode.
> > - Removal of own slave addresses [2:10].
> > - Support for next gen BMC (NPCM845).
> >
> > The NPCM I2C driver is tested on NPCM750 and NPCM845 evaluation boards.
> >
> > Addressed comments from:
> >  - Jonathan Neuschäfer : https://lkml.org/lkml/2022/2/7/670
> >  - Krzysztof Kozlowski : https://lkml.org/lkml/2022/2/7/760
>
> How did you address the ABI change comment? I still see you break the
> ABI with the introduction of a new, required property.
>

I add the new, required property "nuvoton,sys-mgr" in the file
nuvoton-common-npcm7xx.dtsi.
The file nuvoton-common-npcm7xx.dtsi is required by the existing
upstream NPCM devicetree files.
It is also updated and committed in this patch set [PATCH v2 01/11]
arm: dts: add new property for NPCM i2c module.
Please let me know if I misunderstand the meaning of "breaking the ABI".
Thank you again.

>
> Best regards,
> Krzysztof

Best regards,
Tyrone

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 04/11] i2c: npcm: Update gcr property name
  2022-02-20  9:32   ` Krzysztof Kozlowski
@ 2022-02-21  8:29     ` Tyrone Ting
  0 siblings, 0 replies; 31+ messages in thread
From: Tyrone Ting @ 2022-02-21  8:29 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: tmaimon77, devicetree, tali.perry1, linux-i2c, digetx,
	benjaminfair, openbmc, JJLIU0, christophe.leroy, lukas.bulwahn,
	tomer.maimon, KWLIU, bence98, arnd, sven, robh+dt, Avi.Fishman,
	andriy.shevchenko, semen.protsenko, jie.deng, avifishman70,
	venture, yangyicong, linux-kernel, wsa, kfting, tali.perry, olof

Hi Krzysztof:

Thank you for your comments and please find my reply next to your comments.

Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> 於 2022年2月20日
週日 下午5:32寫道:
>
> On 20/02/2022 04:53, Tyrone Ting wrote:
> > From: Tali Perry <tali.perry1@gmail.com>
> >
> > Use a generic name for NPCM system manager reigster.
>
> The subject is not accurate and you entirely skipped in commit msg the
> fact of an ABI break.
>
> You do not update a property name but you change the way of getting GCR
> regmap.
>

I'll change the subject since the patch is to change the way to getting GCR
regmap as you indicated.

About the ABI break, I responded in the discussion thread of
[PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts.

> Best regards,
> Krzysztof

Best regards,
Tyrone

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 02/11] dt-bindings: i2c: npcm: support NPCM845
  2022-02-21  2:36   ` Rob Herring
@ 2022-02-21  8:31     ` Tyrone Ting
  0 siblings, 0 replies; 31+ messages in thread
From: Tyrone Ting @ 2022-02-21  8:31 UTC (permalink / raw)
  To: Rob Herring
  Cc: tmaimon77, KWLIU, tali.perry1, linux-i2c, digetx, benjaminfair,
	krzysztof.kozlowski, openbmc, JJLIU0, christophe.leroy,
	lukas.bulwahn, tomer.maimon, devicetree, bence98, arnd, sven,
	robh+dt, Avi.Fishman, andriy.shevchenko, semen.protsenko,
	jie.deng, avifishman70, venture, yangyicong, linux-kernel, wsa,
	kfting, tali.perry, olof

Hi Rob:

Thank you for your comments and they will be addressed.

Rob Herring <robh@kernel.org> 於 2022年2月21日 週一 上午10:36寫道:

>
> On Sun, 20 Feb 2022 11:53:12 +0800, Tyrone Ting wrote:
> > From: Tyrone Ting <kfting@nuvoton.com>
> >
> > Add compatible and nuvoton,sys-mgr description for NPCM i2c module.
> >
> > Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
> > Signed-off-by: Tali Perry <tali.perry1@gmail.com>
> > ---
> >  .../bindings/i2c/nuvoton,npcm7xx-i2c.yaml       | 17 ++++++++++++-----
> >  1 file changed, 12 insertions(+), 5 deletions(-)
> >
>
> My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
> on your patch (DT_CHECKER_FLAGS is new in v5.13):
>
> yamllint warnings/errors:
> ./Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml:19:6: [warning] wrong indentation: expected 4 but found 5 (indentation)
> ./Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml:20:7: [warning] wrong indentation: expected 7 but found 6 (indentation)
>
> dtschema/dtc warnings/errors:
>
> doc reference errors (make refcheckdocs):
>
> See https://patchwork.ozlabs.org/patch/1595125
>
> This check can fail if there are any dependencies. The base for a patch
> series is generally the most recent rc1.
>
> If you already ran 'make dt_binding_check' and didn't see the above
> error(s), then make sure 'yamllint' is installed and dt-schema is up to
> date:
>
> pip3 install dtschema --upgrade
>
> Please check and re-submit.
>

Best regards,
Tyrone

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts
  2022-02-21  8:16   ` Tyrone Ting
@ 2022-02-21  8:32     ` Krzysztof Kozlowski
  2022-02-21  8:47       ` Tyrone Ting
  0 siblings, 1 reply; 31+ messages in thread
From: Krzysztof Kozlowski @ 2022-02-21  8:32 UTC (permalink / raw)
  To: Tyrone Ting
  Cc: tmaimon77, devicetree, tali.perry1, linux-i2c, digetx,
	benjaminfair, openbmc, JJLIU0, christophe.leroy, lukas.bulwahn,
	tomer.maimon, KWLIU, bence98, arnd, sven, robh+dt, Avi.Fishman,
	andriy.shevchenko, semen.protsenko, jie.deng, avifishman70,
	venture, yangyicong, linux-kernel, wsa, kfting, tali.perry, olof

On 21/02/2022 09:16, Tyrone Ting wrote:
> Hi Krzysztof:
> 
> Thank you for your comments and please find my reply next to your comments.
> 
> Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> 於 2022年2月20日
> 週日 下午5:30寫道:
>>
>> On 20/02/2022 04:53, Tyrone Ting wrote:
>>> From: Tyrone Ting <kfting@nuvoton.com>
>>>
>>> This patchset includes the following fixes:
>>>
>>> - Add dt-bindings description for NPCM845.
>>> - Bug fix for timeout calculation.
>>> - Better handling of spurious interrupts.
>>> - Fix for event type in slave mode.
>>> - Removal of own slave addresses [2:10].
>>> - Support for next gen BMC (NPCM845).
>>>
>>> The NPCM I2C driver is tested on NPCM750 and NPCM845 evaluation boards.
>>>
>>> Addressed comments from:
>>>  - Jonathan Neuschäfer : https://lkml.org/lkml/2022/2/7/670
>>>  - Krzysztof Kozlowski : https://lkml.org/lkml/2022/2/7/760
>>
>> How did you address the ABI change comment? I still see you break the
>> ABI with the introduction of a new, required property.
>>
> 
> I add the new, required property "nuvoton,sys-mgr" in the file
> nuvoton-common-npcm7xx.dtsi.
> The file nuvoton-common-npcm7xx.dtsi is required by the existing
> upstream NPCM devicetree files.
> It is also updated and committed in this patch set [PATCH v2 01/11]
> arm: dts: add new property for NPCM i2c module.
> Please let me know if I misunderstand the meaning of "breaking the ABI".
> Thank you again.

Breaking the ABI means that old DTS stop working with new kernel. Your
change breaks old (and out-of-tree) DTS.

What is more, your change is not bisectable because DTS goes via
separate branch or tree than driver change.

You need to keep old code as fallback, if getting nuvoton,sys-mgr fails.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 11/11] i2c: npcm: Support NPCM845
  2022-02-20  9:36   ` Krzysztof Kozlowski
@ 2022-02-21  8:33     ` Tyrone Ting
  0 siblings, 0 replies; 31+ messages in thread
From: Tyrone Ting @ 2022-02-21  8:33 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: tmaimon77, devicetree, tali.perry1, linux-i2c, digetx,
	benjaminfair, openbmc, JJLIU0, christophe.leroy, lukas.bulwahn,
	tomer.maimon, KWLIU, bence98, arnd, sven, robh+dt, Avi.Fishman,
	andriy.shevchenko, semen.protsenko, jie.deng, avifishman70,
	venture, yangyicong, linux-kernel, wsa, kfting, tali.perry, olof

Hi Krzysztof:

Thank you for your comments and they'll be addressed.

Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> 於 2022年2月20日
週日 下午5:36寫道:
>
> On 20/02/2022 04:53, Tyrone Ting wrote:
> > From: Tyrone Ting <kfting@nuvoton.com>
> >
> > Add NPCM8XX I2C support.
> > The NPCM8XX uses a similar i2c module as NPCM7XX.
> > The internal HW FIFO is larger in NPCM8XX.
> >
> > Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
> > Signed-off-by: Tali Perry <tali.perry1@gmail.com>
> > ---
> >  drivers/i2c/busses/Kconfig       |  8 +--
> >  drivers/i2c/busses/Makefile      |  2 +-
> >  drivers/i2c/busses/i2c-npcm7xx.c | 87 ++++++++++++++++++++++----------
> >  3 files changed, 66 insertions(+), 31 deletions(-)
> >
> > diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
> > index 42da31c1ab70..ab9ee2de5e00 100644
> > --- a/drivers/i2c/busses/Kconfig
> > +++ b/drivers/i2c/busses/Kconfig
> > @@ -817,13 +817,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 1d00dce77098..01fdf74a5565 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 2cbf9c679aed..b281e0424e3e 100644
> > --- a/drivers/i2c/busses/i2c-npcm7xx.c
> > +++ b/drivers/i2c/busses/i2c-npcm7xx.c
> > @@ -17,6 +17,7 @@
> >  #include <linux/mfd/syscon.h>
> >  #include <linux/module.h>
> >  #include <linux/of.h>
> > +#include <linux/of_device.h>
> >  #include <linux/platform_device.h>
> >  #include <linux/regmap.h>
> >
> > @@ -91,7 +92,7 @@ enum i2c_addr {
> >
> >  /* init register and default value required to enable module */
> >  #define NPCM_I2CSEGCTL                       0xE4
> > -#define NPCM_I2CSEGCTL_INIT_VAL              0x0333F000
> > +#define NPCM_I2CSEGCTL_INIT_VAL              bus->data->segctl_init_val
> >
> >  /* Common regs */
> >  #define NPCM_I2CSDA                  0x00
> > @@ -228,8 +229,7 @@ static const int npcm_i2caddr[I2C_NUM_OWN_ADDR] = {
> >  #define NPCM_I2CFIF_CTS_CLR_FIFO     BIT(6)
> >  #define NPCM_I2CFIF_CTS_SLVRSTR              BIT(7)
> >
> > -/* NPCM_I2CTXF_CTL reg fields */
> > -#define NPCM_I2CTXF_CTL_TX_THR               GENMASK(4, 0)
> > +/* NPCM_I2CTXF_CTL reg field */
> >  #define NPCM_I2CTXF_CTL_THR_TXIE     BIT(6)
> >
> >  /* NPCM_I2CT_OUT reg fields */
> > @@ -238,22 +238,22 @@ static const int npcm_i2caddr[I2C_NUM_OWN_ADDR] = {
> >  #define NPCM_I2CT_OUT_T_OUTST                BIT(7)
> >
> >  /* NPCM_I2CTXF_STS reg fields */
> > -#define NPCM_I2CTXF_STS_TX_BYTES     GENMASK(4, 0)
> > +#define NPCM_I2CTXF_STS_TX_BYTES     bus->data->txf_sts_tx_bytes
>
> It's not a clean code to use defines for complex types. It's not a
> constant anymore, so just use bus->data->txf_sts_tx_bytes directly.
>
> The same in other places.
>
> >  #define NPCM_I2CTXF_STS_TX_THST              BIT(6)
> >
>
> Best regards,
> Krzysztof

Best regards,
Tyrone

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts
  2022-02-21  8:32     ` Krzysztof Kozlowski
@ 2022-02-21  8:47       ` Tyrone Ting
  2022-03-01 19:45         ` Wolfram Sang
  0 siblings, 1 reply; 31+ messages in thread
From: Tyrone Ting @ 2022-02-21  8:47 UTC (permalink / raw)
  To: Krzysztof Kozlowski
  Cc: tmaimon77, devicetree, tali.perry1, linux-i2c, digetx,
	benjaminfair, openbmc, JJLIU0, christophe.leroy, lukas.bulwahn,
	tomer.maimon, KWLIU, bence98, arnd, sven, robh+dt, Avi.Fishman,
	andriy.shevchenko, semen.protsenko, jie.deng, avifishman70,
	venture, yangyicong, linux-kernel, wsa, kfting, tali.perry, olof

Hi Krzysztof:

Got it and thank you for your comments.

I'll keep old code as fallback, if getting nuvoton,sys-mgr fails as
you point out.

Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> 於 2022年2月21日
週一 下午4:32寫道:
>
> On 21/02/2022 09:16, Tyrone Ting wrote:
> > Hi Krzysztof:
> >
> > Thank you for your comments and please find my reply next to your comments.
> >
> > Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> 於 2022年2月20日
> > 週日 下午5:30寫道:
> >>
> >> On 20/02/2022 04:53, Tyrone Ting wrote:
> >>> From: Tyrone Ting <kfting@nuvoton.com>
> >>>
> >>> This patchset includes the following fixes:
> >>>
> >>> - Add dt-bindings description for NPCM845.
> >>> - Bug fix for timeout calculation.
> >>> - Better handling of spurious interrupts.
> >>> - Fix for event type in slave mode.
> >>> - Removal of own slave addresses [2:10].
> >>> - Support for next gen BMC (NPCM845).
> >>>
> >>> The NPCM I2C driver is tested on NPCM750 and NPCM845 evaluation boards.
> >>>
> >>> Addressed comments from:
> >>>  - Jonathan Neuschäfer : https://lkml.org/lkml/2022/2/7/670
> >>>  - Krzysztof Kozlowski : https://lkml.org/lkml/2022/2/7/760
> >>
> >> How did you address the ABI change comment? I still see you break the
> >> ABI with the introduction of a new, required property.
> >>
> >
> > I add the new, required property "nuvoton,sys-mgr" in the file
> > nuvoton-common-npcm7xx.dtsi.
> > The file nuvoton-common-npcm7xx.dtsi is required by the existing
> > upstream NPCM devicetree files.
> > It is also updated and committed in this patch set [PATCH v2 01/11]
> > arm: dts: add new property for NPCM i2c module.
> > Please let me know if I misunderstand the meaning of "breaking the ABI".
> > Thank you again.
>
> Breaking the ABI means that old DTS stop working with new kernel. Your
> change breaks old (and out-of-tree) DTS.
>
> What is more, your change is not bisectable because DTS goes via
> separate branch or tree than driver change.
>
> You need to keep old code as fallback, if getting nuvoton,sys-mgr fails.
>
> Best regards,
> Krzysztof

Best regards,
Tyrone

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 05/11] i2c: npcm: Remove unused clock node
  2022-02-20  3:53 ` [PATCH v2 05/11] i2c: npcm: Remove unused clock node Tyrone Ting
@ 2022-02-21 11:49   ` Jonathan Neuschäfer
  2022-02-22  2:15     ` Tyrone Ting
  0 siblings, 1 reply; 31+ messages in thread
From: Jonathan Neuschäfer @ 2022-02-21 11:49 UTC (permalink / raw)
  To: Tyrone Ting
  Cc: tmaimon77, devicetree, tali.perry1, linux-i2c, digetx,
	benjaminfair, krzysztof.kozlowski, openbmc, JJLIU0,
	christophe.leroy, lukas.bulwahn, tomer.maimon, KWLIU, bence98,
	arnd, sven, robh+dt, Avi.Fishman, andriy.shevchenko,
	semen.protsenko, jie.deng, avifishman70, venture, yangyicong,
	linux-kernel, wsa, kfting, tali.perry, olof

[-- Attachment #1: Type: text/plain, Size: 1739 bytes --]

On Sun, Feb 20, 2022 at 11:53:15AM +0800, Tyrone Ting wrote:
> From: Tali Perry <tali.perry1@gmail.com>
> 
> Remove unused npcm750-clk node.

You're not actually removing a node, for example in the sense of removing a
devicetree node from a devicetree.

So, I think "Remove unused variable clk_regmap." would be a better
description.

> 
> Fixes: 56a1485b102e ("i2c: npcm7xx: Add Nuvoton NPCM I2C controller driver")
> Signed-off-by: Tali Perry <tali.perry1@gmail.com>
> Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
> ---
>  drivers/i2c/busses/i2c-npcm7xx.c | 5 -----
>  1 file changed, 5 deletions(-)
> 
> diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c
> index a51db3f50274..9ccb9958945e 100644
> --- a/drivers/i2c/busses/i2c-npcm7xx.c
> +++ b/drivers/i2c/busses/i2c-npcm7xx.c
> @@ -2233,7 +2233,6 @@ static int npcm_i2c_probe_bus(struct platform_device *pdev)
>  	struct i2c_adapter *adap;
>  	struct clk *i2c_clk;
>  	static struct regmap *gcr_regmap;
> -	static struct regmap *clk_regmap;
>  	int irq;
>  	int ret;
>  	struct device_node *np = pdev->dev.of_node;
> @@ -2256,10 +2255,6 @@ static int npcm_i2c_probe_bus(struct platform_device *pdev)
>  		return PTR_ERR(gcr_regmap);
>  	regmap_write(gcr_regmap, NPCM_I2CSEGCTL, NPCM_I2CSEGCTL_INIT_VAL);
>  
> -	clk_regmap = syscon_regmap_lookup_by_compatible("nuvoton,npcm750-clk");
> -	if (IS_ERR(clk_regmap))
> -		return PTR_ERR(clk_regmap);
> -

The change itself looks good to me,

Reviewed-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>

>  	bus->reg = devm_platform_ioremap_resource(pdev, 0);
>  	if (IS_ERR(bus->reg))
>  		return PTR_ERR(bus->reg);
> -- 
> 2.17.1
> 


Thanks,
Jonathan

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 08/11] i2c: npcm: Correct register access width
  2022-02-20  3:53 ` [PATCH v2 08/11] i2c: npcm: Correct register access width Tyrone Ting
@ 2022-02-21 11:55   ` Jonathan Neuschäfer
  0 siblings, 0 replies; 31+ messages in thread
From: Jonathan Neuschäfer @ 2022-02-21 11:55 UTC (permalink / raw)
  To: Tyrone Ting
  Cc: tmaimon77, devicetree, tali.perry1, linux-i2c, digetx,
	benjaminfair, krzysztof.kozlowski, openbmc, JJLIU0,
	christophe.leroy, lukas.bulwahn, tomer.maimon, KWLIU, bence98,
	arnd, sven, robh+dt, Avi.Fishman, andriy.shevchenko,
	semen.protsenko, jie.deng, avifishman70, venture, yangyicong,
	linux-kernel, wsa, kfting, tali.perry, olof

[-- Attachment #1: Type: text/plain, Size: 1475 bytes --]

On Sun, Feb 20, 2022 at 11:53:18AM +0800, Tyrone Ting wrote:
> From: Tyrone Ting <kfting@nuvoton.com>
> 
> Use ioread8 instead of ioread32 to access the SMBnCTL3 register since
> the register is only 8-bit wide.
> 
> Fixes: 56a1485b102e ("i2c: npcm7xx: Add Nuvoton NPCM I2C controller driver")
> Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
> Signed-off-by: Tali Perry <tali.perry1@gmail.com>
> ---
>  drivers/i2c/busses/i2c-npcm7xx.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c
> index ee4757eff4b3..4715afcf9ac4 100644
> --- a/drivers/i2c/busses/i2c-npcm7xx.c
> +++ b/drivers/i2c/busses/i2c-npcm7xx.c
> @@ -360,14 +360,14 @@ static int npcm_i2c_get_SCL(struct i2c_adapter *_adap)
>  {
>  	struct npcm_i2c *bus = container_of(_adap, struct npcm_i2c, adap);
>  
> -	return !!(I2CCTL3_SCL_LVL & ioread32(bus->reg + NPCM_I2CCTL3));
> +	return !!(I2CCTL3_SCL_LVL & ioread8(bus->reg + NPCM_I2CCTL3));
>  }
>  
>  static int npcm_i2c_get_SDA(struct i2c_adapter *_adap)
>  {
>  	struct npcm_i2c *bus = container_of(_adap, struct npcm_i2c, adap);
>  
> -	return !!(I2CCTL3_SDA_LVL & ioread32(bus->reg + NPCM_I2CCTL3));
> +	return !!(I2CCTL3_SDA_LVL & ioread8(bus->reg + NPCM_I2CCTL3));
>  }
>  
>  static inline u16 npcm_i2c_get_index(struct npcm_i2c *bus)


Reviewed-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>


Thanks,
Jonathan

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 05/11] i2c: npcm: Remove unused clock node
  2022-02-21 11:49   ` Jonathan Neuschäfer
@ 2022-02-22  2:15     ` Tyrone Ting
  2022-02-22 15:58       ` Jonathan Neuschäfer
  0 siblings, 1 reply; 31+ messages in thread
From: Tyrone Ting @ 2022-02-22  2:15 UTC (permalink / raw)
  To: Jonathan Neuschäfer
  Cc: tmaimon77, devicetree, tali.perry1, linux-i2c, digetx,
	benjaminfair, krzysztof.kozlowski, openbmc, JJLIU0,
	christophe.leroy, lukas.bulwahn, tomer.maimon, KWLIU, bence98,
	arnd, sven, robh+dt, Avi.Fishman, andriy.shevchenko,
	semen.protsenko, jie.deng, avifishman70, venture, yangyicong,
	linux-kernel, wsa, kfting, tali.perry, olof

Hi Jonathan:

Thank you for your comments and please find my reply next to your comments.

Jonathan Neuschäfer <j.neuschaefer@gmx.net> 於 2022年2月21日 週一 下午7:49寫道:
>
> On Sun, Feb 20, 2022 at 11:53:15AM +0800, Tyrone Ting wrote:
> > From: Tali Perry <tali.perry1@gmail.com>
> >
> > Remove unused npcm750-clk node.
>
> You're not actually removing a node, for example in the sense of removing a
> devicetree node from a devicetree.
>
> So, I think "Remove unused variable clk_regmap." would be a better
> description.
>

May I modify the description according to your input and attach
"Reviewed-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>"
onto this commit in the next version of the patch set?

> >
> > Fixes: 56a1485b102e ("i2c: npcm7xx: Add Nuvoton NPCM I2C controller driver")
> > Signed-off-by: Tali Perry <tali.perry1@gmail.com>
> > Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
> > ---
> >  drivers/i2c/busses/i2c-npcm7xx.c | 5 -----
> >  1 file changed, 5 deletions(-)
> >
> > diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c
> > index a51db3f50274..9ccb9958945e 100644
> > --- a/drivers/i2c/busses/i2c-npcm7xx.c
> > +++ b/drivers/i2c/busses/i2c-npcm7xx.c
> > @@ -2233,7 +2233,6 @@ static int npcm_i2c_probe_bus(struct platform_device *pdev)
> >       struct i2c_adapter *adap;
> >       struct clk *i2c_clk;
> >       static struct regmap *gcr_regmap;
> > -     static struct regmap *clk_regmap;
> >       int irq;
> >       int ret;
> >       struct device_node *np = pdev->dev.of_node;
> > @@ -2256,10 +2255,6 @@ static int npcm_i2c_probe_bus(struct platform_device *pdev)
> >               return PTR_ERR(gcr_regmap);
> >       regmap_write(gcr_regmap, NPCM_I2CSEGCTL, NPCM_I2CSEGCTL_INIT_VAL);
> >
> > -     clk_regmap = syscon_regmap_lookup_by_compatible("nuvoton,npcm750-clk");
> > -     if (IS_ERR(clk_regmap))
> > -             return PTR_ERR(clk_regmap);
> > -
>
> The change itself looks good to me,
>
> Reviewed-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>
>
> >       bus->reg = devm_platform_ioremap_resource(pdev, 0);
> >       if (IS_ERR(bus->reg))
> >               return PTR_ERR(bus->reg);
> > --
> > 2.17.1
> >
>
>
> Thanks,
> Jonathan

Best regards,
Tyrone

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 05/11] i2c: npcm: Remove unused clock node
  2022-02-22  2:15     ` Tyrone Ting
@ 2022-02-22 15:58       ` Jonathan Neuschäfer
  2022-02-23  3:38         ` Tyrone Ting
  0 siblings, 1 reply; 31+ messages in thread
From: Jonathan Neuschäfer @ 2022-02-22 15:58 UTC (permalink / raw)
  To: Tyrone Ting
  Cc: tmaimon77, devicetree, tali.perry1, linux-i2c, digetx,
	benjaminfair, krzysztof.kozlowski, openbmc, JJLIU0,
	christophe.leroy, lukas.bulwahn, tomer.maimon, KWLIU, bence98,
	arnd, sven, Jonathan Neuschäfer, robh+dt, Avi.Fishman,
	andriy.shevchenko, semen.protsenko, jie.deng, avifishman70,
	venture, yangyicong, linux-kernel, wsa, kfting, tali.perry, olof

[-- Attachment #1: Type: text/plain, Size: 866 bytes --]

On Tue, Feb 22, 2022 at 10:15:04AM +0800, Tyrone Ting wrote:
> Hi Jonathan:
> 
> Thank you for your comments and please find my reply next to your comments.
> 
> Jonathan Neuschäfer <j.neuschaefer@gmx.net> 於 2022年2月21日 週一 下午7:49寫道:
> >
> > On Sun, Feb 20, 2022 at 11:53:15AM +0800, Tyrone Ting wrote:
> > > From: Tali Perry <tali.perry1@gmail.com>
> > >
> > > Remove unused npcm750-clk node.
> >
> > You're not actually removing a node, for example in the sense of removing a
> > devicetree node from a devicetree.
> >
> > So, I think "Remove unused variable clk_regmap." would be a better
> > description.
> >
> 
> May I modify the description according to your input and attach
> "Reviewed-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>"
> onto this commit in the next version of the patch set?

Yes!


Jonathan

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 02/11] dt-bindings: i2c: npcm: support NPCM845
  2022-02-20  3:53 ` [PATCH v2 02/11] dt-bindings: i2c: npcm: support NPCM845 Tyrone Ting
  2022-02-21  2:36   ` Rob Herring
@ 2022-02-22 17:56   ` Rob Herring
  2022-02-23  3:41     ` Tyrone Ting
  1 sibling, 1 reply; 31+ messages in thread
From: Rob Herring @ 2022-02-22 17:56 UTC (permalink / raw)
  To: Tyrone Ting
  Cc: tmaimon77, devicetree, tali.perry1, linux-i2c, digetx,
	benjaminfair, krzysztof.kozlowski, openbmc, JJLIU0,
	christophe.leroy, lukas.bulwahn, tomer.maimon, KWLIU, bence98,
	arnd, sven, Avi.Fishman, andriy.shevchenko, semen.protsenko,
	jie.deng, avifishman70, venture, yangyicong, linux-kernel, wsa,
	kfting, tali.perry, olof

On Sun, Feb 20, 2022 at 11:53:12AM +0800, Tyrone Ting wrote:
> From: Tyrone Ting <kfting@nuvoton.com>
> 
> Add compatible and nuvoton,sys-mgr description for NPCM i2c module.
> 
> Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
> Signed-off-by: Tali Perry <tali.perry1@gmail.com>
> ---
>  .../bindings/i2c/nuvoton,npcm7xx-i2c.yaml       | 17 ++++++++++++-----
>  1 file changed, 12 insertions(+), 5 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml b/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml
> index 128444942aec..809c51ac32fe 100644
> --- a/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml
> +++ b/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml
> @@ -7,17 +7,18 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
>  title: nuvoton NPCM7XX I2C Controller Device Tree Bindings
>  
>  description: |
> -  The NPCM750x includes sixteen I2C bus controllers. All Controllers support
> -  both master and slave mode. Each controller can switch between master and slave
> -  at run time (i.e. IPMB mode). Each controller has two 16 byte HW FIFO for TX and
> -  RX.
> +  I2C bus controllers of the NPCM series support both master and
> +  slave mode. Each controller can switch between master and slave at run time
> +  (i.e. IPMB mode). HW FIFO for TX and RX are supported.
>  
>  maintainers:
>    - Tali Perry <tali.perry1@gmail.com>
>  
>  properties:
>    compatible:
> -    const: nuvoton,npcm750-i2c
> +     enum:
> +      - nuvoton,npcm750-i2c
> +      - nuvoton,npcm845-i2c
>  
>    reg:
>      maxItems: 1
> @@ -36,11 +37,16 @@ properties:
>      default: 100000
>      enum: [100000, 400000, 1000000]
>  
> +  nuvoton,sys-mgr:
> +    $ref: "/schemas/types.yaml#/definitions/phandle"
> +    description: The phandle of system manager register node.
> +
>  required:
>    - compatible
>    - reg
>    - interrupts
>    - clocks
> +  - nuvoton,sys-mgr

You can't make nuvoton,sys-mgr required for existing users. You can add 
an if/then schema for nuvoton,npcm845-i2c if you want to make it 
required in that case.

Rob

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 05/11] i2c: npcm: Remove unused clock node
  2022-02-22 15:58       ` Jonathan Neuschäfer
@ 2022-02-23  3:38         ` Tyrone Ting
  0 siblings, 0 replies; 31+ messages in thread
From: Tyrone Ting @ 2022-02-23  3:38 UTC (permalink / raw)
  To: Jonathan Neuschäfer
  Cc: tmaimon77, devicetree, tali.perry1, linux-i2c, digetx,
	benjaminfair, krzysztof.kozlowski, openbmc, JJLIU0,
	christophe.leroy, lukas.bulwahn, tomer.maimon, KWLIU, bence98,
	arnd, sven, robh+dt, Avi.Fishman, andriy.shevchenko,
	semen.protsenko, jie.deng, avifishman70, venture, yangyicong,
	linux-kernel, wsa, kfting, tali.perry, olof

Hi Jonathan:

Got it and thank you.

Jonathan Neuschäfer <j.neuschaefer@gmx.net> 於 2022年2月22日 週二 下午11:59寫道:
>
> On Tue, Feb 22, 2022 at 10:15:04AM +0800, Tyrone Ting wrote:
> > Hi Jonathan:
> >
> > Thank you for your comments and please find my reply next to your comments.
> >
> > Jonathan Neuschäfer <j.neuschaefer@gmx.net> 於 2022年2月21日 週一 下午7:49寫道:
> > >
> > > On Sun, Feb 20, 2022 at 11:53:15AM +0800, Tyrone Ting wrote:
> > > > From: Tali Perry <tali.perry1@gmail.com>
> > > >
> > > > Remove unused npcm750-clk node.
> > >
> > > You're not actually removing a node, for example in the sense of removing a
> > > devicetree node from a devicetree.
> > >
> > > So, I think "Remove unused variable clk_regmap." would be a better
> > > description.
> > >
> >
> > May I modify the description according to your input and attach
> > "Reviewed-by: Jonathan Neuschäfer <j.neuschaefer@gmx.net>"
> > onto this commit in the next version of the patch set?
>
> Yes!
>
>
> Jonathan

Best regards,
Tyrone

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 02/11] dt-bindings: i2c: npcm: support NPCM845
  2022-02-22 17:56   ` Rob Herring
@ 2022-02-23  3:41     ` Tyrone Ting
  0 siblings, 0 replies; 31+ messages in thread
From: Tyrone Ting @ 2022-02-23  3:41 UTC (permalink / raw)
  To: Rob Herring
  Cc: tmaimon77, devicetree, tali.perry1, linux-i2c, digetx,
	benjaminfair, krzysztof.kozlowski, openbmc, JJLIU0,
	christophe.leroy, lukas.bulwahn, tomer.maimon, KWLIU, bence98,
	arnd, sven, Avi.Fishman, andriy.shevchenko, semen.protsenko,
	jie.deng, avifishman70, venture, yangyicong, linux-kernel, wsa,
	kfting, tali.perry, olof

Hi Rob:

Thank you for your comment and it'll be addressed.

Rob Herring <robh@kernel.org> 於 2022年2月23日 週三 上午1:56寫道:
>
> On Sun, Feb 20, 2022 at 11:53:12AM +0800, Tyrone Ting wrote:
> > From: Tyrone Ting <kfting@nuvoton.com>
> >
> > Add compatible and nuvoton,sys-mgr description for NPCM i2c module.
> >
> > Signed-off-by: Tyrone Ting <kfting@nuvoton.com>
> > Signed-off-by: Tali Perry <tali.perry1@gmail.com>
> > ---
> >  .../bindings/i2c/nuvoton,npcm7xx-i2c.yaml       | 17 ++++++++++++-----
> >  1 file changed, 12 insertions(+), 5 deletions(-)
> >
> > diff --git a/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml b/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml
> > index 128444942aec..809c51ac32fe 100644
> > --- a/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml
> > +++ b/Documentation/devicetree/bindings/i2c/nuvoton,npcm7xx-i2c.yaml
> > @@ -7,17 +7,18 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
> >  title: nuvoton NPCM7XX I2C Controller Device Tree Bindings
> >
> >  description: |
> > -  The NPCM750x includes sixteen I2C bus controllers. All Controllers support
> > -  both master and slave mode. Each controller can switch between master and slave
> > -  at run time (i.e. IPMB mode). Each controller has two 16 byte HW FIFO for TX and
> > -  RX.
> > +  I2C bus controllers of the NPCM series support both master and
> > +  slave mode. Each controller can switch between master and slave at run time
> > +  (i.e. IPMB mode). HW FIFO for TX and RX are supported.
> >
> >  maintainers:
> >    - Tali Perry <tali.perry1@gmail.com>
> >
> >  properties:
> >    compatible:
> > -    const: nuvoton,npcm750-i2c
> > +     enum:
> > +      - nuvoton,npcm750-i2c
> > +      - nuvoton,npcm845-i2c
> >
> >    reg:
> >      maxItems: 1
> > @@ -36,11 +37,16 @@ properties:
> >      default: 100000
> >      enum: [100000, 400000, 1000000]
> >
> > +  nuvoton,sys-mgr:
> > +    $ref: "/schemas/types.yaml#/definitions/phandle"
> > +    description: The phandle of system manager register node.
> > +
> >  required:
> >    - compatible
> >    - reg
> >    - interrupts
> >    - clocks
> > +  - nuvoton,sys-mgr
>
> You can't make nuvoton,sys-mgr required for existing users. You can add
> an if/then schema for nuvoton,npcm845-i2c if you want to make it
> required in that case.
>
> Rob

Best regards,
Tyrone

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts
  2022-02-21  8:47       ` Tyrone Ting
@ 2022-03-01 19:45         ` Wolfram Sang
  2022-03-02 12:53           ` Tyrone Ting
  0 siblings, 1 reply; 31+ messages in thread
From: Wolfram Sang @ 2022-03-01 19:45 UTC (permalink / raw)
  To: Tyrone Ting
  Cc: tmaimon77, devicetree, tali.perry1, linux-i2c, digetx,
	benjaminfair, Krzysztof Kozlowski, openbmc, JJLIU0,
	christophe.leroy, lukas.bulwahn, tomer.maimon, KWLIU, bence98,
	arnd, sven, robh+dt, Avi.Fishman, andriy.shevchenko,
	semen.protsenko, jie.deng, avifishman70, venture, yangyicong,
	linux-kernel, kfting, tali.perry, olof

[-- Attachment #1: Type: text/plain, Size: 286 bytes --]


> I'll keep old code as fallback, if getting nuvoton,sys-mgr fails as
> you point out.

Yeah, fallback is much needed. And if you implement it, then you can
also split the series into two. One for the DTS changes and one for the
I2C changes. That would make upstreaming a lot easier.


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts
  2022-03-01 19:45         ` Wolfram Sang
@ 2022-03-02 12:53           ` Tyrone Ting
  0 siblings, 0 replies; 31+ messages in thread
From: Tyrone Ting @ 2022-03-02 12:53 UTC (permalink / raw)
  To: Wolfram Sang, Tyrone Ting, Krzysztof Kozlowski, avifishman70,
	tmaimon77, tali.perry1, venture, yuenn, benjaminfair, robh+dt,
	semen.protsenko, yangyicong, jie.deng, sven, bence98,
	christophe.leroy, lukas.bulwahn, olof, arnd, digetx,
	andriy.shevchenko, tali.perry, Avi.Fishman, tomer.maimon, KWLIU,
	JJLIU0, kfting, openbmc, linux-i2c, devicetree, linux-kernel

Hi Wolfram:

Thank you for your comment and it'll be addressed.

Wolfram Sang <wsa@kernel.org> 於 2022年3月2日 週三 上午3:45寫道:
>
>
> > I'll keep old code as fallback, if getting nuvoton,sys-mgr fails as
> > you point out.
>
> Yeah, fallback is much needed. And if you implement it, then you can
> also split the series into two. One for the DTS changes and one for the
> I2C changes. That would make upstreaming a lot easier.
>

Regards,
Tyrone

^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2022-03-02 22:10 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-20  3:53 [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Tyrone Ting
2022-02-20  3:53 ` [PATCH v2 01/11] arm: dts: add new property for NPCM i2c module Tyrone Ting
2022-02-20  3:53 ` [PATCH v2 02/11] dt-bindings: i2c: npcm: support NPCM845 Tyrone Ting
2022-02-21  2:36   ` Rob Herring
2022-02-21  8:31     ` Tyrone Ting
2022-02-22 17:56   ` Rob Herring
2022-02-23  3:41     ` Tyrone Ting
2022-02-20  3:53 ` [PATCH v2 03/11] i2c: npcm: Fix client address calculation Tyrone Ting
2022-02-20  3:53 ` [PATCH v2 04/11] i2c: npcm: Update gcr property name Tyrone Ting
2022-02-20  9:32   ` Krzysztof Kozlowski
2022-02-21  8:29     ` Tyrone Ting
2022-02-20  3:53 ` [PATCH v2 05/11] i2c: npcm: Remove unused clock node Tyrone Ting
2022-02-21 11:49   ` Jonathan Neuschäfer
2022-02-22  2:15     ` Tyrone Ting
2022-02-22 15:58       ` Jonathan Neuschäfer
2022-02-23  3:38         ` Tyrone Ting
2022-02-20  3:53 ` [PATCH v2 06/11] i2c: npcm: Fix timeout calculation Tyrone Ting
2022-02-20  3:53 ` [PATCH v2 07/11] i2c: npcm: Add tx complete counter Tyrone Ting
2022-02-20  3:53 ` [PATCH v2 08/11] i2c: npcm: Correct register access width Tyrone Ting
2022-02-21 11:55   ` Jonathan Neuschäfer
2022-02-20  3:53 ` [PATCH v2 09/11] i2c: npcm: Handle spurious interrupts Tyrone Ting
2022-02-20  3:53 ` [PATCH v2 10/11] i2c: npcm: Remove own slave addresses 2:10 Tyrone Ting
2022-02-20  3:53 ` [PATCH v2 11/11] i2c: npcm: Support NPCM845 Tyrone Ting
2022-02-20  9:36   ` Krzysztof Kozlowski
2022-02-21  8:33     ` Tyrone Ting
2022-02-20  9:30 ` [PATCH v2 00/11] i2c: npcm: Bug fixes timeout, spurious interrupts Krzysztof Kozlowski
2022-02-21  8:16   ` Tyrone Ting
2022-02-21  8:32     ` Krzysztof Kozlowski
2022-02-21  8:47       ` Tyrone Ting
2022-03-01 19:45         ` Wolfram Sang
2022-03-02 12:53           ` Tyrone Ting

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).