get_board_value function fails to get the right board configuration on second time that is call. This patch move get_board_value function at spl level, once is call, store the right configuration into gd static variable gd->board_type and fix the previous error. get_board_value is now call only one time.
Signed-off-by: Tommaso Merciai <tomm.merc...@gmail.com> --- board/udoo/neo/neo.c | 77 +++++++++++++++++++------------------- configs/udoo_neo_defconfig | 1 + 2 files changed, 40 insertions(+), 38 deletions(-) diff --git a/board/udoo/neo/neo.c b/board/udoo/neo/neo.c index 62f81fff68..0ca5fbda60 100644 --- a/board/udoo/neo/neo.c +++ b/board/udoo/neo/neo.c @@ -235,13 +235,6 @@ static iomux_v3_cfg_t const phy_control_pads[] = { MUX_PAD_CTRL(ENET_CLK_PAD_CTRL), }; -static iomux_v3_cfg_t const board_recognition_pads[] = { - /*Connected to R184*/ - MX6_PAD_NAND_READY_B__GPIO4_IO_13 | BOARD_DETECT_PAD_CFG, - /*Connected to R185*/ - MX6_PAD_NAND_ALE__GPIO4_IO_0 | BOARD_DETECT_PAD_CFG, -}; - static iomux_v3_cfg_t const wdog_b_pad = { MX6_PAD_GPIO1_IO13__GPIO1_IO_13 | MUX_PAD_CTRL(WDOG_PAD_CTRL), }; @@ -308,34 +301,6 @@ int board_init(void) return 0; } -static int get_board_value(void) -{ - int r184, r185; - - imx_iomux_v3_setup_multiple_pads(board_recognition_pads, - ARRAY_SIZE(board_recognition_pads)); - - gpio_request(IMX_GPIO_NR(4, 13), "r184"); - gpio_request(IMX_GPIO_NR(4, 0), "r185"); - gpio_direction_input(IMX_GPIO_NR(4, 13)); - gpio_direction_input(IMX_GPIO_NR(4, 0)); - - r184 = gpio_get_value(IMX_GPIO_NR(4, 13)); - r185 = gpio_get_value(IMX_GPIO_NR(4, 0)); - - /* - * Machine selection - - * Machine r184, r185 - * --------------------------------- - * Basic 0 0 - * Basic Ks 0 1 - * Full 1 0 - * Extended 1 1 - */ - - return (r184 << 1) + r185; -} - int board_early_init_f(void) { setup_iomux_uart(); @@ -370,7 +335,7 @@ int board_mmc_init(struct bd_info *bis) static char *board_string(void) { - switch (get_board_value()) { + switch (gd->board_type) { case UDOO_NEO_TYPE_BASIC: return "BASIC"; case UDOO_NEO_TYPE_BASIC_KS: @@ -403,6 +368,13 @@ int board_late_init(void) #include <linux/libfdt.h> #include <asm/arch/mx6-ddr.h> +static iomux_v3_cfg_t const board_recognition_pads[] = { + /*Connected to R184*/ + MX6_PAD_NAND_READY_B__GPIO4_IO_13 | BOARD_DETECT_PAD_CFG, + /*Connected to R185*/ + MX6_PAD_NAND_ALE__GPIO4_IO_0 | BOARD_DETECT_PAD_CFG, +}; + static const struct mx6sx_iomux_ddr_regs mx6_ddr_ioregs = { .dram_dqm0 = 0x00000028, .dram_dqm1 = 0x00000028, @@ -482,6 +454,34 @@ static struct mx6_ddr3_cfg neo_basic_mem_ddr = { .trasmin = 3500, }; +static int get_board_value(void) +{ + int r184, r185; + + imx_iomux_v3_setup_multiple_pads(board_recognition_pads, + ARRAY_SIZE(board_recognition_pads)); + + gpio_request(IMX_GPIO_NR(4, 13), "r184"); + gpio_request(IMX_GPIO_NR(4, 0), "r185"); + gpio_direction_input(IMX_GPIO_NR(4, 13)); + gpio_direction_input(IMX_GPIO_NR(4, 0)); + + r184 = gpio_get_value(IMX_GPIO_NR(4, 13)); + r185 = gpio_get_value(IMX_GPIO_NR(4, 0)); + + /* + * Machine selection - + * Machine r184, r185 + * --------------------------------- + * Basic 0 0 + * Basic Ks 0 1 + * Full 1 0 + * Extended 1 1 + */ + + return (r184 << 1) + r185; +} + static void ccgr_init(void) { struct mxc_ccm_reg *ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR; @@ -498,7 +498,7 @@ static void ccgr_init(void) static void spl_dram_init(void) { - int board = get_board_value(); + gd->board_type = get_board_value(); struct mx6_ddr_sysinfo sysinfo = { .dsize = 1, /* width of data bus: 1 = 32 bits */ @@ -516,7 +516,8 @@ static void spl_dram_init(void) }; mx6sx_dram_iocfg(32, &mx6_ddr_ioregs, &mx6_grp_ioregs); - if (board == UDOO_NEO_TYPE_BASIC || board == UDOO_NEO_TYPE_BASIC_KS) + if (gd->board_type == UDOO_NEO_TYPE_BASIC || + gd->board_type == UDOO_NEO_TYPE_BASIC_KS) mx6_dram_cfg(&sysinfo, &neo_basic_mmcd_calib, &neo_basic_mem_ddr); else diff --git a/configs/udoo_neo_defconfig b/configs/udoo_neo_defconfig index ca08de1bd4..eff33909d7 100644 --- a/configs/udoo_neo_defconfig +++ b/configs/udoo_neo_defconfig @@ -62,3 +62,4 @@ CONFIG_DM_USB=y CONFIG_USB_STORAGE=y CONFIG_MXC_UART=y CONFIG_IMX_THERMAL=y +CONFIG_BOARD_TYPES=y \ No newline at end of file -- 2.25.1