GPIO numeration offset after upgrade from BSP5.x to BSP 6.x

Dear Toradex Community

We run into an issue when upgrading from BSP 5.x to BSP 6.x.
In U-Boot, the GPIOs’ order seemt to be messed up. We’re using GPIOs for hardware detection. The detection is implemented by modifiying the file “/board/toradex/colibri-imx8x/colibri-imx8x.c”. For referencing the GPIOS, the macro “IMX_GPIO_NR()” is used. That macro simply calculates the GPIO index, as seen in “/arch/arm/include/asm/arch-imx8/gpio.h”.

A few examples:

#define GPIO_DI_LV0_LEGACY	           IMX_GPIO_NR(1,31) /* SODIMM 138, AKA HC0 */
#define GPIO_DI_LV1_LEGACY	           IMX_GPIO_NR(1,25) /* SODIMM 140, AKA HC1 */
#define GPIO_DI_LV2_LEGACY	           IMX_GPIO_NR(1,26) /* SODIMM 142, AKA HC2 */
#define GPIO_NOXMB_DI_REV_D_LEGACY     IMX_GPIO_NR(5, 8) /* SODIMM 135 */
#define GPIO_NOXMB_DI_REV_E_LEGACY     IMX_GPIO_NR(4, 3) /* SODIMM 129 */
#define GPIO_NX1_DI_HR0_LEGACY	       IMX_GPIO_NR(0,13) /* SODIMM 54 */
#define GPIO_NX1_DI_HR1_LEGACY	       IMX_GPIO_NR(0,12) /* SODIMM 52 */
#define GPIO_NX1_DI_HR2_LEGACY	       IMX_GPIO_NR(0,11) /* SODIMM 50 */

When checking the GPIOs using “gpio status -a” in U-Boot, they look different for BSP 5 and 6.

BSP 5 (Which works as intended):
Bank GPIO0_:
GPIO0_0: input: 0 [ ]
GPIO0_1: input: 0 [ ]
GPIO0_2: input: 0 [ ]
GPIO0_3: input: 0 [ ]
GPIO0_4: input: 0 [ ]
GPIO0_5: input: 0 [ ]
GPIO0_6: input: 0 [ ]
GPIO0_7: input: 0 [ ]
GPIO0_8: input: 0 [ ]
GPIO0_9: input: 0 [ ]
GPIO0_10: input: 0 [ ]
GPIO0_11: input: 0 [x] GPIO_NX1_DI_HR2_LEGACY
GPIO0_12: input: 0 [x] GPIO_NX1_DI_HR1_LEGACY
GPIO0_13: input: 0 [x] GPIO_NX1_DI_HR0_LEGACY
GPIO0_14: input: 0 [ ]
GPIO0_15: input: 0 [ ]
GPIO0_16: input: 0 [ ]
GPIO0_17: input: 0 [ ]
GPIO0_18: input: 0 [ ]
GPIO0_19: input: 0 [ ]
GPIO0_20: input: 0 [ ]
GPIO0_21: input: 0 [ ]
GPIO0_22: input: 0 [ ]
GPIO0_23: input: 0 [ ]
GPIO0_24: input: 0 [ ]
GPIO0_25: input: 0 [x] GPIO_DI_HR2
GPIO0_26: input: 0 [x] GPIO_DI_LV2
GPIO0_27: input: 1 [ ]
GPIO0_28: input: 1 [ ]
GPIO0_29: input: 1 [ ]
GPIO0_30: input: 1 [ ]
GPIO0_31: input: 1 [ ]

Bank GPIO1_:
GPIO1_0: input: 0 [ ]
GPIO1_1: input: 0 [ ]
GPIO1_2: input: 1 [ ]
GPIO1_3: input: 0 [ ]
GPIO1_4: input: 0 [ ]
GPIO1_5: input: 0 [ ]
GPIO1_6: input: 0 [ ]
GPIO1_7: input: 0 [ ]
GPIO1_8: input: 0 [ ]
GPIO1_9: input: 0 [ ]
GPIO1_10: input: 0 [ ]
GPIO1_11: input: 0 [ ]
GPIO1_12: input: 0 [ ]
GPIO1_13: input: 0 [ ]
GPIO1_14: input: 0 [ ]
GPIO1_15: input: 0 [ ]
GPIO1_16: input: 0 [ ]
GPIO1_17: input: 0 [ ]
GPIO1_18: input: 0 [ ]
GPIO1_19: input: 0 [ ]
GPIO1_20: input: 0 [ ]
GPIO1_21: input: 0 [ ]
GPIO1_22: input: 0 [ ]
GPIO1_23: input: 0 [ ]
GPIO1_24: input: 1 [x] GPIO_DI_CHECK_BOARDTYPE
GPIO1_25: input: 0 [x] GPIO_DI_LV1_LEGACY
GPIO1_26: input: 0 [x] GPIO_DI_LV2_LEGACY
GPIO1_27: input: 0 [ ]
GPIO1_28: input: 0 [ ]
GPIO1_29: input: 0 [ ]
GPIO1_30: input: 0 [ ]
GPIO1_31: input: 0 [x] GPIO_DI_LV0_LEGACY

Bank GPIO2_:
GPIO2_0: input: 1 [ ]
GPIO2_1: input: 0 [ ]
GPIO2_2: input: 0 [ ]
GPIO2_3: input: 0 [ ]
GPIO2_4: input: 0 [ ]
GPIO2_5: input: 0 [ ]
GPIO2_6: input: 0 [ ]
GPIO2_7: input: 0 [ ]
GPIO2_8: input: 0 [ ]
GPIO2_9: input: 0 [ ]
GPIO2_10: input: 0 [ ]
GPIO2_11: input: 0 [ ]
GPIO2_12: input: 0 [ ]
GPIO2_13: input: 0 [ ]
GPIO2_14: input: 0 [ ]
GPIO2_15: input: 0 [ ]
GPIO2_16: input: 0 [ ]
GPIO2_17: input: 0 [ ]
GPIO2_18: input: 0 [ ]
GPIO2_19: input: 0 [ ]
GPIO2_20: input: 0 [ ]
GPIO2_21: input: 0 [ ]
GPIO2_22: input: 0 [ ]
GPIO2_23: input: 0 [ ]
GPIO2_24: input: 0 [ ]
GPIO2_25: input: 0 [ ]
GPIO2_26: input: 0 [ ]
GPIO2_27: input: 0 [ ]
GPIO2_28: input: 0 [ ]
GPIO2_29: input: 0 [ ]
GPIO2_30: input: 0 [ ]
GPIO2_31: input: 0 [ ]

Bank GPIO3_:
GPIO3_0: input: 0 [ ]
GPIO3_1: input: 0 [x] GPIO_DI_LV1
GPIO3_2: input: 1 [ ]
GPIO3_3: input: 1 [ ]
GPIO3_4: input: 0 [ ]
GPIO3_5: input: 1 [ ]
GPIO3_6: input: 0 [ ]
GPIO3_7: input: 0 [ ]
GPIO3_8: input: 0 [ ]
GPIO3_9: input: 1 [x] usdhc@5b020000.cd-gpios
GPIO3_10: input: 1 [x] GPIO_DI_DEBUG_ENABLED
GPIO3_11: input: 1 [ ]
GPIO3_12: input: 0 [x] GPIO_DI_LV0
GPIO3_13: input: 1 [ ]
GPIO3_14: input: 1 [ ]
GPIO3_15: input: 1 [ ]
GPIO3_16: input: 1 [ ]
GPIO3_17: input: 1 [x] GPIO_DI_HR0
GPIO3_18: input: 0 [x] GPIO_DI_HR1
GPIO3_19: output: 0 [x] GPIO_NX1_DO_WATCHDOG
GPIO3_20: input: 1 [ ]
GPIO3_21: input: 1 [ ]
GPIO3_22: input: 1 [ ]
GPIO3_23: input: 1 [ ]
GPIO3_24: input: 1 [ ]
GPIO3_25: input: 0 [ ]
GPIO3_26: input: 0 [ ]
GPIO3_27: input: 0 [ ]
GPIO3_28: input: 0 [ ]
GPIO3_29: input: 0 [ ]
GPIO3_30: input: 0 [ ]
GPIO3_31: input: 0 [ ]

