[U-Boot] [PATCH] overo: add SPL support

Steve Sakoman sakoman at gmail.com
Wed Dec 14 18:24:13 CET 2011


On Wed, Dec 14, 2011 at 8:27 AM, Andreas Müller <schnitzeltony at gmx.de> wrote:
> * implemenatation based on ti beagleboard/omap3evm
> * timing data taken from x-loader
> * run-tested with overo release 0 and 1 / boot from NAND and SDcard

Thanks for doing this!

I took a quick look and only see one addition to Tom's comments.  See below.

> Signed-off-by: Andreas Müller <schnitzeltony at gmx.de>
> ---
>  arch/arm/include/asm/arch-omap3/mem.h |   27 ++++++++++++++++
>  board/overo/config.mk                 |   28 ----------------
>  board/overo/overo.c                   |   41 +++++++++++++++++++++++-
>  include/configs/omap3_overo.h         |   56 ++++++++++++++++++++++++++++++++-
>  4 files changed, 122 insertions(+), 30 deletions(-)
>  delete mode 100644 board/overo/config.mk
>
> diff --git a/arch/arm/include/asm/arch-omap3/mem.h b/arch/arm/include/asm/arch-omap3/mem.h
> index 5fd02d4..18998d8 100644
> --- a/arch/arm/include/asm/arch-omap3/mem.h
> +++ b/arch/arm/include/asm/arch-omap3/mem.h
> @@ -123,6 +123,33 @@ enum {
>                V_MCFG_BANKALLOCATION_RBC |                     \
>                V_MCFG_B32NOT16_32 | V_MCFG_DEEPPD_EN | V_MCFG_RAMTYPE_DDR
>
> +
> +/* Hynix part of Overo (165MHz optimized) 6.06ns */
> +#define HYNIX_TDAL_165   6
> +#define HYNIX_TDPL_165   3
> +#define HYNIX_TRRD_165   2
> +#define HYNIX_TRCD_165   3
> +#define HYNIX_TRP_165    3
> +#define HYNIX_TRAS_165   7
> +#define HYNIX_TRC_165   10
> +#define HYNIX_TRFC_165  21
> +#define HYNIX_V_ACTIMA_165     \
> +               ACTIM_CTRLA(HYNIX_TRFC_165, HYNIX_TRC_165,      \
> +                               HYNIX_TRAS_165, HYNIX_TRP_165,  \
> +                               HYNIX_TRCD_165, HYNIX_TRRD_165, \
> +                               HYNIX_TDPL_165, HYNIX_TDAL_165)
> +
> +#define HYNIX_TWTR_165   1
> +#define HYNIX_TCKE_165   1
> +#define HYNIX_TXP_165    2
> +#define HYNIX_XSR_165    24
> +#define HYNIX_V_ACTIMB_165     \
> +               ACTIM_CTRLB(HYNIX_TWTR_165, HYNIX_TCKE_165,     \
> +                               HYNIX_TXP_165, HYNIX_XSR_165)
> +
> +#define HYNIX_RASWIDTH_165     0x2
> +#define HYNIX_V_MCFG_165(size) MCFG((size), HYNIX_RASWIDTH_165)
> +
>  /* Hynix part of AM/DM37xEVM (200MHz optimized) */
>  #define HYNIX_TDAL_200         6
>  #define HYNIX_TDPL_200         3
> diff --git a/board/overo/config.mk b/board/overo/config.mk
> deleted file mode 100644
> index e7c471c..0000000
> --- a/board/overo/config.mk
> +++ /dev/null
> @@ -1,28 +0,0 @@
> -#
> -# Overo uses OMAP3 (ARM-CortexA8) cpu
> -#
> -# 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., 59 Temple Place, Suite 330, Boston,
> -# MA 02111-1307 USA
> -#
> -# Physical Address:
> -# 8000'0000 (bank0)
> -# A000/0000 (bank1)
> -# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000
> -# (mem base + reserved)
> -
> -CONFIG_SYS_TEXT_BASE = 0x80008000
> diff --git a/board/overo/overo.c b/board/overo/overo.c
> index 3c60b06..dbe43ab 100644
> --- a/board/overo/overo.c
> +++ b/board/overo/overo.c
> @@ -31,6 +31,7 @@
>  #include <common.h>
>  #include <netdev.h>
>  #include <twl4030.h>
> +#include <linux/mtd/nand.h>
>  #include <asm/io.h>
>  #include <asm/arch/mmc_host_def.h>
>  #include <asm/arch/mux.h>
> @@ -126,6 +127,44 @@ int get_board_revision(void)
>        return revision;
>  }
>
> +#ifdef CONFIG_SPL_BUILD
> +/*
> + * Routine: get_board_mem_timings
> + * Description: If we use SPL then there is no x-loader nor config header
> + * so we have to setup the DDR timings ourself on both banks.
> + */
> +void get_board_mem_timings(u32 *mcfg, u32 *ctrla, u32 *ctrlb, u32 *rfr_ctrl,
> +               u32 *mr)
> +{
> +       *mr = MICRON_V_MR_165;
> +       switch (get_board_revision()) {

I think you will also need to update the get_board_revision function
to ensure that SPL works with very early Overo revisions.

Note this excerpt from the X-loader get_board_revision funtion:

	/* board revisions <= R2410 connect 4030 irq_1 to gpio112             */
	/* these boards should return a revision number of 0                  */
	/* the code below forces a 4030 RTC irq to ensure that gpio112 is low */
#ifdef CONFIG_DRIVER_OMAP34XX_I2C
	i2c_init(CFG_I2C_SPEED, CFG_I2C_SLAVE);
	data = 0x01;
	i2c_write(0x4B, 0x29, 1, &data, 1);
	data = 0x0c;
	i2c_write(0x4B, 0x2b, 1, &data, 1);
	i2c_read(0x4B, 0x2a, 1, &data, 1);
#endif

Yup, ugly, but this is the only way to detect revision properly on those boards.

Regards,

Steve


More information about the U-Boot mailing list