devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/8] Add support for Sonoff iHost RV1126 Smart Home Gateway
@ 2023-11-13 12:06 Tim Lunn
  2023-11-13 12:06 ` [PATCH 1/8] ARM: dts: rockchip: rv1126: Add alternate UART pins Tim Lunn
                   ` (7 more replies)
  0 siblings, 8 replies; 14+ messages in thread
From: Tim Lunn @ 2023-11-13 12:06 UTC (permalink / raw)
  To: linux-rockchip, devicetree
  Cc: Jagan Teki, Krzysztof Kozlowski, Tim Lunn, Rob Herring,
	Heiko Stuebner, linux-arm-kernel, Conor Dooley, Andi Shyti,
	linux-i2c


Sonoff iHost is gateway device designed to provide a Smart Home Hub,
it notably includes builtin radios for Wifi, BT and Zigbee, which
make it suitable SBC for use with many of the open home automation
platforms. It is availabe in two versions, first is based on
Rockchip RV1126 and 4GB DDR4 RAM. There is a second version with
based off the RV1109 dual core SoC and 2GB RAM.

Features:
- Rockchip RV1126 (or RV1109)
- 4GB DDR4
- 8GB eMMC
- microSD slot
- RMII Ethernet PHY
- 1x USB 2.0 Host
- 1x USB 2.0 OTG
- Realtek RTL8723DS WiFi/BT
- EFR32MG21 Silabs Zigbee radio
- Speaker/Microphone

This patch series adds the various device tree nodes required to
support this device. It also adds the initial dts for this device,
This work was largely based off the device trees for mainline
Edgeble Neu2 and downstream Rockchip rv1126-evb-v13 configs.
It has been adapted with relevant peripherals and GPIO pins for the
iHost.

Implemented in this series are most of the core periperhals including
Ethernet, Wifi, BT, Zigbee and RTC. Sound and USB will be added in a
later series.


Tim Lunn (8):
  ARM: dts: rockchip: rv1126: Add alternate UART pins
  ARM: dts: rockchip: rv1126: Serial aliases
  i2c: rk3x: Adjust grf offset for i2c2 on rv1126
  ARM: dts: rockchip: rv1126: Add i2c2 nodes
  ARM: dts: rockchip: rv1126: Split up rgmii1 pinctrl
  ARM: dts: rockchip: rv1126: Add ethernet alias
  ARM: dts: Add Sonoff iHost Smart Home Hub
  dt-bindings: arm: rockchip: Add Sonoff iHost

 .../devicetree/bindings/arm/rockchip.yaml     |   7 +
 arch/arm/boot/dts/rockchip/Makefile           |   2 +
 .../boot/dts/rockchip/rv1109-sonoff-ihost.dts |  13 +
 arch/arm/boot/dts/rockchip/rv1109.dtsi        |  23 +
 .../dts/rockchip/rv1126-edgeble-neu2-io.dts   |   2 +-
 .../arm/boot/dts/rockchip/rv1126-pinctrl.dtsi |  72 ++-
 .../boot/dts/rockchip/rv1126-sonoff-ihost.dts |  13 +
 .../dts/rockchip/rv1126-sonoff-ihost.dtsi     | 409 ++++++++++++++++++
 arch/arm/boot/dts/rockchip/rv1126.dtsi        |  21 +
 drivers/i2c/busses/i2c-rk3x.c                 |   8 +-
 10 files changed, 554 insertions(+), 16 deletions(-)
 create mode 100644 arch/arm/boot/dts/rockchip/rv1109-sonoff-ihost.dts
 create mode 100644 arch/arm/boot/dts/rockchip/rv1109.dtsi
 create mode 100644 arch/arm/boot/dts/rockchip/rv1126-sonoff-ihost.dts
 create mode 100644 arch/arm/boot/dts/rockchip/rv1126-sonoff-ihost.dtsi

-- 
2.40.1


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

* [PATCH 1/8] ARM: dts: rockchip: rv1126: Add alternate UART pins
  2023-11-13 12:06 [PATCH 0/8] Add support for Sonoff iHost RV1126 Smart Home Gateway Tim Lunn
@ 2023-11-13 12:06 ` Tim Lunn
  2023-11-13 12:06 ` [PATCH 2/8] ARM: dts: rockchip: rv1126: Serial aliases Tim Lunn
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 14+ messages in thread
From: Tim Lunn @ 2023-11-13 12:06 UTC (permalink / raw)
  To: linux-rockchip, devicetree
  Cc: Jagan Teki, Krzysztof Kozlowski, Tim Lunn, Rob Herring,
	Heiko Stuebner, linux-arm-kernel, Conor Dooley

Add uart3m2_xfer and uart4m2_xfer pins for Rockchip RV1126. These are
used as serial ports for the indicator and Zigbee radio on the iHost.

Signed-off-by: Tim Lunn <tim@feathertop.org>
---

 arch/arm/boot/dts/rockchip/rv1126-pinctrl.dtsi | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/arch/arm/boot/dts/rockchip/rv1126-pinctrl.dtsi b/arch/arm/boot/dts/rockchip/rv1126-pinctrl.dtsi
index bb34b0c9cb4a..4f85b7b3fc4c 100644
--- a/arch/arm/boot/dts/rockchip/rv1126-pinctrl.dtsi
+++ b/arch/arm/boot/dts/rockchip/rv1126-pinctrl.dtsi
@@ -263,6 +263,14 @@ uart3m0_xfer: uart3m0-xfer {
 				/* uart3_tx_m0 */
 				<3 RK_PC6 4 &pcfg_pull_up>;
 		};