Bank GPIO4_:
GPIO4_0: input: 0 [ ]
GPIO4_1: input: 0 [ ]
GPIO4_2: input: 0 [ ]
GPIO4_3: input: 1 [x] GPIO_NOXMB_DI_REV_E_LEGACY
GPIO4_4: input: 1 [ ]
GPIO4_5: input: 1 [ ]
GPIO4_6: input: 1 [ ]
GPIO4_7: input: 0 [ ]
GPIO4_8: input: 0 [ ]
GPIO4_9: input: 0 [ ]
GPIO4_10: input: 0 [ ]
GPIO4_11: input: 0 [ ]
GPIO4_12: input: 0 [ ]
GPIO4_13: input: 0 [ ]
GPIO4_14: input: 0 [ ]
GPIO4_15: input: 0 [ ]
GPIO4_16: input: 0 [ ]
GPIO4_17: input: 0 [ ]
GPIO4_18: input: 0 [ ]
GPIO4_19: input: 1 [ ]
GPIO4_20: input: 0 [ ]
GPIO4_21: input: 0 [ ]
GPIO4_22: input: 1 [ ]
GPIO4_23: input: 0 [ ]
GPIO4_24: input: 0 [ ]
GPIO4_25: input: 0 [ ]
GPIO4_26: input: 0 [ ]
GPIO4_27: input: 0 [ ]
GPIO4_28: input: 0 [ ]
GPIO4_29: input: 0 [ ]
GPIO4_30: input: 0 [ ]
GPIO4_31: input: 0 [ ]

Bank GPIO5_:
GPIO5_0: input: 0 [ ]
GPIO5_1: input: 0 [ ]
GPIO5_2: input: 1 [ ]
GPIO5_3: input: 1 [ ]
GPIO5_4: input: 0 [ ]
GPIO5_5: input: 0 [ ]
GPIO5_6: input: 0 [ ]
GPIO5_7: input: 0 [ ]
GPIO5_8: input: 0 [x] GPIO_NOXMB_DI_REV_D_LEGACY
GPIO5_9: input: 0 [x] usb_cdet
GPIO5_10: input: 0 [ ]
GPIO5_11: input: 0 [ ]
GPIO5_12: input: 0 [ ]
GPIO5_13: input: 0 [ ]
GPIO5_14: input: 0 [ ]
GPIO5_15: input: 0 [ ]
GPIO5_16: input: 0 [ ]
GPIO5_17: input: 0 [ ]
GPIO5_18: input: 0 [ ]
GPIO5_19: input: 0 [ ]
GPIO5_20: input: 0 [ ]
GPIO5_21: input: 0 [ ]
GPIO5_22: input: 0 [ ]
GPIO5_23: input: 0 [ ]
GPIO5_24: input: 0 [ ]
GPIO5_25: input: 0 [ ]
GPIO5_26: input: 0 [ ]
GPIO5_27: input: 0 [ ]
GPIO5_28: input: 0 [ ]
GPIO5_29: input: 0 [ ]
GPIO5_30: input: 0 [ ]
GPIO5_31: input: 0 [ ]

Bank GPIO6_:
GPIO6_0: input: 0 [ ]
GPIO6_1: input: 0 [ ]
GPIO6_2: input: 0 [ ]
GPIO6_3: input: 0 [ ]
GPIO6_4: input: 0 [ ]
GPIO6_5: input: 0 [ ]
GPIO6_6: input: 0 [ ]
GPIO6_7: input: 0 [ ]
GPIO6_8: input: 0 [ ]
GPIO6_9: input: 0 [ ]
GPIO6_10: input: 0 [ ]
GPIO6_11: input: 0 [ ]
GPIO6_12: input: 0 [ ]
GPIO6_13: input: 0 [ ]
GPIO6_14: input: 0 [ ]
GPIO6_15: input: 0 [ ]
GPIO6_16: input: 0 [ ]
GPIO6_17: input: 0 [ ]
GPIO6_18: input: 0 [ ]
GPIO6_19: input: 0 [ ]
GPIO6_20: input: 0 [ ]
GPIO6_21: input: 0 [ ]
GPIO6_22: input: 0 [ ]
GPIO6_23: input: 0 [ ]
GPIO6_24: input: 0 [ ]
GPIO6_25: input: 0 [ ]
GPIO6_26: input: 0 [ ]
GPIO6_27: input: 0 [ ]
GPIO6_28: input: 0 [ ]
GPIO6_29: input: 0 [ ]
GPIO6_30: input: 0 [ ]
GPIO6_31: input: 0 [ ]

Bank GPIO7_:
GPIO7_0: input: 0 [ ]
GPIO7_1: input: 0 [ ]
GPIO7_2: input: 0 [ ]
GPIO7_3: input: 0 [ ]
GPIO7_4: input: 0 [ ]
GPIO7_5: input: 0 [ ]
GPIO7_6: input: 0 [ ]
GPIO7_7: input: 0 [ ]
GPIO7_8: input: 0 [ ]
GPIO7_9: input: 0 [ ]
GPIO7_10: input: 0 [ ]
GPIO7_11: input: 0 [ ]
GPIO7_12: input: 0 [ ]
GPIO7_13: input: 0 [ ]
GPIO7_14: input: 0 [ ]
GPIO7_15: input: 0 [ ]
GPIO7_16: input: 0 [ ]
GPIO7_17: input: 0 [ ]
GPIO7_18: input: 0 [ ]
GPIO7_19: input: 0 [ ]
GPIO7_20: input: 0 [ ]
GPIO7_21: input: 0 [ ]
GPIO7_22: input: 0 [ ]
GPIO7_23: input: 0 [ ]
GPIO7_24: input: 0 [ ]
GPIO7_25: input: 0 [ ]
GPIO7_26: input: 0 [ ]
GPIO7_27: input: 0 [ ]
GPIO7_28: input: 0 [ ]
GPIO7_29: input: 0 [ ]
GPIO7_30: input: 0 [ ]
GPIO7_31: input: 0 [ ]

Bank GPIO-1_:
GPIO-1_0: input: 0 [ ]
GPIO-1_1: input: 0 [ ]
GPIO-1_2: input: 0 [ ]
GPIO-1_3: input: 0 [ ]
GPIO-1_4: input: 0 [ ]
GPIO-1_5: input: 0 [ ]
GPIO-1_6: input: 0 [ ]
GPIO-1_7: input: 0 [ ]
GPIO-1_8: input: 0 [ ]
GPIO-1_9: input: 0 [ ]
GPIO-1_10: input: 0 [ ]
GPIO-1_11: input: 0 [ ]
GPIO-1_12: input: 0 [ ]
GPIO-1_13: input: 0 [ ]
GPIO-1_14: input: 0 [ ]
GPIO-1_15: input: 0 [ ]
GPIO-1_16: input: 0 [ ]
GPIO-1_17: input: 0 [ ]
GPIO-1_18: input: 0 [ ]
GPIO-1_19: input: 0 [ ]
GPIO-1_20: input: 0 [ ]
GPIO-1_21: input: 0 [ ]
GPIO-1_22: input: 0 [ ]
GPIO-1_23: input: 0 [ ]
GPIO-1_24: input: 0 [ ]
GPIO-1_25: input: 0 [ ]
GPIO-1_26: input: 0 [ ]
GPIO-1_27: input: 0 [ ]
GPIO-1_28: input: 0 [ ]
GPIO-1_29: input: 0 [ ]
GPIO-1_30: input: 0 [ ]
GPIO-1_31: input: 0 [ ]

BSP 6 (Which mappings seemt to be offset by 8):
Bank gpio@43_:
gpio@43_0: output: 1 [ ]
gpio@43_1: output: 0 [ ]
gpio@43_2: output: 1 [ ]
gpio@43_3: output: 0 [ ]
gpio@43_4: output: 0 [ ]
gpio@43_5: output: 0 [ ]
gpio@43_6: output: 0 [ ]
gpio@43_7: output: 0 [ ]

Bank GPIO0_:
GPIO0_0: input: 0 [ ]
GPIO0_1: input: 0 [ ]
GPIO0_2: input: 0 [ ]
GPIO0_3: input: 0 [x] GPIO_NX1_DI_HR2_LEGACY
GPIO0_4: input: 0 [x] GPIO_NX1_DI_HR1_LEGACY
GPIO0_5: input: 0 [x] GPIO_NX1_DI_HR0_LEGACY
GPIO0_6: input: 0 [ ]
GPIO0_7: input: 0 [ ]
GPIO0_8: input: 0 [ ]
GPIO0_9: input: 0 [ ]
GPIO0_10: input: 0 [ ]
GPIO0_11: input: 0 [ ]
GPIO0_12: input: 0 [ ]
GPIO0_13: input: 0 [ ]
GPIO0_14: input: 0 [ ]
GPIO0_15: input: 0 [ ]
GPIO0_16: input: 0 [ ]
GPIO0_17: input: 0 [x] GPIO_DI_HR2
GPIO0_18: input: 0 [x] GPIO_DI_LV2
GPIO0_19: input: 0 [ ]
GPIO0_20: input: 0 [ ]
GPIO0_21: input: 0 [ ]
GPIO0_22: input: 0 [ ]
GPIO0_23: input: 0 [ ]
GPIO0_24: input: 0 [ ]
GPIO0_25: input: 0 [ ]
GPIO0_26: input: 0 [ ]
GPIO0_27: input: 1 [ ]
GPIO0_28: input: 1 [ ]
GPIO0_29: input: 1 [ ]
GPIO0_30: input: 1 [ ]
GPIO0_31: input: 1 [ ]

Bank GPIO1_:
GPIO1_0: input: 0 [ ]
GPIO1_1: input: 0 [ ]
GPIO1_2: input: 1 [ ]
GPIO1_3: input: 0 [ ]
GPIO1_4: input: 0 [ ]
GPIO1_5: input: 0 [ ]
GPIO1_6: input: 0 [ ]
GPIO1_7: input: 0 [ ]
GPIO1_8: input: 0 [ ]
GPIO1_9: input: 0 [ ]
GPIO1_10: input: 0 [ ]
GPIO1_11: input: 0 [ ]
GPIO1_12: input: 0 [ ]
GPIO1_13: input: 0 [ ]
GPIO1_14: input: 0 [ ]
GPIO1_15: input: 0 [ ]
GPIO1_16: input: 0 [x] GPIO_DI_CHECK_BOARDTYPE
GPIO1_17: input: 0 [x] GPIO_DI_LV1_LEGACY
GPIO1_18: input: 0 [x] GPIO_DI_LV2_LEGACY
GPIO1_19: input: 0 [ ]
GPIO1_20: input: 0 [ ]
GPIO1_21: input: 0 [ ]
GPIO1_22: input: 0 [ ]
GPIO1_23: input: 0 [x] GPIO_DI_LV0_LEGACY
GPIO1_24: input: 1 [ ]
GPIO1_25: input: 0 [ ]
GPIO1_26: input: 0 [ ]
GPIO1_27: input: 0 [ ]
GPIO1_28: input: 0 [ ]
GPIO1_29: input: 0 [ ]
GPIO1_30: input: 0 [ ]
GPIO1_31: input: 0 [ ]

Bank GPIO2_:
GPIO2_0: input: 1 [ ]
GPIO2_1: input: 0 [ ]
GPIO2_2: input: 0 [ ]
GPIO2_3: input: 0 [ ]
GPIO2_4: input: 0 [ ]
GPIO2_5: input: 0 [ ]
GPIO2_6: input: 0 [ ]
GPIO2_7: input: 0 [ ]
GPIO2_8: input: 0 [ ]
GPIO2_9: input: 0 [ ]
GPIO2_10: input: 0 [ ]
GPIO2_11: input: 0 [ ]
GPIO2_12: input: 0 [ ]
GPIO2_13: input: 0 [ ]
GPIO2_14: input: 0 [ ]
GPIO2_15: input: 0 [ ]
GPIO2_16: input: 0 [ ]
GPIO2_17: input: 0 [ ]
GPIO2_18: input: 0 [ ]
GPIO2_19: input: 0 [ ]
GPIO2_20: input: 0 [ ]
GPIO2_21: input: 0 [ ]
GPIO2_22: input: 0 [ ]
GPIO2_23: input: 0 [ ]
GPIO2_24: input: 0 [ ]
GPIO2_25: input: 0 [x] GPIO_DI_LV1
GPIO2_26: input: 0 [ ]
GPIO2_27: input: 0 [ ]
GPIO2_28: input: 0 [ ]
GPIO2_29: input: 0 [ ]
GPIO2_30: input: 0 [ ]
GPIO2_31: input: 0 [ ]

Bank GPIO3_:
GPIO3_0: input: 0 [ ]
GPIO3_1: input: 0 [ ]
GPIO3_2: input: 1 [x] GPIO_DI_DEBUG_ENABLED
GPIO3_3: input: 1 [ ]
GPIO3_4: input: 0 [x] GPIO_DI_LV0
GPIO3_5: input: 1 [ ]
GPIO3_6: input: 0 [ ]
GPIO3_7: input: 0 [ ]
GPIO3_8: input: 0 [ ]
GPIO3_9: input: 1 [x] GPIO_DI_HR0
GPIO3_10: input: 1 [x] GPIO_DI_HR1
GPIO3_11: output: 0 [x] GPIO_NX1_DO_WATCHDOG
GPIO3_12: input: 0 [ ]
GPIO3_13: input: 1 [ ]
GPIO3_14: input: 1 [ ]
GPIO3_15: input: 1 [ ]
GPIO3_16: input: 1 [ ]
GPIO3_17: input: 1 [ ]
GPIO3_18: input: 0 [ ]
GPIO3_19: input: 0 [ ]
GPIO3_20: input: 1 [ ]
GPIO3_21: input: 1 [ ]
GPIO3_22: input: 1 [ ]
GPIO3_23: input: 1 [ ]
GPIO3_24: input: 1 [ ]
GPIO3_25: input: 0 [ ]
GPIO3_26: input: 0 [ ]
GPIO3_27: input: 0 [x] GPIO_NOXMB_DI_REV_E_LEGACY
GPIO3_28: input: 0 [ ]
GPIO3_29: input: 0 [ ]
GPIO3_30: input: 0 [ ]
GPIO3_31: input: 0 [ ]

Bank GPIO4_:
GPIO4_0: input: 0 [ ]
GPIO4_1: input: 0 [ ]
GPIO4_2: input: 0 [ ]
GPIO4_3: input: 1 [ ]
GPIO4_4: input: 1 [ ]
GPIO4_5: input: 1 [ ]
GPIO4_6: input: 1 [ ]
GPIO4_7: input: 0 [ ]
GPIO4_8: input: 0 [ ]
GPIO4_9: input: 0 [ ]
GPIO4_10: input: 0 [ ]
GPIO4_11: input: 0 [ ]
GPIO4_12: input: 0 [ ]
GPIO4_13: input: 0 [ ]
GPIO4_14: input: 0 [ ]
GPIO4_15: input: 0 [ ]
GPIO4_16: input: 0 [ ]
GPIO4_17: input: 0 [ ]
GPIO4_18: input: 0 [ ]
GPIO4_19: input: 1 [ ]
GPIO4_20: input: 0 [ ]
GPIO4_21: input: 0 [ ]
GPIO4_22: input: 1 [ ]
GPIO4_23: input: 0 [ ]
GPIO4_24: input: 0 [ ]
GPIO4_25: input: 0 [ ]
GPIO4_26: input: 0 [ ]
GPIO4_27: input: 0 [ ]
GPIO4_28: input: 0 [ ]
GPIO4_29: input: 0 [ ]
GPIO4_30: input: 0 [ ]
GPIO4_31: input: 0 [ ]

Bank GPIO5_:
GPIO5_0: input: 0 [x] GPIO_NOXMB_DI_REV_D_LEGACY
GPIO5_1: input: 0 [ ]
GPIO5_2: input: 1 [ ]
GPIO5_3: input: 1 [ ]
GPIO5_4: input: 0 [ ]
GPIO5_5: input: 0 [ ]
GPIO5_6: input: 0 [ ]
GPIO5_7: input: 0 [ ]
GPIO5_8: input: 0 [ ]
GPIO5_9: input: 0 [x] usb_c_det
GPIO5_10: input: 0 [ ]
GPIO5_11: input: 0 [ ]
GPIO5_12: input: 0 [ ]
GPIO5_13: input: 0 [ ]
GPIO5_14: input: 0 [ ]
GPIO5_15: input: 0 [ ]
GPIO5_16: input: 0 [ ]
GPIO5_17: input: 0 [ ]
GPIO5_18: input: 0 [ ]
GPIO5_19: input: 0 [ ]
GPIO5_20: input: 0 [ ]
GPIO5_21: input: 0 [ ]
GPIO5_22: input: 0 [ ]
GPIO5_23: input: 0 [ ]
GPIO5_24: input: 0 [ ]
GPIO5_25: input: 0 [ ]
GPIO5_26: input: 0 [ ]
GPIO5_27: input: 0 [ ]
GPIO5_28: input: 0 [ ]
GPIO5_29: input: 0 [ ]
GPIO5_30: input: 0 [ ]
GPIO5_31: input: 0 [ ]

Bank GPIO6_:
GPIO6_0: input: 0 [ ]
GPIO6_1: input: 0 [ ]
GPIO6_2: input: 0 [ ]
GPIO6_3: input: 0 [ ]
GPIO6_4: input: 0 [ ]
GPIO6_5: input: 0 [ ]
GPIO6_6: input: 0 [ ]
GPIO6_7: input: 0 [ ]
GPIO6_8: input: 0 [ ]
GPIO6_9: input: 0 [ ]
GPIO6_10: input: 0 [ ]
GPIO6_11: input: 0 [ ]
GPIO6_12: input: 0 [ ]
GPIO6_13: input: 0 [ ]
GPIO6_14: input: 0 [ ]
GPIO6_15: input: 0 [ ]
GPIO6_16: input: 0 [ ]
GPIO6_17: input: 0 [ ]
GPIO6_18: input: 0 [ ]
GPIO6_19: input: 0 [ ]
GPIO6_20: input: 0 [ ]
GPIO6_21: input: 0 [ ]
GPIO6_22: input: 0 [ ]
GPIO6_23: input: 0 [ ]
GPIO6_24: input: 0 [ ]
GPIO6_25: input: 0 [ ]
GPIO6_26: input: 0 [ ]
GPIO6_27: input: 0 [ ]
GPIO6_28: input: 0 [ ]
GPIO6_29: input: 0 [ ]
GPIO6_30: input: 0 [ ]
GPIO6_31: input: 0 [ ]

Bank GPIO7_:
GPIO7_0: input: 0 [ ]
GPIO7_1: input: 0 [ ]
GPIO7_2: input: 0 [ ]
GPIO7_3: input: 0 [ ]
GPIO7_4: input: 0 [ ]
GPIO7_5: input: 0 [ ]
GPIO7_6: input: 0 [ ]
GPIO7_7: input: 0 [ ]
GPIO7_8: input: 0 [ ]
GPIO7_9: input: 0 [ ]
GPIO7_10: input: 0 [ ]
GPIO7_11: input: 0 [ ]
GPIO7_12: input: 0 [ ]
GPIO7_13: input: 0 [ ]
GPIO7_14: input: 0 [ ]
GPIO7_15: input: 0 [ ]
GPIO7_16: input: 0 [ ]
GPIO7_17: input: 0 [ ]
GPIO7_18: input: 0 [ ]
GPIO7_19: input: 0 [ ]
GPIO7_20: input: 0 [ ]
GPIO7_21: input: 0 [ ]
GPIO7_22: input: 0 [ ]
GPIO7_23: input: 0 [ ]
GPIO7_24: input: 0 [ ]
GPIO7_25: input: 0 [ ]
GPIO7_26: input: 0 [ ]
GPIO7_27: input: 0 [ ]
GPIO7_28: input: 0 [ ]
GPIO7_29: input: 0 [ ]
GPIO7_30: input: 0 [ ]
GPIO7_31: input: 0 [ ]

Bank GPIO9_:
GPIO9_0: input: 0 [ ]
GPIO9_1: input: 0 [ ]
GPIO9_2: input: 0 [ ]
GPIO9_3: input: 0 [ ]
GPIO9_4: input: 0 [ ]
GPIO9_5: input: 0 [ ]
GPIO9_6: input: 0 [ ]
GPIO9_7: input: 0 [ ]
GPIO9_8: input: 0 [ ]
GPIO9_9: input: 0 [ ]
GPIO9_10: input: 0 [ ]
GPIO9_11: input: 0 [ ]
GPIO9_12: input: 0 [ ]
GPIO9_13: input: 0 [ ]
GPIO9_14: input: 0 [ ]
GPIO9_15: input: 0 [ ]
GPIO9_16: input: 0 [ ]
GPIO9_17: input: 0 [ ]
GPIO9_18: input: 0 [ ]
GPIO9_19: input: 0 [ ]
GPIO9_20: input: 0 [ ]
GPIO9_21: input: 0 [ ]
GPIO9_22: input: 0 [ ]
GPIO9_23: input: 0 [ ]
GPIO9_24: input: 0 [ ]
GPIO9_25: input: 0 [ ]
GPIO9_26: input: 0 [ ]
GPIO9_27: input: 0 [ ]
GPIO9_28: input: 0 [ ]
GPIO9_29: input: 0 [ ]
GPIO9_30: input: 0 [ ]
GPIO9_31: input: 0 [ ]

For me, it seems that the 8 “gpio@43_” entries at the beginning in BSP6 mess up the numeration, so the calculation in “IMX_GPIO_NR()” is not correct anymore.

What should we do to correct this? Simply subtracting the offset from the macro seems to be a bad idea… Or should this be fixed by NXP/Toradex instead?

Details:
BSP: 6.3.0 Devel
Module: Colibri IMX8QXP 2GB IT
Carrierboard: Custom

Please let me know if you need more Information.

Thanks and Regards,

Simon

Hello @SimonG ,
We are aware of this change of behavior. Here is a related thread.

Please let us know it this helps you.

Best regards,
Josep

Hello @josep.tx

Thanks for your response.

I’ve checked the thread, and it seems that it’s indeed a similar problem here.
However, in the thread, the issue seems to be in a linux devicetree rather than u-boot. So I think I can’t use functions like “gpiofind” in my case, because in u-boot there’s no libgpio.
I’d prefer not to modify the existing devicetrees, because it might have unknown side effects.

IMHO something must be changed here, because if the numeration can’t be guaranteed, there’s no way to get the correct mappings, e.g. the Toradex Pinout designer also lists the wrong/outdated mappings in this case.

It would also mean that potentially every change/update to the BSP will have the potential risk of changing the GPIO’s order (again), in U-boot and in Linux, am I right?
We don’t want to fully check and probably modify u-boot and all devicetrees every time we update the BSP.

So this raises the following questions:

  • In U-Boot: How to get the correct GPIO index for a specific SODIMM, if IMX_GPIO_NR() is not working properly here, in a future-proof solution?
  • In Linux: Because we write our own devicetrees for our custom carrierboards (based on the colibir-eval.dtsi and iris.dtsi), we’re facing a similar problem here (libgpio depends on the active devicetree). It seems that from BSP 5 to 6 the start of the gpios has shifted from gpiochip0,0 to gpiochip1,0 (This is also true for the tdx reference image).

The devictree configuration says it should start at &lsio_gpio0.

BSP5, Linux (Mapping okay)
gpioinfo
gpiochip0 - 32 lines:
        line   0:      unnamed       unused   input  active-high
        line   1:  "SODIMM_70"       unused   input  active-high
        line   2:  "SODIMM_60"       unused   input  active-high
        line   3:  "SODIMM_58"       unused   input  active-high
        line   4:  "SODIMM_78"       unused   input  active-high
        line   5:  "SODIMM_72"       unused   input  active-high
        line   6:  "SODIMM_80"       unused   input  active-high
        line   7:  "SODIMM_46"       unused   input  active-high
        line   8:  "SODIMM_62"       unused   input  active-high
        line   9:  "SODIMM_48"       unused   input  active-high
        line  10:  "SODIMM_74"       unused   input  active-high
        line  11:  "SODIMM_50"       unused   input  active-high
        line  12:  "SODIMM_52"       unused   input  active-high
        line  13:  "SODIMM_54"       unused   input  active-high
        line  14:  "SODIMM_66"       unused   input  active-high
        line  15:  "SODIMM_64"       unused   input  active-high
        line  16:  "SODIMM_68"       unused   input  active-high
        line  17:      unnamed       unused   input  active-high
        line  18:      unnamed       unused   input  active-high
        line  19:  "SODIMM_82"       unused   input  active-high
        line  20:  "SODIMM_56"       unused   input  active-high
        line  21: "SODIMM_28_UART1_TX_DEBUG" unused input active-high
        line  22: "SODIMM_30_UART1_RX_DEBUG" unused input active-high
        line  23:      unnamed       unused   input  active-high
        line  24:  "SODIMM_61"       unused   input  active-high
        line  25: "SODIMM_103_DI_(CPU_HR2)" unused input active-high
        line  26: "SODIMM_79_DI_(CPU_LV2)" unused input active-high
        line  27:      unnamed       unused   input  active-high
        line  28:      unnamed       unused   input  active-high
        line  29:  "SODIMM_25"       unused   input  active-high
        line  30:  "SODIMM_27"       unused   input  active-high
        line  31: "SODIMM_100"       unused   input  active-high
gpiochip1 - 32 lines:
        line   0:  "SODIMM_86"  "fsl_lpspi"   input  active-high [used]
        line   1: "SODIMM_92_DI_(CPU_RX-BUSY2)" unused input active-high
        line   2: "SODIMM_90_DO_(CPU_TX-DISABLE3)" unused input active-high
        line   3: "SODIMM_88_DI_(CPU_RX-BUSY3)" unused input active-high
        line   4:      unnamed       unused   input  active-high
        line   5:      unnamed       unused   input  active-high
        line   6:      unnamed       unused   input  active-high
        line   7:  "SODIMM_59"       unused   input  active-high
        line   8:      unnamed       unused   input  active-high
        line   9:   "SODIMM_6"       unused   input  active-high
        line  10:   "SODIMM_8"       unused   input  active-high
        line  11:      unnamed       unused   input  active-high
        line  12:      unnamed       unused   input  active-high
        line  13:   "SODIMM_2"       unused   input  active-high
        line  14:   "SODIMM_4"       unused   input  active-high
        line  15:  "SODIMM_34"       unused   input  active-high
        line  16:  "SODIMM_32"       unused   input  active-high
        line  17:  "SODIMM_63"       unused   input  active-high
        line  18:  "SODIMM_55"       unused   input  active-high
        line  19: "SODIMM_33_UART3_RX_NXB1" unused input active-high
        line  20: "SODIMM_35_UART3_TX_NXB1" unused input active-high
        line  21: "SODIMM_36_UART0_RX_NXB2" unused input active-high
        line  22: "SODIMM_38_UART0_TX_NXB2" unused input active-high
        line  23: "SODIMM_21_UART2_TX_NXB3" unused input active-high
        line  24: "SODIMM_19_UART2_RX_NXB3" unused input active-high
        line  25: "SODIMM_140_DI_(CPU_LV1_LEGACY)" unused input active-high
        line  26: "SODIMM_142_DI_(CPU_LV2_LEGACY)" unused input active-high
        line  27: "SODIMM_196_I2C1_SCL_RTC" unused input active-high
        line  28: "SODIMM_194_I2C1_SDA_RTC" unused input active-high
        line  29: "SODIMM_186"       unused   input  active-high
        line  30: "SODIMM_188"       unused   input  active-high
        line  31: "SODIMM_138_DI_(CPU_LV0_LEGACY)" unused input active-high
