mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-23 05:00:24 +09:00
mx6cuboxi: consolidate board detection and add som revision checking
In order to properly detect the board the checks need to be done in a specific order. Move these tests back into a single enum function that will always return the proper the board it is checking. This also adds the best test we have for detecting the rev 1.5 som, and it simplifies the device-tree filename building. Signed-off-by: Jon Nettleton <jon@solid-run.com> Signed-off-by: Baruch Siach <baruch@tkos.co.il> Reviewed-by: Fabio Estevam <fabio.estevam@nxp.com>
This commit is contained in:
parent
8fd05fccc8
commit
73708200f0
@ -57,6 +57,13 @@ DECLARE_GLOBAL_DATA_PTR;
|
|||||||
#define ETH_PHY_RESET IMX_GPIO_NR(4, 15)
|
#define ETH_PHY_RESET IMX_GPIO_NR(4, 15)
|
||||||
#define USB_H1_VBUS IMX_GPIO_NR(1, 0)
|
#define USB_H1_VBUS IMX_GPIO_NR(1, 0)
|
||||||
|
|
||||||
|
enum board_type {
|
||||||
|
CUBOXI = 0x00,
|
||||||
|
HUMMINGBOARD = 0x01,
|
||||||
|
HUMMINGBOARD2 = 0x02,
|
||||||
|
UNKNOWN = 0x03,
|
||||||
|
};
|
||||||
|
|
||||||
int dram_init(void)
|
int dram_init(void)
|
||||||
{
|
{
|
||||||
gd->ram_size = imx_ddr_size();
|
gd->ram_size = imx_ddr_size();
|
||||||
@ -77,10 +84,17 @@ static iomux_v3_cfg_t const usdhc2_pads[] = {
|
|||||||
IOMUX_PADS(PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
IOMUX_PADS(PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
|
||||||
};
|
};
|
||||||
|
|
||||||
static iomux_v3_cfg_t const hb_cbi_sense[] = {
|
static iomux_v3_cfg_t const board_detect[] = {
|
||||||
/* These pins are for sensing if it is a CuBox-i or a HummingBoard */
|
/* These pins are for sensing if it is a CuBox-i or a HummingBoard */
|
||||||
IOMUX_PADS(PAD_KEY_ROW1__GPIO4_IO09 | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
IOMUX_PADS(PAD_KEY_ROW1__GPIO4_IO09 | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
||||||
IOMUX_PADS(PAD_EIM_DA4__GPIO3_IO04 | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
IOMUX_PADS(PAD_EIM_DA4__GPIO3_IO04 | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
||||||
|
};
|
||||||
|
|
||||||
|
static iomux_v3_cfg_t const som_rev_detect[] = {
|
||||||
|
/* These pins are for sensing if it is a CuBox-i or a HummingBoard */
|
||||||
|
IOMUX_PADS(PAD_CSI0_DAT14__GPIO6_IO00 | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
||||||
|
IOMUX_PADS(PAD_CSI0_DAT18__GPIO6_IO04 | MUX_PAD_CTRL(UART_PAD_CTRL)),
|
||||||
};
|
};
|
||||||
|
|
||||||
static iomux_v3_cfg_t const usb_pads[] = {
|
static iomux_v3_cfg_t const usb_pads[] = {
|
||||||
@ -333,88 +347,110 @@ int board_init(void)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_hummingboard(void)
|
static enum board_type board_type(void)
|
||||||
{
|
{
|
||||||
int val1, val2;
|
int val1, val2, val3;
|
||||||
|
|
||||||
SETUP_IOMUX_PADS(hb_cbi_sense);
|
SETUP_IOMUX_PADS(board_detect);
|
||||||
|
|
||||||
gpio_direction_input(IMX_GPIO_NR(4, 9));
|
|
||||||
gpio_direction_input(IMX_GPIO_NR(3, 4));
|
|
||||||
|
|
||||||
val1 = gpio_get_value(IMX_GPIO_NR(4, 9));
|
|
||||||
val2 = gpio_get_value(IMX_GPIO_NR(3, 4));
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Machine selection -
|
* Machine selection -
|
||||||
* Machine val1, val2
|
* Machine val1, val2, val3
|
||||||
* -------------------------
|
* ----------------------------
|
||||||
* HB2 x x
|
* HB2 x x 0
|
||||||
* HB rev 3.x x 0
|
* HB rev 3.x x 0 x
|
||||||
* CBi 0 1
|
* CBi 0 1 x
|
||||||
* HB 1 1
|
* HB 1 1 x
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (val2 == 0)
|
|
||||||
return true;
|
|
||||||
else if (val1 == 0)
|
|
||||||
return false;
|
|
||||||
else
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool is_hummingboard2(void)
|
|
||||||
{
|
|
||||||
int val1;
|
|
||||||
|
|
||||||
SETUP_IOMUX_PADS(hb_cbi_sense);
|
|
||||||
|
|
||||||
gpio_direction_input(IMX_GPIO_NR(2, 8));
|
gpio_direction_input(IMX_GPIO_NR(2, 8));
|
||||||
|
val3 = gpio_get_value(IMX_GPIO_NR(2, 8));
|
||||||
|
|
||||||
val1 = gpio_get_value(IMX_GPIO_NR(2, 8));
|
if (val3 == 0)
|
||||||
|
return HUMMINGBOARD2;
|
||||||
|
|
||||||
/*
|
gpio_direction_input(IMX_GPIO_NR(3, 4));
|
||||||
* Machine selection -
|
val2 = gpio_get_value(IMX_GPIO_NR(3, 4));
|
||||||
* Machine val1
|
|
||||||
* -------------------
|
|
||||||
* HB2 0
|
|
||||||
* HB rev 3.x x
|
|
||||||
* CBi x
|
|
||||||
* HB x
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (val1 == 0)
|
if (val2 == 0)
|
||||||
|
return HUMMINGBOARD;
|
||||||
|
|
||||||
|
gpio_direction_input(IMX_GPIO_NR(4, 9));
|
||||||
|
val1 = gpio_get_value(IMX_GPIO_NR(4, 9));
|
||||||
|
|
||||||
|
if (val1 == 0) {
|
||||||
|
return CUBOXI;
|
||||||
|
} else {
|
||||||
|
return HUMMINGBOARD;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool is_rev_15_som(void)
|
||||||
|
{
|
||||||
|
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));
|
||||||
|
|
||||||
|
if (val1 == 1 && val2 == 0)
|
||||||
return true;
|
return true;
|
||||||
else
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int checkboard(void)
|
int checkboard(void)
|
||||||
{
|
{
|
||||||
if (is_hummingboard2())
|
switch (board_type()) {
|
||||||
puts("Board: MX6 Hummingboard2\n");
|
case CUBOXI:
|
||||||
else if (is_hummingboard())
|
puts("Board: MX6 Cubox-i");
|
||||||
puts("Board: MX6 Hummingboard\n");
|
break;
|
||||||
else
|
case HUMMINGBOARD:
|
||||||
puts("Board: MX6 Cubox-i\n");
|
puts("Board: MX6 HummingBoard");
|
||||||
|
break;
|
||||||
|
case HUMMINGBOARD2:
|
||||||
|
puts("Board: MX6 HummingBoard2");
|
||||||
|
break;
|
||||||
|
case UNKNOWN:
|
||||||
|
default:
|
||||||
|
puts("Board: Unknown\n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_rev_15_som())
|
||||||
|
puts(" (som rev 1.5)\n");
|
||||||
|
else
|
||||||
|
puts("\n");
|
||||||
|
|
||||||
|
out:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int board_late_init(void)
|
int board_late_init(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
|
#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
|
||||||
if (is_hummingboard2())
|
switch (board_type()) {
|
||||||
env_set("board_name", "HUMMINGBOARD2");
|
case CUBOXI:
|
||||||
else if (is_hummingboard())
|
|
||||||
env_set("board_name", "HUMMINGBOARD");
|
|
||||||
else
|
|
||||||
env_set("board_name", "CUBOXI");
|
env_set("board_name", "CUBOXI");
|
||||||
|
break;
|
||||||
|
case HUMMINGBOARD:
|
||||||
|
env_set("board_name", "HUMMINGBOARD");
|
||||||
|
break;
|
||||||
|
case HUMMINGBOARD2:
|
||||||
|
env_set("board_name", "HUMMINGBOARD2");
|
||||||
|
break;
|
||||||
|
case UNKNOWN:
|
||||||
|
default:
|
||||||
|
env_set("board_name", "CUBOXI");
|
||||||
|
}
|
||||||
|
|
||||||
if (is_mx6dq())
|
if (is_mx6dq())
|
||||||
env_set("board_rev", "MX6Q");
|
env_set("board_rev", "MX6Q");
|
||||||
else
|
else
|
||||||
env_set("board_rev", "MX6DL");
|
env_set("board_rev", "MX6DL");
|
||||||
|
|
||||||
|
if (is_rev_15_som())
|
||||||
|
env_set("som_rev", "V15");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -101,18 +101,18 @@
|
|||||||
"fi; " \
|
"fi; " \
|
||||||
"fi\0" \
|
"fi\0" \
|
||||||
"findfdt="\
|
"findfdt="\
|
||||||
"if test $board_name = HUMMINGBOARD2 && test $board_rev = MX6Q ; then " \
|
"if test $board_rev = MX6Q ; then " \
|
||||||
"setenv fdtfile imx6q-hummingboard2.dtb; fi; " \
|
"setenv fdtprefix imx6q; fi; " \
|
||||||
"if test $board_name = HUMMINGBOARD2 && test $board_rev = MX6DL ; then " \
|
"if test $board_rev = MX6DL ; then " \
|
||||||
"setenv fdtfile imx6dl-hummingboard2.dtb; fi; " \
|
"setenv fdtprefix imx6dl; fi; " \
|
||||||
"if test $board_name = HUMMINGBOARD && test $board_rev = MX6Q ; then " \
|
"if test $som_rev = V15 ; then " \
|
||||||
"setenv fdtfile imx6q-hummingboard.dtb; fi; " \
|
"setenv fdtsuffix -som-v15; fi; " \
|
||||||
"if test $board_name = HUMMINGBOARD && test $board_rev = MX6DL ; then " \
|
"if test $board_name = HUMMINGBOARD2 ; then " \
|
||||||
"setenv fdtfile imx6dl-hummingboard.dtb; fi; " \
|
"setenv fdtfile ${fdtprefix}-hummingboard2${fdtsuffix}.dtb; fi; " \
|
||||||
"if test $board_name = CUBOXI && test $board_rev = MX6Q ; then " \
|
"if test $board_name = HUMMINGBOARD ; then " \
|
||||||
"setenv fdtfile imx6q-cubox-i.dtb; fi; " \
|
"setenv fdtfile ${fdtprefix}-hummingboard${fdtsuffix}.dtb; fi; " \
|
||||||
"if test $board_name = CUBOXI && test $board_rev = MX6DL ; then " \
|
"if test $board_name = CUBOXI ; then " \
|
||||||
"setenv fdtfile imx6dl-cubox-i.dtb; fi; " \
|
"setenv fdtfile ${fdtprefix}-cubox-i${fdtsuffix}.dtb; fi; " \
|
||||||
"if test $fdtfile = undefined; then " \
|
"if test $fdtfile = undefined; then " \
|
||||||
"echo WARNING: Could not determine dtb to use; fi; \0" \
|
"echo WARNING: Could not determine dtb to use; fi; \0" \
|
||||||
BOOTENV
|
BOOTENV
|
||||||
|
Loading…
Reference in New Issue
Block a user