Hi Philippe,

On Mon, 29 Oct 2012 18:35:56 +0100, Philippe Reynes <trem...@yahoo.fr>
wrote:

> Signed-off-by: Philippe Reynes <trem...@yahoo.fr>
> Signed-off-by: Eric Jarrige <eric.jarr...@armadeus.org>
> 
>  create mode 100644 board/armadeus/apf27/start.S
>  create mode 100644 board/armadeus/apf27/u-boot-spl.lds

This is needed by 2/4 to get truly useable support. Please merge both
patches.

Re Fabio's question: the start.S is generic to mx27 -- IIUC, it could
also be applied to e.g. imx27lite or magnesium if these boards'
maintainers felt so inclined. Therefore it could indeed move into
arch/arm/cpu/arm926ejs/mx27.

> diff --git a/board/armadeus/apf27/Makefile b/board/armadeus/apf27/Makefile
> index 1da9548..f57f405 100644
> --- a/board/armadeus/apf27/Makefile
> +++ b/board/armadeus/apf27/Makefile
> @@ -27,11 +27,14 @@ include $(TOPDIR)/config.mk
>  
>  LIB  = $(obj)lib$(BOARD).o
>  
> +ifndef       CONFIG_SPL_BUILD
>  COBJS        := apf27.o
> +endif
>  
> -SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
> +SRCS := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
>  OBJS := $(addprefix $(obj),$(COBJS))
>  SOBJS        := $(addprefix $(obj),$(SOBJS))
> +START        := $(addprefix $(obj),$(START))
>  
>  $(LIB):      $(obj).depend $(OBJS) $(SOBJS)
>       $(call cmd_link_o_target, $(OBJS) $(SOBJS))
> diff --git a/board/armadeus/apf27/start.S b/board/armadeus/apf27/start.S
> new file mode 100644
> index 0000000..374b4ea
> --- /dev/null
> +++ b/board/armadeus/apf27/start.S
> @@ -0,0 +1,549 @@
> +/*
> + *  IMX27 NAND Flash SPL (Secondary Program Loader)
> + *
> + *  Copyright (c) 2008  Armadeus Project / eja
> + *
> + *  Based on Freescale NAND SPL
> + *
> + *  Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
> + *  Copyright (c) 2008-2012 Eric Jarrige <eric.jarr...@armadeus.org>
> + *
> + * 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
> + */
> +
> +
> +#include <config.h>
> +#include <version.h>
> +#include <asm/macro.h>
> +#include <asm/arch/mxc_nand.h>
> +#include <asm/arch/imx-regs.h>
> +#include <generated/asm-offsets.h>
> +#include "apf27.h"
> +
> +/*
> + * Standard NAND flash commands
> + */
> +#define NAND_CMD_READ0               0
> +#define NAND_CMD_READ1               1
> +#define NAND_CMD_PAGEPROG    0x10
> +#define NAND_CMD_READOOB     0x50
> +#define NAND_CMD_ERASE1              0x60
> +#define NAND_CMD_STATUS              0x70
> +#define NAND_CMD_STATUS_MULTI        0x71
> +#define NAND_CMD_SEQIN               0x80
> +#define NAND_CMD_READID              0x90
> +#define NAND_CMD_ERASE2              0xd0
> +#define NAND_CMD_RESET               0xff
> +
> +/* Extended commands for large page devices */
> +#define NAND_CMD_READSTART   0x30
> +#define NAND_CMD_CACHEDPROG  0x15
> +
> +/* Status bits */
> +#define NAND_STATUS_FAIL     0x01
> +#define NAND_STATUS_FAIL_N1  0x02
> +#define NAND_STATUS_TRUE_READY       0x20
> +#define NAND_STATUS_READY    0x40
> +#define NAND_STATUS_WP               0x80
> +
> +     .macro nand_boot
> +
> +#ifdef CONFIG_BOOT_TRACE_REG
> +/*
> + * If CONFIG_BOOT_TRACE_REG is a SDRAM address then be sure to use the 
> following
> + * 2 command after SDRAM init
> + */
> +
> +/* Backup state of previous boot to CONFIG_BOOT_TRACE_REG+4*/
> +#define BACKUP_TRACE()                       \
> +     ldr r4, =CONFIG_BOOT_TRACE_REG; \
> +     ldr r3, [r4];                   \
> +     str r3, [r4, #0x04];
> +
> +/* Save a state of boot at CONFIG_BOOT_TRACE_REG */
> +#define BOOT_TRACE(val)              \
> +     ldr r4, =CONFIG_BOOT_TRACE_REG; \
> +     ldr r3, =val;                   \
> +     str r3, [r4];
> +#else
> +#define BACKUP_TRACE()
> +#define BOOT_TRACE(val)
> +#endif
> +
> +nand_boot_setup:
> +
> +     /* Copy SPL image from flash to SDRAM first */
> +     BOOT_TRACE(1)
> +     ldr r0, =IMX_NFC_MAIN_AREA0
> +     add r2, r0, #(IMX_NFC_SPARE_AREA0-IMX_NFC_MAIN_AREA0) //2KB NFC Buff
> +     ldr r1, =CONFIG_SYS_NAND_U_BOOT_DST
> +
> +     BOOT_TRACE(2)
> +1:   ldmia r0!, {r3-r10}
> +     stmia r1!, {r3-r10}
> +     cmp r0, r2
> +     blo 1b
> +
> +
> +
> +     /* Jump to SDRAM */
> +     BOOT_TRACE(3)
> +     ldr r1, =0x7FF
> +     and r0, pc, r1   /* offset of pc */
> +     ldr r1, =CONFIG_SYS_NAND_U_BOOT_DST
> +     add r1, r1, #0x10
> +     add pc, r0, r1
> +     nop
> +     nop
> +     nop
> +     nop
> +
> +NAND_Copy_Main:
> +     BOOT_TRACE(4)
> +     /* r0: nfc base. Reloaded after each page copying               */
> +     ldr r0, =IMX_NFC_MAIN_AREA0
> +
> +     /* r1: starting flash addr to be copied. Updated constantly     */
> +     /* bypass the first preloaded pages                             */
> +     ldr r1, =(IMX_NFC_SPARE_AREA0-IMX_NFC_MAIN_AREA0)
> +
> +     /* r2: end of 1st RAM buf. Doesn't change                       */
> +     ldr r2, =IMX_NFC_MAIN_AREA1
> +
> +     /* r12: NFC register base. Doesn't change                       */
> +     ldr r12, =IMX_NFC_REGS
> +
> +     ldr r11, =CONFIG_SYS_NAND_U_BOOT_DST
> +
> +     /* r13: end of SDRAM address for copying. Doesn't change        */
> +     add r13, r11, #CONFIG_SYS_NAND_U_BOOT_SIZE
> +
> +     /* r11: starting SDRAM address for copying. Updated constantly  */
> +     add r11, r11, r1
> +
> +     /* unlock internal buffer                                       */
> +     ldr r3, =NFC_CONFIG_UNLOCKED
> +     strh r3, [r12, #NFC_OFFSET_CONFIG]
> +
> +     /* enable ECC and mask interrupts                               */
> +     ldr r3, =(NFC_CONFIG1_ECC_EN | NFC_CONFIG1_INT_MSK)
> +     strh r3, [r12, #NFC_OFFSET_CONFIG1]
> +
> +Nfc_Read_Page:
> +     BOOT_TRACE(5)
> +     /*  send NAND_CMD_READ0 command                         */
> +     ldr r3, =NAND_CMD_READ0;
> +     strh r3, [r12, #NFC_OFFSET_FLASH_CMD]
> +
> +     ldr r3, =NFC_CONFIG2_FCMD
> +     strh r3, [r12, #NFC_OFFSET_CONFIG2]
> +     bl do_wait_op_done
> +
> +     /* send NAND address to read. TODO small page support           */
> +     BOOT_TRACE(6)
> +     mov r3, r1, lsr #1
> +     bl do_addr_input           /* 1st addr cycle */
> +
> +     mov r3, r1, lsr #9
> +     and r3, r3, #0x03
> +     bl do_addr_input           /* 2nd addr cycle */
> +
> +     mov r3, r1, lsr #11
> +     bl do_addr_input           /* 3rd addr cycle */
> +
> +     mov r3, r1, lsr #19
> +     bl do_addr_input           /* 4th addr cycle */
> +
> +     /* Small NAND flashs (== 1Gb) support 5 addr cycles             */
> +     mov r3, r1, lsr #27
> +     bl do_addr_input           /* 5th addr cycle */
> +
> +     /* send NAND_CMD_READSTART command. TODO small page support     */
> +     BOOT_TRACE(7)
> +     mov r3, #NAND_CMD_READSTART;
> +     strh r3, [r12, #NFC_OFFSET_FLASH_CMD]
> +     mov r3, #NFC_CONFIG2_FCMD
> +     strh r3, [r12, #NFC_OFFSET_CONFIG2]
> +     bl do_wait_op_done
> +
> +     /* read and copy buf 0                                          */
> +     BOOT_TRACE(8)
> +     mov r3, #0
> +     strh r3, [r12, #NFC_OFFSET_BUF_ADDR]
> +
> +     mov r3, #NFC_CONFIG2_FDO_PAGE
> +     strh r3, [r12, #NFC_OFFSET_CONFIG2]
> +     bl do_wait_op_done
> +
> +     bl Test_And_Copy_Buffer
> +
> +     /* read and copy buf 1                                          */
> +     mov r3, #1
> +     strh r3, [r12, #NFC_OFFSET_BUF_ADDR]
> +
> +     mov r3, #NFC_CONFIG2_FDO_PAGE
> +     strh r3, [r12, #NFC_OFFSET_CONFIG2]
> +     bl do_wait_op_done
> +
> +     bl Test_And_Copy_Buffer
> +
> +     /* here we should test if 512B page flash and bypass next buffers */
> +     /* read and copy buf 2. TODO small page support         */
> +     mov r3, #2
> +     strh r3, [r12, #NFC_OFFSET_BUF_ADDR]
> +
> +     mov r3, #NFC_CONFIG2_FDO_PAGE
> +     strh r3, [r12, #NFC_OFFSET_CONFIG2]
> +     bl do_wait_op_done
> +
> +     bl Test_And_Copy_Buffer
> +
> +     /* read and copy buf 3                                          */
> +     mov r3, #3
> +     strh r3, [r12, #NFC_OFFSET_BUF_ADDR]
> +
> +     mov r3, #NFC_CONFIG2_FDO_PAGE
> +     strh r3, [r12, #NFC_OFFSET_CONFIG2]
> +     bl do_wait_op_done
> +
> +     bl Test_And_Copy_Buffer
> +
> +     /* is the last page ? */
> +     BOOT_TRACE(12)
> +     cmp r11, r13
> +     bge NAND_Copy_Main_done
> +
> +     /* r0: nfc base. Reloaded after each page copying               */
> +     ldr r0, =IMX_NFC_MAIN_AREA0
> +     /* r2: end of 1st RAM buf. Doesn't change                       */
> +     ldr r2, =IMX_NFC_MAIN_AREA1
> +     b Nfc_Read_Page
> +
> +NAND_Copy_Main_done:
> +     BOOT_TRACE(13)
> +     .endm /* nand_boot */
> +
> +     .macro init_aipi
> +     /*
> +      * setup AIPI1 and AIPI2
> +      */
> +     write32 AIPI1_PSR0, ACFG_AIPI1_PSR0_VAL
> +     write32 AIPI1_PSR1, ACFG_AIPI1_PSR1_VAL
> +     write32 AIPI2_PSR0, ACFG_AIPI2_PSR0_VAL
> +     write32 AIPI2_PSR1, ACFG_AIPI2_PSR1_VAL
> +
> +     /* Change SDRAM signal strengh */
> +     ldr r0, =GPCR
> +     ldr r1, =ACFG_GPCR_VAL
> +     ldr r5, [r0]
> +     orr r5, r5, r1
> +     str r5, [r0]
> +
> +     .endm /* init_aipi */
> +
> +     .macro init_clock
> +     ldr r0, =CSCR
> +     /* disable MPLL/SPLL first */
> +     ldr r1, [r0]
> +     bic r1, r1, #(CSCR_MPEN|CSCR_SPEN)
> +     str r1, [r0]
> +
> +     /*
> +      * pll clock initialization predefined in apf27.h
> +      */
> +     write32 MPCTL0, ACFG_MPCTL0_VAL
> +     write32 SPCTL0, ACFG_SPCTL0_VAL
> +
> +     write32 CSCR, ACFG_CSCR_VAL|CSCR_MPLL_RESTART|CSCR_SPLL_RESTART
> +
> +     /*
> +      * add some delay here
> +      */
> +     mov r1, #0x1000
> +     1:  subs r1, r1, #0x1
> +     bne 1b
> +
> +     /* peripheral clock divider */
> +     write32 PCDR0, ACFG_PCDR0_VAL
> +     write32 PCDR1, ACFG_PCDR1_VAL
> +
> +     /* Configure PCCR0 and PCCR1 */
> +     write32 PCCR0, ACFG_PCCR0_VAL
> +     write32 PCCR1, ACFG_PCCR1_VAL
> +
> +     .endm /* init_clock */
> +
> +/*
> + *************************************************************************
> + *
> + * No jump vector table. Use reset vector as direct entry point.
> + * Do not support any interrupt event within SPL
> + *
> + *************************************************************************
> + */
> +
> +
> +.globl _start
> +_start:
> +
> +/*
> + *************************************************************************
> + *
> + * Startup Code (reset vector)
> + *
> + * do important init only if we don't start from memory!
> + * setup Memory and board specific bits prior to relocation.
> + * relocate armboot to ram
> + * setup stack
> + *
> + *************************************************************************
> + */
> +
> +
> +/*
> + * the actual reset code
> + */
> +
> +reset:
> +     /*
> +      * set the cpu to SVC32 mode
> +      */
> +     mrs     r0,cpsr
> +     bic     r0,r0,#0x1f
> +     orr     r0,r0,#0xd3
> +     msr     cpsr,r0
> +
> +     /*
> +      * invalidate I/D cache/TLB and drain write buffer
> +      */
> +     mov r0, #0
> +     mcr p15, 0, r0, c7, c7, 0       /* invalidate I cache and D cache */
> +     mcr p15, 0, r0, c8, c7, 0       /* invalidate TLBs */
> +     mcr p15, 0, r0, c7, c10, 4   /* Drain the write buffer */
> +
> +     /*
> +      * disable MMU stuff and caches
> +      */
> +     mrc p15, 0, r0, c1, c0, 0
> +     bic     r0, r0, #0x00002300     /* clear bits 13, 9:8 (--V- --RS) */
> +     bic     r0, r0, #0x00000087     /* clear bits 7, 2:0 (B--- -CAM) */
> +     orr     r0, r0, #0x00000002     /* set bit 2 (A) Align */
> +     orr     r0, r0, #0x00001000     /* set bit 12 (I) I-Cache */
> +     mcr p15, 0, r0, c1, c0, 0
> +
> +init_aipi_start:
> +     init_aipi
> +
> +     /* check if sdram has been setup (running within sdram) */
> +     cmp pc, #0xa0000000 /* start of first sdram memory space */
> +     blo init_clock_start
> +     cmp pc, #0xc0000000 /* end of second sdram memory space */
> +     blo regular_boot
> +
> +     /* running from sdram with full code present -> regular_boot */
> +init_clock_start:
> +     init_clock
> +
> +init_sdram_start:
> +     bl setup_sdram_ddr
> +
> +     /* save state of previous boot (SDRAM is configured)*/
> +     BACKUP_TRACE()
> +
> +     /* nand_boot BOOT_TRACE(1..13) */
> +
> +     nand_boot
> +
> +     BOOT_TRACE(14) /* start regular U-Boot */
> +
> +regular_boot: /* jump to start of next 2kiB block (U-Boot) */
> +     ldr r0, =0xfffff800
> +     and r0, r0, pc
> +     add pc, r0, #0x800
> +
> +do_wait_op_done:
> +     1:
> +     ldrh r3, [r12, #NFC_OFFSET_CONFIG2]
> +     ands r3, r3, #NFC_CONFIG2_INT
> +     beq 1b
> +     mov r3, #0x0
> +     strh r3, [r12, #NFC_OFFSET_CONFIG2]
> +     mov     pc, lr
> +
> +do_addr_input:
> +     mov r9, lr
> +     and r3, r3, #0xFF
> +     strh r3, [r12, #NFC_OFFSET_FLASH_ADDR]
> +     mov r3, #NFC_CONFIG2_FADD
> +     strh r3, [r12, #NFC_OFFSET_CONFIG2]
> +     bl do_wait_op_done
> +     mov pc, r9
> +
> +Test_And_Copy_Buffer:

Please avoid mixed case identifiers.

> +     /* check for bad block (2 bits error in main or spare are)*/
> +     BOOT_TRACE(9)
> +     ldrh r4, [r12, #NFC_OFFSET_ECC_STATUS_RESULT]
> +     ands r4, r4, #(NFC_ECC_STAT_ERROR2| \
> +             (NFC_ECC_STAT_ERROR2<<NFC_ECC_STAT_ERM_SHFT))
> +     bne Skip_Bad_Buffer
> +
> +     /* check BI byte of the current spare buffer */
> +     ldr r4, =IMX_NFC_SPARE_AREA0
> +     ldrh r3, [r12, #NFC_OFFSET_BUF_ADDR] /* for the current buffer */
> +     orr  r4, r3, lsl #0x04
> +
> +     /* at bi word offset 4. */
> +     /* Fixme position change betwwen 8 and 16 bits bus */
> +     ldrh r4, [r4, #0x04]
> +     and r4, r4, #0x0FF00 /* has to be 0xFFxx */
> +     cmp r4, #0x0FF00
> +     bne Skip_Bad_Buffer
> +
> +Copy_Good_Buffer:
> +     /* copying 512 bytes buffer */
> +     BOOT_TRACE(10)
> +1:  ldmia r0!, {r3-r10}
> +     stmia r11!, {r3-r10}
> +     cmp r0, r2
> +     blo 1b
> +     b End_Of_Copy
> +
> +Skip_Bad_Buffer:
> +     BOOT_TRACE(11)
> +     /* bad pages do not contain valid data and have to be skip      */
> +     add r0, r0, #0x200
> +
> +     /* rewind ram addr to start of buffer */
> +     ldr r3, =(~0x1FF)
> +     and r11, r11, r3
> +
> +End_Of_Copy:
> +     add r2, r2, #0x200
> +     add r1, r1, #0x200
> +
> +     mov     pc, lr
> +
> +
> +setup_sdram_ddr:
> +
> +     /* wait for SDRAM/LPDDR ready (SDRAMRDY) */
> +     ldr  r0, =IMX_ESD_BASE
> +     ldr  r4, =ESDMISC_SDRAM_RDY
> +2:   ldr  r1, [r0, #ESDMISC_ROF]
> +     ands r1, r1, r4
> +     bpl 2b
> +
> +     /* LPDDR Soft Reset Mobile/Low Power DDR SDRAM. */
> +     ldr             r0, =IMX_ESD_BASE
> +     ldr             r4, =ACFG_ESDMISC_VAL
> +     orr             r1, r4, #ESDMISC_MDDR_DL_RST
> +     str             r1, [r0, #ESDMISC_ROF]
> +
> +     /* Hold for more than 200ns */
> +     ldr r1, =0x10000
> +     1:      subs r1, r1, #0x1
> +     bne 1b
> +
> +     str             r4, [r0]
> +
> +     /* write32(ESDCFG0, ACFG_SDRAM_ESDCFG_REGISTER_VAL) */

Please avoid comments that paraphrase ASM in pseudo-C. Either remove
them or replace them with something that the ASM does not also say.

> +     ldr             r0, =IMX_ESD_BASE
> +     ldr             r1, =ACFG_SDRAM_ESDCFG_REGISTER_VAL
> +     str             r1, [r0, #ESDCFG0_ROF]
> +
> +     /* write32(ESDCTL0, ACFG_PRECHARGE_CMD) */
> +     ldr             r0, =IMX_ESD_BASE
> +     ldr             r1, =ACFG_PRECHARGE_CMD
> +     str             r1, [r0, #ESDCTL0_ROF]
> +
> +     /* write8(0xA0001000, any value) */
> +     ldr             r1, =PHYS_SDRAM_1+ACFG_SDRAM_PRECHARGE_ALL_VAL
> +     strb            r2, [r1]
> +
> +     /* write32(ESDCTL0, ACFG_AUTOREFRESH_CMD) */
> +     ldr             r1, =ACFG_AUTOREFRESH_CMD
> +     str             r1, [r0, #ESDCTL0_ROF]
> +
> +     ldr             r4, =PHYS_SDRAM_1       /* CSD0 base address    */
> +
> +     ldr             r6,=0x7         /* load loop counter    */
> +1:   str             r5,[r4]         /* run auto-refresh cycle to array 0 */
> +     subs            r6,r6,#1        /* decrease counter value */
> +     bne 1b
> +
> +     /* write32(ACFG_PRECHARGE_CMD, ACFG_SET_MODE_REG_CMD) */
> +     ldr             r1, =ACFG_SET_MODE_REG_CMD
> +     str             r1, [r0, #ESDCTL0_ROF]
> +
> +     /* set standard mode register */
> +     ldr             r4, = PHYS_SDRAM_1+ACFG_SDRAM_MODE_REGISTER_VAL
> +     strb            r2, [r4]
> +
> +     /* set extended mode register */
> +     ldr             r4, =PHYS_SDRAM_1+ACFG_SDRAM_EXT_MODE_REGISTER_VAL
> +     strb            r5, [r4]
> +
> +     /* write32(ACFG_PRECHARGE_CMD, ACFG_NORMAL_RW_CMD) */
> +     ldr             r1, =ACFG_NORMAL_RW_CMD
> +     str             r1, [r0, #ESDCTL0_ROF]
> +
> +     /* 2nd sdram */
> +     /* write32(ESDCFG1, ACFG_SDRAM_ESDCFG_REGISTER_VAL ) */
> +     ldr             r0, =IMX_ESD_BASE
> +     ldr             r1, =ACFG_SDRAM_ESDCFG_REGISTER_VAL
> +     str             r1, [r0, #ESDCFG1_ROF]
> +
> +     /* write32(ESDCTL1, ACFG_PRECHARGE_CMD) */
> +     ldr             r0, =IMX_ESD_BASE
> +     ldr             r1, =ACFG_PRECHARGE_CMD
> +     str             r1, [r0, #ESDCTL1_ROF]
> +
> +     /* write8(0xB0001000, any value) */
> +     ldr             r1, =PHYS_SDRAM_2+ACFG_SDRAM_PRECHARGE_ALL_VAL
> +     strb            r2, [r1]
> +
> +     /* write32(ESDCTL1, ACFG_AUTOREFRESH_CMD) */
> +     ldr             r1, =ACFG_AUTOREFRESH_CMD
> +     str             r1, [r0, #ESDCTL1_ROF]
> +
> +     ldr             r4, =PHYS_SDRAM_2       /* CSD1 base address */
> +
> +     ldr             r6,=0x7         /* load loop counter */
> +1:   str             r5,[r4]         /* run auto-refresh cycle to array 0 */
> +     subs            r6,r6,#1        /* decrease counter value */
> +     bne 1b
> +
> +     /* write32(ESDCTL1, ACFG_SET_MODE_REG_CMD) */
> +     ldr             r1, =ACFG_SET_MODE_REG_CMD
> +     str             r1, [r0, #ESDCTL1_ROF]
> +
> +     /* set standard mode register */
> +     ldr             r4, =PHYS_SDRAM_2+ACFG_SDRAM_MODE_REGISTER_VAL
> +     strb            r2, [r4]
> +
> +     /* set extended mode register */
> +     ldr             r4, =PHYS_SDRAM_2+ACFG_SDRAM_EXT_MODE_REGISTER_VAL
> +     strb            r2, [r4]
> +
> +     /* write32(ESDCTL1, ACFG_NORMAL_RW_CMD) */
> +     ldr             r1, =ACFG_NORMAL_RW_CMD
> +     str             r1, [r0, #ESDCTL1_ROF]
> +
> +     mov     pc, lr
> +
> diff --git a/board/armadeus/apf27/u-boot-spl.lds 
> b/board/armadeus/apf27/u-boot-spl.lds
> new file mode 100644
> index 0000000..fdd52f2
> --- /dev/null
> +++ b/board/armadeus/apf27/u-boot-spl.lds
> @@ -0,0 +1,87 @@
> +/*
> + * Copyright (C) 2011 Marek Vasut <marek.va...@gmail.com>
> + * on behalf of DENX Software Engineering GmbH
> + *
> + * January 2004 - Changed to support H4 device
> + * Copyright (c) 2004-2008 Texas Instruments
> + *
> + * (C) Copyright 2002
> + * Gary Jennejohn, DENX Software Engineering, <ga...@denx.de>
> + *
> + * 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
> + */
> +
> +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
> +OUTPUT_ARCH(arm)
> +ENTRY(_start)
> +SECTIONS
> +{
> +     . = 0xA0fff800;
> +
> +     . = ALIGN(4);
> +     .text   :
> +     {
> +             board/armadeus/apf27/start.o    (.text)
> +             *(.text)
> +     }
> +
> +     . = ALIGN(4);
> +     .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
> +
> +     . = ALIGN(4);
> +     .data : {
> +             *(.data)
> +     }
> +
> +     . = ALIGN(4);
> +     __u_boot_cmd_start = .;
> +     .u_boot_cmd : { *(.u_boot_cmd) }
> +     __u_boot_cmd_end = .;
> +
> +     . = ALIGN(4);
> +
> +     .rel.dyn : {
> +             __rel_dyn_start = .;
> +             *(.rel*)
> +             __rel_dyn_end = .;
> +     }
> +
> +     .dynsym : {
> +             __dynsym_start = .;
> +             *(.dynsym)
> +     }
> +
> +     .bss : {
> +             . = ALIGN(4);
> +             __bss_start = .;
> +             *(.bss*)
> +             . = ALIGN(4);
> +             __bss_end__ = .;
> +     }
> +
> +     _end = .;
> +
> +     /DISCARD/ : { *(.dynstr*) }
> +     /DISCARD/ : { *(.dynsym*) }
> +     /DISCARD/ : { *(.dynamic*) }
> +     /DISCARD/ : { *(.hash*) }
> +     /DISCARD/ : { *(.plt*) }
> +     /DISCARD/ : { *(.interp*) }
> +     /DISCARD/ : { *(.gnu*) }
> +}



Amicalement,
-- 
Albert.
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to