gpiochip2 - 32 lines:
        line   0:  "SODIMM_23"       unused   input  active-high
        line   1:      unnamed       unused   input  active-high
        line   2:      unnamed       unused   input  active-high
        line   3: "SODIMM_144"       unused   input  active-high
        line   4:      unnamed       unused   input  active-high
        line   5:      unnamed       unused   input  active-high
        line   6:      unnamed       unused   input  active-high
        line   7:      unnamed       unused   input  active-high
        line   8:      unnamed       unused   input  active-high
        line   9:      unnamed       unused   input  active-high
        line  10:      unnamed       unused   input  active-high
        line  11:      unnamed       unused   input  active-high
        line  12:      unnamed       unused   input  active-high
        line  13:      unnamed       unused   input  active-high
        line  14:      unnamed       unused   input  active-high
        line  15:      unnamed       unused   input  active-high
        line  16:      unnamed       unused   input  active-high
        line  17:      unnamed       unused   input  active-high
        line  18:      unnamed       unused   input  active-high
        line  19:      unnamed       unused   input  active-high
        line  20:      unnamed       unused   input  active-high
        line  21:      unnamed       unused   input  active-high
        line  22:      unnamed       unused   input  active-high
        line  23:      unnamed       unused   input  active-high
        line  24:      unnamed       unused   input  active-high
        line  25:      unnamed       unused   input  active-high
        line  26:      unnamed       unused   input  active-high
        line  27:      unnamed       unused   input  active-high
        line  28:      unnamed       unused   input  active-high
        line  29:      unnamed       unused   input  active-high
        line  30:      unnamed       unused   input  active-high
        line  31:      unnamed       unused   input  active-high
<cut because post is too long>
gpiochip6 - 32 lines:
        line   0:      unnamed       unused   input  active-high
        line   1:      unnamed       unused   input  active-high
        line   2:      unnamed       unused   input  active-high
        line   3:      unnamed       unused   input  active-high
        line   4:      unnamed       unused   input  active-high
        line   5:      unnamed       unused   input  active-high
        line   6:      unnamed       unused   input  active-high
        line   7:      unnamed       unused   input  active-high
        line   8:      unnamed       unused   input  active-high
        line   9:      unnamed       unused   input  active-high
        line  10:      unnamed       unused   input  active-high
        line  11:      unnamed       unused   input  active-high
        line  12:      unnamed       unused   input  active-high
        line  13:      unnamed       unused   input  active-high
        line  14:      unnamed       unused   input  active-high
        line  15:      unnamed       unused   input  active-high
        line  16:      unnamed       unused   input  active-high
        line  17:      unnamed       unused   input  active-high
        line  18:      unnamed       unused   input  active-high
        line  19:      unnamed       unused   input  active-high
        line  20:      unnamed       unused   input  active-high
        line  21:      unnamed       unused   input  active-high
        line  22:      unnamed       unused   input  active-high
        line  23:      unnamed       unused   input  active-high
        line  24:      unnamed       unused   input  active-high
        line  25:      unnamed       unused   input  active-high
        line  26:      unnamed       unused   input  active-high
        line  27:      unnamed       unused   input  active-high
        line  28:      unnamed       unused   input  active-high
        line  29:      unnamed       unused   input  active-high
        line  30:      unnamed       unused   input  active-high
        line  31:      unnamed       unused   input  active-high
gpiochip7 - 32 lines:
        line   0:      unnamed       unused   input  active-high
        line   1:      unnamed       unused   input  active-high
        line   2:      unnamed       unused   input  active-high
        line   3:      unnamed       unused   input  active-high
        line   4:      unnamed       unused   input  active-high
        line   5:      unnamed       unused   input  active-high
        line   6:      unnamed       unused   input  active-high
        line   7:      unnamed       unused   input  active-high
        line   8:      unnamed       unused   input  active-high
        line   9:      unnamed       unused   input  active-high
        line  10:      unnamed       unused   input  active-high
        line  11:      unnamed       unused   input  active-high
        line  12:      unnamed       unused   input  active-high
        line  13:      unnamed       unused   input  active-high
        line  14:      unnamed       unused   input  active-high
        line  15:      unnamed       unused   input  active-high
        line  16:      unnamed       unused   input  active-high
        line  17:      unnamed       unused   input  active-high
        line  18:      unnamed       unused   input  active-high
        line  19:      unnamed       unused   input  active-high
        line  20:      unnamed       unused   input  active-high
        line  21:      unnamed       unused   input  active-high
        line  22:      unnamed       unused   input  active-high
        line  23:      unnamed       unused   input  active-high
        line  24:      unnamed       unused   input  active-high
        line  25:      unnamed       unused   input  active-high
        line  26:      unnamed       unused   input  active-high
        line  27:      unnamed       unused   input  active-high
        line  28:      unnamed       unused   input  active-high
        line  29:      unnamed       unused   input  active-high
        line  30:      unnamed       unused   input  active-high
        line  31:      unnamed       unused   input  active-high
gpiochip8 - 32 lines:
        line   0:      unnamed       unused   input  active-high
        line   1:      unnamed       unused   input  active-high
        line   2:      unnamed       unused   input  active-high
        line   3:      unnamed       unused   input  active-high
        line   4:      unnamed       unused   input  active-high
        line   5:      unnamed       unused   input  active-high
        line   6:      unnamed       unused   input  active-high
        line   7:      unnamed       unused   input  active-high
        line   8:      unnamed       unused   input  active-high
        line   9:      unnamed       unused   input  active-high
        line  10:      unnamed       unused   input  active-high
        line  11:      unnamed       unused   input  active-high
        line  12:      unnamed       unused   input  active-high
        line  13:      unnamed       unused   input  active-high
        line  14:      unnamed       unused   input  active-high
        line  15:      unnamed       unused   input  active-high
        line  16:      unnamed       unused   input  active-high
        line  17:      unnamed       unused   input  active-high
        line  18:      unnamed       unused   input  active-high
        line  19:      unnamed       unused   input  active-high
        line  20:      unnamed       unused   input  active-high
        line  21:      unnamed       unused   input  active-high
        line  22:      unnamed       unused   input  active-high
        line  23:      unnamed       unused   input  active-high
        line  24:      unnamed       unused   input  active-high
        line  25:      unnamed       unused   input  active-high
        line  26:      unnamed       unused   input  active-high
        line  27:      unnamed       unused   input  active-high
        line  28:      unnamed       unused   input  active-high
        line  29:      unnamed       unused   input  active-high
        line  30:      unnamed       unused   input  active-high
        line  31:      unnamed       unused   input  active-high
BSP 6, Linux (Start of GPIOs has shifted from chip 0 to 1)
gpioinfo
gpiochip0 - 32 lines:
        line   0:      unnamed       unused   input  active-high
        line   1:      unnamed       unused   input  active-high
        line   2:      unnamed       unused   input  active-high
        line   3:      unnamed       unused   input  active-high
        line   4:      unnamed       unused   input  active-high
        line   5:      unnamed       unused   input  active-high
        line   6:      unnamed       unused   input  active-high
        line   7:      unnamed       unused   input  active-high
        line   8:      unnamed       unused   input  active-high
        line   9:      unnamed       unused   input  active-high
        line  10:      unnamed       unused   input  active-high
        line  11:      unnamed       unused   input  active-high
        line  12:      unnamed       unused   input  active-high
        line  13:      unnamed       unused   input  active-high
        line  14:      unnamed       unused   input  active-high
        line  15:      unnamed       unused   input  active-high
        line  16:      unnamed       unused   input  active-high
        line  17:      unnamed       unused   input  active-high
        line  18:      unnamed       unused   input  active-high
        line  19:      unnamed       unused   input  active-high
        line  20:      unnamed       unused   input  active-high
        line  21:      unnamed       unused   input  active-high
        line  22:      unnamed       unused   input  active-high
        line  23:      unnamed       unused   input  active-high
        line  24:      unnamed       unused   input  active-high
        line  25:      unnamed       unused   input  active-high
        line  26:      unnamed       unused   input  active-high
        line  27:      unnamed       unused   input  active-high
        line  28:      unnamed       unused   input  active-high
        line  29:      unnamed       unused   input  active-high
        line  30:      unnamed       unused   input  active-high
        line  31:      unnamed       unused   input  active-high
