From 6f6a828fbe7478efd5932c302e6368877107bbca Mon Sep 17 00:00:00 2001 From: Peng Fan Date: Tue, 23 Feb 2016 12:43:10 +0800 Subject: MLK-12434-1: imx: dynamic setting mmcdev and mmcroot Align to imx_v2015.04, dynamic setting mmcdev and mmcroot. Then when boot linux, we can have correct "root=/dev/mmcblk[x]p2" Signed-off-by: Peng Fan (cherry picked from commit b46b99a901eb194e81fc4836ee2259ad8857f4d3) --- arch/arm/include/asm/imx-common/sys_proto.h | 5 +++ board/freescale/common/Makefile | 1 + board/freescale/common/mmc.c | 48 +++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 board/freescale/common/mmc.c diff --git a/arch/arm/include/asm/imx-common/sys_proto.h b/arch/arm/include/asm/imx-common/sys_proto.h index 539d34b..c58e3b1 100644 --- a/arch/arm/include/asm/imx-common/sys_proto.h +++ b/arch/arm/include/asm/imx-common/sys_proto.h @@ -2,6 +2,8 @@ * (C) Copyright 2009 * Stefano Babic, DENX Software Engineering, sbabic@denx.de. * + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * * SPDX-License-Identifier: GPL-2.0+ */ @@ -64,4 +66,7 @@ void lcdif_power_down(void); int mxs_reset_block(struct mxs_register_32 *reg); int mxs_wait_mask_set(struct mxs_register_32 *reg, u32 mask, u32 timeout); int mxs_wait_mask_clr(struct mxs_register_32 *reg, u32 mask, u32 timeout); + +int mmc_get_env_dev(void); +void board_late_mmc_env_init(void); #endif diff --git a/board/freescale/common/Makefile b/board/freescale/common/Makefile index 7df6af2..d844831 100644 --- a/board/freescale/common/Makefile +++ b/board/freescale/common/Makefile @@ -64,6 +64,7 @@ obj-$(CONFIG_POWER_PFUZE100) += pfuze.o obj-$(CONFIG_POWER_MC34VR500) += mc34vr500.o obj-$(CONFIG_DM_PMIC_PFUZE100) += pfuze_dm.o obj-$(CONFIG_MXC_EPDC) += epdc_setup.o +obj-y += mmc.o obj-$(CONFIG_LS102XA_STREAM_ID) += ls102xa_stream_id.o diff --git a/board/freescale/common/mmc.c b/board/freescale/common/mmc.c new file mode 100644 index 0000000..20eaab6 --- /dev/null +++ b/board/freescale/common/mmc.c @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * + * SPDX-License-Identifier: GPL-2.0+ + */ +#include +#include +#include +#include +#include + +static int check_mmc_autodetect(void) +{ + char *autodetect_str = getenv("mmcautodetect"); + + if ((autodetect_str != NULL) && + (strcmp(autodetect_str, "yes") == 0)) { + return 1; + } + + return 0; +} + +/* This should be defined for each board */ +__weak int mmc_map_to_kernel_blk(int dev_no) +{ + return dev_no; +} + +void board_late_mmc_env_init(void) +{ + char cmd[32]; + char mmcblk[32]; + u32 dev_no = mmc_get_env_dev(); + + if (!check_mmc_autodetect()) + return; + + setenv_ulong("mmcdev", dev_no); + + /* Set mmcblk env */ + sprintf(mmcblk, "/dev/mmcblk%dp2 rootwait rw", + mmc_map_to_kernel_blk(dev_no)); + setenv("mmcroot", mmcblk); + + sprintf(cmd, "mmc dev %d", dev_no); + run_command(cmd, 0); +} -- cgit v1.1