]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
Revert "arm: mvebu: x240: Use i2c-gpio instead of built in controller"
authorChris Packham <judge.packham@gmail.com>
Tue, 3 Oct 2023 03:57:39 +0000 (16:57 +1300)
committerStefan Roese <sr@denx.de>
Mon, 16 Oct 2023 12:00:45 +0000 (14:00 +0200)
This reverts commit 5c1c6b7306f2b4c0fd50c7cb5d757e245b93606e. The reason
for switching to i2c-gpio was due to an issue we were seeing in the
Linux kernel where the CPU would lock up on certain adverse I2C bus
conditions. We were never able to reproduce the lockup in U-Boot but
assumed that was probably just luck.

Since then we have discovered that the lock up was due to the I2C
transaction offload engine in the I2C controller not coping with the
adverse bus conditions (basically it thinks there's another master and
waits for a STOP condition that never comes). U-Boot doesn't use the I2C
offload feature so is not susceptible to the lockup.

We can therefore safely return to using the built-in I2C controller.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Reviewed-by: Stefan Roese <sr@denx.de>
arch/arm/dts/ac5-98dx35xx-atl-x240.dts
configs/x240_defconfig

index c19b25925ba2aace211e69b8fcc55eecc3cb4258..820ec18b435550da1ee938378b6b39e34588b4c4 100644 (file)
@@ -16,7 +16,7 @@
                gpio0 = &gpio0;
                gpio1 = &gpio1;
                spi0 = &spi0;
-               i2c0 = &i2cgpio;
+               i2c0 = &i2c0;
                usb0 = &usb0;
                pinctrl0 = &pinctrl0;
        };
                        default-state = "on";
                };
        };
-
-       i2cgpio: i2c-gpio-0 {
-                       compatible = "i2c-gpio";
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-
-                       pinctrl-names = "default";
-                       pinctrl-0 =  <&i2c0_gpio>;
-                       scl-gpios = <&gpio0 26 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
-                       sda-gpios = <&gpio0 27 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
-                       i2c-gpio,delay-us = <2>;
-                       status = "okay";
-                };
 };
 
 &nand {
@@ -83,7 +70,9 @@
        status = "okay";
 };
 
-&i2cgpio {
+&i2c0 {
+       status = "okay";
+
        mux@71 {
                #address-cells = <1>;
                #size-cells = <0>;
         * LED_OE_N              [23]
         * USB_PWR_FLT_N         [24]
         * SFP_INT_N             [25]
-        * I2C0_SCL              [26] (GPIO)
-        * I2C0_SDA              [27] (GPIO)
+        * I2C0_SCL              [26]
+        * I2C0_SDA              [27]
         * USB_EN                [28]
         * MONITOR_INT_N         [29]
         * XM1_MDC               [30]
        /*           0    1    2    3    4    5    6    7    8    9 */
        pin-func = < 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff
                     0xff 0xff 1    1    1    1    0xff 0xff 0    0
-                    0    0    0    0    0    0    0xff 0xff 0    0
+                    0    0    0    0    0    0    1    1    0    0
                     1    1    1    1    0    0    0    0    0    0
                     0    0    0    1    1    1    >;
 
                marvell,pins = <0 1 2 3 4 5 6 7 8 9 10 11 16 17>;
                marvell,function = <2>;
        };
-
-       i2c0_gpio: i2c0-gpio-pins {
-               marvell,pins = <26 27>;
-               marvell,function = <0>;
-       };
 };
index 0d5a19df25aab754d91b471507c8f2955fd4ae41..4b1a761a9086f2fa4d05c0486334c591b7c85fff 100644 (file)
@@ -42,7 +42,6 @@ CONFIG_CLK_MVEBU=y
 CONFIG_GPIO_HOG=y
 CONFIG_DM_PCA953X=y
 CONFIG_DM_I2C=y
-CONFIG_DM_I2C_GPIO=y
 CONFIG_SYS_I2C_MVTWSI=y
 CONFIG_I2C_MUX=y
 CONFIG_I2C_MUX_PCA954x=y