+		/omit-if-no-ref/
+		uart3m2_xfer: uart3m2-xfer {
+			rockchip,pins =
+				/* uart3_rx_m2 */
+				<3 RK_PA1 4 &pcfg_pull_up>,
+				/* uart3_tx_m2 */
+				<3 RK_PA0 4 &pcfg_pull_up>;
+		};
 	};
 	uart4 {
 		/omit-if-no-ref/
@@ -273,6 +281,14 @@ uart4m0_xfer: uart4m0-xfer {
 				/* uart4_tx_m0 */
 				<3 RK_PA4 4 &pcfg_pull_up>;
 		};
+		/omit-if-no-ref/
+		uart4m2_xfer: uart4m2-xfer {
+			rockchip,pins =
+				/* uart4_rx_m2 */
+				<1 RK_PD4 3 &pcfg_pull_up>,
+				/* uart4_tx_m2 */
+				<1 RK_PD5 3 &pcfg_pull_up>;
+		};
 	};
 	uart5 {
 		/omit-if-no-ref/
-- 
2.40.1


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

* [PATCH 2/8] ARM: dts: rockchip: rv1126: Serial aliases
  2023-11-13 12:06 [PATCH 0/8] Add support for Sonoff iHost RV1126 Smart Home Gateway Tim Lunn
  2023-11-13 12:06 ` [PATCH 1/8] ARM: dts: rockchip: rv1126: Add alternate UART pins Tim Lunn
@ 2023-11-13 12:06 ` Tim Lunn
  2023-11-13 12:07 ` [PATCH 3/8] i2c: rk3x: Adjust grf offset for i2c2 on rv1126 Tim Lunn
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 14+ messages in thread
From: Tim Lunn @ 2023-11-13 12:06 UTC (permalink / raw)
  To: linux-rockchip, devicetree
  Cc: Jagan Teki, Krzysztof Kozlowski, Tim Lunn, Rob Herring,
	Heiko Stuebner, linux-arm-kernel, Conor Dooley

Add serial aliases for uart nodes so that serial devices are created

Signed-off-by: Tim Lunn <tim@feathertop.org>
---

 arch/arm/boot/dts/rockchip/rv1126.dtsi | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/arm/boot/dts/rockchip/rv1126.dtsi b/arch/arm/boot/dts/rockchip/rv1126.dtsi
index 9ccd1bad6229..6c5c928f06c7 100644
--- a/arch/arm/boot/dts/rockchip/rv1126.dtsi
+++ b/arch/arm/boot/dts/rockchip/rv1126.dtsi
@@ -21,6 +21,11 @@ / {
 
 	aliases {
 		i2c0 = &i2c0;
+		serial0 = &uart0;
+		serial1 = &uart1;
+		serial2 = &uart2;
+		serial3 = &uart3;
+		serial4 = &uart4;
 	};
 
 	cpus {
-- 
2.40.1


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

* [PATCH 3/8] i2c: rk3x: Adjust grf offset for i2c2 on rv1126
  2023-11-13 12:06 [PATCH 0/8] Add support for Sonoff iHost RV1126 Smart Home Gateway Tim Lunn
  2023-11-13 12:06 ` [PATCH 1/8] ARM: dts: rockchip: rv1126: Add alternate UART pins Tim Lunn
  2023-11-13 12:06 ` [PATCH 2/8] ARM: dts: rockchip: rv1126: Serial aliases Tim Lunn
@ 2023-11-13 12:07 ` Tim Lunn
  2023-11-16 19:54   ` Heiko Stuebner
  2023-11-13 12:07 ` [PATCH 4/8] ARM: dts: rockchip: rv1126: Add i2c2 nodes Tim Lunn
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 14+ messages in thread
From: Tim Lunn @ 2023-11-13 12:07 UTC (permalink / raw)
  To: linux-rockchip, devicetree
  Cc: Jagan Teki, Krzysztof Kozlowski, Tim Lunn, Rob Herring,
	Heiko Stuebner, linux-arm-kernel, Conor Dooley, Andi Shyti,
	linux-i2c

Rockchip RV1126 has a special case grf offset/mask for i2c2

Signed-off-by: Tim Lunn <tim@feathertop.org>
---

 drivers/i2c/busses/i2c-rk3x.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c
index a044ca0c35a1..83b7bf7b48a7 100644
--- a/drivers/i2c/busses/i2c-rk3x.c
+++ b/drivers/i2c/busses/i2c-rk3x.c
@@ -1288,8 +1288,12 @@ static int rk3x_i2c_probe(struct platform_device *pdev)
 			return -EINVAL;
 		}
 
-		/* 27+i: write mask, 11+i: value */
-		value = BIT(27 + bus_nr) | BIT(11 + bus_nr);
+		if (i2c->soc_data == &rv1126_soc_data && bus_nr == 2)
+			/* rv1126 i2c2 set pmugrf offset-0x118, bit-4 */
+			value = BIT(20) | BIT(4);
+		else
+			/* 27+i: write mask, 11+i: value */
+			value = BIT(27 + bus_nr) | BIT(11 + bus_nr);
 
 		ret = regmap_write(grf, i2c->soc_data->grf_offset, value);
 		if (ret != 0) {
-- 
2.40.1


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

* [PATCH 4/8] ARM: dts: rockchip: rv1126: Add i2c2 nodes
  2023-11-13 12:06 [PATCH 0/8] Add support for Sonoff iHost RV1126 Smart Home Gateway Tim Lunn
                   ` (2 preceding siblings ...)
  2023-11-13 12:07 ` [PATCH 3/8] i2c: rk3x: Adjust grf offset for i2c2 on rv1126 Tim Lunn
@ 2023-11-13 12:07 ` Tim Lunn
  2023-11-13 12:07 ` [PATCH 5/8] ARM: dts: rockchip: rv1126: Split up rgmii1 pinctrl Tim Lunn
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 14+ messages in thread
From: Tim Lunn @ 2023-11-13 12:07 UTC (permalink / raw)
  To: linux-rockchip, devicetree
  Cc: Jagan Teki, Krzysztof Kozlowski, Tim Lunn, Rob Herring,
	Heiko Stuebner, linux-arm-kernel, Conor Dooley

Add i2c2 node and i2c2_xfer pinctrl for Rockchip RV1126

Signed-off-by: Tim Lunn <tim@feathertop.org>
---

 arch/arm/boot/dts/rockchip/rv1126-pinctrl.dtsi | 10 ++++++++++
 arch/arm/boot/dts/rockchip/rv1126.dtsi         | 15 +++++++++++++++
 2 files changed, 25 insertions(+)

diff --git a/arch/arm/boot/dts/rockchip/rv1126-pinctrl.dtsi b/arch/arm/boot/dts/rockchip/rv1126-pinctrl.dtsi
index 4f85b7b3fc4c..167a48afa3a4 100644
--- a/arch/arm/boot/dts/rockchip/rv1126-pinctrl.dtsi
+++ b/arch/arm/boot/dts/rockchip/rv1126-pinctrl.dtsi
@@ -87,6 +87,16 @@ i2c0_xfer: i2c0-xfer {
 				<0 RK_PB5 1 &pcfg_pull_none_drv_level_0_smt>;
 		};
 	};
