Currently, an i.MX6 Cuboxi board is incorrectly detected
as the HummingBoard model:
U-Boot 2024.04-rc5 (Mar 26 2024 - 15:59:22 +0100)
CPU: Freescale i.MX6Q rev1.3 996 MHz (running at 792 MHz)
CPU: Extended Commercial temperature grade (-20C to 105C) at 26C
Reset cause: POR
Model: SolidRun HummingBoard2 Dual/Quad (1.5som+emmc)
gpio@
20a4000: set_dir_flags: error: gpio GPIO3_8 not reserved
gpio@
20a4000: get_value: error: gpio GPIO3_8 not reserved
gpio@
20a8000: set_dir_flags: error: gpio GPIO4_4 not reserved
gpio@
20a8000: get_value: error: gpio GPIO4_4 not reserved
gpio@
20b0000: set_dir_flags: error: gpio GPIO6_9 not reserved
gpio@
20b0000: get_value: error: gpio GPIO6_9 not reserved
Board: MX6 HummingBoard
DRAM: 2 GiB
...
This error happens because request_detect_gpios() uses the GPIO DM
API, but board_type() still uses the legacy non-DM GPIO API.
Fix it by using the GPIO DM API in board_type() to read the
board revision pins in SPL.
Reported-by: Christian Gmeiner <cgmeiner@igalia.com>
Signed-off-by: Fabio Estevam <festevam@gmail.com>
Tested-by: Christian Gmeiner <cgmeiner@igalia.com>
* HB 1 1 x
*/
- gpio_direction_input(IMX_GPIO_NR(2, 8));
- val3 = gpio_get_value(IMX_GPIO_NR(2, 8));
+ val3 = !!dm_gpio_get_value(&board_detect_desc[0]);
if (val3 == 0)
return HUMMINGBOARD2;
- gpio_direction_input(IMX_GPIO_NR(3, 4));
- val2 = gpio_get_value(IMX_GPIO_NR(3, 4));
+ val2 = !!dm_gpio_get_value(&board_detect_desc[1]);
if (val2 == 0)
return HUMMINGBOARD;
- gpio_direction_input(IMX_GPIO_NR(4, 9));
- val1 = gpio_get_value(IMX_GPIO_NR(4, 9));
+ val1 = !!dm_gpio_get_value(&board_detect_desc[2]);
if (val1 == 0) {
return CUBOXI;
int val1, val2;
SETUP_IOMUX_PADS(som_rev_detect);
- val1 = gpio_get_value(IMX_GPIO_NR(6, 0));
- val2 = gpio_get_value(IMX_GPIO_NR(6, 4));
+ val1 = !!dm_gpio_get_value(&board_detect_desc[3]);
+ val2 = !!dm_gpio_get_value(&board_detect_desc[4]);
if (val1 == 1 && val2 == 0)
return true;