gpiochip1 - 32 lines:
        line   0:      unnamed       unused   input  active-high
        line   1:  "SODIMM_70"       unused   input  active-high
        line   2:  "SODIMM_60"       unused   input  active-high
        line   3:  "SODIMM_58"       unused   input  active-high
        line   4:  "SODIMM_78"       unused   input  active-high
        line   5:  "SODIMM_72"       unused   input  active-high
        line   6:  "SODIMM_80"       unused   input  active-high
        line   7:  "SODIMM_46"       unused   input  active-high
        line   8:  "SODIMM_62"       unused   input  active-high
        line   9:  "SODIMM_48"       unused   input  active-high
        line  10:  "SODIMM_74"       unused   input  active-high
        line  11:  "SODIMM_50"       unused   input  active-high
        line  12:  "SODIMM_52"       unused   input  active-high
        line  13:  "SODIMM_54"       unused   input  active-high
        line  14:  "SODIMM_66"       unused   input  active-high
        line  15:  "SODIMM_64"       unused   input  active-high
        line  16:  "SODIMM_68"       unused   input  active-high
        line  17:      unnamed       unused   input  active-high
        line  18:      unnamed       unused   input  active-high
        line  19:  "SODIMM_82"       unused   input  active-high
        line  20:  "SODIMM_56"       unused   input  active-high
        line  21:  "SODIMM_28"       unused   input  active-high
        line  22:  "SODIMM_30"       unused   input  active-high
        line  23:      unnamed       unused   input  active-high
        line  24:  "SODIMM_61"       unused   input  active-high
        line  25: "SODIMM_103"       unused   input  active-high
        line  26:      unnamed       unused   input  active-high
        line  27:      unnamed       unused   input  active-high
        line  28:      unnamed       unused   input  active-high
        line  29:  "SODIMM_25"       unused   input  active-high
        line  30:  "SODIMM_27"       unused   input  active-high
        line  31: "SODIMM_100"       unused   input  active-high
gpiochip2 - 32 lines:
        line   0:  "SODIMM_86"   "spi0 CS0"  output   active-low [used]
        line   1:  "SODIMM_92"       unused   input  active-high
        line   2:  "SODIMM_90"       unused   input  active-high
        line   3:  "SODIMM_88"       unused   input  active-high
        line   4:      unnamed       unused   input  active-high
        line   5:      unnamed       unused   input  active-high
        line   6:      unnamed       unused   input  active-high
        line   7:  "SODIMM_59"       unused   input  active-high
        line   8:      unnamed       unused   input  active-high
        line   9:   "SODIMM_6"       unused   input  active-high
        line  10:   "SODIMM_8"       unused   input  active-high
        line  11:      unnamed       unused   input  active-high
        line  12:      unnamed       unused   input  active-high
        line  13:   "SODIMM_2"       unused   input  active-high
        line  14:   "SODIMM_4"       unused   input  active-high
        line  15:  "SODIMM_34"       unused   input  active-high
        line  16:  "SODIMM_32"       unused   input  active-high
        line  17:  "SODIMM_63"       unused   input  active-high
        line  18:  "SODIMM_55"       unused   input  active-high
        line  19:  "SODIMM_33"       unused   input  active-high
        line  20:  "SODIMM_35"       unused   input  active-high
        line  21:  "SODIMM_36"       unused   input  active-high
        line  22:  "SODIMM_38"       unused   input  active-high
        line  23:  "SODIMM_21"       unused   input  active-high
        line  24:  "SODIMM_19"       unused   input  active-high
        line  25: "SODIMM_140"       unused   input  active-high
        line  26: "SODIMM_142"       unused   input  active-high
        line  27: "SODIMM_196"       unused   input  active-high
        line  28: "SODIMM_194"       unused   input  active-high
        line  29: "SODIMM_186"       unused   input  active-high
        line  30: "SODIMM_188"       unused   input  active-high
        line  31: "SODIMM_138"       unused   input  active-high
gpiochip3 - 32 lines:
        line   0:  "SODIMM_23"       unused   input  active-high
        line   1:      unnamed       unused   input  active-high
        line   2:      unnamed       unused   input  active-high
        line   3: "SODIMM_144"       unused   input  active-high
        line   4:      unnamed       unused   input  active-high
        line   5:      unnamed       unused   input  active-high
        line   6:      unnamed       unused   input  active-high
        line   7:      unnamed       unused   input  active-high
        line   8:      unnamed       unused   input  active-high
        line   9:      unnamed       unused   input  active-high
        line  10:      unnamed       unused   input  active-high
        line  11:      unnamed       unused   input  active-high
        line  12:      unnamed       unused   input  active-high
        line  13:      unnamed       unused   input  active-high
        line  14:      unnamed       unused   input  active-high
        line  15:      unnamed       unused   input  active-high
        line  16:      unnamed       unused   input  active-high
        line  17:      unnamed       unused   input  active-high
        line  18:      unnamed       unused   input  active-high
        line  19:      unnamed       unused   input  active-high
        line  20:      unnamed       unused   input  active-high
        line  21:      unnamed       unused   input  active-high
        line  22:      unnamed       unused   input  active-high
        line  23:      unnamed       unused   input  active-high
        line  24:      unnamed       unused   input  active-high
        line  25:      unnamed       unused   input  active-high
        line  26:      unnamed       unused   input  active-high
        line  27:      unnamed       unused   input  active-high
        line  28:      unnamed       unused   input  active-high
        line  29:      unnamed       unused   input  active-high
        line  30:      unnamed       unused   input  active-high
        line  31:      unnamed       unused   input  active-high
<cut because post is too long>
gpiochip8 - 32 lines:
        line   0:      unnamed       unused   input  active-high
        line   1:      unnamed       unused   input  active-high
        line   2:      unnamed       unused   input  active-high
        line   3:      unnamed       unused   input  active-high
        line   4:      unnamed       unused   input  active-high
        line   5:      unnamed       unused   input  active-high
        line   6:      unnamed       unused   input  active-high
        line   7:      unnamed       unused   input  active-high
        line   8:      unnamed       unused   input  active-high
        line   9:      unnamed       unused   input  active-high
        line  10:      unnamed       unused   input  active-high
        line  11:      unnamed       unused   input  active-high
        line  12:      unnamed       unused   input  active-high
        line  13:      unnamed       unused   input  active-high
        line  14:      unnamed       unused   input  active-high
        line  15:      unnamed       unused   input  active-high
        line  16:      unnamed       unused   input  active-high
        line  17:      unnamed       unused   input  active-high
        line  18:      unnamed       unused   input  active-high
        line  19:      unnamed       unused   input  active-high
        line  20:      unnamed       unused   input  active-high
        line  21:      unnamed       unused   input  active-high
        line  22:      unnamed       unused   input  active-high
        line  23:      unnamed       unused   input  active-high
        line  24:      unnamed       unused   input  active-high
        line  25:      unnamed       unused   input  active-high
        line  26:      unnamed       unused   input  active-high
        line  27:      unnamed       unused   input  active-high
        line  28:      unnamed       unused   input  active-high
        line  29:      unnamed       unused   input  active-high
        line  30:      unnamed       unused   input  active-high
        line  31:      unnamed       unused   input  active-high
gpiochip9 - 8 lines:
        line   0: "Wi-Fi_W_DISABLE" unused output active-high
        line   1: "Wi-Fi_WKUP_WLAN" unused output active-high
        line   2: "PWR_EN_+V3.3_WiFi_N" unused output active-high
        line   3: "PCIe_REF_CLK_EN" "pcie-clk-on-hog" output active-high [used]
        line   4: "USB_RESET_N" "usb3503 reset" output active-low [used]
        line   5: "USB_BYPASS_N" "usb3503 bypass" output active-low [used]
        line   6:  "Wi-Fi_PDn" "wifi-power-on-hog" output active-high [used]
        line   7: "Wi-Fi_WKUP_BT" unused output active-high

Hello @SimonG ,
I have been able to reproduce your issue and we are discussing it internally.

Best regards,
Josep

1 Like

Hello @josep.tx

Any update on this?

Best regards,
Simon

Hi @SimonG ,

Sorry for the lengthy delay.

Using chip and line numbers to refer to the GPIO is not recommended.

A more reliable way is to use something like in this piece of code here:

https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/tree/examples/find_line_by_name.c

It is important, that the GPIOs you’re planning to use also have a dedicated name assigned. This can be achieved in the device tree.

Have a great day!

Best Regards
Kevin

Hi @kevin.tx

Thanks for your response.

We now switched to gpiod_ctxless_find_line() for finding the chip and line using the name defined in the device tree and open it using gpiod_chip_open_by_name() / gpiod_chip_get_line().

For the bootloader, there seems to be no nice solution so far, we’re just adding an offset to the number:

