[U-Boot] [PATCH 2/5] vybrid: add Freescale vybrid vf600 tower board support

Fabio Estevam festevam at gmail.com
Fri Apr 12 13:41:31 CEST 2013


Hi Alison,

On Fri, Apr 12, 2013 at 3:53 AM, Alison Wang <b18965 at freescale.com> wrote:
> This patch adds Freescale vybrid vf600 tower board support.
>
> Signed-off-by: TsiChung Liew <tsicliew at gmail.com>
> Signed-off-by: Jason Jin <Jason.jin at freescale.com>
> Signed-off-by: Alison Wang <b18965 at freescale.com>
> ---
>  board/freescale/vybrid/Makefile        |  40 +++
>  board/freescale/vybrid/vybrid.c        | 488 +++++++++++++++++++++++++++++++++

Vybrid is the SoC name and the board name is vf600, right?

Then you should add:

 board/freescale/vf600

Also, please copy Stefano Babic in your future patches, as he is the
U-boot imx maintainer.
>  board/freescale/vybrid/vybridimage.cfg |  44 +++
>  boards.cfg                             |   2 +
>  include/configs/vybrid.h               | 284 +++++++++++++++++++
>  include/configs/vybrid_iram.h          | 284 +++++++++++++++++++
>  6 files changed, 1142 insertions(+)
>  create mode 100644 board/freescale/vybrid/Makefile
>  create mode 100644 board/freescale/vybrid/vybrid.c
>  create mode 100644 board/freescale/vybrid/vybridimage.cfg
>  create mode 100644 include/configs/vybrid.h
>  create mode 100644 include/configs/vybrid_iram.h

This patch should be the last of the series.

You add the board support here, but ethernet, serial, esdhc support
comes later in the patch series.

Please add an entry to MAINTAINERS file.


