From f349c5dc5ca2af90e026135b807668444ff23d84 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 6 Mar 2017 09:28:37 +0000 Subject: [PATCH 1/2] Initial Hummingboard 2 support Signed-off-by: Peter Robinson --- board/solidrun/mx6cuboxi/mx6cuboxi.c | 118 +++++++++++++++++++++++++++-------- 1 file changed, 92 insertions(+), 26 deletions(-) diff --git a/board/solidrun/mx6cuboxi/mx6cuboxi.c b/board/solidrun/mx6cuboxi/mx6cuboxi.c index 285588d..5b187ff 100644 --- a/board/solidrun/mx6cuboxi/mx6cuboxi.c +++ b/board/solidrun/mx6cuboxi/mx6cuboxi.c @@ -37,6 +37,15 @@ DECLARE_GLOBAL_DATA_PTR; +enum { + CUBOX, + HB1, + HB2, + HB2r15, +}; + +static int board_type; + #define UART_PAD_CTRL (PAD_CTL_PUS_100K_UP | \ PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | \ PAD_CTL_SRE_FAST | PAD_CTL_HYS) @@ -48,6 +57,9 @@ DECLARE_GLOBAL_DATA_PTR; #define ENET_PAD_CTRL (PAD_CTL_PUS_100K_UP | \ PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS) +#define ENET_PAD_CTRL_OD (PAD_CTL_PUS_100K_UP | \ + PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS | PAD_CTL_ODE) + #define ENET_PAD_CTRL_PD (PAD_CTL_PUS_100K_DOWN | \ PAD_CTL_SPEED_MED | PAD_CTL_DSE_40ohm | PAD_CTL_HYS) @@ -79,8 +91,11 @@ static iomux_v3_cfg_t const usdhc2_pads[] = { static iomux_v3_cfg_t const hb_cbi_sense[] = { /* 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_EIM_DA4__GPIO3_IO04 | 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_SD4_DAT0__GPIO2_IO08 | MUX_PAD_CTRL(UART_PAD_CTRL)), + 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[] = { @@ -92,8 +107,9 @@ static void setup_iomux_uart(void) SETUP_IOMUX_PADS(uart1_pads); } -static struct fsl_esdhc_cfg usdhc_cfg[1] = { +static struct fsl_esdhc_cfg usdhc_cfg[2] = { {USDHC2_BASE_ADDR}, + {USDHC3_BASE_ADDR}, }; int board_mmc_getcd(struct mmc *mmc) @@ -103,16 +119,40 @@ int board_mmc_getcd(struct mmc *mmc) int board_mmc_init(bd_t *bis) { - SETUP_IOMUX_PADS(usdhc2_pads); - usdhc_cfg[0].esdhc_base = USDHC2_BASE_ADDR; - usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK); - gd->arch.sdhc_clk = usdhc_cfg[0].sdhc_clk; + int ret; + u32 index = 0; + + for (index = 0; index < CONFIG_SYS_FSL_USDHC_NUM; ++index) { + switch (index) { + case 0: + SETUP_IOMUX_PADS(usdhc2_pads); + usdhc_cfg[0].esdhc_base = USDHC2_BASE_ADDR; + usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK); + gd->arch.sdhc_clk = usdhc_cfg[0].sdhc_clk; + break; + case 1: + SETUP_IOMUX_PADS(usdhc3_pads); + usdhc_cfg[1].esdhc_base = USDHC3_BASE_ADDR; + usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); + gd->arch.sdhc_clk = usdhc_cfg[1].sdhc_clk; + break; + default: + printf("Warning: you configured more USDHC controllers" + "(%d) then supported by the board (%d)\n", + index + 1, CONFIG_SYS_FSL_USDHC_NUM); + return -EINVAL; + } - return fsl_esdhc_initialize(bis, &usdhc_cfg[0]); + ret = fsl_esdhc_initialize(bis, &usdhc_cfg[index]); + if (ret) + return ret; + } + + return 0; } static iomux_v3_cfg_t const enet_pads[] = { - IOMUX_PADS(PAD_ENET_MDIO__ENET_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL)), + IOMUX_PADS(PAD_ENET_MDIO__ENET_MDIO | MUX_PAD_CTRL(ENET_PAD_CTRL_OD)), IOMUX_PADS(PAD_ENET_MDC__ENET_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL)), /* AR8035 reset */ IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | MUX_PAD_CTRL(ENET_PAD_CTRL_PD)), @@ -328,41 +368,62 @@ int board_init(void) return 0; } -static bool is_hummingboard(void) +static int is_hummingboard(void) { - int val1, val2; + int val1, val2, val3, val4, val5; SETUP_IOMUX_PADS(hb_cbi_sense); gpio_direction_input(IMX_GPIO_NR(4, 9)); gpio_direction_input(IMX_GPIO_NR(3, 4)); + gpio_direction_input(IMX_GPIO_NR(2, 8)); + gpio_direction_input(IMX_GPIO_NR(6, 0)); + gpio_direction_input(IMX_GPIO_NR(6, 4)); val1 = gpio_get_value(IMX_GPIO_NR(4, 9)); val2 = gpio_get_value(IMX_GPIO_NR(3, 4)); + val3 = gpio_get_value(IMX_GPIO_NR(2, 8)); + val4 = gpio_get_value(IMX_GPIO_NR(6, 0)); + val5 = gpio_get_value(IMX_GPIO_NR(6, 4)); /* * Machine selection - - * Machine val1, val2 - * ------------------------- - * HB rev 3.x x 0 - * CBi 0 1 - * HB 1 1 + * Machine val1, val2, val3 + * ------------------------------- + * HB2 x x 0 + * HB rev 3.x x 0 x + * CBi 0 1 x + * HB 1 1 x */ - if (val2 == 0) - return true; - else if (val1 == 0) - return false; - else - return true; + if (val3 == 0) { + board_type = HB2; + } else if (val2 == 0) { + board_type = HB1; + } else if (val1 == 0) { + board_type = CUBOX; + } else { + board_type = HB1; + } + + if (val4 == 1 && val5 == 0) + board_type = HB2r15; + + return board_type; + } int checkboard(void) { - if (is_hummingboard()) + switch (board_type) { + case HB2: + case HB2r15: + puts("Board: MX6 Hummingboard 2\n"); + case HB1: puts("Board: MX6 Hummingboard\n"); - else + case CUBOX: puts("Board: MX6 Cubox-i\n"); + } return 0; } @@ -370,10 +431,15 @@ int checkboard(void) int board_late_init(void) { #ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG - if (is_hummingboard()) + switch (board_type) { + case HB2: + case HB2r15: + setenv("board_name", "HUMMINGBOARD2"); + case HB1: setenv("board_name", "HUMMINGBOARD"); - else + case CUBOX: setenv("board_name", "CUBOXI"); + } if (is_mx6dq()) setenv("board_rev", "MX6Q"); -- 2.9.3 From 039d4ce71df224d36f857519cc7a7f56568a75c3 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 6 Mar 2017 11:26:21 +0000 Subject: [PATCH 2/2] drop mmc init for the moment --- board/solidrun/mx6cuboxi/mx6cuboxi.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/board/solidrun/mx6cuboxi/mx6cuboxi.c b/board/solidrun/mx6cuboxi/mx6cuboxi.c index 5b187ff..50dcc09 100644 --- a/board/solidrun/mx6cuboxi/mx6cuboxi.c +++ b/board/solidrun/mx6cuboxi/mx6cuboxi.c @@ -130,12 +130,6 @@ int board_mmc_init(bd_t *bis) usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK); gd->arch.sdhc_clk = usdhc_cfg[0].sdhc_clk; break; - case 1: - SETUP_IOMUX_PADS(usdhc3_pads); - usdhc_cfg[1].esdhc_base = USDHC3_BASE_ADDR; - usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); - gd->arch.sdhc_clk = usdhc_cfg[1].sdhc_clk; - break; default: printf("Warning: you configured more USDHC controllers" "(%d) then supported by the board (%d)\n", -- 2.9.3