Hi Stefano,

On Mon, 02 Mar 2015 11:17:42 +0100
Stefano Babic <sba...@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.brezil...@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
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to