> +#ifdef CONFIG_FSL_ESDHC
> +struct fsl_esdhc_cfg esdhc_cfg[2] = {
> +       {CONFIG_SYS_ESDHC1_BASE, 1},
> +       {ESDHC2_BASE_ADDR, 1},

CONFIG_ESDHC2_BASE_ADDR ?

> +int dram_init(void)
> +{
> +       setup_iomux_ddr();
> +#ifdef CONFIG_SYS_UBOOT_IN_GPURAM

You introduced CONFIG_SYS_UBOOT_IN_GPURAM here and it would be nice to
add an entry into README explaining what it means.

> +       gd->ram_size = 0x80000;
> +       ddr_ctrl_init();
> +#else
> +       gd->ram_size = ddr_ctrl_init();
> +#endif
> +       return 0;

Can't you use the standard method?

gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);


> +#ifdef CONFIG_QUAD_SPI

CONFIG_QUAD_SPI does not exist in U-boot. Can't you re-use an existing
SPI config option?


> +#ifdef CONFIG_FSL_ESDHC
> +int board_mmc_getcd(struct mmc *mmc)
> +{
> +       int ret;
> +
> +       __raw_writel(0x005031ef, IOMUXC_PAD_014);       /* clk */
> +       __raw_writel(0x005031ef, IOMUXC_PAD_015);       /* cmd */
> +       __raw_writel(0x005031ef, IOMUXC_PAD_016);       /* dat0 */
> +       __raw_writel(0x005031ef, IOMUXC_PAD_017);       /* dat1 */
> +       __raw_writel(0x005031ef, IOMUXC_PAD_018);       /* dat2 */
> +       __raw_writel(0x005031ef, IOMUXC_PAD_019);       /* dat3 */

This function should basically return the card detect status, please
setup the IOMUX in another place.

> +       ret = 1;
> +       return ret;

In this board you assume that the SD card is always present, right?

You could remove the 'ret' variable.

> diff --git a/board/freescale/vybrid/vybridimage.cfg b/board/freescale/vybrid/vybridimage.cfg
> new file mode 100644
> index 0000000..5da5659
> --- /dev/null
> +++ b/board/freescale/vybrid/vybridimage.cfg
> @@ -0,0 +1,44 @@
> +#
> +# Copyright 2012-2013 Freescale Semiconductor, Inc.
> +#
> +# See file CREDITS for list of people who contributed to this
> +# project.
> +#
> +# This program is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU General Public License as
> +# published by the Free Software Foundation; either version 2 of
> +# the License or (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not write to the Free Software
> +# Foundation Inc. 51 Franklin Street Fifth Floor Boston,
> +# MA 02110-1301 USA
> +#
> +# 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
> +
> +IMAGE_VERSION  2
> +
> +# Boot Device : one of
> +# spi, sd (the board has no nand neither onenand)
> +
> +BOOT_FROM      sd
> +
> +# Device Configuration Data (DCD)
> +#
> +# Each entry must have the format:
> +# Addr-type           Address        Value
> +#
> +# where:
> +#      Addr-type register length (1,2 or 4 bytes)
> +#      Address   absolute address of the register
> +#      value     value to be stored in the register
> +
> +# Setting IOMUXC

This file is suited for imx. If you don't need this for Vybrid, please
remove it.


> diff --git a/boards.cfg b/boards.cfg
> index 7725a15..2700a76 100644
> --- a/boards.cfg
> +++ b/boards.cfg
> @@ -244,6 +244,8 @@ am335x_evm_uart5             arm         armv7       am335x              ti
>  am335x_evm_usbspl            arm         armv7       am335x              ti             am33xx      am335x_evm:SERIAL1,CONS_INDEX=1,SPL_USBETH_SUPPORT
>  pcm051                       arm         armv7       pcm051              phytec         am33xx      pcm051
>  highbank                     arm         armv7       highbank            -              highbank
> +vybrid                       arm         armv7       vybrid              freescale      vybrid          vybrid:VYBRID_CONFIG=board/freescale/vybrid/vybridimage.cfg
> +vybrid_iram                  arm         armv7       vybrid              freescale      vybrid          vybrid_iram:VYBRID_CONFIG=board/freescale/vybrid/vybridimage.cfg

Looks like you don't need vybridimage.cfg.


>  mx51_efikamx                 arm         armv7       mx51_efikamx        genesi         mx5            mx51_efikamx:MACH_TYPE=MACH_TYPE_MX51_EFIKAMX,IMX_CONFIG=board/genesi/mx51_efikamx/imximage_mx.cfg
>  mx51_efikasb                 arm         armv7       mx51_efikamx        genesi         mx5            mx51_efikamx:MACH_TYPE=MACH_TYPE_MX51_EFIKASB,IMX_CONFIG=board/genesi/mx51_efikamx/imximage_sb.cfg
>  mx51evk                      arm         armv7       mx51evk             freescale      mx5            mx51evk:IMX_CONFIG=board/freescale/mx51evk/imximage.cfg
> diff --git a/include/configs/vybrid.h b/include/configs/vybrid.h
> new file mode 100644
> index 0000000..d915bd0
> --- /dev/null
> +++ b/include/configs/vybrid.h
> @@ -0,0 +1,284 @@
> +/*
> + * Copyright 2012-2013 Freescale Semiconductor, Inc.
> + *
> + * Configuration settings for the vybrid Board

Since Vybrid is the SoC name, I would expect the


> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of
> + * the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
> +#ifndef __CONFIG_H
> +#define __CONFIG_H
> +
> + /* High Level Configuration Options */
> +
> +#define CONFIG_VYBRID
> +
> +#define CONFIG_SYS_VYBRID_HCLK         24000000
> +#define CONFIG_SYS_VYBRID_CLK32                32768
> +#define CONFIG_DISPLAY_CPUINFO
> +#define CONFIG_DISPLAY_BOARDINFO
> +#define CONFIG_SYS_IPG
> +
> +#define CONFIG_SYS_ICACHE_OFF
> +#define CONFIG_SYS_CACHELINE_SIZE      64
> +
> +#include <asm/arch/vybrid-regs.h>

Move the include to the start of the file.

> +
> +/*
> + * Disabled for now due to build problems under Debian and a significant
> + * increase in the final file size: 144260 vs. 109536 Bytes.
> + */

Please remove this comment. It does not apply here.


> +
> +#define CONFIG_CMDLINE_TAG                     /* enable passing of ATAGs */
> +#undef CONFIG_SETUP_MEMORY_TAGS
> +#undef CONFIG_INITRD_TAG
> +
> +#undef CONFIG_OF_LIBFDT
> +
> +#define CONFIG_MACH_TYPE               MACH_TYPE_VYBRID_VF6XX
> +/* Size of malloc() pool */
> +#define CONFIG_SYS_MALLOC_LEN          (CONFIG_ENV_SIZE + 2 * 1024 * 1024)
> +
> +#define CONFIG_BOARD_LATE_INIT
> +
> +/* Hardware drivers */
> +#define CONFIG_VYBRID_UART
> +#define CONFIG_VYBRID_UART_BASE                UART0_BASE
> +#define CONFIG_VYBRID_GPIO
> +
> +/* allow to overwrite serial and ethaddr */
> +#define CONFIG_ENV_OVERWRITE
> +#define CONFIG_SYS_UART_PORT           (1)
> +#define CONFIG_BAUDRATE                        115200
> +#define CONFIG_SYS_BAUDRATE_TABLE      {9600, 19200, 38400, 57600, 115200}
> +
> +/* Command definition */
> +#include <config_cmd_default.h>
> +
> +#define CONFIG_CMD_BDI         /* bdinfo */
> +#define CONFIG_CMD_BOOTD
> +#define CONFIG_CMD_CONSOLE     /* coninfo */
> +#define CONFIG_CMD_DHCP
> +#define CONFIG_CMD_ELF
> +#define CONFIG_CMD_MEMORY      /* md mm nm mw cp cmp crc base loop mtest */
> +#define CONFIG_CMD_MISC
> +#define CONFIG_CMD_MII
> +#define CONFIG_CMD_NET
> +#undef CONFIG_CMD_NFS          /* NFS support                  */

Do you need to undef it? Just do not include it, right?

> +#define CONFIG_CMD_PING
> +#undef CONFIG_CMD_NAND

Same here.

> +#undef CONFIG_CMD_DATE

Same here.

> +#undef CONFIG_CMD_IMI          /* iminfo */
> +#undef CONFIG_CMD_IMLS
> +#undef CONFIG_CMD_LOADB                /* loadb */
> +#undef CONFIG_CMD_LOADS                /* loads */
> +
> +#define CONFIG_SYS_TEXT_BASE           0x3f000800
> +
> +#define CONFIG_MMC
> +#ifdef CONFIG_MMC
> +#define CONFIG_SYS_ESDHC1_BASE         ESDHC2_BASE_ADDR
> +#define CONFIG_SYS_ESDHC2_BASE         ESDHC2_BASE_ADDR
> +#define CONFIG_FSL_ESDHC
> +#define CONFIG_SYS_FSL_ESDHC_ADDR      0
> +#define CONFIG_SYS_FSL_ESDHC_NUM       1
> +
> +#define CONFIG_SYS_FSL_ERRATUM_ESDHC135
> +#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
> +#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A001
> +
> +#define CONFIG_CMD_MMC
> +#define CONFIG_GENERIC_MMC
> +#define CONFIG_CMD_FAT
> +#define CONFIG_DOS_PARTITION
> +#endif
> +
> +/*
> + * NAND FLASH
> + */
> +#ifdef CONFIG_CMD_NAND
> +#define CONFIG_MTD_NAND_FSL_NFC_SWECC  1
> +#define CONFIG_JFFS2_NAND
> +#define CONFIG_NAND_FSL_NFC
> +#define CONFIG_SYS_NAND_BASE           0x400E0000
> +#define CONFIG_SYS_MAX_NAND_DEVICE     1
> +#define NAND_MAX_CHIPS                 CONFIG_SYS_MAX_NAND_DEVICE
> +#define CONFIG_SYS_NAND_SELECT_DEVICE
> +#define        CONFIG_SYS_64BIT_VSPRINTF       /* needed for nand_util.c */
> +#endif
> +
> +#define CONFIG_QUAD_SPI
> +
> +/* Network configuration */
> +#define CONFIG_MCFFEC
> +#ifdef CONFIG_MCFFEC
> +#      define CONFIG_MII               1
> +#      define CONFIG_MII_INIT          1
> +#      define CONFIG_SYS_DISCOVER_PHY
> +#      define CONFIG_SYS_RX_ETH_BUFFER 8
> +#      define CONFIG_SYS_FAULT_ECHO_LINK_DOWN
> +
> +#      define CONFIG_SYS_FEC0_PINMUX   0
> +#      define CONFIG_SYS_FEC1_PINMUX   0
> +#      define CONFIG_SYS_FEC0_IOBASE   MACNET0_BASE_ADDR
> +#      define CONFIG_SYS_FEC1_IOBASE   MACNET1_BASE_ADDR
> +#      define CONFIG_SYS_FEC0_MIIBASE  MACNET0_BASE_ADDR
> +#      define CONFIG_SYS_FEC1_MIIBASE  MACNET0_BASE_ADDR
> +#      define MCFFEC_TOUT_LOOP 50000
> +#      undef CONFIG_HAS_ETH1
> +
> +#      define CONFIG_ETHADDR           00:e0:0c:bc:e5:60
> +#      define CONFIG_ETH1ADDR          00:e0:0c:bc:e5:61
> +#      define CONFIG_ETHPRIME          "FEC0"
> +#      define CONFIG_IPADDR            10.81.67.175
> +#      define CONFIG_NETMASK           255.255.252.0
> +#      define CONFIG_SERVERIP          10.81.64.153
> +#      define CONFIG_GATEWAYIP         10.81.67.254
> +#      define CONFIG_OVERWRITE_ETHADDR_ONCE


No hardcoded IP addresses/MAC addresses, please.

> +
> +/* If CONFIG_SYS_DISCOVER_PHY is not defined - hardcoded */
> +#      ifndef CONFIG_SYS_DISCOVER_PHY
> +#              define FECDUPLEX        FULL
> +#              define FECSPEED         _100BASET
> +#      else
> +#              ifndef CONFIG_SYS_FAULT_ECHO_LINK_DOWN
> +#                      define CONFIG_SYS_FAULT_ECHO_LINK_DOWN
> +#              endif
> +#      endif                   /* CONFIG_SYS_DISCOVER_PHY */
> +#endif
> +
> +#define CONFIG_BOOTDELAY               3
> +#define CONFIG_ETHPRIME                        "FEC0"
> +#define CONFIG_LOADADDR                        0x80010000      /* loadaddr env var */
> +#define CONFIG_ARP_TIMEOUT             200UL

Is this really needed?

> diff --git a/include/configs/vybrid_iram.h b/include/configs/vybrid_iram.h
> new file mode 100644
> index 0000000..f88050e
> --- /dev/null
> +++ b/include/configs/vybrid_iram.h

Do we really need two configs? Can't we have just one?


More information about the U-Boot mailing list