* [PATCH v9 0/4] RTL9300 support for reboot and i2c
@ 2024-11-06 0:18 Chris Packham
2024-11-06 0:18 ` [PATCH v9 1/4] dt-bindings: mfd: Add Realtek RTL9300 switch peripherals Chris Packham
` (3 more replies)
0 siblings, 4 replies; 11+ messages in thread
From: Chris Packham @ 2024-11-06 0:18 UTC (permalink / raw)
To: lee, robh, krzk+dt, conor+dt, tsbogend, andi.shyti
Cc: devicetree, linux-kernel, linux-mips, linux-i2c, Chris Packham
The following patches from earlier rounds of this series have already been applied
- https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git/commit/?h=for-next&id=e7af7d13316dc5e2293c4f777f71bd8331f5d7a5
- https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.git/commit/?h=for-next&id=ce38cdc908557953604ffb0a91ef5ae3fbdf1c6b
- https://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux.git/commit/?h=i2c/i2c-host&id=9114f5a4e63edd5ab1ba453799da335237cfc6f1
There may be complaints from some of the automated checkers about the mfd
dt-binding patch until it shows up in the same tree as the i2c binding that is
referred to.
Chris Packham (4):
dt-bindings: mfd: Add Realtek RTL9300 switch peripherals
mips: dts: realtek: Add syscon-reboot node
mips: dts: realtek: Add I2C controllers
i2c: Add driver for the RTL9300 I2C controller
.../bindings/mfd/realtek,rtl9301-switch.yaml | 114 +++++
MAINTAINERS | 7 +
.../cameo-rtl9302c-2x-rtl8224-2xge.dts | 2 +-
arch/mips/boot/dts/realtek/rtl9302c.dtsi | 15 +
arch/mips/boot/dts/realtek/rtl930x.dtsi | 29 ++
drivers/i2c/busses/Kconfig | 10 +
drivers/i2c/busses/Makefile | 1 +
drivers/i2c/busses/i2c-rtl9300.c | 423 ++++++++++++++++++
8 files changed, 600 insertions(+), 1 deletion(-)
create mode 100644 Documentation/devicetree/bindings/mfd/realtek,rtl9301-switch.yaml
create mode 100644 arch/mips/boot/dts/realtek/rtl9302c.dtsi
create mode 100644 drivers/i2c/busses/i2c-rtl9300.c
--
2.47.0
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v9 1/4] dt-bindings: mfd: Add Realtek RTL9300 switch peripherals
2024-11-06 0:18 [PATCH v9 0/4] RTL9300 support for reboot and i2c Chris Packham
@ 2024-11-06 0:18 ` Chris Packham
2024-11-06 1:29 ` Rob Herring (Arm)
2024-11-06 0:18 ` [PATCH v9 2/4] mips: dts: realtek: Add syscon-reboot node Chris Packham
` (2 subsequent siblings)
3 siblings, 1 reply; 11+ messages in thread
From: Chris Packham @ 2024-11-06 0:18 UTC (permalink / raw)
To: lee, robh, krzk+dt, conor+dt, tsbogend, andi.shyti
Cc: devicetree, linux-kernel, linux-mips, linux-i2c, Chris Packham
Add device tree schema for the Realtek RTL9300 switches. The RTL9300
family is made up of the RTL9301, RTL9302B, RTL9302C and RTL9303. These
have the same SoC differ in the Ethernet switch/SERDES arrangement.
Currently the only supported features are the syscon-reboot and i2c
controllers. The syscon-reboot is needed to be able to reboot the board.
The I2C controllers are slightly unusual because they each own an SCL
pin (GPIO8 for the first controller, GPIO 17 for the second) but have 8
common SDA pins which can be assigned to either controller (but not
both).
Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
---
Notes:
Changes in v9:
- None
Changes in v8:
- Add r-by from Krzysztof
- At Lee's request I've separated the i2c binding into a separate patch.
This one still has a $ref to it so technically the i2c one needs to go
first but they'll be coming in via different trees so they may not
arrive in that order.
Changes in v7:
- Set additionalProperties: false
- Remove extraneous examples from i2c binding
Changes in v6:
- Drop wildcard compatible
- Add specific compatibles for the 4 known SoC variants
- For the i2c part of the binding accept realtek,rtl9301 as a fallback
for the other compatibles
- The overall switches will eventually differ because these will have
different SERDES/port arrangements so they aren't getting the same
fallback treatment
Changes in v5:
I've combined the two series I had in flight so this is the
combination of adding the switch syscon, the reboot and i2c. It makes
the changelog a bit meaningless so I've dropped the earlier
commentary.
As requested I've put a more complete example in the main
rtl9300-switch.yaml.
I've kept rtl9300-i2c.yaml separate for now but link to it with a $ref
from rtl9300-switch.yaml to reduce clutter. The example in
rtl9300-i2c.yaml is technically duplicating part of the example from
rtl9300-switch.yaml but I feel it's nice to be able to see the example
next to where the properties are defined.
.../bindings/mfd/realtek,rtl9301-switch.yaml | 114 ++++++++++++++++++
1 file changed, 114 insertions(+)
create mode 100644 Documentation/devicetree/bindings/mfd/realtek,rtl9301-switch.yaml
diff --git a/Documentation/devicetree/bindings/mfd/realtek,rtl9301-switch.yaml b/Documentation/devicetree/bindings/mfd/realtek,rtl9301-switch.yaml
new file mode 100644
index 000000000000..f053303ab1e6
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/realtek,rtl9301-switch.yaml
@@ -0,0 +1,114 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mfd/realtek,rtl9301-switch.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Realtek Switch with Internal CPU
+
+maintainers:
+ - Chris Packham <chris.packham@alliedtelesis.co.nz>
+
+description:
+ The RTL9300 is a series of is an Ethernet switches with an integrated CPU. A
+ number of different peripherals are accessed through a common register block,
+ represented here as a syscon node.
+
+properties:
+ compatible:
+ items:
+ - enum:
+ - realtek,rtl9301-switch
+ - realtek,rtl9302b-switch
+ - realtek,rtl9302c-switch
+ - realtek,rtl9303-switch
+ - const: syscon
+ - const: simple-mfd
+
+ reg:
+ maxItems: 1
+
+ '#address-cells':
+ const: 1
+
+ '#size-cells':
+ const: 1
+
+patternProperties:
+ 'reboot@[0-9a-f]+$':
+ $ref: /schemas/power/reset/syscon-reboot.yaml#
+
+ 'i2c@[0-9a-f]+$':
+ $ref: /schemas/i2c/realtek,rtl9301-i2c.yaml#
+
+required:
+ - compatible
+ - reg
+
+additionalProperties: false
+
+examples:
+ - |
+ ethernet-switch@1b000000 {
+ compatible = "realtek,rtl9301-switch", "syscon", "simple-mfd";
+ reg = <0x1b000000 0x10000>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ reboot@c {
+ compatible = "syscon-reboot";
+ reg = <0x0c 0x4>;
+ value = <0x01>;
+ };
+
+ i2c@36c {
+ compatible = "realtek,rtl9301-i2c";
+ reg = <0x36c 0x14>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ i2c@0 {
+ reg = <0>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ gpio@20 {
+ compatible = "nxp,pca9555";
+ gpio-controller;
+ #gpio-cells = <2>;
+ reg = <0x20>;
+ };
+ };
+
+ i2c@2 {
+ reg = <2>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ gpio@20 {
+ compatible = "nxp,pca9555";
+ gpio-controller;
+ #gpio-cells = <2>;
+ reg = <0x20>;
+ };
+ };
+ };
+
+ i2c@388 {
+ compatible = "realtek,rtl9301-i2c";
+ reg = <0x388 0x14>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ i2c@7 {
+ reg = <7>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ gpio@20 {
+ compatible = "nxp,pca9555";
+ gpio-controller;
+ #gpio-cells = <2>;
+ reg = <0x20>;
+ };
+ };
+ };
+ };
+
--
2.47.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v9 2/4] mips: dts: realtek: Add syscon-reboot node
2024-11-06 0:18 [PATCH v9 0/4] RTL9300 support for reboot and i2c Chris Packham
2024-11-06 0:18 ` [PATCH v9 1/4] dt-bindings: mfd: Add Realtek RTL9300 switch peripherals Chris Packham
@ 2024-11-06 0:18 ` Chris Packham
2024-11-12 14:56 ` Thomas Bogendoerfer
2024-11-06 0:18 ` [PATCH v9 3/4] mips: dts: realtek: Add I2C controllers Chris Packham
2024-11-06 0:18 ` [PATCH v9 4/4] i2c: Add driver for the RTL9300 I2C controller Chris Packham
3 siblings, 1 reply; 11+ messages in thread
From: Chris Packham @ 2024-11-06 0:18 UTC (permalink / raw)
To: lee, robh, krzk+dt, conor+dt, tsbogend, andi.shyti
Cc: devicetree, linux-kernel, linux-mips, linux-i2c, Chris Packham
The board level reset on systems using the RTL9302 can be driven via the
switch. Use a syscon-reboot node to represent this.
Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
---
Notes:
Changes in v9:
- None
Changes in v8:
- None
Changes in v7:
- None
Changes in v6:
- Drop wildcard compatible
Changes in v5:
- Krzysztof did technically give a r-by on v4 but given the changes to
the rest of the series I haven't included it.
- Use reg instead of offset
- Add a rtl9302c.dtsi for the specific chip which pulls in the generic
rtl930x.dtsi and updates a few of the compatibles on the way through.
- Update Cameo board to use rtl9302c.dtsi
Changes in v4:
- None
Changes in v3:
- None
Changes in v2:
- drop redundant status = "okay"
.../dts/realtek/cameo-rtl9302c-2x-rtl8224-2xge.dts | 2 +-
arch/mips/boot/dts/realtek/rtl9302c.dtsi | 7 +++++++
arch/mips/boot/dts/realtek/rtl930x.dtsi | 13 +++++++++++++
3 files changed, 21 insertions(+), 1 deletion(-)
create mode 100644 arch/mips/boot/dts/realtek/rtl9302c.dtsi
diff --git a/arch/mips/boot/dts/realtek/cameo-rtl9302c-2x-rtl8224-2xge.dts b/arch/mips/boot/dts/realtek/cameo-rtl9302c-2x-rtl8224-2xge.dts
index 77d2566545f2..6789bf374044 100644
--- a/arch/mips/boot/dts/realtek/cameo-rtl9302c-2x-rtl8224-2xge.dts
+++ b/arch/mips/boot/dts/realtek/cameo-rtl9302c-2x-rtl8224-2xge.dts
@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/dts-v1/;
-#include "rtl930x.dtsi"
+#include "rtl9302c.dtsi"
#include <dt-bindings/input/input.h>
#include <dt-bindings/gpio/gpio.h>
diff --git a/arch/mips/boot/dts/realtek/rtl9302c.dtsi b/arch/mips/boot/dts/realtek/rtl9302c.dtsi
new file mode 100644
index 000000000000..ca4d347af8d3
--- /dev/null
+++ b/arch/mips/boot/dts/realtek/rtl9302c.dtsi
@@ -0,0 +1,7 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR BSD-2-Clause
+
+#include "rtl930x.dtsi"
+
+&switch0 {
+ compatible = "realtek,rtl9302c-switch", "syscon", "simple-mfd";
+};
diff --git a/arch/mips/boot/dts/realtek/rtl930x.dtsi b/arch/mips/boot/dts/realtek/rtl930x.dtsi
index f271940f82be..7477fae34987 100644
--- a/arch/mips/boot/dts/realtek/rtl930x.dtsi
+++ b/arch/mips/boot/dts/realtek/rtl930x.dtsi
@@ -29,6 +29,19 @@ lx_clk: clock-175mhz {
#clock-cells = <0>;
clock-frequency = <175000000>;
};
+
+ switch0: switch@1b000000 {
+ compatible = "realtek,rtl9301-switch", "syscon", "simple-mfd";
+ reg = <0x1b000000 0x10000>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ reboot@c {
+ compatible = "syscon-reboot";
+ reg = <0x0c 0x4>;
+ value = <0x01>;
+ };
+ };
};
&soc {
--
2.47.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v9 3/4] mips: dts: realtek: Add I2C controllers
2024-11-06 0:18 [PATCH v9 0/4] RTL9300 support for reboot and i2c Chris Packham
2024-11-06 0:18 ` [PATCH v9 1/4] dt-bindings: mfd: Add Realtek RTL9300 switch peripherals Chris Packham
2024-11-06 0:18 ` [PATCH v9 2/4] mips: dts: realtek: Add syscon-reboot node Chris Packham
@ 2024-11-06 0:18 ` Chris Packham
2024-11-12 14:56 ` Thomas Bogendoerfer
2024-11-06 0:18 ` [PATCH v9 4/4] i2c: Add driver for the RTL9300 I2C controller Chris Packham
3 siblings, 1 reply; 11+ messages in thread
From: Chris Packham @ 2024-11-06 0:18 UTC (permalink / raw)
To: lee, robh, krzk+dt, conor+dt, tsbogend, andi.shyti
Cc: devicetree, linux-kernel, linux-mips, linux-i2c, Chris Packham
Add the I2C controllers that are part of the RTL9300 SoC.
Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
---
Notes:
Changes in v9:
- None
Changes in v8:
- None
Changes in v7:
- None
Changes in v6:
- Drop wildcard compatible
- Put status = "disabled" at the end
Changes in v5:
- Update compatibles
Changes in v4:
- Skipped due to combining patch series
Changes in v3:
- None
Changes in v2:
- Use reg property
arch/mips/boot/dts/realtek/rtl9302c.dtsi | 8 ++++++++
arch/mips/boot/dts/realtek/rtl930x.dtsi | 16 ++++++++++++++++
2 files changed, 24 insertions(+)
diff --git a/arch/mips/boot/dts/realtek/rtl9302c.dtsi b/arch/mips/boot/dts/realtek/rtl9302c.dtsi
index ca4d347af8d3..8690433af498 100644
--- a/arch/mips/boot/dts/realtek/rtl9302c.dtsi
+++ b/arch/mips/boot/dts/realtek/rtl9302c.dtsi
@@ -5,3 +5,11 @@
&switch0 {
compatible = "realtek,rtl9302c-switch", "syscon", "simple-mfd";
};
+
+&i2c0 {
+ compatible = "realtek,rtl9302c-i2c", "realtek,rtl9301-i2c";
+};
+
+&i2c1 {
+ compatible = "realtek,rtl9302c-i2c", "realtek,rtl9301-i2c";
+};
diff --git a/arch/mips/boot/dts/realtek/rtl930x.dtsi b/arch/mips/boot/dts/realtek/rtl930x.dtsi
index 7477fae34987..6a6f3f3fe389 100644
--- a/arch/mips/boot/dts/realtek/rtl930x.dtsi
+++ b/arch/mips/boot/dts/realtek/rtl930x.dtsi
@@ -41,6 +41,22 @@ reboot@c {
reg = <0x0c 0x4>;
value = <0x01>;
};
+
+ i2c0: i2c@36c {
+ compatible = "realtek,rtl9301-i2c";
+ reg = <0x36c 0x14>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
+
+ i2c1: i2c@388 {
+ compatible = "realtek,rtl9301-i2c";
+ reg = <0x388 0x14>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ status = "disabled";
+ };
};
};
--
2.47.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v9 4/4] i2c: Add driver for the RTL9300 I2C controller
2024-11-06 0:18 [PATCH v9 0/4] RTL9300 support for reboot and i2c Chris Packham
` (2 preceding siblings ...)
2024-11-06 0:18 ` [PATCH v9 3/4] mips: dts: realtek: Add I2C controllers Chris Packham
@ 2024-11-06 0:18 ` Chris Packham
2024-11-06 9:57 ` Andi Shyti
3 siblings, 1 reply; 11+ messages in thread
From: Chris Packham @ 2024-11-06 0:18 UTC (permalink / raw)
To: lee, robh, krzk+dt, conor+dt, tsbogend, andi.shyti
Cc: devicetree, linux-kernel, linux-mips, linux-i2c, Chris Packham
Add support for the I2C controller on the RTL9300 SoC. There are two I2C
controllers in the RTL9300 that are part of the Ethernet switch register
block. Each of these controllers owns a SCL pin (GPIO8 for the fiorst
I2C controller, GPIO17 for the second). There are 8 possible SDA pins
(GPIO9-16) that can be assigned to either I2C controller. This
relationship is represented in the device tree with a child node for
each SDA line in use.
This is based on the openwrt implementation[1] but has been
significantly modified
[1] - https://git.openwrt.org/?p=openwrt/openwrt.git;a=blob;f=target/linux/realtek/files-5.15/drivers/i2c/busses/i2c-rtl9300.c
Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
---
Notes:
Changes in v9:
- Fix alignment of register definitions and rtl9300_i2c_execute_xfer()
- Reduce scope of "chan" and "adap" variables in rtl9300_i2c_probe()
- Add r-by from Andi
Changes in v8:
- None
Changes in v7:
- None
Changes in v6:
- Make rtl9300_i2c_quirks static
- Drop wildcard compatible
- Add SoC specific compatibles
Changes in v5:
- Make lock part of struct rtl9300_i2c
- Fix alignment in rtl9300_i2c_smbus_xfer
Changes in v4:
- skipped due to combining patch series
Changes in v3:
- None
Changes in v2:
- Replace a number of return 0; with tail calls
- Add enum rtl9300_bus_freq
- Use RTL9300_ prefix on new defines
- Use reg property for register offset
- Hard code RTL9300_I2C_MST_GLB_CTRL address as this does not need to
come from DT binding
- Use GENMASK() where appropriate
- Propagate read/write errors through to rtl9300_i2c_smbus_xfer()
- Don't error out on bad clock-frequency
- Use devm_i2c_add_adapter()
- Put more information in the commit message
- Integrated multiplexing function, an adapter is created per SDA line
MAINTAINERS | 7 +
drivers/i2c/busses/Kconfig | 10 +
drivers/i2c/busses/Makefile | 1 +
drivers/i2c/busses/i2c-rtl9300.c | 423 +++++++++++++++++++++++++++++++
4 files changed, 441 insertions(+)
create mode 100644 drivers/i2c/busses/i2c-rtl9300.c
diff --git a/MAINTAINERS b/MAINTAINERS
index a27407950242..49a5cb4dd2cd 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -20058,6 +20058,13 @@ S: Maintained
T: git https://github.com/pkshih/rtw.git
F: drivers/net/wireless/realtek/rtl8xxxu/
+RTL9300 I2C DRIVER (rtl9300-i2c)
+M: Chris Packham <chris.packham@alliedtelesis.co.nz>
+L: linux-i2c@vger.kernel.org
+S: Maintained
+F: Documentation/devicetree/bindings/i2c/realtek,rtl9301-i2c.yaml
+F: drivers/i2c/busses/i2c-rtl9300.c
+
RTRS TRANSPORT DRIVERS
M: Md. Haris Iqbal <haris.iqbal@ionos.com>
M: Jack Wang <jinpu.wang@ionos.com>
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
index 6b3ba7e5723a..e655c6ceb5db 100644
--- a/drivers/i2c/busses/Kconfig
+++ b/drivers/i2c/busses/Kconfig
@@ -1060,6 +1060,16 @@ config I2C_RK3X
This driver can also be built as a module. If so, the module will
be called i2c-rk3x.
+config I2C_RTL9300
+ tristate "Realtek RTL9300 I2C controller"
+ depends on MACH_REALTEK_RTL || COMPILE_TEST
+ help
+ Say Y here to include support for the I2C controller in Realtek
+ RTL9300 SoCs.
+
+ This driver can also be built as a module. If so, the module will
+ be called i2c-rtl9300.
+
config I2C_RZV2M
tristate "Renesas RZ/V2M adapter"
depends on ARCH_RENESAS || COMPILE_TEST
diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
index ecc07c50f2a0..e99f4f327aa0 100644
--- a/drivers/i2c/busses/Makefile
+++ b/drivers/i2c/busses/Makefile
@@ -103,6 +103,7 @@ obj-$(CONFIG_I2C_QCOM_GENI) += i2c-qcom-geni.o
obj-$(CONFIG_I2C_QUP) += i2c-qup.o
obj-$(CONFIG_I2C_RIIC) += i2c-riic.o
obj-$(CONFIG_I2C_RK3X) += i2c-rk3x.o
+obj-$(CONFIG_I2C_RTL9300) += i2c-rtl9300.o
obj-$(CONFIG_I2C_RZV2M) += i2c-rzv2m.o
obj-$(CONFIG_I2C_S3C2410) += i2c-s3c2410.o
obj-$(CONFIG_I2C_SH7760) += i2c-sh7760.o
diff --git a/drivers/i2c/busses/i2c-rtl9300.c b/drivers/i2c/busses/i2c-rtl9300.c
new file mode 100644
index 000000000000..e064e8a4a1f0
--- /dev/null
+++ b/drivers/i2c/busses/i2c-rtl9300.c
@@ -0,0 +1,423 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+#include <linux/bits.h>
+#include <linux/i2c.h>
+#include <linux/i2c-mux.h>
+#include <linux/mod_devicetable.h>
+#include <linux/mfd/syscon.h>
+#include <linux/mutex.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+
+enum rtl9300_bus_freq {
+ RTL9300_I2C_STD_FREQ,
+ RTL9300_I2C_FAST_FREQ,
+};
+
+struct rtl9300_i2c;
+
+struct rtl9300_i2c_chan {
+ struct i2c_adapter adap;
+ struct rtl9300_i2c *i2c;
+ enum rtl9300_bus_freq bus_freq;
+ u8 sda_pin;
+};
+
+#define RTL9300_I2C_MUX_NCHAN 8
+
+struct rtl9300_i2c {
+ struct regmap *regmap;
+ struct device *dev;
+ struct rtl9300_i2c_chan chans[RTL9300_I2C_MUX_NCHAN];
+ u32 reg_base;
+ u8 sda_pin;
+ struct mutex lock;
+};
+
+#define RTL9300_I2C_MST_CTRL1 0x0
+#define RTL9300_I2C_MST_CTRL1_MEM_ADDR_OFS 8
+#define RTL9300_I2C_MST_CTRL1_MEM_ADDR_MASK GENMASK(31, 8)
+#define RTL9300_I2C_MST_CTRL1_SDA_OUT_SEL_OFS 4
+#define RTL9300_I2C_MST_CTRL1_SDA_OUT_SEL_MASK GENMASK(6, 4)
+#define RTL9300_I2C_MST_CTRL1_GPIO_SCL_SEL BIT(3)
+#define RTL9300_I2C_MST_CTRL1_RWOP BIT(2)
+#define RTL9300_I2C_MST_CTRL1_I2C_FAIL BIT(1)
+#define RTL9300_I2C_MST_CTRL1_I2C_TRIG BIT(0)
+#define RTL9300_I2C_MST_CTRL2 0x4
+#define RTL9300_I2C_MST_CTRL2_RD_MODE BIT(15)
+#define RTL9300_I2C_MST_CTRL2_DEV_ADDR_OFS 8
+#define RTL9300_I2C_MST_CTRL2_DEV_ADDR_MASK GENMASK(14, 8)
+#define RTL9300_I2C_MST_CTRL2_DATA_WIDTH_OFS 4
+#define RTL9300_I2C_MST_CTRL2_DATA_WIDTH_MASK GENMASK(7, 4)
+#define RTL9300_I2C_MST_CTRL2_MEM_ADDR_WIDTH_OFS 2
+#define RTL9300_I2C_MST_CTRL2_MEM_ADDR_WIDTH_MASK GENMASK(3, 2)
+#define RTL9300_I2C_MST_CTRL2_SCL_FREQ_OFS 0
+#define RTL9300_I2C_MST_CTRL2_SCL_FREQ_MASK GENMASK(1, 0)
+#define RTL9300_I2C_MST_DATA_WORD0 0x8
+#define RTL9300_I2C_MST_DATA_WORD1 0xc
+#define RTL9300_I2C_MST_DATA_WORD2 0x10
+#define RTL9300_I2C_MST_DATA_WORD3 0x14
+
+#define RTL9300_I2C_MST_GLB_CTRL 0x384
+
+static int rtl9300_i2c_reg_addr_set(struct rtl9300_i2c *i2c, u32 reg, u16 len)
+{
+ u32 val, mask;
+ int ret;
+
+ val = len << RTL9300_I2C_MST_CTRL2_MEM_ADDR_WIDTH_OFS;
+ mask = RTL9300_I2C_MST_CTRL2_MEM_ADDR_WIDTH_MASK;
+
+ ret = regmap_update_bits(i2c->regmap, i2c->reg_base + RTL9300_I2C_MST_CTRL2, mask, val);
+ if (ret)
+ return ret;
+
+ val = reg << RTL9300_I2C_MST_CTRL1_MEM_ADDR_OFS;
+ mask = RTL9300_I2C_MST_CTRL1_MEM_ADDR_MASK;
+
+ return regmap_update_bits(i2c->regmap, i2c->reg_base + RTL9300_I2C_MST_CTRL1, mask, val);
+}
+
+static int rtl9300_i2c_config_io(struct rtl9300_i2c *i2c, u8 sda_pin)
+{
+ int ret;
+ u32 val, mask;
+
+ ret = regmap_update_bits(i2c->regmap, RTL9300_I2C_MST_GLB_CTRL, BIT(sda_pin), BIT(sda_pin));
+ if (ret)
+ return ret;
+
+ val = (sda_pin << RTL9300_I2C_MST_CTRL1_SDA_OUT_SEL_OFS) |
+ RTL9300_I2C_MST_CTRL1_GPIO_SCL_SEL;
+ mask = RTL9300_I2C_MST_CTRL1_SDA_OUT_SEL_MASK | RTL9300_I2C_MST_CTRL1_GPIO_SCL_SEL;
+
+ return regmap_update_bits(i2c->regmap, i2c->reg_base + RTL9300_I2C_MST_CTRL1, mask, val);
+}
+
+static int rtl9300_i2c_config_xfer(struct rtl9300_i2c *i2c, struct rtl9300_i2c_chan *chan,
+ u16 addr, u16 len)
+{
+ u32 val, mask;
+
+ val = chan->bus_freq << RTL9300_I2C_MST_CTRL2_SCL_FREQ_OFS;
+ mask = RTL9300_I2C_MST_CTRL2_SCL_FREQ_MASK;
+
+ val |= addr << RTL9300_I2C_MST_CTRL2_DEV_ADDR_OFS;
+ mask |= RTL9300_I2C_MST_CTRL2_DEV_ADDR_MASK;
+
+ val |= ((len - 1) & 0xf) << RTL9300_I2C_MST_CTRL2_DATA_WIDTH_OFS;
+ mask |= RTL9300_I2C_MST_CTRL2_DATA_WIDTH_MASK;
+
+ mask |= RTL9300_I2C_MST_CTRL2_RD_MODE;
+
+ return regmap_update_bits(i2c->regmap, i2c->reg_base + RTL9300_I2C_MST_CTRL2, mask, val);
+}
+
+static int rtl9300_i2c_read(struct rtl9300_i2c *i2c, u8 *buf, int len)
+{
+ u32 vals[4] = {};
+ int i, ret;
+
+ if (len > 16)
+ return -EIO;
+
+ ret = regmap_bulk_read(i2c->regmap, i2c->reg_base + RTL9300_I2C_MST_DATA_WORD0,
+ vals, ARRAY_SIZE(vals));
+ if (ret)
+ return ret;
+
+ for (i = 0; i < len; i++) {
+ buf[i] = vals[i/4] & 0xff;
+ vals[i/4] >>= 8;
+ }
+
+ return 0;
+}
+
+static int rtl9300_i2c_write(struct rtl9300_i2c *i2c, u8 *buf, int len)
+{
+ u32 vals[4] = {};
+ int i;
+
+ if (len > 16)
+ return -EIO;
+
+ for (i = 0; i < len; i++) {
+ if (i % 4 == 0)
+ vals[i/4] = 0;
+ vals[i/4] <<= 8;
+ vals[i/4] |= buf[i];
+ }
+
+ return regmap_bulk_write(i2c->regmap, i2c->reg_base + RTL9300_I2C_MST_DATA_WORD0,
+ vals, ARRAY_SIZE(vals));
+}
+
+static int rtl9300_i2c_writel(struct rtl9300_i2c *i2c, u32 data)
+{
+ return regmap_write(i2c->regmap, i2c->reg_base + RTL9300_I2C_MST_DATA_WORD0, data);
+}
+
+static int rtl9300_i2c_execute_xfer(struct rtl9300_i2c *i2c, char read_write,
+ int size, union i2c_smbus_data *data, int len)
+{
+ u32 val, mask;
+ int ret;
+
+ val = read_write == I2C_SMBUS_WRITE ? RTL9300_I2C_MST_CTRL1_RWOP : 0;
+ mask = RTL9300_I2C_MST_CTRL1_RWOP;
+
+ val |= RTL9300_I2C_MST_CTRL1_I2C_TRIG;
+ mask |= RTL9300_I2C_MST_CTRL1_I2C_TRIG;
+
+ ret = regmap_update_bits(i2c->regmap, i2c->reg_base + RTL9300_I2C_MST_CTRL1, mask, val);
+ if (ret)
+ return ret;
+
+ ret = regmap_read_poll_timeout(i2c->regmap, i2c->reg_base + RTL9300_I2C_MST_CTRL1,
+ val, !(val & RTL9300_I2C_MST_CTRL1_I2C_TRIG), 100, 2000);
+ if (ret)
+ return ret;
+
+ if (val & RTL9300_I2C_MST_CTRL1_I2C_FAIL)
+ return -EIO;
+
+ if (read_write == I2C_SMBUS_READ) {
+ if (size == I2C_SMBUS_BYTE || size == I2C_SMBUS_BYTE_DATA) {
+ ret = regmap_read(i2c->regmap,
+ i2c->reg_base + RTL9300_I2C_MST_DATA_WORD0, &val);
+ if (ret)
+ return ret;
+ data->byte = val & 0xff;
+ } else if (size == I2C_SMBUS_WORD_DATA) {
+ ret = regmap_read(i2c->regmap,
+ i2c->reg_base + RTL9300_I2C_MST_DATA_WORD0, &val);
+ if (ret)
+ return ret;
+ data->word = val & 0xffff;
+ } else {
+ ret = rtl9300_i2c_read(i2c, &data->block[0], len);
+ if (ret)
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
+static int rtl9300_i2c_smbus_xfer(struct i2c_adapter *adap, u16 addr, unsigned short flags,
+ char read_write, u8 command, int size,
+ union i2c_smbus_data *data)
+{
+ struct rtl9300_i2c_chan *chan = i2c_get_adapdata(adap);
+ struct rtl9300_i2c *i2c = chan->i2c;
+ int len = 0, ret;
+
+ mutex_lock(&i2c->lock);
+ if (chan->sda_pin != i2c->sda_pin) {
+ ret = rtl9300_i2c_config_io(i2c, chan->sda_pin);
+ if (ret)
+ goto out_unlock;
+ i2c->sda_pin = chan->sda_pin;
+ }
+
+ switch (size) {
+ case I2C_SMBUS_QUICK:
+ ret = rtl9300_i2c_config_xfer(i2c, chan, addr, 0);
+ if (ret)
+ goto out_unlock;
+ ret = rtl9300_i2c_reg_addr_set(i2c, 0, 0);
+ if (ret)
+ goto out_unlock;
+ break;
+
+ case I2C_SMBUS_BYTE:
+ if (read_write == I2C_SMBUS_WRITE) {
+ ret = rtl9300_i2c_config_xfer(i2c, chan, addr, 0);
+ if (ret)
+ goto out_unlock;
+ ret = rtl9300_i2c_reg_addr_set(i2c, command, 1);
+ if (ret)
+ goto out_unlock;
+ } else {
+ ret = rtl9300_i2c_config_xfer(i2c, chan, addr, 1);
+ if (ret)
+ goto out_unlock;
+ ret = rtl9300_i2c_reg_addr_set(i2c, 0, 0);
+ if (ret)
+ goto out_unlock;
+ }
+ break;
+
+ case I2C_SMBUS_BYTE_DATA:
+ ret = rtl9300_i2c_reg_addr_set(i2c, command, 1);
+ if (ret)
+ goto out_unlock;
+ ret = rtl9300_i2c_config_xfer(i2c, chan, addr, 1);
+ if (ret)
+ goto out_unlock;
+ if (read_write == I2C_SMBUS_WRITE) {
+ ret = rtl9300_i2c_writel(i2c, data->byte);
+ if (ret)
+ goto out_unlock;
+ }
+ break;
+
+ case I2C_SMBUS_WORD_DATA:
+ ret = rtl9300_i2c_reg_addr_set(i2c, command, 1);
+ if (ret)
+ goto out_unlock;
+ ret = rtl9300_i2c_config_xfer(i2c, chan, addr, 2);
+ if (ret)
+ goto out_unlock;
+ if (read_write == I2C_SMBUS_WRITE) {
+ ret = rtl9300_i2c_writel(i2c, data->word);
+ if (ret)
+ goto out_unlock;
+ }
+ break;
+
+ case I2C_SMBUS_BLOCK_DATA:
+ ret = rtl9300_i2c_reg_addr_set(i2c, command, 1);
+ if (ret)
+ goto out_unlock;
+ ret = rtl9300_i2c_config_xfer(i2c, chan, addr, data->block[0]);
+ if (ret)
+ goto out_unlock;
+ if (read_write == I2C_SMBUS_WRITE) {
+ ret = rtl9300_i2c_write(i2c, &data->block[1], data->block[0]);
+ if (ret)
+ goto out_unlock;
+ }
+ len = data->block[0];
+ break;
+
+ default:
+ dev_err(&adap->dev, "Unsupported transaction %d\n", size);
+ ret = -EOPNOTSUPP;
+ goto out_unlock;
+ }
+
+ ret = rtl9300_i2c_execute_xfer(i2c, read_write, size, data, len);
+
+out_unlock:
+ mutex_unlock(&i2c->lock);
+
+ return ret;
+}
+
+static u32 rtl9300_i2c_func(struct i2c_adapter *a)
+{
+ return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
+ I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
+ I2C_FUNC_SMBUS_BLOCK_DATA;
+}
+
+static const struct i2c_algorithm rtl9300_i2c_algo = {
+ .smbus_xfer = rtl9300_i2c_smbus_xfer,
+ .functionality = rtl9300_i2c_func,
+};
+
+static struct i2c_adapter_quirks rtl9300_i2c_quirks = {
+ .flags = I2C_AQ_NO_CLK_STRETCH,
+ .max_read_len = 16,
+ .max_write_len = 16,
+};
+
+static int rtl9300_i2c_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct rtl9300_i2c *i2c;
+ u32 clock_freq, sda_pin;
+ int ret, i = 0;
+ struct fwnode_handle *child;
+
+ i2c = devm_kzalloc(dev, sizeof(*i2c), GFP_KERNEL);
+ if (!i2c)
+ return -ENOMEM;
+
+ i2c->regmap = syscon_node_to_regmap(dev->parent->of_node);
+ if (IS_ERR(i2c->regmap))
+ return PTR_ERR(i2c->regmap);
+ i2c->dev = dev;
+
+ mutex_init(&i2c->lock);
+
+ ret = device_property_read_u32(dev, "reg", &i2c->reg_base);
+ if (ret)
+ return ret;
+
+ platform_set_drvdata(pdev, i2c);
+
+ if (device_get_child_node_count(dev) >= RTL9300_I2C_MUX_NCHAN)
+ return dev_err_probe(dev, -EINVAL, "Too many channels\n");
+
+ device_for_each_child_node(dev, child) {
+ struct rtl9300_i2c_chan *chan = &i2c->chans[i];
+ struct i2c_adapter *adap = &chan->adap;
+
+ ret = fwnode_property_read_u32(child, "reg", &sda_pin);
+ if (ret)
+ return ret;
+
+ ret = fwnode_property_read_u32(child, "clock-frequency", &clock_freq);
+ if (ret)
+ clock_freq = I2C_MAX_STANDARD_MODE_FREQ;
+
+ switch (clock_freq) {
+ case I2C_MAX_STANDARD_MODE_FREQ:
+ chan->bus_freq = RTL9300_I2C_STD_FREQ;
+ break;
+
+ case I2C_MAX_FAST_MODE_FREQ:
+ chan->bus_freq = RTL9300_I2C_FAST_FREQ;
+ break;
+ default:
+ dev_warn(i2c->dev, "SDA%d clock-frequency %d not supported using default\n",
+ sda_pin, clock_freq);
+ break;
+ }
+
+ chan->sda_pin = sda_pin;
+ chan->i2c = i2c;
+ adap = &i2c->chans[i].adap;
+ adap->owner = THIS_MODULE;
+ adap->algo = &rtl9300_i2c_algo;
+ adap->quirks = &rtl9300_i2c_quirks;
+ adap->retries = 3;
+ adap->dev.parent = dev;
+ i2c_set_adapdata(adap, chan);
+ adap->dev.of_node = to_of_node(child);
+ snprintf(adap->name, sizeof(adap->name), "%s SDA%d\n", dev_name(dev), sda_pin);
+ i++;
+
+ ret = devm_i2c_add_adapter(dev, adap);
+ if (ret)
+ return ret;
+ }
+ i2c->sda_pin = 0xff;
+
+ return 0;
+}
+
+static const struct of_device_id i2c_rtl9300_dt_ids[] = {
+ { .compatible = "realtek,rtl9301-i2c" },
+ { .compatible = "realtek,rtl9302b-i2c" },
+ { .compatible = "realtek,rtl9302c-i2c" },
+ { .compatible = "realtek,rtl9303-i2c" },
+ {}
+};
+MODULE_DEVICE_TABLE(of, i2c_rtl9300_dt_ids);
+
+static struct platform_driver rtl9300_i2c_driver = {
+ .probe = rtl9300_i2c_probe,
+ .driver = {
+ .name = "i2c-rtl9300",
+ .of_match_table = i2c_rtl9300_dt_ids,
+ },
+};
+
+module_platform_driver(rtl9300_i2c_driver);
+
+MODULE_DESCRIPTION("RTL9300 I2C controller driver");
+MODULE_LICENSE("GPL");
--
2.47.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v9 1/4] dt-bindings: mfd: Add Realtek RTL9300 switch peripherals
2024-11-06 0:18 ` [PATCH v9 1/4] dt-bindings: mfd: Add Realtek RTL9300 switch peripherals Chris Packham
@ 2024-11-06 1:29 ` Rob Herring (Arm)
0 siblings, 0 replies; 11+ messages in thread
From: Rob Herring (Arm) @ 2024-11-06 1:29 UTC (permalink / raw)
To: Chris Packham
Cc: andi.shyti, tsbogend, conor+dt, krzk+dt, devicetree, linux-kernel,
linux-i2c, linux-mips, lee
On Wed, 06 Nov 2024 13:18:32 +1300, Chris Packham wrote:
> Add device tree schema for the Realtek RTL9300 switches. The RTL9300
> family is made up of the RTL9301, RTL9302B, RTL9302C and RTL9303. These
> have the same SoC differ in the Ethernet switch/SERDES arrangement.
>
> Currently the only supported features are the syscon-reboot and i2c
> controllers. The syscon-reboot is needed to be able to reboot the board.
> The I2C controllers are slightly unusual because they each own an SCL
> pin (GPIO8 for the first controller, GPIO 17 for the second) but have 8
> common SDA pins which can be assigned to either controller (but not
> both).
>
> Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
> ---
>
> Notes:
> Changes in v9:
> - None
> Changes in v8:
> - Add r-by from Krzysztof
> - At Lee's request I've separated the i2c binding into a separate patch.
> This one still has a $ref to it so technically the i2c one needs to go
> first but they'll be coming in via different trees so they may not
> arrive in that order.
> Changes in v7:
> - Set additionalProperties: false
> - Remove extraneous examples from i2c binding
> Changes in v6:
> - Drop wildcard compatible
> - Add specific compatibles for the 4 known SoC variants
> - For the i2c part of the binding accept realtek,rtl9301 as a fallback
> for the other compatibles
> - The overall switches will eventually differ because these will have
> different SERDES/port arrangements so they aren't getting the same
> fallback treatment
> Changes in v5:
> I've combined the two series I had in flight so this is the
> combination of adding the switch syscon, the reboot and i2c. It makes
> the changelog a bit meaningless so I've dropped the earlier
> commentary.
>
> As requested I've put a more complete example in the main
> rtl9300-switch.yaml.
>
> I've kept rtl9300-i2c.yaml separate for now but link to it with a $ref
> from rtl9300-switch.yaml to reduce clutter. The example in
> rtl9300-i2c.yaml is technically duplicating part of the example from
> rtl9300-switch.yaml but I feel it's nice to be able to see the example
> next to where the properties are defined.
>
> .../bindings/mfd/realtek,rtl9301-switch.yaml | 114 ++++++++++++++++++
> 1 file changed, 114 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/mfd/realtek,rtl9301-switch.yaml
>
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
dtschema/dtc warnings/errors:
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/mfd/realtek,rtl9301-switch.example.dtb: ethernet-switch@1b000000: reboot@c: 'offset' is a required property
from schema $id: http://devicetree.org/schemas/mfd/realtek,rtl9301-switch.yaml#
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/mfd/realtek,rtl9301-switch.example.dtb: ethernet-switch@1b000000: reboot@c: 'reg' does not match any of the regexes: 'pinctrl-[0-9]+'
from schema $id: http://devicetree.org/schemas/mfd/realtek,rtl9301-switch.yaml#
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/mfd/realtek,rtl9301-switch.example.dtb: ethernet-switch@1b000000: i2c@36c: False schema does not allow {'compatible': ['realtek,rtl9301-i2c'], 'reg': [[876, 20]], '#address-cells': 1, '#size-cells': 0, 'i2c@0': {'reg': [[0]], '#address-cells': 1, '#size-cells': 0, 'gpio@20': {'compatible': ['nxp,pca9555'], 'gpio-controller': True, '#gpio-cells': 2, 'reg': [[32]]}}, 'i2c@2': {'reg': [[2]], '#address-cells': 1, '#size-cells': 0, 'gpio@20': {'compatible': ['nxp,pca9555'], 'gpio-controller': True, '#gpio-cells': 2, 'reg': [[32]]}}}
from schema $id: http://devicetree.org/schemas/mfd/realtek,rtl9301-switch.yaml#
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/mfd/realtek,rtl9301-switch.example.dtb: ethernet-switch@1b000000: i2c@388: False schema does not allow {'compatible': ['realtek,rtl9301-i2c'], 'reg': [[904, 20]], '#address-cells': 1, '#size-cells': 0, 'i2c@7': {'reg': [[7]], '#address-cells': 1, '#size-cells': 0, 'gpio@20': {'compatible': ['nxp,pca9555'], 'gpio-controller': True, '#gpio-cells': 2, 'reg': [[32]]}}}
from schema $id: http://devicetree.org/schemas/mfd/realtek,rtl9301-switch.yaml#
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/mfd/realtek,rtl9301-switch.example.dtb: reboot@c: 'offset' is a required property
from schema $id: http://devicetree.org/schemas/power/reset/syscon-reboot.yaml#
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/mfd/realtek,rtl9301-switch.example.dtb: reboot@c: 'reg' does not match any of the regexes: 'pinctrl-[0-9]+'
from schema $id: http://devicetree.org/schemas/power/reset/syscon-reboot.yaml#
Documentation/devicetree/bindings/mfd/realtek,rtl9301-switch.example.dtb: /example-0/ethernet-switch@1b000000/i2c@36c: failed to match any schema with compatible: ['realtek,rtl9301-i2c']
Documentation/devicetree/bindings/mfd/realtek,rtl9301-switch.example.dtb: /example-0/ethernet-switch@1b000000/i2c@388: failed to match any schema with compatible: ['realtek,rtl9301-i2c']
doc reference errors (make refcheckdocs):
See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20241106001835.2725522-2-chris.packham@alliedtelesis.co.nz
The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.
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 after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v9 4/4] i2c: Add driver for the RTL9300 I2C controller
2024-11-06 0:18 ` [PATCH v9 4/4] i2c: Add driver for the RTL9300 I2C controller Chris Packham
@ 2024-11-06 9:57 ` Andi Shyti
2024-11-06 19:47 ` Chris Packham
0 siblings, 1 reply; 11+ messages in thread
From: Andi Shyti @ 2024-11-06 9:57 UTC (permalink / raw)
To: Chris Packham
Cc: lee, robh, krzk+dt, conor+dt, tsbogend, devicetree, linux-kernel,
linux-mips, linux-i2c
Hi Chris,
On Wed, Nov 06, 2024 at 01:18:35PM +1300, Chris Packham wrote:
> Add support for the I2C controller on the RTL9300 SoC. There are two I2C
> controllers in the RTL9300 that are part of the Ethernet switch register
> block. Each of these controllers owns a SCL pin (GPIO8 for the fiorst
> I2C controller, GPIO17 for the second). There are 8 possible SDA pins
> (GPIO9-16) that can be assigned to either I2C controller. This
> relationship is represented in the device tree with a child node for
> each SDA line in use.
>
> This is based on the openwrt implementation[1] but has been
> significantly modified
>
> [1] - https://git.openwrt.org/?p=openwrt/openwrt.git;a=blob;f=target/linux/realtek/files-5.15/drivers/i2c/busses/i2c-rtl9300.c
>
> Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
> Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
Thanks for following up with v9. I think nothing prevents us from
already merging this 4/4 patch, right?
Andi
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v9 4/4] i2c: Add driver for the RTL9300 I2C controller
2024-11-06 9:57 ` Andi Shyti
@ 2024-11-06 19:47 ` Chris Packham
2024-11-06 22:51 ` Andi Shyti
0 siblings, 1 reply; 11+ messages in thread
From: Chris Packham @ 2024-11-06 19:47 UTC (permalink / raw)
To: Andi Shyti
Cc: lee, robh, krzk+dt, conor+dt, tsbogend, devicetree, linux-kernel,
linux-mips, linux-i2c
On 6/11/24 22:57, Andi Shyti wrote:
> Hi Chris,
>
> On Wed, Nov 06, 2024 at 01:18:35PM +1300, Chris Packham wrote:
>> Add support for the I2C controller on the RTL9300 SoC. There are two I2C
>> controllers in the RTL9300 that are part of the Ethernet switch register
>> block. Each of these controllers owns a SCL pin (GPIO8 for the fiorst
>> I2C controller, GPIO17 for the second). There are 8 possible SDA pins
>> (GPIO9-16) that can be assigned to either I2C controller. This
>> relationship is represented in the device tree with a child node for
>> each SDA line in use.
>>
>> This is based on the openwrt implementation[1] but has been
>> significantly modified
>>
>> [1] - https://scanmail.trustwave.com/?c=20988&d=pL2r5zHAPsW8d92uECdR2T8Eh4fYX_ZwrCyklfTCzQ&u=https%3a%2f%2fgit%2eopenwrt%2eorg%2f%3fp%3dopenwrt%2fopenwrt%2egit%3ba%3dblob%3bf%3dtarget%2flinux%2frealtek%2ffiles-5%2e15%2fdrivers%2fi2c%2fbusses%2fi2c-rtl9300%2ec
>>
>> Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
>> Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
> Thanks for following up with v9. I think nothing prevents us from
> already merging this 4/4 patch, right?
>
From my end yes it's all good to go. Lee's just applied the mfd binding.
The only thing outstanding are the mips dts changes. I'll wait for a bit
and chase those up. Hopefully they can make it in the 6.13 window but
it's not the end of the world if they don't.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v9 4/4] i2c: Add driver for the RTL9300 I2C controller
2024-11-06 19:47 ` Chris Packham
@ 2024-11-06 22:51 ` Andi Shyti
0 siblings, 0 replies; 11+ messages in thread
From: Andi Shyti @ 2024-11-06 22:51 UTC (permalink / raw)
To: Chris Packham
Cc: lee, robh, krzk+dt, conor+dt, tsbogend, devicetree, linux-kernel,
linux-mips, linux-i2c
Hi Chris,
On Thu, Nov 07, 2024 at 08:47:42AM +1300, Chris Packham wrote:
> On 6/11/24 22:57, Andi Shyti wrote:
> > On Wed, Nov 06, 2024 at 01:18:35PM +1300, Chris Packham wrote:
> > > Add support for the I2C controller on the RTL9300 SoC. There are two I2C
> > > controllers in the RTL9300 that are part of the Ethernet switch register
> > > block. Each of these controllers owns a SCL pin (GPIO8 for the fiorst
> > > I2C controller, GPIO17 for the second). There are 8 possible SDA pins
> > > (GPIO9-16) that can be assigned to either I2C controller. This
> > > relationship is represented in the device tree with a child node for
> > > each SDA line in use.
> > >
> > > This is based on the openwrt implementation[1] but has been
> > > significantly modified
> > >
> > > [1] - https://scanmail.trustwave.com/?c=20988&d=pL2r5zHAPsW8d92uECdR2T8Eh4fYX_ZwrCyklfTCzQ&u=https%3a%2f%2fgit%2eopenwrt%2eorg%2f%3fp%3dopenwrt%2fopenwrt%2egit%3ba%3dblob%3bf%3dtarget%2flinux%2frealtek%2ffiles-5%2e15%2fdrivers%2fi2c%2fbusses%2fi2c-rtl9300%2ec
> > >
> > > Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
> > > Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
> > Thanks for following up with v9. I think nothing prevents us from
> > already merging this 4/4 patch, right?
> >
> From my end yes it's all good to go. Lee's just applied the mfd binding.
>
> The only thing outstanding are the mips dts changes. I'll wait for a bit and
> chase those up. Hopefully they can make it in the 6.13 window but it's not
> the end of the world if they don't.
Cool, I just wanted to confirm. Applied to i2c/i2c-host.
Thanks,
Andi
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v9 2/4] mips: dts: realtek: Add syscon-reboot node
2024-11-06 0:18 ` [PATCH v9 2/4] mips: dts: realtek: Add syscon-reboot node Chris Packham
@ 2024-11-12 14:56 ` Thomas Bogendoerfer
0 siblings, 0 replies; 11+ messages in thread
From: Thomas Bogendoerfer @ 2024-11-12 14:56 UTC (permalink / raw)
To: Chris Packham
Cc: lee, robh, krzk+dt, conor+dt, andi.shyti, devicetree,
linux-kernel, linux-mips, linux-i2c
On Wed, Nov 06, 2024 at 01:18:33PM +1300, Chris Packham wrote:
> The board level reset on systems using the RTL9302 can be driven via the
> switch. Use a syscon-reboot node to represent this.
>
> Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
> ---
>
> Notes:
> Changes in v9:
> - None
> Changes in v8:
> - None
> Changes in v7:
> - None
> Changes in v6:
> - Drop wildcard compatible
> Changes in v5:
> - Krzysztof did technically give a r-by on v4 but given the changes to
> the rest of the series I haven't included it.
> - Use reg instead of offset
> - Add a rtl9302c.dtsi for the specific chip which pulls in the generic
> rtl930x.dtsi and updates a few of the compatibles on the way through.
> - Update Cameo board to use rtl9302c.dtsi
> Changes in v4:
> - None
> Changes in v3:
> - None
> Changes in v2:
> - drop redundant status = "okay"
>
> .../dts/realtek/cameo-rtl9302c-2x-rtl8224-2xge.dts | 2 +-
> arch/mips/boot/dts/realtek/rtl9302c.dtsi | 7 +++++++
> arch/mips/boot/dts/realtek/rtl930x.dtsi | 13 +++++++++++++
> 3 files changed, 21 insertions(+), 1 deletion(-)
> create mode 100644 arch/mips/boot/dts/realtek/rtl9302c.dtsi
applied to mips-next.
Thomas.
--
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea. [ RFC1925, 2.3 ]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v9 3/4] mips: dts: realtek: Add I2C controllers
2024-11-06 0:18 ` [PATCH v9 3/4] mips: dts: realtek: Add I2C controllers Chris Packham
@ 2024-11-12 14:56 ` Thomas Bogendoerfer
0 siblings, 0 replies; 11+ messages in thread
From: Thomas Bogendoerfer @ 2024-11-12 14:56 UTC (permalink / raw)
To: Chris Packham
Cc: lee, robh, krzk+dt, conor+dt, andi.shyti, devicetree,
linux-kernel, linux-mips, linux-i2c
On Wed, Nov 06, 2024 at 01:18:34PM +1300, Chris Packham wrote:
> Add the I2C controllers that are part of the RTL9300 SoC.
>
> Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
> ---
>
> Notes:
> Changes in v9:
> - None
> Changes in v8:
> - None
> Changes in v7:
> - None
> Changes in v6:
> - Drop wildcard compatible
> - Put status = "disabled" at the end
> Changes in v5:
> - Update compatibles
> Changes in v4:
> - Skipped due to combining patch series
> Changes in v3:
> - None
> Changes in v2:
> - Use reg property
>
> arch/mips/boot/dts/realtek/rtl9302c.dtsi | 8 ++++++++
> arch/mips/boot/dts/realtek/rtl930x.dtsi | 16 ++++++++++++++++
> 2 files changed, 24 insertions(+)
applied to mips-next.
Thomas.
--
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea. [ RFC1925, 2.3 ]
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2024-11-12 15:13 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-06 0:18 [PATCH v9 0/4] RTL9300 support for reboot and i2c Chris Packham
2024-11-06 0:18 ` [PATCH v9 1/4] dt-bindings: mfd: Add Realtek RTL9300 switch peripherals Chris Packham
2024-11-06 1:29 ` Rob Herring (Arm)
2024-11-06 0:18 ` [PATCH v9 2/4] mips: dts: realtek: Add syscon-reboot node Chris Packham
2024-11-12 14:56 ` Thomas Bogendoerfer
2024-11-06 0:18 ` [PATCH v9 3/4] mips: dts: realtek: Add I2C controllers Chris Packham
2024-11-12 14:56 ` Thomas Bogendoerfer
2024-11-06 0:18 ` [PATCH v9 4/4] i2c: Add driver for the RTL9300 I2C controller Chris Packham
2024-11-06 9:57 ` Andi Shyti
2024-11-06 19:47 ` Chris Packham
2024-11-06 22:51 ` Andi Shyti
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).