#define IMX8_GPIONR_OFFSET 8 /* BSP6 has shifted pins */
#define GPIO_DI_LV0_LEGACY	           (IMX_GPIO_NR(1,31) + IMX8_GPIONR_OFFSET) /* SODIMM 138, AKA HC0 */
    #define GPIO_DI_LV1_LEGACY	           (IMX_GPIO_NR(1,25) + IMX8_GPIONR_OFFSET) /* SODIMM 140, AKA HC1 */
    #define GPIO_DI_LV2_LEGACY	           (IMX_GPIO_NR(1,26) + IMX8_GPIONR_OFFSET) /* SODIMM 142, AKA HC2 */
    #define GPIO_NOXMB_DI_REV_D_LEGACY     (IMX_GPIO_NR(5, 8) + IMX8_GPIONR_OFFSET) /* SODIMM 135 */
    #define GPIO_NOXMB_DI_REV_E_LEGACY     (IMX_GPIO_NR(4, 3) + IMX8_GPIONR_OFFSET) /* SODIMM 129 */
    /* New hardware detection */
    #define GPIO_DI_CHECK_BOARDTYPE        (IMX_GPIO_NR(1,24) + IMX8_GPIONR_OFFSET) /* SODIMM 19 */
    #define GPIO_DI_DEBUG_ENABLED          (IMX_GPIO_NR(3,10) + IMX8_GPIONR_OFFSET) /* SODIMM 45 */
    #define GPIO_DI_LV0                    (IMX_GPIO_NR(3,12) + IMX8_GPIONR_OFFSET) /* SODIMM 71 */
    #define GPIO_DI_LV1                    (IMX_GPIO_NR(3, 1) + IMX8_GPIONR_OFFSET) /* SODIMM 75 */
    #define GPIO_DI_LV2                    (IMX_GPIO_NR(0,26) + IMX8_GPIONR_OFFSET) /* SODIMM 79 */
    #define GPIO_DI_HR0	                   (IMX_GPIO_NR(0,13) + IMX8_GPIONR_OFFSET) /* SODIMM 54 */
    #define GPIO_DI_HR1	                   (IMX_GPIO_NR(0,12) + IMX8_GPIONR_OFFSET) /* SODIMM 52 */
    #define GPIO_DI_HR2	                   (IMX_GPIO_NR(0,11) + IMX8_GPIONR_OFFSET) /* SODIMM 50 */
    #define GPIO_NX1_DO_WATCHDOG           (IMX_GPIO_NR(3,19) + IMX8_GPIONR_OFFSET) /* SODIMM_105 */ 

Because that’s what gpio status -a outputs on BSP6 (Bank gpio@43_ offsets GPIO0_0 by 8):


Bank gpio@43_:
gpio@43_0: output: 1 [ ]
gpio@43_1: output: 0 [ ]
gpio@43_2: output: 1 [ ]
gpio@43_3: output: 0 [ ]
gpio@43_4: output: 0 [ ]
gpio@43_5: output: 0 [ ]
gpio@43_6: output: 0 [ ]
gpio@43_7: output: 0 [ ]

Bank GPIO0_:
GPIO0_0: input: 0 [ ]
GPIO0_1: input: 0 [ ]
GPIO0_2: input: 0 [ ]
GPIO0_3: input: 0 [ ]
GPIO0_4: input: 0 [ ]
GPIO0_5: input: 0 [ ]
GPIO0_6: input: 0 [ ]
GPIO0_7: input: 0 [ ]
GPIO0_8: input: 0 [ ]
GPIO0_9: input: 0 [ ]
GPIO0_10: input: 0 [ ]
GPIO0_11: input: 0 [x] GPIO_DI_HR2
GPIO0_12: input: 0 [x] GPIO_DI_HR1
GPIO0_13: input: 1 [x] GPIO_DI_HR0
GPIO0_14: input: 0 [ ]
GPIO0_15: input: 0 [ ]
GPIO0_16: input: 0 [ ]
GPIO0_17: input: 0 [ ]
GPIO0_18: input: 0 [ ]
GPIO0_19: input: 0 [ ]
GPIO0_20: input: 0 [ ]
GPIO0_21: input: 0 [ ]
GPIO0_22: input: 0 [ ]
GPIO0_23: input: 0 [ ]
GPIO0_24: input: 0 [ ]
GPIO0_25: input: 1 [ ]
GPIO0_26: input: 0 [x] GPIO_DI_LV2
GPIO0_27: input: 1 [ ]
GPIO0_28: input: 1 [ ]
GPIO0_29: input: 0 [ ]
GPIO0_30: input: 0 [ ]
GPIO0_31: input: 1 [ ]

Bank GPIO1_:
GPIO1_0: input: 0 [ ]
GPIO1_1: input: 0 [ ]
GPIO1_2: input: 1 [ ]
GPIO1_3: input: 0 [ ]
GPIO1_4: input: 0 [ ]
GPIO1_5: input: 0 [ ]
GPIO1_6: input: 0 [ ]
GPIO1_7: input: 0 [ ]
GPIO1_8: input: 0 [ ]
GPIO1_9: input: 0 [ ]
GPIO1_10: input: 0 [ ]
GPIO1_11: input: 0 [ ]
GPIO1_12: input: 0 [ ]
GPIO1_13: input: 0 [ ]
GPIO1_14: input: 0 [ ]
GPIO1_15: input: 0 [ ]
GPIO1_16: input: 0 [ ]
GPIO1_17: input: 0 [ ]
GPIO1_18: input: 0 [ ]
GPIO1_19: input: 0 [ ]
GPIO1_20: input: 0 [ ]
GPIO1_21: input: 0 [ ]
GPIO1_22: input: 0 [ ]
GPIO1_23: input: 0 [ ]
GPIO1_24: input: 1 [x] GPIO_DI_CHECK_BOARDTYPE
GPIO1_25: input: 0 [x] GPIO_DI_LV1_LEGACY
GPIO1_26: input: 0 [x] GPIO_DI_LV2_LEGACY
GPIO1_27: input: 0 [ ]
GPIO1_28: input: 0 [ ]
GPIO1_29: input: 0 [ ]
GPIO1_30: input: 0 [ ]
GPIO1_31: input: 0 [x] GPIO_DI_LV0_LEGACY

Bank GPIO2_:
GPIO2_0: input: 0 [ ]
GPIO2_1: input: 0 [ ]
GPIO2_2: input: 0 [ ]
GPIO2_3: input: 0 [ ]
GPIO2_4: input: 0 [ ]
GPIO2_5: input: 0 [ ]
GPIO2_6: input: 0 [ ]
GPIO2_7: input: 0 [ ]
GPIO2_8: input: 0 [ ]
GPIO2_9: input: 0 [ ]
GPIO2_10: input: 0 [ ]
GPIO2_11: input: 0 [ ]
GPIO2_12: input: 0 [ ]
GPIO2_13: input: 0 [ ]
GPIO2_14: input: 0 [ ]
GPIO2_15: input: 0 [ ]
GPIO2_16: input: 0 [ ]
GPIO2_17: input: 0 [ ]
GPIO2_18: input: 0 [ ]
GPIO2_19: input: 0 [ ]
GPIO2_20: input: 0 [ ]
GPIO2_21: input: 0 [ ]
GPIO2_22: input: 0 [ ]
GPIO2_23: input: 0 [ ]
GPIO2_24: input: 0 [ ]
GPIO2_25: input: 0 [ ]
GPIO2_26: input: 0 [ ]
GPIO2_27: input: 0 [ ]
GPIO2_28: input: 0 [ ]
GPIO2_29: input: 0 [ ]
GPIO2_30: input: 0 [ ]
GPIO2_31: input: 0 [ ]

Bank GPIO3_:
GPIO3_0: input: 0 [ ]
GPIO3_1: input: 0 [x] GPIO_DI_LV1
GPIO3_2: input: 0 [ ]
GPIO3_3: input: 0 [ ]
GPIO3_4: input: 0 [ ]
GPIO3_5: input: 1 [ ]
GPIO3_6: input: 0 [ ]
GPIO3_7: input: 0 [ ]
GPIO3_8: input: 0 [ ]
GPIO3_9: input: 1 [x] usdhc@5b020000.cd-gpios
GPIO3_10: input: 1 [x] GPIO_DI_DEBUG_ENABLED
GPIO3_11: input: 1 [ ]
GPIO3_12: input: 0 [x] GPIO_DI_LV0
GPIO3_13: input: 1 [ ]
GPIO3_14: input: 1 [ ]
GPIO3_15: input: 1 [ ]
GPIO3_16: input: 1 [ ]
GPIO3_17: input: 1 [ ]
GPIO3_18: input: 1 [ ]
GPIO3_19: output: 0 [x] GPIO_NX1_DO_WATCHDOG
GPIO3_20: input: 1 [ ]
GPIO3_21: input: 1 [ ]
GPIO3_22: input: 1 [ ]
GPIO3_23: input: 1 [ ]
GPIO3_24: input: 1 [ ]
GPIO3_25: input: 0 [ ]
GPIO3_26: input: 0 [ ]
GPIO3_27: input: 0 [ ]
GPIO3_28: input: 0 [ ]
GPIO3_29: input: 0 [ ]
GPIO3_30: input: 0 [ ]
GPIO3_31: input: 0 [ ]

Bank GPIO4_:
GPIO4_0: input: 0 [ ]
GPIO4_1: input: 0 [ ]
GPIO4_2: input: 0 [ ]
GPIO4_3: input: 1 [x] GPIO_NOXMB_DI_REV_E_LEGACY
GPIO4_4: input: 1 [ ]
GPIO4_5: input: 1 [ ]
GPIO4_6: input: 1 [ ]
GPIO4_7: input: 0 [ ]
GPIO4_8: input: 0 [ ]
GPIO4_9: input: 0 [ ]
GPIO4_10: input: 0 [ ]
GPIO4_11: input: 0 [ ]
GPIO4_12: input: 0 [ ]
GPIO4_13: input: 0 [ ]
GPIO4_14: input: 0 [ ]
GPIO4_15: input: 0 [ ]
GPIO4_16: input: 0 [ ]
GPIO4_17: input: 0 [ ]
GPIO4_18: input: 0 [ ]
GPIO4_19: input: 1 [ ]
GPIO4_20: input: 0 [ ]
GPIO4_21: input: 0 [ ]
GPIO4_22: input: 1 [ ]
GPIO4_23: input: 0 [ ]
GPIO4_24: input: 0 [ ]
GPIO4_25: input: 0 [ ]
GPIO4_26: input: 0 [ ]
GPIO4_27: input: 0 [ ]
GPIO4_28: input: 0 [ ]
GPIO4_29: input: 0 [ ]
GPIO4_30: input: 0 [ ]
GPIO4_31: input: 0 [ ]

Bank GPIO5_:
GPIO5_0: input: 0 [ ]
GPIO5_1: input: 0 [ ]
GPIO5_2: input: 1 [ ]
GPIO5_3: input: 1 [ ]
GPIO5_4: input: 0 [ ]
GPIO5_5: input: 0 [ ]
GPIO5_6: input: 0 [ ]
GPIO5_7: input: 0 [ ]
GPIO5_8: input: 0 [x] GPIO_NOXMB_DI_REV_D_LEGACY
GPIO5_9: input: 0 [x] usb_c_det
GPIO5_10: input: 0 [ ]
GPIO5_11: input: 0 [ ]
GPIO5_12: input: 0 [ ]
GPIO5_13: input: 0 [ ]
GPIO5_14: input: 0 [ ]
GPIO5_15: input: 0 [ ]
GPIO5_16: input: 0 [ ]
GPIO5_17: input: 0 [ ]
GPIO5_18: input: 0 [ ]
GPIO5_19: input: 0 [ ]
GPIO5_20: input: 0 [ ]
GPIO5_21: input: 0 [ ]
GPIO5_22: input: 0 [ ]
GPIO5_23: input: 0 [ ]
GPIO5_24: input: 0 [ ]
GPIO5_25: input: 0 [ ]
GPIO5_26: input: 0 [ ]
GPIO5_27: input: 0 [ ]
GPIO5_28: input: 0 [ ]
GPIO5_29: input: 0 [ ]
GPIO5_30: input: 0 [ ]
GPIO5_31: input: 0 [ ]

Bank GPIO6_:
GPIO6_0: input: 0 [ ]
GPIO6_1: input: 0 [ ]
GPIO6_2: input: 0 [ ]
GPIO6_3: input: 0 [ ]
GPIO6_4: input: 0 [ ]
GPIO6_5: input: 0 [ ]
GPIO6_6: input: 0 [ ]
GPIO6_7: input: 0 [ ]
GPIO6_8: input: 0 [ ]
GPIO6_9: input: 0 [ ]
GPIO6_10: input: 0 [ ]
GPIO6_11: input: 0 [ ]
GPIO6_12: input: 0 [ ]
GPIO6_13: input: 0 [ ]
GPIO6_14: input: 0 [ ]
GPIO6_15: input: 0 [ ]
GPIO6_16: input: 0 [ ]
GPIO6_17: input: 0 [ ]
GPIO6_18: input: 0 [ ]
GPIO6_19: input: 0 [ ]
GPIO6_20: input: 0 [ ]
GPIO6_21: input: 0 [ ]
GPIO6_22: input: 0 [ ]
GPIO6_23: input: 0 [ ]
GPIO6_24: input: 0 [ ]
GPIO6_25: input: 0 [ ]
GPIO6_26: input: 0 [ ]
GPIO6_27: input: 0 [ ]
GPIO6_28: input: 0 [ ]
GPIO6_29: input: 0 [ ]
GPIO6_30: input: 0 [ ]
GPIO6_31: input: 0 [ ]

Bank GPIO7_:
GPIO7_0: input: 0 [ ]
GPIO7_1: input: 0 [ ]
GPIO7_2: input: 0 [ ]
GPIO7_3: input: 0 [ ]
GPIO7_4: input: 0 [ ]
GPIO7_5: input: 0 [ ]
GPIO7_6: input: 0 [ ]
GPIO7_7: input: 0 [ ]
GPIO7_8: input: 0 [ ]
GPIO7_9: input: 0 [ ]
GPIO7_10: input: 0 [ ]
GPIO7_11: input: 0 [ ]
GPIO7_12: input: 0 [ ]
GPIO7_13: input: 0 [ ]
GPIO7_14: input: 0 [ ]
GPIO7_15: input: 0 [ ]
GPIO7_16: input: 0 [ ]
GPIO7_17: input: 0 [ ]
GPIO7_18: input: 0 [ ]
GPIO7_19: input: 0 [ ]
GPIO7_20: input: 0 [ ]
GPIO7_21: input: 0 [ ]
GPIO7_22: input: 0 [ ]
GPIO7_23: input: 0 [ ]
GPIO7_24: input: 0 [ ]
GPIO7_25: input: 0 [ ]
GPIO7_26: input: 0 [ ]
GPIO7_27: input: 0 [ ]
GPIO7_28: input: 0 [ ]
GPIO7_29: input: 0 [ ]
GPIO7_30: input: 0 [ ]
GPIO7_31: input: 0 [ ]

Bank GPIO9_:
GPIO9_0: input: 0 [ ]
GPIO9_1: input: 0 [ ]
GPIO9_2: input: 0 [ ]
GPIO9_3: input: 0 [ ]
GPIO9_4: input: 0 [ ]
GPIO9_5: input: 0 [ ]
GPIO9_6: input: 0 [ ]
GPIO9_7: input: 0 [ ]
GPIO9_8: input: 0 [ ]
GPIO9_9: input: 0 [ ]
GPIO9_10: input: 0 [ ]
GPIO9_11: input: 0 [ ]
GPIO9_12: input: 0 [ ]
GPIO9_13: input: 0 [ ]
GPIO9_14: input: 0 [ ]
GPIO9_15: input: 0 [ ]
GPIO9_16: input: 0 [ ]
GPIO9_17: input: 0 [ ]
GPIO9_18: input: 0 [ ]
GPIO9_19: input: 0 [ ]
GPIO9_20: input: 0 [ ]
GPIO9_21: input: 0 [ ]
GPIO9_22: input: 0 [ ]
GPIO9_23: input: 0 [ ]
GPIO9_24: input: 0 [ ]
GPIO9_25: input: 0 [ ]
GPIO9_26: input: 0 [ ]
GPIO9_27: input: 0 [ ]
GPIO9_28: input: 0 [ ]
GPIO9_29: input: 0 [ ]
GPIO9_30: input: 0 [ ]
GPIO9_31: input: 0 [ ]

Is there a better solution or will this be fixed later?

Hi @SimonG ,

Thanks for the update.

I will check to be sure. I think there’s a better way to do it. I will come back to you shortly to confirm how to do it.

I wish you a successful week.

Best Regards
Kevin

Hi @SimonG,

For the bootloader, there seems to be no nice solution so far, we’re just adding an offset to the number:

Right. Unfortunately IMX_GPIO_NR macro is not smart enough to take into account device tree structure, so the numbering might be different if you update your device tree by adding GPIO expander.

Similarly to U-Boot, there’s a commit on Linux side which adds GPIO expander, but on Linux side it also mentions GPIO names. As you can see, these GPIOs are related to Wi-Fi, Bluetooth and USB functionalities.

Now, question is whether you use USB in U-Boot or not. If not - the simplest trick would be to just disable gpio_expander_43 in your device tree:

&gpio_expander_43 {
	status = "disabled";
};

However, if you do use USB in U-Boot, you probably might need to still configure this GPIO expander, and this gives you two options:

  • Disable GPIO expander in your device tree and configure it from your board code. As per this commit, you need to drive GPIO expander pin #5 (USB_BYPASS_N) to get USB working on U-Boot side.
  • Leave it in your device tree and add offset workaround as you already did. Not clean, but issue is understood, and we know it works.

Best regards,
Andrejs.

Hi @andrejs.tx
Thanks for your response.

I guess we just keep adding the offset then, along with some documentation, because we need USB in the bootloader.

Hi @SimonG ,

let us know if we can help.

Best Regards
Kevin