[U-Boot] [PATCH 3/3] board/seco: Add mx6q-uq7 basic board support
Boris Brezillon
boris.brezillon at free-electrons.com
Mon Mar 2 11:43:11 CET 2015
Hi Stefano,
On Mon, 02 Mar 2015 11:17:42 +0100
Stefano Babic <sbabic at denx.de> wrote:
> Hi Boris,
>
> On 16/02/2015 14:27, Boris Brezillon wrote:
> > Add basic SECO MX6Q/uQ7 board support (Ethernet, UART, SD are supported).
> > It also adds a Kconfig skeleton to later add more SECO board (supporting
> > SoC and board variants).
> >
> > Signed-off-by: Boris Brezillon <boris.brezillon at free-electrons.com>
> > ---
> > arch/arm/cpu/armv7/mx6/Kconfig | 11 +++
> > board/seco/Kconfig | 63 ++++++++++++++
> > board/seco/common/Makefile | 2 +
> > board/seco/common/mx6.c | 137 ++++++++++++++++++++++++++++++
> > board/seco/common/mx6.h | 9 ++
> > board/seco/mx6quq7/Makefile | 7 ++
> > board/seco/mx6quq7/mx6quq7-2g.cfg | 173 ++++++++++++++++++++++++++++++++++++++
> > board/seco/mx6quq7/mx6quq7.c | 165 ++++++++++++++++++++++++++++++++++++
> > configs/secomx6quq7_defconfig | 7 ++
> > include/configs/secomx6quq7.h | 162 +++++++++++++++++++++++++++++++++++
>
> MAINTAINERS file is missing.
>
> I have tried your patches, I think there is something not coherent with
> names and the board cannot be built clean with buildman. Board is
> recognized as secomx6quq7, but then there is a mismatch in the board
> object library.
>
> You set:
>
> obj-y := mx6q-uq7.o
>
>
> but the source is mx6quq7.c and building breaks with
>
> make[1]: *** No rule to make target `board/seco/mx6quq7/mx6q-uq7.o',
> needed by `board/seco/mx6quq7/built-in.o'. Stop.
Indeed.
I renamed all the files to match what's done for other boards (no
dashes or underscores in names), but apparently forgot to change it in
the Makefile.
I didn't notice it when compiling because I still add an mx6q-uq7.o file
in my directory.
Anyway, I'll fix that.
[...]
> > +void seco_mx6_setup_usdhc_iomux(int id)
> > +{
> > + switch (id) {
> > + case 3:
> > + imx_iomux_v3_setup_multiple_pads(usdhc3_pads,
> > + ARRAY_SIZE(usdhc3_pads));
> > + break;
> > +
> > + case 4:
> > + imx_iomux_v3_setup_multiple_pads(usdhc4_pads,
> > + ARRAY_SIZE(usdhc4_pads));
> > + break;
> > +
> > + default:
>
> Maybe it is better to print an error due to wrong id.
Sure, I'll add an error message.
[...]
> > +int board_mmc_init(bd_t *bis)
> > +{
> > + int status = 0;
> > + u32 index = 0;
> > +
> > + /*
> > + * Following map is done:
> > + * (U-boot device node) (Physical Port)
> > + * mmc0 eMMC on Board
> > + * mmc1 Ext SD
> > + */
> > + for (index = 0; index < CONFIG_SYS_FSL_USDHC_NUM; ++index) {
> > + switch (index) {
> > + case 0:
> > + seco_mx6_setup_usdhc_iomux(3);
> > + usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
> > + usdhc_cfg[0].max_bus_width = 4;
> > + break;
> > + case 1:
> > + seco_mx6_setup_usdhc_iomux(4);
> > + usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC4_CLK);
> > + usdhc_cfg[1].max_bus_width = 4;
> > + break;
> > +
> > + default:
> > + printf("Warning: %d exceed maximum number of SD ports %d\n",
> > + index + 1, CONFIG_SYS_FSL_USDHC_NUM);
> > + return status;
> > + }
> > +
> > + status |= fsl_esdhc_initialize(bis, &usdhc_cfg[index]);
>
> Fabio cleaned up all for all boards these statement, check for example
> the sabresd. Instead of cumulating the error, the loop stops at the
> first failure. Do the same to be coherent.
Okay, I'll have a look.
>
> > + }
> > +
> > + return status;
> > +}
> > +
> > +int board_init(void)
> > +{
> > + /* address of boot parameters */
> > + gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
> > +
> > + imx_iomux_v3_setup_pad(MX6_PAD_NANDF_D4__GPIO2_IO04 |
> > + MUX_PAD_CTRL(NO_PAD_CTRL));
> > +
> > + gpio_direction_output(IMX_GPIO_NR(2, 4), 0);
> > +
>
> Is it reset for phy ? Can you add a comment to explain what it is ?
I don't know what this pin is controlling, but if I don't do the
following toggle sequence, the board hangs.
Note that I don't have the schematics of this board, and all my work is
based on SECO's BSP.
>
> > + /* Set Low */
> > + gpio_set_value(IMX_GPIO_NR(2, 4), 0);
> > + udelay(1000);
> > +
> > + /* Set High */
> > + gpio_set_value(IMX_GPIO_NR(2, 4), 1);
> > +
> > + return 0;
> > +}
> > +
> > +int board_late_init(void)
> > +{
> > + return 0;
> > +}
>
> Drop it, as well as CONFIG_BOARD_LATE_INIT
Ok.
[...]
> > +#define CONFIG_EXTRA_ENV_SETTINGS \
> > + "netdev=eth0\0" \
> > + "ethprime=FEC0\0" \
> > + "netdev=eth0\0" \
> > + "ethprime=FEC0\0" \
> > + "uboot=u-boot.bin\0" \
> > + "kernel=uImage\0" \
> > + "nfsroot=/opt/eldk/arm\0" \
> > + "ip_local=10.0.0.5::10.0.0.1:255.255.255.0::eth0:off\0" \
> > + "ip_server=10.0.0.1\0" \
> > + "nfs_path=/targetfs \0" \
> > + "memory=mem=1024M\0" \
> > + "bootdev=mmc dev 0; ext2load mmc 0:1\0" \
> > + "root=root=/dev/mmcblk0p1\0" \
> > + "option=rootwait rw fixrtc rootflags=barrier=1\0" \
> > + "cpu_freq=arm_freq=996\0" \
> > + "setbootargs=setenv bootargs console=ttymxc1,115200 ${root} ${option} ${memory} ${cpu_freq}\0" \
> > + "setbootargs_nfs=setenv bootargs console=ttymxc1,115200 root=/dev/nfs nfsroot=${ip_server}:${nfs_path} nolock,wsize=4096,rsize=4096 ip=:::::eth0:dhcp ${memory} ${cpu_freq}\0" \
>
> checkpatch is not very happy with these very long lines, can you fix
> them, please ?
Yes I know, I just wasn't sure if there was a rule like 'do not split
bootargs definitions in multi-line strings'.
I'll split the lines appropriately.
>
> > + "setbootdev=setenv boot_dev ${bootdev} 10800000 /boot/uImage\0" \
> > + "bootcmd=run setbootargs; run setbootdev; run boot_dev; bootm 0x10800000\0" \
> > + "stdin=serial\0" \
> > + "stdout=serial\0" \
> > + "stderr=serial\0"
> > +
> > +
> > +/* Miscellaneous configurable options */
> > +#define CONFIG_SYS_LONGHELP
> > +#define CONFIG_SYS_HUSH_PARSER
> > +#define CONFIG_SYS_PROMPT "SECO MX6Q uQ7 U-Boot > "
> > +
> > +#define CONFIG_AUTO_COMPLETE
> > +#define CONFIG_SYS_CBSIZE 256
> > +
> > +/* Print Buffer Size */
> > +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \
> > + sizeof(CONFIG_SYS_PROMPT) + 16)
> > +#define CONFIG_SYS_MAXARGS 16
> > +#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
> > +
> > +#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
> > +#define CONFIG_SYS_HZ 1000
> > +
> > +#define CONFIG_CMDLINE_EDITING
> > +
> > +
> > +/* Physical Memory Map */
> > +#define CONFIG_NR_DRAM_BANKS 1
> > +#define PHYS_SDRAM MMDC0_ARB_BASE_ADDR
> > +#define PHYS_SDRAM_SIZE (2u * 1024 * 1024 * 1024)
> > +
> > +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM
> > +#define CONFIG_SYS_INIT_RAM_ADDR IRAM_BASE_ADDR
> > +#define CONFIG_SYS_INIT_RAM_SIZE IRAM_SIZE
> > +
> > +#define CONFIG_SYS_INIT_SP_OFFSET \
> > + (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
> > +#define CONFIG_SYS_INIT_SP_ADDR \
> > + (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
> > +
> > +/* FLASH and environment organization */
> > +#define CONFIG_SYS_NO_FLASH
> > +
> > +#define CONFIG_ENV_SIZE (8 * 1024)
> > +
> > +#if defined(CONFIG_ENV_IS_IN_MMC)
> > + #define CONFIG_ENV_OFFSET (6 * 128 * 1024)
> > + #define CONFIG_SYS_MMC_ENV_DEV 0
> > + #define CONFIG_DYNAMIC_MMC_DEVNO
> > +#endif
> > +
> > +#define CONFIG_OF_LIBFDT
> > +#define CONFIG_CMD_BOOTZ
> > +
> > +#ifndef CONFIG_SYS_DCACHE_OFF
> > +#define CONFIG_CMD_CACHE
> > +#endif
> > +
> > +#endif /* __CONFIG_H */
> >
>
Thanks for your review.
Best Regards,
Boris
--
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
More information about the U-Boot
mailing list