Skip to contentSkip to conversation

arm64: dts: imx8mm/imx8mp-verdin: add single-master property to all i2c nodes

PATCH Applied Stefan Eichenberger 2 participants 7 messages Oct 25, 2024 – Nov 3, 2024

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

cover arm64: dts: imx8mm/imx8mp-verdin: add single-master property to all i2c nodes

Add the single-master property to all i2c nodes on the iMX8MM and iMX8MP Verdin modules. This will allow us to use some single-master optimisations on the i2c driver. Together with the following series, now in the i2c-host branch of Andis tree, we get rid of a timeout problem on the i2c bus with a SMBus ADC:
https://lore.kernel.org/all/7ts577rxed4mmfkfin7kfdjfjkb6iak2y4vtgtz6merwxkzz6w@h5aefbvyx44u/

Stefan Eichenberger (2):
arm64: dts: imx8mm-verdin: add single-master property to all i2c nodes
arm64: dts: imx8mp-verdin: add single-master property to all i2c nodes

 arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi | 4 ++++
 arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi | 5 +++++
 2 files changed, 9 insertions(+)
Signature · 1 line
2.43.0
#1 lore raw

PATCH 1/2 arm64: dts: imx8mm-verdin: add single-master property to all i2c nodes

From: Stefan Eichenberger <[email protected]>

By default we expect all i2c nodes to be single-master, we do not have any module or carrier board that uses multi-master mode on any i2c controller. With this property set, we benefit from optimisations made exclusively for single-masters.

---
 arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi | 4 ++++
 1 file changed, 4 insertions(+)
arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi +4 -0
index 5fa3959141911..95d5d2333ca1e 100644
@@ -367,6 +367,7 @@ &i2c1 {
 	pinctrl-1 = <&pinctrl_i2c1_gpio>;
 	scl-gpios = <&gpio5 14 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
 	sda-gpios = <&gpio5 15 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	single-master;
 	status = "okay";
 
 	pca9450: pmic@25 {
@@ -561,6 +562,7 @@ &i2c2 {
 	pinctrl-1 = <&pinctrl_i2c2_gpio>;
 	scl-gpios = <&gpio5 16 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
 	sda-gpios = <&gpio5 17 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	single-master;
 	status = "disabled";
 };
 
@@ -574,6 +576,7 @@ &i2c3 {
 	pinctrl-1 = <&pinctrl_i2c3_gpio>;
 	scl-gpios = <&gpio5 18 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
 	sda-gpios = <&gpio5 19 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	single-master;
 };
 
 /* Verdin I2C_1 */
@@ -584,6 +587,7 @@ &i2c4 {
 	pinctrl-1 = <&pinctrl_i2c4_gpio>;
 	scl-gpios = <&gpio5 20 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
 	sda-gpios = <&gpio5 21 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	single-master;
 
 	gpio_expander_21: gpio-expander@21 {
 		compatible = "nxp,pcal6416";
Signature · 1 line
2.43.0
#2 lore raw

Re: [PATCH v1 1/2] arm64: dts: imx8mm-verdin: add single-master property to all i2c nodes

Quoted 17 lines · Stefan Eichenberger

From: Stefan Eichenberger <[email protected]>

By default we expect all i2c nodes to be single-master, we do not have any module or carrier board that uses multi-master mode on any i2c controller. With this property set, we benefit from optimisations made exclusively for single-masters.

---
 arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi | 4 ++++
 1 file changed, 4 insertions(+)
arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi +0 -0
index 5fa3959141911..95d5d2333ca1e 100644

arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi &i2c1 { · line 370

Quoted 4 lines
arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi +1 -0
@@ -367,6 +367,7 @@ &i2c1 {
 	pinctrl-1 = <&pinctrl_i2c1_gpio>;
 	scl-gpios = <&gpio5 14 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
 	sda-gpios = <&gpio5 15 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	single-master;

Hmm, I do not see this property is documented in i2c-imx bindings.

Shawn

Quoted 30 lines
arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi +3 -0
 	status = "okay";
 
 	pca9450: pmic@25 {
@@ -561,6 +562,7 @@ &i2c2 {
 	pinctrl-1 = <&pinctrl_i2c2_gpio>;
 	scl-gpios = <&gpio5 16 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
 	sda-gpios = <&gpio5 17 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	single-master;
 	status = "disabled";
 };
 
@@ -574,6 +576,7 @@ &i2c3 {
 	pinctrl-1 = <&pinctrl_i2c3_gpio>;
 	scl-gpios = <&gpio5 18 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
 	sda-gpios = <&gpio5 19 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	single-master;
 };
 
 /* Verdin I2C_1 */
@@ -584,6 +587,7 @@ &i2c4 {
 	pinctrl-1 = <&pinctrl_i2c4_gpio>;
 	scl-gpios = <&gpio5 20 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
 	sda-gpios = <&gpio5 21 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	single-master;
 
 	gpio_expander_21: gpio-expander@21 {
 		compatible = "nxp,pcal6416";
Signature · 1 line
2.43.0
#3 lore raw

Re: [PATCH v1 1/2] arm64: dts: imx8mm-verdin: add single-master property to all i2c nodes

Hi Shawn,

Quoted 13 lines · Shawn Guo
Quoted 12 lines · Stefan Eichenberger

From: Stefan Eichenberger <[email protected]>

By default we expect all i2c nodes to be single-master, we do not have any module or carrier board that uses multi-master mode on any i2c controller. With this property set, we benefit from optimisations made exclusively for single-masters.

---
 arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi | 4 ++++
 1 file changed, 4 insertions(+)
Quoted 11 lines

arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi &i2c1 { · line 370

Quoted 9 lines
arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi +1 -0
index 5fa3959141911..95d5d2333ca1e 100644
@@ -367,6 +367,7 @@ &i2c1 {
 	pinctrl-1 = <&pinctrl_i2c1_gpio>;
 	scl-gpios = <&gpio5 14 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
 	sda-gpios = <&gpio5 15 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	single-master;

Hmm, I do not see this property is documented in i2c-imx bindings.

According to the discussion we had in this thread
https://lore.kernel.org/linux-i2c/2bbddaxyjkxfmlgmq3yqcbzo7dsb2pq5bvdatk2y4ig4iintkt@35btqkdv7sy3/
it is not necessary to have the property documentation in the i2c-imx binding because it is already documented in the dt-schema:
https://github.com/devicetree-org/dt-schema/blob/main/dtschema/schemas/i2c/i2c-controller.yaml
In the initial discussion, it was addressed for multi-master setups, but it also applies for single-master. See also this discussion:
https://lore.kernel.org/all/[email protected]/

Let me know if I have missed anything or misunderstood.

Regards,
Stefan

#4 lore raw

Re: [PATCH v1 1/2] arm64: dts: imx8mm-verdin: add single-master property to all i2c nodes

Quoted 28 lines · Stefan Eichenberger

Hi Shawn,

Quoted 13 lines · Shawn Guo
Quoted 12 lines · Stefan Eichenberger

From: Stefan Eichenberger <[email protected]>

By default we expect all i2c nodes to be single-master, we do not have any module or carrier board that uses multi-master mode on any i2c controller. With this property set, we benefit from optimisations made exclusively for single-masters.

---
 arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi | 4 ++++
 1 file changed, 4 insertions(+)
Quoted 11 lines

arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi &i2c1 { · line 370

Quoted 9 lines
arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi +1 -0
index 5fa3959141911..95d5d2333ca1e 100644
@@ -367,6 +367,7 @@ &i2c1 {
 	pinctrl-1 = <&pinctrl_i2c1_gpio>;
 	scl-gpios = <&gpio5 14 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
 	sda-gpios = <&gpio5 15 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	single-master;

Hmm, I do not see this property is documented in i2c-imx bindings.

Quoted 5 lines

According to the discussion we had in this thread
https://lore.kernel.org/linux-i2c/2bbddaxyjkxfmlgmq3yqcbzo7dsb2pq5bvdatk2y4ig4iintkt@35btqkdv7sy3/
it is not necessary to have the property documentation in the i2c-imx binding because it is already documented in the dt-schema:
https://github.com/devicetree-org/dt-schema/blob/main/dtschema/schemas/i2c/i2c-controller.yaml

Ah, thanks for the info!

Shawn

#5 lore raw

PATCH 2/2 arm64: dts: imx8mp-verdin: add single-master property to all i2c nodes

In reply to Stefan Eichenberger

From: Stefan Eichenberger <[email protected]>

By default we expect all i2c nodes to be single-master, we do not have any module or carrier board that uses multi-master mode on any i2c controller. With this property set, we benefit from optimisations made exclusively for single-masters.

---
 arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi | 5 +++++
 1 file changed, 5 insertions(+)
arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi +5 -0
index a19ad5ee7f792..323b45bac281e 100644
@@ -478,6 +478,7 @@ &i2c1 {
 	pinctrl-1 = <&pinctrl_i2c1_gpio>;
 	scl-gpios = <&gpio5 14 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
 	sda-gpios = <&gpio5 15 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	single-master;
 	status = "okay";
 
 	pca9450: pmic@25 {
@@ -669,6 +670,7 @@ &i2c2 {
 	pinctrl-1 = <&pinctrl_i2c2_gpio>;
 	scl-gpios = <&gpio5 16 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
 	sda-gpios = <&gpio5 17 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	single-master;
 
 	atmel_mxt_ts_mezzanine: touch-mezzanine@4a {
 		compatible = "atmel,maxtouch";
@@ -690,6 +692,7 @@ &i2c3 {
 	pinctrl-1 = <&pinctrl_i2c3_gpio>;
 	scl-gpios = <&gpio5 18 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
 	sda-gpios = <&gpio5 19 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	single-master;
 };
 
 /* Verdin I2C_1 */
@@ -700,6 +703,7 @@ &i2c4 {
 	pinctrl-1 = <&pinctrl_i2c4_gpio>;
 	scl-gpios = <&gpio5 20 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
 	sda-gpios = <&gpio5 21 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	single-master;
 
 	gpio_expander_21: gpio-expander@21 {
 		compatible = "nxp,pcal6416";
@@ -788,6 +792,7 @@ &i2c5 {
 	pinctrl-1 = <&pinctrl_i2c5_gpio>;
 	scl-gpios = <&gpio3 26 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
 	sda-gpios = <&gpio3 27 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
+	single-master;
 };
 
 /* Verdin PCIE_1 */
Signature · 1 line
2.43.0
Applied
#6 lore raw
In reply to Stefan Eichenberger
Quoted 10 lines · Stefan Eichenberger

Add the single-master property to all i2c nodes on the iMX8MM and iMX8MP Verdin modules. This will allow us to use some single-master optimisations on the i2c driver. Together with the following series, now in the i2c-host branch of Andis tree, we get rid of a timeout problem on the i2c bus with a SMBus ADC:
https://lore.kernel.org/all/7ts577rxed4mmfkfin7kfdjfjkb6iak2y4vtgtz6merwxkzz6w@h5aefbvyx44u/

Stefan Eichenberger (2):
arm64: dts: imx8mm-verdin: add single-master property to all i2c nodes
arm64: dts: imx8mp-verdin: add single-master property to all i2c nodes

Applied both, thanks!