+	i2c2 {
+		/omit-if-no-ref/
+		i2c2_xfer: i2c2-xfer {
+			rockchip,pins =
+				/* i2c2_scl */
+				<0 RK_PC2 1 &pcfg_pull_none_drv_level_0_smt>,
+				/* i2c2_sda */
+				<0 RK_PC3 1 &pcfg_pull_none_drv_level_0_smt>;
+		};
+	};
 	pwm2 {
 		/omit-if-no-ref/
 		pwm2m0_pins: pwm2m0-pins {
diff --git a/arch/arm/boot/dts/rockchip/rv1126.dtsi b/arch/arm/boot/dts/rockchip/rv1126.dtsi
index 6c5c928f06c7..cf1df75df418 100644
--- a/arch/arm/boot/dts/rockchip/rv1126.dtsi
+++ b/arch/arm/boot/dts/rockchip/rv1126.dtsi
@@ -21,6 +21,7 @@ / {
 
 	aliases {
 		i2c0 = &i2c0;
+		i2c2 = &i2c2;
 		serial0 = &uart0;
 		serial1 = &uart1;
 		serial2 = &uart2;
@@ -236,6 +237,20 @@ i2c0: i2c@ff3f0000 {
 		status = "disabled";
 	};
 
+	i2c2: i2c@ff400000 {
+		compatible = "rockchip,rv1126-i2c", "rockchip,rk3399-i2c";
+		reg = <0xff400000 0x1000>;
+		interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
+		rockchip,grf = <&pmugrf>;
+		clocks = <&pmucru CLK_I2C2>, <&pmucru PCLK_I2C2>;
+		clock-names = "i2c", "pclk";
+		pinctrl-names = "default";
+		pinctrl-0 = <&i2c2_xfer>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+		status = "disabled";
+	};
+
 	uart1: serial@ff410000 {
 		compatible = "rockchip,rv1126-uart", "snps,dw-apb-uart";
 		reg = <0xff410000 0x100>;
-- 
2.40.1


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

* [PATCH 5/8] ARM: dts: rockchip: rv1126: Split up rgmii1 pinctrl
  2023-11-13 12:06 [PATCH 0/8] Add support for Sonoff iHost RV1126 Smart Home Gateway Tim Lunn
                   ` (3 preceding siblings ...)
  2023-11-13 12:07 ` [PATCH 4/8] ARM: dts: rockchip: rv1126: Add i2c2 nodes Tim Lunn
@ 2023-11-13 12:07 ` Tim Lunn
  2023-11-13 12:07 ` [PATCH 6/8] ARM: dts: rockchip: rv1126: Add ethernet alias Tim Lunn
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 14+ messages in thread
From: Tim Lunn @ 2023-11-13 12:07 UTC (permalink / raw)
  To: linux-rockchip, devicetree
  Cc: Jagan Teki, Krzysztof Kozlowski, Tim Lunn, Rob Herring,
	Heiko Stuebner, linux-arm-kernel, Conor Dooley

Split up the pinctrl definitions for rgmii1 so it can be shared
with devices using an RMII PHY.

Signed-off-by: Tim Lunn <tim@feathertop.org>
---

 .../dts/rockchip/rv1126-edgeble-neu2-io.dts   |  2 +-
 .../arm/boot/dts/rockchip/rv1126-pinctrl.dtsi | 46 +++++++++++++------
 2 files changed, 34 insertions(+), 14 deletions(-)

diff --git a/arch/arm/boot/dts/rockchip/rv1126-edgeble-neu2-io.dts b/arch/arm/boot/dts/rockchip/rv1126-edgeble-neu2-io.dts
index f09be8405964..0c2396b8f8db 100644
--- a/arch/arm/boot/dts/rockchip/rv1126-edgeble-neu2-io.dts
+++ b/arch/arm/boot/dts/rockchip/rv1126-edgeble-neu2-io.dts
@@ -61,7 +61,7 @@ &gmac {
 	phy-mode = "rgmii";
 	phy-supply = <&vcc_3v3>;
 	pinctrl-names = "default";
-	pinctrl-0 = <&rgmiim1_pins &clk_out_ethernetm1_pins>;
+	pinctrl-0 = <&rgmiim1_miim &rgmiim1_bus2 &rgmiim1_bus4 &clk_out_ethernetm1_pins>;
 	tx_delay = <0x2a>;
 	rx_delay = <0x1a>;
 	status = "okay";
diff --git a/arch/arm/boot/dts/rockchip/rv1126-pinctrl.dtsi b/arch/arm/boot/dts/rockchip/rv1126-pinctrl.dtsi
index 167a48afa3a4..06b1d7f2d858 100644
--- a/arch/arm/boot/dts/rockchip/rv1126-pinctrl.dtsi
+++ b/arch/arm/boot/dts/rockchip/rv1126-pinctrl.dtsi
@@ -115,36 +115,56 @@ pwm11m0_pins: pwm11m0-pins {
 	};
 	rgmii {
 		/omit-if-no-ref/
-		rgmiim1_pins: rgmiim1-pins {
+		rgmiim1_miim: rgmiim1-miim {
 			rockchip,pins =
 				/* rgmii_mdc_m1 */
 				<2 RK_PC2 2 &pcfg_pull_none>,
 				/* rgmii_mdio_m1 */
-				<2 RK_PC1 2 &pcfg_pull_none>,
-				/* rgmii_rxclk_m1 */
-				<2 RK_PD3 2 &pcfg_pull_none>,
+				<2 RK_PC1 2 &pcfg_pull_none>;
+		};
+		/omit-if-no-ref/
+		rgmiim1_rxer: rgmiim1-rxer {
+			rockchip,pins =
+				/* rgmii_rxer_m1 */
+				<2 RK_PC0 2 &pcfg_pull_none>;
+		};
+		/omit-if-no-ref/
+		rgmiim1_bus2: rgmiim1-bus2 {
+			rockchip,pins =
 				/* rgmii_rxd0_m1 */
 				<2 RK_PB5 2 &pcfg_pull_none>,
 				/* rgmii_rxd1_m1 */
 				<2 RK_PB6 2 &pcfg_pull_none>,
-				/* rgmii_rxd2_m1 */
-				<2 RK_PC7 2 &pcfg_pull_none>,
-				/* rgmii_rxd3_m1 */
-				<2 RK_PD0 2 &pcfg_pull_none>,
 				/* rgmii_rxdv_m1 */
 				<2 RK_PB4 2 &pcfg_pull_none>,
-				/* rgmii_txclk_m1 */
-				<2 RK_PD2 2 &pcfg_pull_none_drv_level_3>,
 				/* rgmii_txd0_m1 */
 				<2 RK_PC3 2 &pcfg_pull_none_drv_level_3>,
 				/* rgmii_txd1_m1 */
 				<2 RK_PC4 2 &pcfg_pull_none_drv_level_3>,
+				/* rgmii_txen_m1 */
+				<2 RK_PC6 2 &pcfg_pull_none_drv_level_3>;
+		};
+		/omit-if-no-ref/
+		rgmiim1_bus4: rgmiim1-bus4 {
+			rockchip,pins =
+				/* rgmii_rxclk_m1 */
+				<2 RK_PD3 2 &pcfg_pull_none>,
+				/* rgmii_rxd2_m1 */
+				<2 RK_PC7 2 &pcfg_pull_none>,
+				/* rgmii_rxd3_m1 */
+				<2 RK_PD0 2 &pcfg_pull_none>,
+				/* rgmii_txclk_m1 */
+				<2 RK_PD2 2 &pcfg_pull_none_drv_level_3>,
 				/* rgmii_txd2_m1 */
 				<2 RK_PD1 2 &pcfg_pull_none_drv_level_3>,
 				/* rgmii_txd3_m1 */
-				<2 RK_PA4 2 &pcfg_pull_none_drv_level_3>,
-				/* rgmii_txen_m1 */
-				<2 RK_PC6 2 &pcfg_pull_none_drv_level_3>;
+				<2 RK_PA4 2 &pcfg_pull_none_drv_level_3>;
+		};
+		/omit-if-no-ref/
+		rgmiim1_mclkinout: rgmiim1-mclkinout {
+			rockchip,pins =
+				/* rgmii_clk_m1 */
+				<2 RK_PB7 2 &pcfg_pull_none>;
 		};
 	};
 	sdmmc0 {
-- 
2.40.1


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

* [PATCH 6/8] ARM: dts: rockchip: rv1126: Add ethernet alias
  2023-11-13 12:06 [PATCH 0/8] Add support for Sonoff iHost RV1126 Smart Home Gateway Tim Lunn
                   ` (4 preceding siblings ...)
  2023-11-13 12:07 ` [PATCH 5/8] ARM: dts: rockchip: rv1126: Split up rgmii1 pinctrl Tim Lunn
@ 2023-11-13 12:07 ` Tim Lunn
  2023-11-13 12:07 ` [PATCH 7/8] ARM: dts: Add Sonoff iHost Smart Home Hub Tim Lunn
  2023-11-13 12:07 ` [PATCH 8/8] dt-bindings: arm: rockchip: Add Sonoff iHost Tim Lunn
  7 siblings, 0 replies; 14+ messages in thread
From: Tim Lunn @ 2023-11-13 12:07 UTC (permalink / raw)
  To: linux-rockchip, devicetree
  Cc: Jagan Teki, Krzysztof Kozlowski, Tim Lunn, Rob Herring,
	Heiko Stuebner, linux-arm-kernel, Conor Dooley

Add alias for ethernet0 to pick up mac address from u-boot/DT

Signed-off-by: Tim Lunn <tim@feathertop.org>
---

 arch/arm/boot/dts/rockchip/rv1126.dtsi | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm/boot/dts/rockchip/rv1126.dtsi b/arch/arm/boot/dts/rockchip/rv1126.dtsi
index cf1df75df418..bfbd4918e745 100644
--- a/arch/arm/boot/dts/rockchip/rv1126.dtsi
+++ b/arch/arm/boot/dts/rockchip/rv1126.dtsi
@@ -20,6 +20,7 @@ / {
 	interrupt-parent = <&gic>;
 
 	aliases {
+		ethernet0 = &gmac;
 		i2c0 = &i2c0;
 		i2c2 = &i2c2;
 		serial0 = &uart0;
-- 
2.40.1


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

* [PATCH 7/8] ARM: dts: Add Sonoff iHost Smart Home Hub
  2023-11-13 12:06 [PATCH 0/8] Add support for Sonoff iHost RV1126 Smart Home Gateway Tim Lunn
                   ` (5 preceding siblings ...)
  2023-11-13 12:07 ` [PATCH 6/8] ARM: dts: rockchip: rv1126: Add ethernet alias Tim Lunn
@ 2023-11-13 12:07 ` Tim Lunn
  2023-11-18 12:09   ` Heiko Stübner
  2023-11-13 12:07 ` [PATCH 8/8] dt-bindings: arm: rockchip: Add Sonoff iHost Tim Lunn
  7 siblings, 1 reply; 14+ messages in thread
From: Tim Lunn @ 2023-11-13 12:07 UTC (permalink / raw)
  To: linux-rockchip, devicetree
  Cc: Jagan Teki, Krzysztof Kozlowski, Tim Lunn, Rob Herring,
	Heiko Stuebner, linux-arm-kernel, Conor Dooley

Sonoff iHost is gateway device designed to provide a Smart Home Hub,
it is based on Rockchip RV1126. There is also a version with 2GB RAM
based off the RV1109 dual core SoC.

Features:
- Rockchip RV1126
- 4GB DDR4
- 8GB eMMC
- microSD slot
- RMII Ethernet PHY
- 1x USB 2.0 Host
- 1x USB 2.0 OTG
- Realtek RTL8723DS WiFi/BT
- EFR32MG21 Silabs Zigbee radio
- Speaker/Microphone

This patch adds the initial device tree for this device, it is largely
based off the device trees for mainline Edgeble Neu2 and downstream
Rockchip rv1126-evb-v13 configs. It has been adapted with relevant
peripheral and GPIO pins for the iHost.

Signed-off-by: Tim Lunn <tim@feathertop.org>
---

 arch/arm/boot/dts/rockchip/Makefile           |   2 +
 .../boot/dts/rockchip/rv1109-sonoff-ihost.dts |  13 +
 arch/arm/boot/dts/rockchip/rv1109.dtsi        |  23 +
 .../boot/dts/rockchip/rv1126-sonoff-ihost.dts |  13 +
 .../dts/rockchip/rv1126-sonoff-ihost.dtsi     | 409 ++++++++++++++++++
 5 files changed, 460 insertions(+)
 create mode 100644 arch/arm/boot/dts/rockchip/rv1109-sonoff-ihost.dts
 create mode 100644 arch/arm/boot/dts/rockchip/rv1109.dtsi
 create mode 100644 arch/arm/boot/dts/rockchip/rv1126-sonoff-ihost.dts
 create mode 100644 arch/arm/boot/dts/rockchip/rv1126-sonoff-ihost.dtsi

diff --git a/arch/arm/boot/dts/rockchip/Makefile b/arch/arm/boot/dts/rockchip/Makefile
index 0f46e18fe275..4d4533d6f407 100644
--- a/arch/arm/boot/dts/rockchip/Makefile
+++ b/arch/arm/boot/dts/rockchip/Makefile
@@ -2,7 +2,9 @@
 dtb-$(CONFIG_ARCH_ROCKCHIP) += \
 	rv1108-elgin-r1.dtb \
 	rv1108-evb.dtb \
+	rv1109-sonoff-ihost.dtb \
 	rv1126-edgeble-neu2-io.dtb \
+	rv1126-sonoff-ihost.dtb \
 	rk3036-evb.dtb \
 	rk3036-kylin.dtb \
 	rk3066a-bqcurie2.dtb \
diff --git a/arch/arm/boot/dts/rockchip/rv1109-sonoff-ihost.dts b/arch/arm/boot/dts/rockchip/rv1109-sonoff-ihost.dts
new file mode 100644
index 000000000000..3bfdb00ac8e1
--- /dev/null
+++ b/arch/arm/boot/dts/rockchip/rv1109-sonoff-ihost.dts
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2020 Rockchip Electronics Co., Ltd.
+ */
+
+/dts-v1/;
+#include "rv1109.dtsi"
+#include "rv1126-sonoff-ihost.dtsi"
+
+/ {
+	model = "Sonoff iHost 2G";
+	compatible = "itead,sonoff-ihost", "rockchip,rv1109";
+};
diff --git a/arch/arm/boot/dts/rockchip/rv1109.dtsi b/arch/arm/boot/dts/rockchip/rv1109.dtsi
new file mode 100644
index 000000000000..9cbaa08ab1b8
--- /dev/null
+++ b/arch/arm/boot/dts/rockchip/rv1109.dtsi
@@ -0,0 +1,23 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd.
+ */
+
+/dts-v1/;
+
+#include "rv1126.dtsi"
+
+/ {
+	compatible = "rockchip,rv1109";
+
+	cpus {
+		/delete-node/ cpu@f02;
+		/delete-node/ cpu@f03;
+	};
+
+	arm-pmu {
+		interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-affinity = <&cpu0>, <&cpu1>;
+	};
+};
diff --git a/arch/arm/boot/dts/rockchip/rv1126-sonoff-ihost.dts b/arch/arm/boot/dts/rockchip/rv1126-sonoff-ihost.dts
new file mode 100644
index 000000000000..106d1e42f285
--- /dev/null
+++ b/arch/arm/boot/dts/rockchip/rv1126-sonoff-ihost.dts
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2020 Rockchip Electronics Co., Ltd.
+ */
+
+/dts-v1/;
+#include "rv1126.dtsi"
+#include "rv1126-sonoff-ihost.dtsi"
+
+/ {
+	model = "Sonoff iHost 4G";
+	compatible = "itead,sonoff-ihost", "rockchip,rv1126";
+};
diff --git a/arch/arm/boot/dts/rockchip/rv1126-sonoff-ihost.dtsi b/arch/arm/boot/dts/rockchip/rv1126-sonoff-ihost.dtsi
new file mode 100644
index 000000000000..9060795d88f3
--- /dev/null
+++ b/arch/arm/boot/dts/rockchip/rv1126-sonoff-ihost.dtsi
@@ -0,0 +1,409 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2020 Rockchip Electronics Co., Ltd.
+ * Copyright (c) 2022 Edgeble AI Technologies Pvt. Ltd.
+ */
+
+/ {
+	aliases {
+		mmc0 = &emmc;
+	};
+
+	chosen {
+		stdout-path = "serial2:1500000n8";
+	};
+
+	vcc5v0_sys: regulator-vcc5v0-sys {
+		compatible = "regulator-fixed";
+		regulator-name = "vcc5v0_sys";
+		regulator-always-on;
+		regulator-boot-on;
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+	};
+
+	sdio_pwrseq: pwrseq-sdio {
+		compatible = "mmc-pwrseq-simple";
+		clocks = <&rk809 1>;
+		clock-names = "ext_clock";
+		pinctrl-names = "default";
+		pinctrl-0 = <&wifi_enable_h>;
+		reset-gpios = <&gpio1 RK_PD0 GPIO_ACTIVE_LOW>;
+	};
+};
+
+&cpu0 {
+	cpu-supply = <&vdd_arm>;
+};
+
+&emmc {
+	bus-width = <8>;
+	cap-mmc-highspeed;
+	mmc-hs200-1_8v;
+	non-removable;
+	pinctrl-names = "default";
+	pinctrl-0 = <&emmc_bus8 &emmc_cmd &emmc_clk &emmc_rstnout>;
+	rockchip,default-sample-phase = <90>;
+	vmmc-supply = <&vcc_3v3>;
+	vqmmc-supply = <&vcc_1v8>;
+	status = "okay";
+};
+
+&i2c0 {
+	clock-frequency = <400000>;
+	status = "okay";
+
+	rk809: pmic@20 {
+		compatible = "rockchip,rk809";
+		reg = <0x20>;
+		interrupt-parent = <&gpio0>;
+		interrupts = <RK_PB1 IRQ_TYPE_LEVEL_LOW>;
+		#clock-cells = <1>;
+		clock-output-names = "rk808-clkout1", "rk808-clkout2";
+		pinctrl-names = "default";
+		pinctrl-0 = <&pmic_int_l>;
+		rockchip,system-power-controller;
+		wakeup-source;
+
+		vcc1-supply = <&vcc5v0_sys>;
+		vcc2-supply = <&vcc5v0_sys>;
+		vcc3-supply = <&vcc5v0_sys>;
+		vcc4-supply = <&vcc5v0_sys>;
+		vcc5-supply = <&vcc_buck5>;
+		vcc6-supply = <&vcc_buck5>;
+		vcc7-supply = <&vcc5v0_sys>;
+		vcc8-supply = <&vcc3v3_sys>;
+		vcc9-supply = <&vcc5v0_sys>;
+
+		regulators {
+			vdd_npu_vepu: DCDC_REG1 {
+				regulator-name = "vdd_npu_vepu";
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-initial-mode = <0x2>;
+				regulator-min-microvolt = <650000>;
+				regulator-max-microvolt = <950000>;
+				regulator-ramp-delay = <6001>;
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			vdd_arm: DCDC_REG2 {
+				regulator-name = "vdd_arm";
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-initial-mode = <0x2>;
+				regulator-min-microvolt = <725000>;
+				regulator-max-microvolt = <1350000>;
+				regulator-ramp-delay = <6001>;
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			vcc_ddr: DCDC_REG3 {
+				regulator-name = "vcc_ddr";
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-initial-mode = <0x2>;
+				regulator-state-mem {
+					regulator-on-in-suspend;
+				};
+			};
+
+			vcc3v3_sys: DCDC_REG4 {
+				regulator-name = "vcc3v3_sys";
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-initial-mode = <0x2>;
+				regulator-min-microvolt = <3300000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-state-mem {
+					regulator-on-in-suspend;
+					regulator-suspend-microvolt = <3300000>;
+				};
+			};
+
+			vcc_buck5: DCDC_REG5 {
+				regulator-name = "vcc_buck5";
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-min-microvolt = <2200000>;
+				regulator-max-microvolt = <2200000>;
+				regulator-state-mem {
+					regulator-on-in-suspend;
+					regulator-suspend-microvolt = <2200000>;
+				};
+			};
+
+			vcc_0v8: LDO_REG1 {
+				regulator-name = "vcc_0v8";
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-min-microvolt = <800000>;
+				regulator-max-microvolt = <800000>;
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			vcc1v8_pmu: LDO_REG2 {
+				regulator-name = "vcc1v8_pmu";
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-state-mem {
+					regulator-on-in-suspend;
+					regulator-suspend-microvolt = <1800000>;
+				};
+			};
+
+			vdd0v8_pmu: LDO_REG3 {
+				regulator-name = "vcc0v8_pmu";
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-min-microvolt = <800000>;
+				regulator-max-microvolt = <800000>;
+				regulator-state-mem {
+					regulator-on-in-suspend;
+					regulator-suspend-microvolt = <800000>;
+				};
+			};
+
+			vcc_1v8: LDO_REG4 {
+				regulator-name = "vcc_1v8";
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-state-mem {
+					regulator-on-in-suspend;
+					regulator-suspend-microvolt = <1800000>;
+				};
+			};
+
+			vcc_dovdd: LDO_REG5 {
+				regulator-name = "vcc_dovdd";
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			vcc_dvdd: LDO_REG6 {
+				regulator-name = "vcc_dvdd";
+				regulator-min-microvolt = <1200000>;
+				regulator-max-microvolt = <1200000>;
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			vcc_avdd: LDO_REG7 {
+				regulator-name = "vcc_avdd";
+				regulator-min-microvolt = <2800000>;
+				regulator-max-microvolt = <2800000>;
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			vccio_sd: LDO_REG8 {
+				regulator-name = "vccio_sd";
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			vcc3v3_sd: LDO_REG9 {
+				regulator-name = "vcc3v3_sd";
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-min-microvolt = <3300000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			vcc_5v0: SWITCH_REG1 {
+				regulator-name = "vcc_5v0";
+			};
+
+			vcc_3v3: SWITCH_REG2 {
+				regulator-name = "vcc_3v3";
+				regulator-always-on;
+				regulator-boot-on;
+			};
+		};
+	};
+};
+
+&i2c2 {
+	status = "okay";
+	clock-frequency = <400000>;
+
+	pcf8563: rtc@51 {
+		compatible = "nxp,pcf8563";
+		reg = <0x51>;
+		#clock-cells = <0>;
+		interrupt-parent = <&gpio0>;
+		interrupts = <RK_PA2 IRQ_TYPE_LEVEL_LOW>;
+		clock-output-names = "xin32k";
+	};
+};
+
+&gmac {
+	assigned-clocks = <&cru CLK_GMAC_SRC_M1>, <&cru CLK_GMAC_SRC>,
+			  <&cru CLK_GMAC_TX_RX>;
+	assigned-clock-parents = <&cru CLK_GMAC_RGMII_M1>, <&cru CLK_GMAC_SRC_M1>,
+				 <&cru RMII_MODE_CLK>;
+	assigned-clock-rates = <0>, <50000000>;
+	clock_in_out = "output";
+	phy-handle = <&phy>;
+	phy-mode = "rmii";
+	phy-supply = <&vcc_3v3>;
+	pinctrl-names = "default";
+	pinctrl-0 = <&rgmiim1_miim &rgmiim1_rxer &rgmiim1_bus2 &rgmiim1_mclkinout>;
+	status = "okay";
+};
+
+&mdio {
+	phy: ethernet-phy@0 {
+		compatible = "ethernet-phy-ieee802.3-c22";
+		reg = <0x0>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&eth_phy_rst>;
+		reset-active-low;
+		reset-assert-us = <50000>;
+		reset-deassert-us = <10000>;
+		reset-gpios = <&gpio2 RK_PA6 GPIO_ACTIVE_LOW>;
+	};
+};
+
+&pinctrl {
+	ethernet {
+		eth_phy_rst: eth-phy-rst {
+			rockchip,pins = <2 RK_PA6 RK_FUNC_GPIO &pcfg_pull_down>;
+		};
+	};
+	bt {
+		bt_enable: bt-enable {
+			rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
+		};
+
+		bt_wake_dev: bt-wake-dev {
+			rockchip,pins = <1 RK_PC7 RK_FUNC_GPIO &pcfg_pull_none>;
+		};
+
+		bt_wake_host: bt-wake-host {
+			rockchip,pins = <1 RK_PC5 RK_FUNC_GPIO &pcfg_pull_none>;
+		};
+	};
+
+	pmic {
+		pmic_int_l: pmic-int-l {
+			rockchip,pins = <0 RK_PB1 RK_FUNC_GPIO &pcfg_pull_up>;
+		};
+	};
+
+	wifi {
+		wifi_enable_h: wifi-enable-h {
+			rockchip,pins = <1 RK_PD0 RK_FUNC_GPIO &pcfg_pull_none>;
+		};
+	};
+};
+
+&pmu_io_domains {
+	pmuio0-supply = <&vcc1v8_pmu>;
+	pmuio1-supply = <&vcc3v3_sys>;
+	vccio1-supply = <&vcc_1v8>;
+	vccio2-supply = <&vccio_sd>;
+	vccio3-supply = <&vcc_1v8>;
+	vccio4-supply = <&vcc_dovdd>;
+	vccio5-supply = <&vcc_1v8>;
+	vccio6-supply = <&vcc_1v8>;
+	vccio7-supply = <&vcc_dovdd>;
+	status = "okay";
+};
+
+&saradc {
+	vref-supply = <&vcc_1v8>;
+	status = "okay";
+};
+
+&sdio {
+	bus-width = <4>;
+	cap-sd-highspeed;
+	cap-sdio-irq;
+	keep-power-in-suspend;
+	max-frequency = <100000000>;
+	mmc-pwrseq = <&sdio_pwrseq>;
+	non-removable;
+	pinctrl-names = "default";
+	pinctrl-0 = <&sdmmc1_clk &sdmmc1_cmd &sdmmc1_bus4>;
+	rockchip,default-sample-phase = <90>;
+	sd-uhs-sdr104;
+	vmmc-supply = <&vcc3v3_sys>;
+	vqmmc-supply = <&vcc_1v8>;
+	status = "okay";
+	#address-cells = <1>;
+	#size-cells = <0>;
+};
+
+&sdmmc {
+	bus-width = <4>;
+	cap-mmc-highspeed;
+	cap-sd-highspeed;
+	card-detect-delay = <200>;
+	pinctrl-names = "default";
+	pinctrl-0 = <&sdmmc0_clk &sdmmc0_cmd &sdmmc0_bus4 &sdmmc0_det>;
+	rockchip,default-sample-phase = <90>;
+	sd-uhs-sdr12;
+	sd-uhs-sdr25;
+	sd-uhs-sdr104;
+	vqmmc-supply = <&vccio_sd>;
+	status = "okay";
+};
+
+&uart0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart0_xfer &uart0_ctsn &uart0_rtsn>;
+	uart-has-rtscts;
+	status = "okay";
+
+	bluetooth {
+		compatible = "realtek,rtl8723ds-bt";
+		device-wake-gpios = <&gpio1 RK_PC7 GPIO_ACTIVE_HIGH>; /* BT_WAKE */
+		enable-gpios = <&gpio1 RK_PC6 GPIO_ACTIVE_HIGH>; /* BT_RST */
+		host-wake-gpios = <&gpio1 RK_PC5 GPIO_ACTIVE_HIGH>; /* BT_WAKE_HOST */
+		max-speed = <2000000>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&bt_enable>, <&bt_wake_dev>, <&bt_wake_host>;
+	};
+};
+
+&uart2 {
+	status = "okay";
+};
+
+&uart3 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart3m2_xfer>;
+	status = "okay";
+};
+
+&uart4 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart4m2_xfer>;
+	status = "okay";
+};
-- 
2.40.1


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

* [PATCH 8/8] dt-bindings: arm: rockchip: Add Sonoff iHost
  2023-11-13 12:06 [PATCH 0/8] Add support for Sonoff iHost RV1126 Smart Home Gateway Tim Lunn
                   ` (6 preceding siblings ...)
  2023-11-13 12:07 ` [PATCH 7/8] ARM: dts: Add Sonoff iHost Smart Home Hub Tim Lunn
@ 2023-11-13 12:07 ` Tim Lunn
  2023-11-16 18:10   ` Rob Herring
  7 siblings, 1 reply; 14+ messages in thread
From: Tim Lunn @ 2023-11-13 12:07 UTC (permalink / raw)
  To: linux-rockchip, devicetree
  Cc: Jagan Teki, Krzysztof Kozlowski, Tim Lunn, Rob Herring,
	Heiko Stuebner, linux-arm-kernel, Conor Dooley

Sonoff iHost is a smart home hub with built in radios for wifi/bt
and Zigbee. It is based off the Rockchip RV1126 (or RV1109) SoC.

Signed-off-by: Tim Lunn <tim@feathertop.org>

---

 Documentation/devicetree/bindings/arm/rockchip.yaml | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/Documentation/devicetree/bindings/arm/rockchip.yaml b/Documentation/devicetree/bindings/arm/rockchip.yaml
index 5f7c6c4aad8f..a26bbcd00deb 100644
--- a/Documentation/devicetree/bindings/arm/rockchip.yaml
+++ b/Documentation/devicetree/bindings/arm/rockchip.yaml
@@ -922,6 +922,13 @@ properties:
           - const: rockchip,rk3568-bpi-r2pro
           - const: rockchip,rk3568
 
+      - description: Sonoff iHost Smart Home Hub
+        items:
+          - const: itead,sonoff-ihost
+          - enum:
+              - rockchip,rv1126
+              - rockchip,rv1109
+
 additionalProperties: true
 
 ...
-- 
2.40.1


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

* Re: [PATCH 8/8] dt-bindings: arm: rockchip: Add Sonoff iHost
  2023-11-13 12:07 ` [PATCH 8/8] dt-bindings: arm: rockchip: Add Sonoff iHost Tim Lunn
@ 2023-11-16 18:10   ` Rob Herring
  0 siblings, 0 replies; 14+ messages in thread
From: Rob Herring @ 2023-11-16 18:10 UTC (permalink / raw)
  To: Tim Lunn
  Cc: Krzysztof Kozlowski, Jagan Teki, Conor Dooley, linux-rockchip,
	Rob Herring, devicetree, linux-arm-kernel, Heiko Stuebner


On Mon, 13 Nov 2023 23:07:05 +1100, Tim Lunn wrote:
> Sonoff iHost is a smart home hub with built in radios for wifi/bt
> and Zigbee. It is based off the Rockchip RV1126 (or RV1109) SoC.
> 
> Signed-off-by: Tim Lunn <tim@feathertop.org>
> 
> ---
> 
>  Documentation/devicetree/bindings/arm/rockchip.yaml | 7 +++++++
>  1 file changed, 7 insertions(+)
> 

Acked-by: Rob Herring <robh@kernel.org>


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

* Re: [PATCH 3/8] i2c: rk3x: Adjust grf offset for i2c2 on rv1126
  2023-11-13 12:07 ` [PATCH 3/8] i2c: rk3x: Adjust grf offset for i2c2 on rv1126 Tim Lunn
@ 2023-11-16 19:54   ` Heiko Stuebner
  2023-11-18  0:31     ` Tim Lunn
  0 siblings, 1 reply; 14+ messages in thread
From: Heiko Stuebner @ 2023-11-16 19:54 UTC (permalink / raw)
  To: linux-rockchip, devicetree, Tim Lunn
  Cc: Jagan Teki, Krzysztof Kozlowski, Tim Lunn, Rob Herring,
	linux-arm-kernel, Conor Dooley, Andi Shyti, linux-i2c

Hi,

Am Montag, 13. November 2023, 13:07:00 CET schrieb Tim Lunn:
> Rockchip RV1126 has a special case grf offset/mask for i2c2

This sounds misleading. When looking at the soc-data, the grf offset
seems to be the same for all busses of the rv1126, only the offset
seems to be different for i2c2.

Sadly I don't have (and didn't find any) rv1126 TRM, so couldn't verify.

Change itself looks nice. As it's only this one bus of one soc so far,
we likely won't need a more involved solution just now.


> Signed-off-by: Tim Lunn <tim@feathertop.org>
> ---
> 
>  drivers/i2c/busses/i2c-rk3x.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c
> index a044ca0c35a1..83b7bf7b48a7 100644
> --- a/drivers/i2c/busses/i2c-rk3x.c
> +++ b/drivers/i2c/busses/i2c-rk3x.c
> @@ -1288,8 +1288,12 @@ static int rk3x_i2c_probe(struct platform_device *pdev)
>  			return -EINVAL;
>  		}
>  
> -		/* 27+i: write mask, 11+i: value */
> -		value = BIT(27 + bus_nr) | BIT(11 + bus_nr);
> +		if (i2c->soc_data == &rv1126_soc_data && bus_nr == 2)
> +			/* rv1126 i2c2 set pmugrf offset-0x118, bit-4 */

same here, comment could drop the offset reference I guess.

> +			value = BIT(20) | BIT(4);
> +		else
> +			/* 27+i: write mask, 11+i: value */
> +			value = BIT(27 + bus_nr) | BIT(11 + bus_nr);
>  
>  		ret = regmap_write(grf, i2c->soc_data->grf_offset, value);
>  		if (ret != 0) {
> 


Heiko



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

* Re: [PATCH 3/8] i2c: rk3x: Adjust grf offset for i2c2 on rv1126
  2023-11-16 19:54   ` Heiko Stuebner
@ 2023-11-18  0:31     ` Tim Lunn
  0 siblings, 0 replies; 14+ messages in thread
From: Tim Lunn @ 2023-11-18  0:31 UTC (permalink / raw)
  To: Heiko Stuebner, linux-rockchip, devicetree
  Cc: Jagan Teki, Krzysztof Kozlowski, Rob Herring, linux-arm-kernel,
	Conor Dooley, Andi Shyti, linux-i2c

Hi Heiko,

On 11/17/23 06:54, Heiko Stuebner wrote:
> Hi,
>
> Am Montag, 13. November 2023, 13:07:00 CET schrieb Tim Lunn:
>> Rockchip RV1126 has a special case grf offset/mask for i2c2
> This sounds misleading. When looking at the soc-data, the grf offset
> seems to be the same for all busses of the rv1126, only the offset
> seems to be different for i2c2.
>
> Sadly I don't have (and didn't find any) rv1126 TRM, so couldn't verify.
>
> Change itself looks nice. As it's only this one bus of one soc so far,
> we likely won't need a more involved solution just now.
>
Thanks for your comments. I agree it sounds a bit misleading, I will clarify
  the commit message and comments in v2 of this series.

Unfortunately I dont have access to the TRM either, however I have validated
  that this fixes i2c2 on actual hardware.

>
>> Signed-off-by: Tim Lunn <tim@feathertop.org>
>> ---
>>
>>   drivers/i2c/busses/i2c-rk3x.c | 8 ++++++--
>>   1 file changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/i2c/busses/i2c-rk3x.c b/drivers/i2c/busses/i2c-rk3x.c
>> index a044ca0c35a1..83b7bf7b48a7 100644
>> --- a/drivers/i2c/busses/i2c-rk3x.c
>> +++ b/drivers/i2c/busses/i2c-rk3x.c
>> @@ -1288,8 +1288,12 @@ static int rk3x_i2c_probe(struct platform_device *pdev)
>>   			return -EINVAL;
>>   		}
>>   
>> -		/* 27+i: write mask, 11+i: value */
>> -		value = BIT(27 + bus_nr) | BIT(11 + bus_nr);
>> +		if (i2c->soc_data == &rv1126_soc_data && bus_nr == 2)
>> +			/* rv1126 i2c2 set pmugrf offset-0x118, bit-4 */
> same here, comment could drop the offset reference I guess.
>
>> +			value = BIT(20) | BIT(4);
>> +		else
>> +			/* 27+i: write mask, 11+i: value */
>> +			value = BIT(27 + bus_nr) | BIT(11 + bus_nr);
>>   
>>   		ret = regmap_write(grf, i2c->soc_data->grf_offset, value);
>>   		if (ret != 0) {
>>
>
> Heiko
>
>

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

* Re: [PATCH 7/8] ARM: dts: Add Sonoff iHost Smart Home Hub
  2023-11-13 12:07 ` [PATCH 7/8] ARM: dts: Add Sonoff iHost Smart Home Hub Tim Lunn
@ 2023-11-18 12:09   ` Heiko Stübner
  2023-11-19  3:05     ` Tim Lunn
  0 siblings, 1 reply; 14+ messages in thread
From: Heiko Stübner @ 2023-11-18 12:09 UTC (permalink / raw)
  To: linux-rockchip, devicetree, Tim Lunn
  Cc: Jagan Teki, Krzysztof Kozlowski, Tim Lunn, Rob Herring,
	linux-arm-kernel, Conor Dooley

Hi Tim,

Am Montag, 13. November 2023, 13:07:04 CET schrieb Tim Lunn:
> Sonoff iHost is gateway device designed to provide a Smart Home Hub,
> it is based on Rockchip RV1126. There is also a version with 2GB RAM
> based off the RV1109 dual core SoC.
> 
> Features:
> - Rockchip RV1126
> - 4GB DDR4
> - 8GB eMMC
> - microSD slot
> - RMII Ethernet PHY
> - 1x USB 2.0 Host
> - 1x USB 2.0 OTG
> - Realtek RTL8723DS WiFi/BT
> - EFR32MG21 Silabs Zigbee radio
> - Speaker/Microphone
> 
> This patch adds the initial device tree for this device, it is largely
> based off the device trees for mainline Edgeble Neu2 and downstream
> Rockchip rv1126-evb-v13 configs. It has been adapted with relevant
> peripheral and GPIO pins for the iHost.
> 
> Signed-off-by: Tim Lunn <tim@feathertop.org>


> diff --git a/arch/arm/boot/dts/rockchip/rv1109.dtsi b/arch/arm/boot/dts/rockchip/rv1109.dtsi
> new file mode 100644
> index 000000000000..9cbaa08ab1b8
> --- /dev/null
> +++ b/arch/arm/boot/dts/rockchip/rv1109.dtsi
> @@ -0,0 +1,23 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd.
> + */
> +
> +/dts-v1/;
> +
> +#include "rv1126.dtsi"
> +
> +/ {
> +	compatible = "rockchip,rv1109";
> +
> +	cpus {
> +		/delete-node/ cpu@f02;
> +		/delete-node/ cpu@f03;
> +	};
> +
> +	arm-pmu {
> +		interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
> +			     <GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>;
> +		interrupt-affinity = <&cpu0>, <&cpu1>;
> +	};
> +};

this definitly wants to be its own patch ;-) .

I.e. you add support for the rv1109, which seems to be the same as rv1126, just
with 2 instead of 4 cpu cores.




> +&sdio {
> +	bus-width = <4>;
> +	cap-sd-highspeed;
> +	cap-sdio-irq;
> +	keep-power-in-suspend;
> +	max-frequency = <100000000>;
> +	mmc-pwrseq = <&sdio_pwrseq>;
> +	non-removable;
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&sdmmc1_clk &sdmmc1_cmd &sdmmc1_bus4>;
> +	rockchip,default-sample-phase = <90>;
> +	sd-uhs-sdr104;
> +	vmmc-supply = <&vcc3v3_sys>;
> +	vqmmc-supply = <&vcc_1v8>;
> +	status = "okay";
> +	#address-cells = <1>;
> +	#size-cells = <0>;

I don't think the *-cells are needed here


Thanks
Heiko



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

* Re: [PATCH 7/8] ARM: dts: Add Sonoff iHost Smart Home Hub
  2023-11-18 12:09   ` Heiko Stübner
@ 2023-11-19  3:05     ` Tim Lunn
  0 siblings, 0 replies; 14+ messages in thread
From: Tim Lunn @ 2023-11-19  3:05 UTC (permalink / raw)
  To: Heiko Stübner, linux-rockchip, devicetree
  Cc: Jagan Teki, Krzysztof Kozlowski, Rob Herring, linux-arm-kernel,
	Conor Dooley

Hi Heiko,

On 11/18/23 23:09, Heiko Stübner wrote:
> Hi Tim,
>
> Am Montag, 13. November 2023, 13:07:04 CET schrieb Tim Lunn:
>> Sonoff iHost is gateway device designed to provide a Smart Home Hub,
>> it is based on Rockchip RV1126. There is also a version with 2GB RAM
>> based off the RV1109 dual core SoC.
>>
>> Features:
>> - Rockchip RV1126
>> - 4GB DDR4
>> - 8GB eMMC
>> - microSD slot
>> - RMII Ethernet PHY
>> - 1x USB 2.0 Host
>> - 1x USB 2.0 OTG
>> - Realtek RTL8723DS WiFi/BT
>> - EFR32MG21 Silabs Zigbee radio
>> - Speaker/Microphone
>>
>> This patch adds the initial device tree for this device, it is largely
>> based off the device trees for mainline Edgeble Neu2 and downstream
>> Rockchip rv1126-evb-v13 configs. It has been adapted with relevant
>> peripheral and GPIO pins for the iHost.
>>
>> Signed-off-by: Tim Lunn <tim@feathertop.org>
>
>> diff --git a/arch/arm/boot/dts/rockchip/rv1109.dtsi b/arch/arm/boot/dts/rockchip/rv1109.dtsi
>> new file mode 100644
>> index 000000000000..9cbaa08ab1b8
>> --- /dev/null
>> +++ b/arch/arm/boot/dts/rockchip/rv1109.dtsi
>> @@ -0,0 +1,23 @@
>> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
>> +/*
>> + * Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd.
>> + */
>> +
>> +/dts-v1/;
>> +
>> +#include "rv1126.dtsi"
>> +
>> +/ {
>> +	compatible = "rockchip,rv1109";
>> +
>> +	cpus {
>> +		/delete-node/ cpu@f02;
>> +		/delete-node/ cpu@f03;
>> +	};
>> +
>> +	arm-pmu {
>> +		interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>,
>> +			     <GIC_SPI 124 IRQ_TYPE_LEVEL_HIGH>;
>> +		interrupt-affinity = <&cpu0>, <&cpu1>;
>> +	};
>> +};
> this definitly wants to be its own patch ;-) .
>
> I.e. you add support for the rv1109, which seems to be the same as rv1126, just
> with 2 instead of 4 cpu cores.
I will split this out. Yes, rv1109 is identical to the rv1126 apart from 
the number of cores.

I initially hoped rv1109 could just use the same device tree, but having 
the extra cores enabled ends
up causing panics.

>
>
>
>> +&sdio {
>> +	bus-width = <4>;
>> +	cap-sd-highspeed;
>> +	cap-sdio-irq;
>> +	keep-power-in-suspend;
>> +	max-frequency = <100000000>;
>> +	mmc-pwrseq = <&sdio_pwrseq>;
>> +	non-removable;
>> +	pinctrl-names = "default";
>> +	pinctrl-0 = <&sdmmc1_clk &sdmmc1_cmd &sdmmc1_bus4>;
>> +	rockchip,default-sample-phase = <90>;
>> +	sd-uhs-sdr104;
>> +	vmmc-supply = <&vcc3v3_sys>;
>> +	vqmmc-supply = <&vcc_1v8>;
>> +	status = "okay";
>> +	#address-cells = <1>;
>> +	#size-cells = <0>;
> I don't think the *-cells are needed here
>
Ok, i will check and remove.

Regards
    Tim

>
> Thanks
> Heiko
>
>

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

end of thread, other threads:[~2023-11-19  3:05 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-13 12:06 [PATCH 0/8] Add support for Sonoff iHost RV1126 Smart Home Gateway Tim Lunn
2023-11-13 12:06 ` [PATCH 1/8] ARM: dts: rockchip: rv1126: Add alternate UART pins Tim Lunn
2023-11-13 12:06 ` [PATCH 2/8] ARM: dts: rockchip: rv1126: Serial aliases Tim Lunn
2023-11-13 12:07 ` [PATCH 3/8] i2c: rk3x: Adjust grf offset for i2c2 on rv1126 Tim Lunn
2023-11-16 19:54   ` Heiko Stuebner
2023-11-18  0:31     ` Tim Lunn
2023-11-13 12:07 ` [PATCH 4/8] ARM: dts: rockchip: rv1126: Add i2c2 nodes Tim Lunn
2023-11-13 12:07 ` [PATCH 5/8] ARM: dts: rockchip: rv1126: Split up rgmii1 pinctrl Tim Lunn
2023-11-13 12:07 ` [PATCH 6/8] ARM: dts: rockchip: rv1126: Add ethernet alias Tim Lunn
2023-11-13 12:07 ` [PATCH 7/8] ARM: dts: Add Sonoff iHost Smart Home Hub Tim Lunn
2023-11-18 12:09   ` Heiko Stübner
2023-11-19  3:05     ` Tim Lunn
2023-11-13 12:07 ` [PATCH 8/8] dt-bindings: arm: rockchip: Add Sonoff iHost Tim Lunn
2023-11-16 18:10   ` Rob Herring

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).