mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 23:51:33 +00:00
colibri_imx7_emmc: add Colibri iMX7D 1GB (eMMC) module support
This commit adds support for the Toradex Colibri iMX7D 1GB Computer on Module. The module is very similar to the Colibri iMX7D 512MB but uses eMMC instead of raw NAND. This patch introduces a new board specific Kconfig symbol to select between the two flash options. Signed-off-by: Stefan Agner <stefan.agner@toradex.com>
This commit is contained in:
parent
bc53fb19fe
commit
a62c60610f
4 changed files with 154 additions and 23 deletions
|
@ -1,5 +1,24 @@
|
|||
if TARGET_COLIBRI_IMX7
|
||||
|
||||
choice
|
||||
prompt "Colibri iMX7S/D variant"
|
||||
|
||||
config TARGET_COLIBRI_IMX7_NAND
|
||||
bool "Support Colibri iMX7 Solo 256MB/Dual 512MB (raw NAND) modules"
|
||||
imply NAND_MXS
|
||||
help
|
||||
Choose this option if you build for a Toradex Colibri iMX7S
|
||||
256MB or Colibri iMX7D 512MB module which do have raw NAND
|
||||
on-module.
|
||||
|
||||
config TARGET_COLIBRI_IMX7_EMMC
|
||||
bool "Support Colibri iMX7 Dual 1GB (eMMC) modules"
|
||||
help
|
||||
Choose this option if you build for a Toradex Colibri iMX7D
|
||||
1GB module which does have eMMC on-module.
|
||||
|
||||
endchoice
|
||||
|
||||
config SYS_BOARD
|
||||
default "colibri_imx7"
|
||||
|
||||
|
@ -19,6 +38,11 @@ config COLIBRI_IMX7_EXT_PHYCLK
|
|||
config TDX_CFG_BLOCK
|
||||
default y
|
||||
|
||||
config TDX_CFG_BLOCK_2ND_ETHADDR
|
||||
default y
|
||||
|
||||
if TARGET_COLIBRI_IMX7_NAND
|
||||
|
||||
config TDX_HAVE_NAND
|
||||
default y
|
||||
|
||||
|
@ -28,9 +52,25 @@ config TDX_CFG_BLOCK_OFFSET
|
|||
config TDX_CFG_BLOCK_OFFSET2
|
||||
default "133120"
|
||||
|
||||
config TDX_CFG_BLOCK_2ND_ETHADDR
|
||||
endif
|
||||
|
||||
if TARGET_COLIBRI_IMX7_EMMC
|
||||
|
||||
config TDX_HAVE_MMC
|
||||
default y
|
||||
|
||||
config TDX_CFG_BLOCK_DEV
|
||||
default "0"
|
||||
|
||||
config TDX_CFG_BLOCK_PART
|
||||
default "1"
|
||||
|
||||
# Toradex config block in eMMC, at the end of 1st "boot sector"
|
||||
config TDX_CFG_BLOCK_OFFSET
|
||||
default "-512"
|
||||
|
||||
endif
|
||||
|
||||
source "board/toradex/common/Kconfig"
|
||||
|
||||
endif
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
Colibri iMX7
|
||||
M: Stefan Agner <stefan.agner@toradex.com>
|
||||
M: Toradex ARM Support <support.arm@toradex.com>
|
||||
W: http://developer.toradex.com/software/linux/linux-software
|
||||
W: https://www.toradex.com/community
|
||||
S: Maintained
|
||||
F: board/toradex/colibri_imx7/
|
||||
F: include/configs/colibri_imx7.h
|
||||
F: configs/colibri_imx7_defconfig
|
||||
F: configs/colibri_imx7_emmc_defconfig
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright (C) 2016 Toradex AG
|
||||
* Copyright (C) 2016-2018 Toradex AG
|
||||
*/
|
||||
|
||||
#include <asm/arch/clock.h>
|
||||
|
@ -81,7 +81,7 @@ static iomux_v3_cfg_t const usb_cdet_pads[] = {
|
|||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_NAND_MXS
|
||||
#ifdef CONFIG_TARGET_COLIBRI_IMX7_NAND
|
||||
static iomux_v3_cfg_t const gpmi_pads[] = {
|
||||
MX7D_PAD_SD3_DATA0__NAND_DATA00 | MUX_PAD_CTRL(NAND_PAD_CTRL),
|
||||
MX7D_PAD_SD3_DATA1__NAND_DATA01 | MUX_PAD_CTRL(NAND_PAD_CTRL),
|
||||
|
@ -109,6 +109,24 @@ static void setup_gpmi_nand(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_TARGET_COLIBRI_IMX7_EMMC
|
||||
static iomux_v3_cfg_t const usdhc3_emmc_pads[] = {
|
||||
MX7D_PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX7D_PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX7D_PAD_SD3_DATA0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX7D_PAD_SD3_DATA1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX7D_PAD_SD3_DATA2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX7D_PAD_SD3_DATA3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX7D_PAD_SD3_DATA4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX7D_PAD_SD3_DATA5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX7D_PAD_SD3_DATA6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX7D_PAD_SD3_DATA7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
MX7D_PAD_SD3_STROBE__SD3_STROBE | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
|
||||
MX7D_PAD_SD3_RESET_B__GPIO6_IO11 | MUX_PAD_CTRL(USDHC_PAD_CTRL),
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_VIDEO_MXS
|
||||
static iomux_v3_cfg_t const lcd_pads[] = {
|
||||
MX7D_PAD_LCD_CLK__LCD_CLK | MUX_PAD_CTRL(LCD_PAD_CTRL),
|
||||
|
@ -198,6 +216,9 @@ static void setup_iomux_uart(void)
|
|||
#define USDHC1_CD_GPIO IMX_GPIO_NR(1, 0)
|
||||
|
||||
static struct fsl_esdhc_cfg usdhc_cfg[] = {
|
||||
#ifdef CONFIG_TARGET_COLIBRI_IMX7_EMMC
|
||||
{USDHC3_BASE_ADDR},
|
||||
#endif
|
||||
{USDHC1_BASE_ADDR, 0, 4},
|
||||
};
|
||||
|
||||
|
@ -210,6 +231,11 @@ int board_mmc_getcd(struct mmc *mmc)
|
|||
case USDHC1_BASE_ADDR:
|
||||
ret = !gpio_get_value(USDHC1_CD_GPIO);
|
||||
break;
|
||||
#ifdef CONFIG_TARGET_COLIBRI_IMX7_EMMC
|
||||
case USDHC3_BASE_ADDR:
|
||||
ret = 1;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -218,7 +244,7 @@ int board_mmc_getcd(struct mmc *mmc)
|
|||
int board_mmc_init(bd_t *bis)
|
||||
{
|
||||
int i, ret;
|
||||
/* USDHC1 is mmc0 */
|
||||
/* USDHC1 is mmc0, USDHC3 is mmc1 */
|
||||
for (i = 0; i < CONFIG_SYS_FSL_USDHC_NUM; i++) {
|
||||
switch (i) {
|
||||
case 0:
|
||||
|
@ -228,6 +254,13 @@ int board_mmc_init(bd_t *bis)
|
|||
gpio_direction_input(USDHC1_CD_GPIO);
|
||||
usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
|
||||
break;
|
||||
#ifdef CONFIG_TARGET_COLIBRI_IMX7_EMMC
|
||||
case 1:
|
||||
imx_iomux_v3_setup_multiple_pads(usdhc3_emmc_pads,
|
||||
ARRAY_SIZE(usdhc3_emmc_pads));
|
||||
usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
printf("Warning: you configured more USDHC controllers"
|
||||
"(%d) than supported by the board\n", i + 1);
|
||||
|
@ -305,7 +338,7 @@ int board_init(void)
|
|||
setup_fec();
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_NAND_MXS
|
||||
#ifdef CONFIG_TARGET_COLIBRI_IMX7_NAND
|
||||
setup_gpmi_nand();
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright 2016 Toradex AG
|
||||
* Copyright 2016-2018 Toradex AG
|
||||
*
|
||||
* Configuration settings for the Colibri iMX7 module.
|
||||
*
|
||||
|
@ -14,7 +14,7 @@
|
|||
#include "mx7_common.h"
|
||||
|
||||
/*#define CONFIG_DBG_MONITOR*/
|
||||
#define PHYS_SDRAM_SIZE SZ_512M
|
||||
#define PHYS_SDRAM_SIZE SZ_1G
|
||||
|
||||
/* Size of malloc() pool */
|
||||
#define CONFIG_SYS_MALLOC_LEN (32 * SZ_1M)
|
||||
|
@ -34,7 +34,13 @@
|
|||
|
||||
/* MMC Config*/
|
||||
#define CONFIG_SYS_FSL_ESDHC_ADDR 0
|
||||
#ifdef CONFIG_TARGET_COLIBRI_IMX7_NAND
|
||||
#define CONFIG_SYS_FSL_USDHC_NUM 1
|
||||
#elif CONFIG_TARGET_COLIBRI_IMX7_EMMC
|
||||
#define CONFIG_SYS_FSL_USDHC_NUM 2
|
||||
|
||||
#define CONFIG_SUPPORT_EMMC_BOOT
|
||||
#endif
|
||||
|
||||
#undef CONFIG_BOOTM_PLAN9
|
||||
#undef CONFIG_BOOTM_RTEMS
|
||||
|
@ -47,6 +53,16 @@
|
|||
#define CONFIG_NETMASK 255.255.255.0
|
||||
#define CONFIG_SERVERIP 192.168.10.1
|
||||
|
||||
#define EMMC_BOOTCMD \
|
||||
"emmcargs=ip=off root=/dev/mmcblk0p2 ro rootfstype=ext4 rootwait\0" \
|
||||
"emmcboot=run setup; " \
|
||||
"setenv bootargs ${defargs} ${emmcargs} ${setupargs} " \
|
||||
"${vidargs}; echo Booting from internal eMMC chip...; " \
|
||||
"run m4boot && " \
|
||||
"load mmc 0:1 ${fdt_addr_r} ${soc}-colibri-emmc-${fdt_board}.dtb && " \
|
||||
"load mmc 0:1 ${kernel_addr_r} ${boot_file} && " \
|
||||
"run fdt_fixup && bootz ${kernel_addr_r} - ${fdt_addr_r}\0"
|
||||
|
||||
#define MEM_LAYOUT_ENV_SETTINGS \
|
||||
"bootm_size=0x10000000\0" \
|
||||
"fdt_addr_r=0x82000000\0" \
|
||||
|
@ -55,22 +71,34 @@
|
|||
"kernel_addr_r=0x81000000\0" \
|
||||
"ramdisk_addr_r=0x82100000\0"
|
||||
|
||||
#if defined(CONFIG_TARGET_COLIBRI_IMX7_NAND)
|
||||
#define SD_BOOTCMD \
|
||||
"sdargs=root=/dev/mmcblk0p2 rw rootwait\0" \
|
||||
"sdargs=root=/dev/mmcblk0p2 ro rootwait\0" \
|
||||
"sdboot=run setup; setenv bootargs ${defargs} ${sdargs} " \
|
||||
"${setupargs} ${vidargs}; echo Booting from MMC/SD card...; " \
|
||||
"run m4boot && " \
|
||||
"load mmc 0:1 ${kernel_addr_r} ${kernel_file} && " \
|
||||
"load mmc 0:1 ${fdt_addr_r} ${soc}-colibri-${fdt_board}.dtb && " \
|
||||
"run fdt_fixup && bootz ${kernel_addr_r} - ${fdt_addr_r}\0" \
|
||||
"run fdt_fixup && bootz ${kernel_addr_r} - ${fdt_addr_r}\0"
|
||||
#elif defined(CONFIG_TARGET_COLIBRI_IMX7_EMMC)
|
||||
#define SD_BOOTCMD \
|
||||
"sdargs=root=/dev/mmcblk1p2 ro rootwait\0" \
|
||||
"sdboot=run setup; setenv bootargs ${defargs} ${sdargs} " \
|
||||
"${setupargs} ${vidargs}; echo Booting from MMC/SD card...; " \
|
||||
"run m4boot && " \
|
||||
"load mmc 1:1 ${kernel_addr_r} ${kernel_file} && " \
|
||||
"load mmc 1:1 ${fdt_addr_r} ${soc}-colibri-${fdt_board}.dtb && " \
|
||||
"run fdt_fixup && bootz ${kernel_addr_r} - ${fdt_addr_r}\0"
|
||||
#endif
|
||||
|
||||
|
||||
#define NFS_BOOTCMD \
|
||||
"nfsargs=ip=:::::eth0: root=/dev/nfs\0" \
|
||||
"nfsargs=ip=:::::eth0: root=/dev/nfs\0" \
|
||||
"nfsboot=run setup; " \
|
||||
"setenv bootargs ${defargs} ${nfsargs} " \
|
||||
"${setupargs} ${vidargs}; echo Booting from NFS...;" \
|
||||
"dhcp ${kernel_addr_r} && " \
|
||||
"tftp ${fdt_addr_r} ${soc}-colibri-${fdt_board}.dtb && " \
|
||||
"dhcp ${kernel_addr_r} && " \
|
||||
"tftp ${fdt_addr_r} ${soc}-colibri${variant}-${fdt_board}.dtb && " \
|
||||
"run fdt_fixup && bootz ${kernel_addr_r} - ${fdt_addr_r}\0" \
|
||||
|
||||
#define UBI_BOOTCMD \
|
||||
|
@ -84,13 +112,40 @@
|
|||
"ubi read ${fdt_addr_r} dtb && " \
|
||||
"run fdt_fixup && bootz ${kernel_addr_r} - ${fdt_addr_r}\0" \
|
||||
|
||||
#define CONFIG_BOOTCOMMAND "run ubiboot; run sdboot; run nfsboot"
|
||||
#if defined(CONFIG_TARGET_COLIBRI_IMX7_NAND)
|
||||
#define CONFIG_BOOTCOMMAND "run emmcboot ; echo ; echo emmcboot failed ; " \
|
||||
"setenv fdtfile ${soc}-colibri-${fdt_board}.dtb && run distro_bootcmd;"
|
||||
#define MODULE_EXTRA_ENV_SETTINGS \
|
||||
"mtdparts=" CONFIG_MTDPARTS_DEFAULT "\0" \
|
||||
UBI_BOOTCMD
|
||||
#elif defined(CONFIG_TARGET_COLIBRI_IMX7_EMMC)
|
||||
#define CONFIG_BOOTCOMMAND "run ubiboot ; echo ; echo ubiboot failed ; " \
|
||||
"setenv fdtfile ${soc}-colibri-emmc-${fdt_board}.dtb && run distro_bootcmd;"
|
||||
#define MODULE_EXTRA_ENV_SETTINGS \
|
||||
"variant=-emmc\0" \
|
||||
EMMC_BOOTCMD
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_TARGET_COLIBRI_IMX7_NAND)
|
||||
#define BOOT_TARGET_DEVICES(func) \
|
||||
func(MMC, mmc, 0) \
|
||||
func(USB, usb, 0) \
|
||||
func(DHCP, dhcp, na)
|
||||
#elif defined(CONFIG_TARGET_COLIBRI_IMX7_EMMC)
|
||||
#define BOOT_TARGET_DEVICES(func) \
|
||||
func(MMC, mmc, 0) \
|
||||
func(MMC, mmc, 1) \
|
||||
func(USB, usb, 0) \
|
||||
func(DHCP, dhcp, na)
|
||||
#endif
|
||||
#include <config_distro_bootcmd.h>
|
||||
|
||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||
BOOTENV \
|
||||
MEM_LAYOUT_ENV_SETTINGS \
|
||||
NFS_BOOTCMD \
|
||||
SD_BOOTCMD \
|
||||
UBI_BOOTCMD \
|
||||
MODULE_EXTRA_ENV_SETTINGS \
|
||||
"console=ttymxc0\0" \
|
||||
"defargs=\0" \
|
||||
"fdt_board=eval-v3\0" \
|
||||
|
@ -98,7 +153,6 @@
|
|||
"m4boot=;\0" \
|
||||
"ip_dyn=yes\0" \
|
||||
"kernel_file=zImage\0" \
|
||||
"mtdparts=" CONFIG_MTDPARTS_DEFAULT "\0" \
|
||||
"setethupdate=if env exists ethaddr; then; else setenv ethaddr " \
|
||||
"00:14:2d:00:00:00; fi; tftpboot ${loadaddr} " \
|
||||
"${board}/flash_eth.img && source ${loadaddr}\0" \
|
||||
|
@ -139,26 +193,26 @@
|
|||
/* environment organization */
|
||||
|
||||
#if defined(CONFIG_ENV_IS_IN_MMC)
|
||||
#define CONFIG_SYS_MMC_ENV_DEV 0 /* USDHC1 */
|
||||
#define CONFIG_SYS_MMC_ENV_PART 0 /* user area */
|
||||
#define CONFIG_MMCROOT "/dev/mmcblk0p2" /* USDHC1 */
|
||||
#define CONFIG_ENV_OFFSET (8 * SZ_64K)
|
||||
/* Environment in eMMC, before config block at the end of 1st "boot sector" */
|
||||
#define CONFIG_ENV_SIZE (8 * 1024)
|
||||
#define CONFIG_ENV_OFFSET (-CONFIG_ENV_SIZE + \
|
||||
CONFIG_TDX_CFG_BLOCK_OFFSET)
|
||||
#define CONFIG_SYS_MMC_ENV_DEV 0
|
||||
#define CONFIG_SYS_MMC_ENV_PART 1
|
||||
#elif defined(CONFIG_ENV_IS_IN_NAND)
|
||||
#define CONFIG_ENV_SECT_SIZE (128 * 1024)
|
||||
#define CONFIG_ENV_OFFSET (28 * CONFIG_ENV_SECT_SIZE)
|
||||
#define CONFIG_ENV_SIZE CONFIG_ENV_SECT_SIZE
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_TARGET_COLIBRI_IMX7_NAND
|
||||
/* NAND stuff */
|
||||
#define CONFIG_SYS_MAX_NAND_DEVICE 1
|
||||
#define CONFIG_SYS_NAND_BASE 0x40000000
|
||||
#define CONFIG_SYS_NAND_5_ADDR_CYCLE
|
||||
#define CONFIG_SYS_NAND_ONFI_DETECTION
|
||||
#define CONFIG_SYS_NAND_MX7_GPMI_62_ECC_BYTES
|
||||
|
||||
/* Dynamic MTD partition support */
|
||||
|
||||
/* DMA stuff, needed for GPMI/MXS NAND support */
|
||||
#endif
|
||||
|
||||
/* USB Configs */
|
||||
#define CONFIG_EHCI_HCD_INIT_AFTER_RESET
|
||||
|
|
Loading…
Reference in a new issue