On Wed, Jul 15, 2015 at 7:49 PM, Adrian Alonso <aalo...@freescale.com> wrote: > * Add i.MX7D SABRESD board BSP codes, with enabled modules:
Better to remove "board BSP codes" as this is too vague. > UART, PMIC, USB/OTG, SD, eMMC, ENET, I2C, 74LV IOX. > > Build target: mx7dsabresd_config > > Signed-off-by: Peng Fan <peng....@freescale.com> > Signed-off-by: Fugang Duan <b38...@freescale.com> > Signed-off-by: Ye.Li <b37...@freescale.com> > Signed-off-by: Adrian Alonso <aalo...@freescale.com> > --- > board/freescale/mx7dsabresd/Kconfig | 15 + > board/freescale/mx7dsabresd/Makefile | 6 + > board/freescale/mx7dsabresd/imximage.cfg | 110 +++++ > board/freescale/mx7dsabresd/mx7dsabresd.c | 656 > ++++++++++++++++++++++++++++++ > configs/mx7dsabresd_defconfig | 10 + > include/configs/mx7_common.h | 22 + > include/configs/mx7dsabresd.h | 382 +++++++++++++++++ > 7 files changed, 1201 insertions(+) > create mode 100644 board/freescale/mx7dsabresd/Kconfig > create mode 100644 board/freescale/mx7dsabresd/Makefile > create mode 100644 board/freescale/mx7dsabresd/imximage.cfg > create mode 100644 board/freescale/mx7dsabresd/mx7dsabresd.c > create mode 100644 configs/mx7dsabresd_defconfig > create mode 100644 include/configs/mx7_common.h > create mode 100644 include/configs/mx7dsabresd.h You missed to add a MAINTAINERS file for this board. > --- /dev/null > +++ b/board/freescale/mx7dsabresd/imximage.cfg > @@ -0,0 +1,110 @@ > +/* > + * Copyright (C) 2015 Freescale Semiconductor, Inc. > + * > + * SPDX-License-Identifier: GPL-2.0+ > + * > + * Refer docs/README.imxmage for more details about how-to configure > + * and create imximage boot image > + * > + * The syntax is taken as close as possible with the kwbimage > + */ > + > +#define __ASSEMBLY__ > +#include <config.h> > + > +/* image version */ > + > +IMAGE_VERSION 2 > + > +/* > + * Boot Device : one of > + * spi/sd/nand/onenand, qspi/nor > + */ > + > +#ifdef CONFIG_SYS_BOOT_QSPI > +BOOT_FROM qspi > +#elif defined(CONFIG_SYS_BOOT_EIMNOR) > +BOOT_FROM nor > +#else > +BOOT_FROM sd > +#endif > + > +#ifdef CONFIG_USE_PLUGIN This option only exists in the FSL U-boot, not in mainline. > +/*PLUGIN plugin-binary-file IRAM_FREE_START_ADDR*/ > +PLUGIN board/freescale/mx7dsabresd/plugin.bin 0x00910000 > +#else > + > +#ifdef CONFIG_SECURE_BOOT > +CSF CONFIG_CSF_SIZE > +#endif > +#include <asm/arch/clock.h> > +#include <asm/arch/imx-regs.h> > +#include <asm/arch/mx7-pins.h> > +#include <asm/arch/sys_proto.h> > +#include <asm/gpio.h> > +#include <asm/imx-common/iomux-v3.h> > +#include <asm/imx-common/boot_mode.h> > +#include <asm/io.h> > +#include <linux/sizes.h> > +#include <common.h> > +#include <fsl_esdhc.h> > +#include <mmc.h> > +#include <miiphy.h> > +#include <netdev.h> > +#include <power/pmic.h> > +#include <power/pfuze300_pmic.h> > +#include "../common/pfuze.h" > +#ifdef CONFIG_SYS_I2C_MXC No need to use ifdef for header files. > +static struct fsl_esdhc_cfg usdhc_cfg[3] = { > + {USDHC1_BASE_ADDR, 0, 4}, > + {USDHC3_BASE_ADDR}, > +}; > + > +int mmc_get_env_devno(void) static > +{ > + struct bootrom_sw_info **p = > + (struct bootrom_sw_info **)ROM_SW_INFO_ADDR; > + > + u8 boot_type = (*p)->boot_dev_type; > + u8 dev_no = (*p)->boot_dev_instance; > + > + /* If not boot from sd/mmc, use default value */ > + if ((boot_type != BOOT_TYPE_SD) && (boot_type != BOOT_TYPE_MMC)) > + return CONFIG_SYS_MMC_ENV_DEV; > + > + if (2 == dev_no) > + dev_no--; > + > + return dev_no; > +} > + > +int mmc_map_to_kernel_blk(int dev_no) static > +{ > + if (1 == dev_no) > + dev_no++; > + > + return dev_no; > +} > + > +int board_mmc_getcd(struct mmc *mmc) > +{ > + struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; > + int ret = 0; > + > + switch (cfg->esdhc_base) { > + case USDHC1_BASE_ADDR: > + ret = !gpio_get_value(USDHC1_CD_GPIO); > + break; > + case USDHC3_BASE_ADDR: > + ret = 1; /* Assume uSDHC3 emmc is always present */ > + break; > + } > + > + return ret; > +} > + > +int board_mmc_init(bd_t *bis) > +{ > + int i, ret; > + /* > + * According to the board_mmc_init() the following map is done: > + * (U-boot device node) (Physical Port) > + * mmc0 USDHC1 > + * mmc2 USDHC3 (eMMC) > + */ > + for (i = 0; i < CONFIG_SYS_FSL_USDHC_NUM; i++) { > + switch (i) { > + case 0: > + imx_iomux_v3_setup_multiple_pads( > + usdhc1_pads, ARRAY_SIZE(usdhc1_pads)); > + gpio_request(USDHC1_CD_GPIO, "usdhc1_cd"); > + gpio_direction_input(USDHC1_CD_GPIO); > + gpio_request(USDHC1_PWR_GPIO, "usdhc1_pwr"); > + gpio_direction_output(USDHC1_PWR_GPIO, 0); > + udelay(500); > + gpio_direction_output(USDHC1_PWR_GPIO, 1); > + usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK); > + break; > + case 1: > + imx_iomux_v3_setup_multiple_pads( > + usdhc3_emmc_pads, > ARRAY_SIZE(usdhc3_emmc_pads)); > + gpio_request(USDHC3_PWR_GPIO, "usdhc3_pwr"); > + gpio_direction_output(USDHC3_PWR_GPIO, 0); > + udelay(500); > + gpio_direction_output(USDHC3_PWR_GPIO, 1); > + usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); > + break; > + default: > + printf("Warning: you configured more USDHC > controllers" > + "(%d) than supported by the board\n", i + 1); > + return 0; You should return -EINVAL. > + } > + > + ret = fsl_esdhc_initialize(bis, &usdhc_cfg[i]); > + if (ret) > + return ret; > + } > + > + return 0; > +} > + > +int check_mmc_autodetect(void) > +{ > + char *autodetect_str = getenv("mmcautodetect"); > + > + if ((autodetect_str != NULL) && > + (strcmp(autodetect_str, "yes") == 0)) { > + return 1; > + } > + > + return 0; > +} > + > +void board_late_mmc_init(void) > +{ > + char cmd[32]; > + char mmcblk[32]; > + u32 dev_no = mmc_get_env_devno(); > + > + 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); > +} > + > +#endif > + > +#ifdef CONFIG_FEC_MXC > +int board_eth_init(bd_t *bis) > +{ > + int ret; > + > + setup_iomux_fec(); > + > + ret = fecmxc_initialize_multi(bis, 0, > + CONFIG_FEC_MXC_PHYADDR, IMX_FEC_BASE); > + if (ret) > + printf("FEC1 MXC: %s:failed\n", __func__); > + > + return ret; > +} > + > +static int setup_fec(void) > +{ > + struct iomuxc_gpr_base_regs *const iomuxc_gpr_regs > + = (struct iomuxc_gpr_base_regs *) IOMUXC_GPR_BASE_ADDR; > + int ret; > + > + /* Use 125M anatop REF_CLK1 for ENET1, clear gpr1[13], gpr1[17]*/ > + clrsetbits_le32(&iomuxc_gpr_regs->gpr[1], > + (IOMUXC_GPR_GPR1_GPR_ENET1_TX_CLK_SEL_MASK | > + IOMUXC_GPR_GPR1_GPR_ENET1_CLK_DIR_MASK), 0); > + > + ret = set_clk_enet(ENET_125MHz); > + if (ret) > + return ret; > + > + return 0; You could return set_clk_enet > +#ifdef CONFIG_USB_EHCI_MX7 > +iomux_v3_cfg_t const usb_otg1_pads[] = { > + MX7D_PAD_GPIO1_IO05__USB_OTG1_PWR | MUX_PAD_CTRL(NO_PAD_CTRL), > +}; > + > +iomux_v3_cfg_t const usb_otg2_pads[] = { > + MX7D_PAD_UART3_CTS_B__USB_OTG2_PWR | MUX_PAD_CTRL(NO_PAD_CTRL), > +}; > + > +int board_ehci_hcd_init(int port) > +{ > + switch (port) { > + case 0: > + imx_iomux_v3_setup_multiple_pads(usb_otg1_pads, > + ARRAY_SIZE(usb_otg1_pads)); > + break; > + case 1: > + imx_iomux_v3_setup_multiple_pads(usb_otg2_pads, > + ARRAY_SIZE(usb_otg2_pads)); > + break; > + default: > + printf("MXC USB port %d not yet supported\n", port); > + return 1; -EINVAL > + } > + return 0; > +} > +#endif > + > +#ifdef CONFIG_IMX_UDC > +void udc_pins_setting(void) > +{ > +} > + CONFIG_IMX_UDC does not exist in mainline U-boot. > +#endif /*CONFIG_IMX_UDC*/ > diff --git a/configs/mx7dsabresd_defconfig b/configs/mx7dsabresd_defconfig > new file mode 100644 > index 0000000..879847c > --- /dev/null > +++ b/configs/mx7dsabresd_defconfig > @@ -0,0 +1,10 @@ > +CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx7dsabresd/imximage.cfg,MX7D" > +CONFIG_ARM=y > +CONFIG_TARGET_MX7DSABRESD=y > +CONFIG_SYS_MALLOC_F=y > +CONFIG_SYS_MALLOC_F_LEN=0x400 > +# CONFIG_CMD_BOOTD is not set > +# CONFIG_CMD_SETEXPR is not set > +# CONFIG_CMD_IMI is not set > +# CONFIG_CMD_IMLS is not set > +# CONFIG_CMD_XIMG is not set > diff --git a/include/configs/mx7_common.h b/include/configs/mx7_common.h > new file mode 100644 > index 0000000..25f79f3 > --- /dev/null > +++ b/include/configs/mx7_common.h > @@ -0,0 +1,22 @@ > +/* > + * Copyright (C) 2015 Freescale Semiconductor, Inc. > + * > + * Configuration settings for the Freescale i.MX7. > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > + > +#ifndef __MX7_COMMON_H > +#define __MX7_COMMON_H > + > +#define CONFIG_BOARD_POSTCLK_INIT > +#define CONFIG_MXC_GPT_HCLK > + > +#define CONFIG_SYSCOUNTER_TIMER > +#define CONFIG_SC_TIMER_CLK 8000000 /* 8Mhz */ > + > +#define CONFIG_IOMUX_LPSR > +#define CONFIG_IMX_FIXED_IVT_OFFSET > + > +#endif > diff --git a/include/configs/mx7dsabresd.h b/include/configs/mx7dsabresd.h > new file mode 100644 > index 0000000..4119646 > --- /dev/null > +++ b/include/configs/mx7dsabresd.h > @@ -0,0 +1,382 @@ > +/* > + * Copyright (C) 2015 Freescale Semiconductor, Inc. > + * > + * Configuration settings for the Freescale i.MX7D SABRESD board. > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#ifndef __MX7D_SABRESD_CONFIG_H > +#define __MX7D_SABRESD_CONFIG_H > + > +#include <asm/arch/imx-regs.h> > +#include <linux/sizes.h> > +#include "mx7_common.h" > +#include <asm/imx-common/gpio.h> > + > +#define CONFIG_MX7 > +#define CONFIG_ROM_UNIFIED_SECTIONS > +#define CONFIG_SYS_GENERIC_BOARD > +#define CONFIG_DISPLAY_CPUINFO > +#define CONFIG_DISPLAY_BOARDINFO > + > +#define CONFIG_DBG_MONITOR > +/* uncomment for PLUGIN mode support */ > +/* #define CONFIG_USE_PLUGIN */ > + > +/* uncomment for SECURE mode support */ > +/* #define CONFIG_SECURE_BOOT */ > + > +#ifdef CONFIG_SECURE_BOOT > +#ifndef CONFIG_CSF_SIZE > +#define CONFIG_CSF_SIZE 0x4000 > +#endif > +#endif > + > +#define CONFIG_CMDLINE_TAG > +#define CONFIG_SETUP_MEMORY_TAGS > +#define CONFIG_INITRD_TAG > +#define CONFIG_REVISION_TAG > + > +/* Size of malloc() pool */ > +#define CONFIG_SYS_MALLOC_LEN (32 * SZ_1M) > + > +#define CONFIG_BOARD_EARLY_INIT_F > +#define CONFIG_BOARD_LATE_INIT > +#define CONFIG_MXC_GPIO > + > +#define CONFIG_MXC_UART > +#define CONFIG_MXC_UART_BASE UART1_IPS_BASE_ADDR > + > +/* allow to overwrite serial and ethaddr */ > +#define CONFIG_ENV_OVERWRITE > +#define CONFIG_CONS_INDEX 1 > +#define CONFIG_BAUDRATE 115200 > + > +#define CONFIG_CMD_FUSE > +#ifdef CONFIG_CMD_FUSE > +#define CONFIG_MXC_OCOTP > +#endif > + > +/* MMC Configs */ > +#define CONFIG_FSL_ESDHC > +#define CONFIG_FSL_USDHC > +#define CONFIG_SYS_FSL_ESDHC_ADDR 0 > + > +#define CONFIG_MMC > +#define CONFIG_CMD_MMC > +#define CONFIG_GENERIC_MMC > +#define CONFIG_CMD_FAT > +#define CONFIG_DOS_PARTITION > +#define CONFIG_SUPPORT_EMMC_BOOT /* eMMC specific */ > + > +#define PHYS_SDRAM_SIZE SZ_1G > + > +#define CONFIG_CMD_PING > +#define CONFIG_CMD_DHCP > +#define CONFIG_CMD_MII > +#define CONFIG_FEC_MXC > +#define CONFIG_MII > +#define CONFIG_FEC_XCV_TYPE RGMII > +#define CONFIG_ETHPRIME "FEC" > +#define CONFIG_FEC_MXC_PHYADDR 0 > + > +#define CONFIG_PHYLIB > +#define CONFIG_PHY_BROADCOM > +#define CONFIG_FEC_DMA_MINALIGN 64 > + > +/* ENET1 */ > +#define IMX_FEC_BASE ENET_IPS_BASE_ADDR > + > +/* PMIC */ > +#define CONFIG_POWER > +#define CONFIG_POWER_I2C > +#define CONFIG_POWER_PFUZE300 > +#define CONFIG_POWER_PFUZE300_I2C_ADDR 0x08 > + > +#undef CONFIG_BOOTM_NETBSD > +#undef CONFIG_BOOTM_PLAN9 > +#undef CONFIG_BOOTM_RTEMS > + > +#undef CONFIG_CMD_EXPORTENV > +#undef CONFIG_CMD_IMPORTENV > + > +/* I2C configs */ > +#define CONFIG_CMD_I2C > +#define CONFIG_SYS_I2C > +#define CONFIG_SYS_I2C_MXC > +#define CONFIG_SYS_I2C_MXC_I2C1 > +#define CONFIG_SYS_I2C_SPEED 100000 > + > +#undef CONFIG_CMD_IMLS > + > +#define CONFIG_BOOTDELAY 3 > + > +#define CONFIG_LOADADDR 0x80800000 > +#define CONFIG_SYS_TEXT_BASE 0x87800000 > + > +#define CONFIG_SYS_AUXCORE_BOOTDATA 0x60000000 /* Set to QSPI1 A flash at > default */ > +#define CONFIG_CMD_BOOTAUX /* Boot M4 */ > + > +#ifdef CONFIG_CMD_BOOTAUX This config option does not exist in U-boot mainline. > +/* Miscellaneous configurable options */ > +#define CONFIG_SYS_LONGHELP > +#define CONFIG_SYS_HUSH_PARSER > +#define CONFIG_SYS_PROMPT "=> " This is the default prompt, no need to set it explicitly. > +#define CONFIG_AUTO_COMPLETE > +#define CONFIG_SYS_CBSIZE 1024 > + > +/* Print Buffer Size */ > +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + > 16) Please remove this line, as it is better to use the default. This value can cause a U-boot hang if the maximum allowed number of strings is entered in console. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot