[U-Boot] [PATCH v5] arm: ep9315: Return back Cirrus Logic EDB9315A board support
Albert ARIBAUD
albert.u.boot at aribaud.net
Sun May 25 15:45:25 CEST 2014
Hi Sergey,
The patch does not apply cleanly on current u-boot-arm/master.
Also, see my comments below, a continuation from two points I raised
and you answered in V4.
On Mon, 21 Apr 2014 08:39:59 +0000, Sergey Kostanbev
<sergey.kostanbaev at gmail.com> wrote:
> diff --git a/arch/arm/cpu/arm920t/ep93xx/lowlevel_init.S b/arch/arm/cpu/arm920t/ep93xx/lowlevel_init.S
> index bf2fa2a..3ac0f88 100644
> --- a/arch/arm/cpu/arm920t/ep93xx/lowlevel_init.S
> +++ b/arch/arm/cpu/arm920t/ep93xx/lowlevel_init.S
> @@ -1,49 +1,458 @@
> /*
> * Low-level initialization for EP93xx
> *
> * Copyright (C) 2009 Matthias Kaehlcke <matthias at kaehlcke.net>
> + * Copyright (C) 2013
> + * Sergey Kostanabev <sergey.kostanbaev <at> fairwaves.ru>
> *
> * Copyright (C) 2006 Dominic Rath <Dominic.Rath at gmx.de>
> + * Copyright (C) 2006 Cirrus Logic Inc.
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> *
> * SPDX-License-Identifier: GPL-2.0+
> */
>
> -#include <version.h>
> -#include <asm/arch/ep93xx.h>
> +#include <config.h>
> +#include <asm/arch-ep93xx/ep93xx.h>
> +
> +/*
> +/* Configure the SDRAM based on the supplied settings.
> + *
> + * Input: r0 - SDRAM DEVCFG register
> + * r2 - configuration for SDRAM chips
> + * Output: none
> + * Modifies: r3, r4
> + */
> +ep93xx_sdram_config:
> + /* Program the SDRAM device configuration register. */
> + ldr r3, =SDRAM_BASE
> +#ifdef CONFIG_EDB93XX_SDCS0
> + str r0, [r3, #SDRAM_OFF_DEVCFG0]
> +#endif
> +#ifdef CONFIG_EDB93XX_SDCS1
> + str r0, [r3, #SDRAM_OFF_DEVCFG1]
> +#endif
> +#ifdef CONFIG_EDB93XX_SDCS2
> + str r0, [r3, #SDRAM_OFF_DEVCFG2]
> +#endif
> +#ifdef CONFIG_EDB93XX_SDCS3
> + str r0, [r3, #SDRAM_OFF_DEVCFG3]
> +#endif
> +
> + /* Set the Initialize and MRS bits (issue continuous NOP commands
> + * (INIT & MRS set))
> + */
> + ldr r4, =(EP93XX_SDRAMCTRL_GLOBALCFG_INIT | \
> + EP93XX_SDRAMCTRL_GLOBALCFG_MRS | \
> + EP93XX_SDRAMCTRL_GLOBALCFG_CKE)
> + str r4, [r3, #SDRAM_OFF_GLCONFIG]
> +
> + /* Delay for 200us. */
> + mov r4, #0x3000
> +delay1:
> + subs r4, r4, #1
> + bne delay1
> +
> + /* Clear the MRS bit to issue a precharge all. */
> + ldr r4, =(EP93XX_SDRAMCTRL_GLOBALCFG_INIT | \
> + EP93XX_SDRAMCTRL_GLOBALCFG_CKE)
> + str r4, [r3, #SDRAM_OFF_GLCONFIG]
> +
> + /* Temporarily set the refresh timer to 0x10. Make it really low so
> + * that refresh cycles are generated.
> + */
> + ldr r4, =0x10
> + str r4, [r3, #SDRAM_OFF_REFRSHTIMR]
> +
> + /* Delay for at least 80 SDRAM clock cycles. */
> + mov r4, #80
> +delay2:
> + subs r4, r4, #1
> + bne delay2
> +
> + /* Set the refresh timer to the fastest required for any device
> + * that might be used. Set 9.6 ms refresh time.
> + */
> + ldr r4, =0x01e0
> + str r4, [r3, #SDRAM_OFF_REFRSHTIMR]
> +
> + /* Select mode register update mode. */
> + ldr r4, =(EP93XX_SDRAMCTRL_GLOBALCFG_CKE | \
> + EP93XX_SDRAMCTRL_GLOBALCFG_MRS)
> + str r4, [r3, #SDRAM_OFF_GLCONFIG]
> +
> + /* Program the mode register on the SDRAM by performing fake read */
> + ldr r4, [r2]
> +
> + /* Select normal operating mode. */
> + ldr r4, =EP93XX_SDRAMCTRL_GLOBALCFG_CKE
> + str r4, [r3, #SDRAM_OFF_GLCONFIG]
> +
> + /* Return to the caller. */
> + mov pc, lr
> +
> +/*
> + * Test to see if the SDRAM has been configured in a usable mode.
> + *
> + * Input: r0 - Test address of SDRAM
> + * Output: r0 - 0 -- Test OK, -1 -- Failed
> + * Modifies: r0-r5
> + */
> +ep93xx_sdram_test:
> + /* Load the test patterns to be written to SDRAM. */
> + ldr r1, =0xf00dface
> + ldr r2, =0xdeadbeef
> + ldr r3, =0x08675309
> + ldr r4, =0xdeafc0ed
> +
> + /* Store the test patterns to SDRAM. */
> + stmia r0, {r1-r4}
> +
> + /* Load the test patterns from SDRAM one at a time and compare them
> + * to the actual pattern.
> + */
> + ldr r5, [r0]
> + cmp r5, r1
> + ldreq r5, [r0, #0x0004]
> + cmpeq r5, r2
> + ldreq r5, [r0, #0x0008]
> + cmpeq r5, r3
> + ldreq r5, [r0, #0x000c]
> + cmpeq r5, r4
> +
> + /* Return -1 if a mismatch was encountered, 0 otherwise. */
> + mvnne r0, #0xffffffff
> + moveq r0, #0x00000000
> +
> + /* Return to the caller. */
> + mov pc, lr
> +
> +/*
> + * Determine the size of the SDRAM. Use data=address for the scan.
> + *
> + * Input: r0 - Start SDRAM address
> + * Return: r0 - Single block size
> + * r1 - Valid block mask
> + * r2 - Total block count
> + * Modifies: r0-r5
> + */
From V4 discussion:
> > Is this needed? Can't the general get_ram_size() function be used?
> >
> This is REALLY needed. It's a key feature it calculates RAM size at
> runtime otherwise you have to put constant of data-bus width, actual
> memory installed. And this procedure does it and you don't have to
> recompile it for the very specific board with similar processor
> family.
get_ram_size() does calculate the RAM size at run time, so I still fail
to see why a dedicated function is needed. Can you please clarify this
point?
> diff --git a/board/cirrus/edb93xx/u-boot.lds b/board/cirrus/edb93xx/u-boot.lds
> new file mode 100644
> index 0000000..e61aa36
> --- /dev/null
> +++ b/board/cirrus/edb93xx/u-boot.lds
> @@ -0,0 +1,115 @@
> +/*
> + *
> + * Copyright (C) 2013
> + * Sergey Kostanbaev <sergey.kostanbaev <at> fairwaves.ru>
> + *
> + * Copyright (c) 2004-2008 Texas Instruments
> + *
> + * (C) Copyright 2002
> + * Gary Jennejohn, DENX Software Engineering, <garyj at denx.de>
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> + */
From V4 discussion:
> > Does this board need a specific .lds file?
> >
> Yes. It must have special magic header to start booting otherwise it
> will be considered as invalid image and internal boot ROOM ignore it.
I guess the magic header is this portion:
> +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
> +OUTPUT_ARCH(arm)
> +ENTRY(_start)
> +SECTIONS
> +{
> + . = 0x00000000;
> +
> + . = ALIGN(4);
> + .text : {
> + *(.__image_copy_start)
> + arch/arm/cpu/arm920t/start.o (.text*)
----- start of 'magic header'
> + . = 0x1000;
> +
> + LONG(0x53555243)
----- end of 'magic header'
> + *(.text*)
> + }
If so, then I do understand that you currently need a specific lds
file, but please document this through a comment in the linker script.
Amicalement,
--
Albert.
More information about the U-Boot
mailing list