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
<[email protected]> 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 <[email protected]>
> + * Copyright (C) 2013
> + * Sergey Kostanabev <sergey.kostanbaev <at> fairwaves.ru>
>   *
>   * Copyright (C) 2006 Dominic Rath <[email protected]>
> + * 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, <[email protected]>
> + *
> + * 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.
_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to