[PATCH] mxc_gpio: on imx8m read the DR instead of the PSR

Angus Ainslie angus at akkea.ca
Sun Nov 28 16:41:59 CET 2021


Hi Fabio,

On 2021-11-28 07:21, Fabio Estevam wrote:
> Hi Angus,
> 
> On Sun, Nov 28, 2021 at 12:18 PM Angus Ainslie <angus.ainslie at puri.sm> 
> wrote:
> 
>> I have tried it with the SION bit set but I thought it would be better
>> if the dts would match the linux dts and return the same result.
> 
> Just to confirm: with the SION bit set, you read the correct values, 
> right?
> 

I just tried it again and setting the SION does not read back the 
correct values. I believe the changes below [1] should be the correct 
ones for my dts.

u-boot=> gpio status
Bank GPIO1_:
GPIO1_0: output: 0 [x] csi_en.gpio-hog
GPIO1_3: output: 1 [x] sdcard_pwr.gpio-hog
GPIO1_4: output: 1 [x] audio_pwr.gpio-hog
GPIO1_12: output: 0 [x] hub_nreset.gpio-hog
GPIO1_14: output: 1 [x] hub_pwr.gpio-hog

Bank GPIO3_:
GPIO3_17: output: 0 [x] chg_en.gpio-hog
GPIO3_24: output: 0 [x] tps_reset.gpio-hog
u-boot=> gpio set GPIO1_12
gpio: pin GPIO1_12 (gpio 12) value is 1
    Warning: value of pin is still 0


The gpio-hog should also have set hub_nreset.gpio-hog to 1.



[1]
diff --git a/arch/arm/dts/imx8mq-librem5.dts 
b/arch/arm/dts/imx8mq-librem5.dts
index b28420654f..b60a8538af 100644
--- a/arch/arm/dts/imx8mq-librem5.dts
+++ b/arch/arm/dts/imx8mq-librem5.dts
@@ -56,29 +56,29 @@
  &iomuxc {
         pinctrl_hog1: hoggrp1 {
                 fsl,pins = <
-                       MX8MQ_IOMUXC_GPIO1_IO00_GPIO1_IO0               
0x83 /* CAMERA_PWR_EN_3V3 */
-                       MX8MQ_IOMUXC_GPIO1_IO03_GPIO1_IO3               
0x83 /* TF_PWR_3V3_EN */
-                       MX8MQ_IOMUXC_GPIO1_IO04_GPIO1_IO4               
0x83 /* AUDIO_POWER_EN_3V3 */
-                       MX8MQ_IOMUXC_GPIO1_IO05_GPIO1_IO5               
0x83 /* DSI_EN_3V3 */
-                       MX8MQ_IOMUXC_GPIO1_IO11_GPIO1_IO11              
0x3f
-                       MX8MQ_IOMUXC_GPIO1_IO12_GPIO1_IO12              
0x3f
-                       MX8MQ_IOMUXC_GPIO1_IO14_GPIO1_IO14              
0x83 /* HUB_PWR_3V3_EN */
-                       MX8MQ_IOMUXC_ENET_MDC_GPIO1_IO16                
0xC0
-                       MX8MQ_IOMUXC_ENET_MDIO_GPIO1_IO17               
0xC0
-                       MX8MQ_IOMUXC_ENET_TD1_GPIO1_IO20                
0x83 /* DSI_BIAS_EN */
-                       MX8MQ_IOMUXC_ENET_TXC_GPIO1_IO23                
0x83 /* FLASH_EN */
+                       MX8MQ_IOMUXC_GPIO1_IO00_GPIO1_IO0               
0x40000083 /*   CAMERA_PWR_EN_3V3 */
+                       MX8MQ_IOMUXC_GPIO1_IO03_GPIO1_IO3               
0x40000083 /*   TF_PWR_3V3_EN */
+                       MX8MQ_IOMUXC_GPIO1_IO04_GPIO1_IO4               
0x40000083 /*   AUDIO_POWER_EN_3V3 */
+                       MX8MQ_IOMUXC_GPIO1_IO05_GPIO1_IO5               
0x40000083 /*   DSI_EN_3V3 */
+                       MX8MQ_IOMUXC_GPIO1_IO11_GPIO1_IO11              
0x4000003f
+                       MX8MQ_IOMUXC_GPIO1_IO12_GPIO1_IO12              
0x4000003f
+                       MX8MQ_IOMUXC_GPIO1_IO14_GPIO1_IO14              
0x40000083 /* HUB_PWR_3V3_EN */
+                       MX8MQ_IOMUXC_ENET_MDC_GPIO1_IO16                
0x400000C0
+                       MX8MQ_IOMUXC_ENET_MDIO_GPIO1_IO17               
0x400000C0
+                       MX8MQ_IOMUXC_ENET_TD1_GPIO1_IO20                
0x40000083 /*   DSI_BIAS_EN */
+                       MX8MQ_IOMUXC_ENET_TXC_GPIO1_IO23                
0x40000083 /*   FLASH_EN */
                 >;
         };

         pinctrl_hog3: hoggrp3 {
                 fsl,pins = <
-                       MX8MQ_IOMUXC_NAND_CE1_B_GPIO3_IO2               
0x3 /* CHG_EN */
-                       MX8MQ_IOMUXC_NAND_CE3_B_GPIO3_IO4               
0x3 /* CHG_OTG_OUT_EN */
-                       MX8MQ_IOMUXC_NAND_DATA04_GPIO3_IO10             
0x83 /* WIFI3V3_EN */
-                       MX8MQ_IOMUXC_NAND_DATA06_GPIO3_IO12             
0x83 /* GPS3V3_EN */
-                       MX8MQ_IOMUXC_NAND_DQS_GPIO3_IO14                
0x83 /* BACKLINGE_EN */
-                       MX8MQ_IOMUXC_NAND_WP_B_GPIO3_IO18               
0x83 /* 4G_PWR_EN */
-                       MX8MQ_IOMUXC_SAI5_RXD3_GPIO3_IO24               
0x83 /* TPS_RESET */
+                       MX8MQ_IOMUXC_NAND_CE1_B_GPIO3_IO2               
0x40000003 /* CHG_EN */
+                       MX8MQ_IOMUXC_NAND_CE3_B_GPIO3_IO4               
0x40000003 /* CHG_OTG_OUT_EN */
+                       MX8MQ_IOMUXC_NAND_DATA04_GPIO3_IO10             
0x40000083 /* WIFI3V3_EN */
+                       MX8MQ_IOMUXC_NAND_DATA06_GPIO3_IO12             
0x40000083 /* GPS3V3_EN */
+                       MX8MQ_IOMUXC_NAND_DQS_GPIO3_IO14                
0x40000083 /* BACKLINGE_EN */
+                       MX8MQ_IOMUXC_NAND_WP_B_GPIO3_IO18               
0x40000083 /* 4G_PWR_EN */


> If so, the fix is just to set the SION bit in both Linux and U-Boot.
> 
> There were several attempts to change the mxc gpio driver like you
> proposed, and the response
> have been always to set the SION bit, which works well in Linux and 
> U-Boot.


More information about the U-Boot mailing list