nand booting support (SPL) for phyCORE-i.MX31
Subsystems (3)
PATCH 1/1 nand booting support (SPL) for phyCORE-i.MX31
nand booting support (SPL) for phyCORE-i.MX31
This patch allows Phytec phyCORE-i.MX31 based system to boot from embed NAND-flash memory.It not add support for NAND cmd and/or driver for U-BOOT, it is only SPL for U-BOOT. For NAND support in U-BOOT I give refer to Magnus Lilja's aug/2008 patch series for PDK/Litekit boards. ("[U-Boot] [PATCH v3 4/6] i.MX31: Add i.MX31 NAND Flash Controller driver."; MID 1219998982-21289-5-git-send-email-lilja.magnus at gmail.com)
Some note: by default, Phytec phyCORE-i.MX31 board (pcm-037 on pcm-970) is not suitable for nand-bootloading, because of SW5 switchers block haven't appropriate modes(8-bit, 2k page or 16-bit, 512B page) for BOOTPINS[4:0] and nand-flash(8-bit mode, 512B page) contemporary. There is require to make RESOLDER for really nand-booting either BOOTPIN state or JN1/2 and RN41/42. This nand-spl work with 8-bit, 512B page size nand-flash.
Patch is applicable on v2008.10 release tag master branch.
Maxim Artamonov, scn1874 a t yandex d o t ru. Nov, 29, 2008
--- MAKEALL | 1 + Makefile | 9 ++- board/imx31_phycore/config.mk | 10 ++ board/imx31_phycore/lowlevel_init.S | 29 ++++++- board/imx31_phycore/u-boot-nand.lds | 62 ++++++++++++ cpu/arm1136/start.S | 36 +++++-- include/asm-arm/arch-mx31/mx31-regs.h | 98 +++++++++++++++++++- include/configs/imx31_phycore.h | 58 +++++++++-- nand_spl/board/imx31_phycore/Makefile | 95 ++++++++++++++++++ nand_spl/board/imx31_phycore/config.mk | 33 +++++++ nand_spl/board/imx31_phycore/u-boot.lds | 65 +++++++++++++ nand_spl/nand_boot_mx31.c | 160 +++++++++++++++++++++++++++++++ 12 files changed, 633 insertions(+), 23 deletions(-) create mode 100644 board/imx31_phycore/u-boot-nand.lds create mode 100644 nand_spl/board/imx31_phycore/Makefile create mode 100644 nand_spl/board/imx31_phycore/config.mk create mode 100644 nand_spl/board/imx31_phycore/u-boot.lds create mode 100644 nand_spl/nand_boot_mx31.c
MAKEALL +1 -0
@@ -522,6 +522,7 @@ LIST_ARM11=" \ apollon \ imx31_litekit \ imx31_phycore \ + imx31_phycore_nand \ mx31ads \ smdk6400 \ "
Makefile +8 -1
@@ -353,7 +353,7 @@ $(NAND_SPL): $(VERSION_FILE) $(obj)include/autoconf.mk $(MAKE) -C nand_spl/board/$(BOARDDIR) all $(U_BOOT_NAND): $(NAND_SPL) $(obj)u-boot.bin $(obj)include/autoconf.mk - cat $(obj)nand_spl/u-boot-spl-16k.bin $(obj)u-boot.bin > $(obj)u-boot-nand.bin + cat $(obj)nand_spl/u-boot-spl-aligned.bin $(obj)u-boot.bin > $(obj)u-boot-nand.bin $(ONENAND_IPL): $(VERSION_FILE) $(obj)include/autoconf.mk $(MAKE) -C onenand_ipl/board/$(BOARDDIR) all
@@ -2805,6 +2805,13 @@ imx31_litekit_config : unconfig imx31_phycore_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm1136 imx31_phycore NULL mx31 +imx31_phycore_nand_config : unconfig + @mkdir -p $(obj)include $(obj)board/imx31_phycore + @mkdir -p $(obj)nand_spl/board/imx31_phycore + @echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h + @$(MKCONFIG) -n $@ -a imx31_phycore arm arm1136 imx31_phycore NULL mx31 + @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk + mx31ads_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm1136 mx31ads freescale mx31
board/imx31_phycore/config.mk +10 -0
@@ -1 +1,11 @@ +# +# (C) Copyright 2008 +# was changed by Maxim Artamonov, <[email protected]> +# + +ifndef CONFIG_NAND_SPL TEXT_BASE = 0x87f00000 +else +TEXT_BASE = 0x87ec0000 +endif +
board/imx31_phycore/lowlevel_init.S +28 -1
@@ -1,5 +1,7 @@ /* - * + * (C) Copyright 2008 + * Maxim Artamonov, <[email protected]> + * * (c) 2007 Pengutronix, Sascha Hauer <[email protected]> * * See file CREDITS for list of people who contributed to this
@@ -43,6 +45,20 @@ bcs 1b .endm +#ifdef CONFIG_NAND_SPL +/* somewhat macro to reduce bin size for CONFIG_NAND_SPL*/ +.macro FILLREGS begreg, val, count, step + ldr r2, =\begreg + ldr r3, =\val + ldr r4, =\count +2: + str r3, [r2] + add r2, r2, #\step + subs r4, r4, #1 + bcs 2b +.endm +#endif + .globl lowlevel_init lowlevel_init:
@@ -60,10 +76,20 @@ lowlevel_init: REG CCM_SPCTL, PLL_PD(1) | PLL_MFD(0x43) | PLL_MFI(12) | PLL_MFN(1) + REG CCM_UPCTL, 0x40c2403 /* USB Clock 60 MHZ *//*add 201108 for USB clocking init*/ + +#ifdef CONFIG_NAND_SPL + FILLREGS 0x43FAC26C, 0, 0x3, 0x4 +#else REG 0x43FAC26C, 0 /* SDCLK */ REG 0x43FAC270, 0 /* CAS */ REG 0x43FAC274, 0 /* RAS */ +#endif /* CONFIG_NAND_SPL */ REG 0x43FAC27C, 0x1000 /* CS2 (CSD0) */ + +#ifdef CONFIG_NAND_SPL + FILLREGS 0x43FAC284, 0, 0x17, 0x4 +#else REG 0x43FAC284, 0 /* DQM3 */ REG 0x43FAC288, 0 /* DQM2, DQM1, DQM0, SD31-SD0, A25-A0, MA10 (0x288..0x2DC) */ REG 0x43FAC28C, 0
@@ -87,6 +113,7 @@ lowlevel_init: REG 0x43FAC2D4, 0 REG 0x43FAC2D8, 0 REG 0x43FAC2DC, 0 +#endif /* CONFIG_NAND_SPL */ REG 0xB8001010, 0x00000004 REG 0xB8001004, 0x006ac73a REG 0xB8001000, 0x92100000
board/imx31_phycore/u-boot-nand.lds new file +62 -0
62 lines not on this page · raw message
cpu/arm1136/start.S +27 -9
@@ -1,6 +1,9 @@ /* * armboot - Startup Code for OMP2420/ARM1136 CPU-core * + * + * Copyright (c) 2008 Maxim Artamonov, <[email protected]> + * * Copyright (c) 2004 Texas Instruments <[email protected]> * * Copyright (c) 2001 Marius Gr?ger <[email protected]>
@@ -32,6 +35,15 @@ #include <version.h> .globl _start _start: b reset +#ifdef CONFIG_NAND_SPL + nop + nop + nop + nop + nop + nop + nop +#else #ifdef CONFIG_ONENAND_IPL ldr pc, _hang ldr pc, _hang
@@ -68,6 +80,7 @@ _irq: .word irq _fiq: .word fiq _pad: .word 0x12345678 /* now 16*4=64 */ #endif /* CONFIG_ONENAND_IPL */ +#endif /* CONFIG_NAND_SPL */ .global _end_vect _end_vect:
@@ -156,9 +169,9 @@ relocate: /* relocate U-Boot to RAM */ adr r0, _start /* r0 <- current position of code */ ldr r1, _TEXT_BASE /* test if we run from flash or RAM */ cmp r0, r1 /* don't reloc during debug */ -#ifndef CONFIG_ONENAND_IPL +#if !defined(CONFIG_ONENAND_IPL) && !defined(CONFIG_NAND_SPL) beq stack_setup -#endif /* CONFIG_ONENAND_IPL */ +#endif /* !CONFIG_ONENAND_IPL && !CONFIG_NAND_SPL*/ ldr r2, _armboot_start ldr r3, _bss_start
@@ -175,7 +188,7 @@ copy_loop: /* Set up the stack */ stack_setup: ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot */ -#ifdef CONFIG_ONENAND_IPL +#if defined(CONFIG_ONENAND_IPL) || defined (CONFIG_NAND_SPL) sub sp, r0, #128 /* leave 32 words for abort-stack */ #else sub r0, r0, #CFG_MALLOC_LEN /* malloc area */
@@ -184,14 +197,14 @@ stack_setup: sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ) #endif sub sp, r0, #12 /* leave 3 words for abort-stack */ -#endif /* CONFIG_ONENAND_IPL */ +#endif /* CONFIG_ONENAND_IPL || CONFIG_NAND_SPL*/ clear_bss: ldr r0, _bss_start /* find start of bss segment */ ldr r1, _bss_end /* stop here */ mov r2, #0x00000000 /* clear */ -#ifndef CONFIG_ONENAND_IPL +#if !defined(CONFIG_ONENAND_IPL) && !defined(CONFIG_NAND_SPL) clbss_l:str r2, [r0] /* clear loop... */ add r0, r0, #4 cmp r0, r1
@@ -200,12 +213,15 @@ clbss_l:str r2, [r0] /* clear loop... */ ldr pc, _start_armboot +#ifdef CONFIG_NAND_SPL +_start_armboot: .word nand_boot +#else #ifdef CONFIG_ONENAND_IPL _start_armboot: .word start_oneboot #else _start_armboot: .word start_armboot -#endif - +#endif /* CONFIG_ONENAND_IPL */ +#endif /* CONFIG_NAND_SPL */ /* *************************************************************************
@@ -244,7 +260,7 @@ cpu_init_crit: mov lr, ip /* restore link */ mov pc, lr /* back to my caller */ -#ifndef CONFIG_ONENAND_IPL +#if !defined(CONFIG_ONENAND_IPL) && !defined(CONFIG_NAND_SPL) /* ************************************************************************* *
@@ -357,11 +373,12 @@ cpu_init_crit: .macro get_fiq_stack @ setup FIQ stack ldr sp, FIQ_STACK_START .endm -#endif /* CONFIG_ONENAND_IPL */ +#endif /* !CONFIG_ONENAND_IPL && !CONFIG_NAND_SPL*/ /* * exception handlers */ +#ifndef CONFIG_NAND_SPL #ifdef CONFIG_ONENAND_IPL .align 5 do_hang:
@@ -436,3 +453,4 @@ arm1136_cache_flush: mcr p15, 0, r1, c7, c5, 0 @ invalidate I cache mov pc, lr @ back to caller #endif /* CONFIG_ONENAND_IPL */ +#endif /* !CONFIG_NAND_SPL*/
include/asm-arm/arch-mx31/mx31-regs.h +97 -1
108 lines not on this page · raw message
include/configs/imx31_phycore.h +47 -11
89 lines not on this page · raw message
nand_spl/board/imx31_phycore/Makefile new file +95 -0
95 lines not on this page · raw message
nand_spl/board/imx31_phycore/config.mk new file +33 -0
@@ -0,0 +1,33 @@ +# +# (C) Copyright 2008 +# Maxim Artamonov, <[email protected]> +# +# 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 +# +# phyCORE-i.MX31 - PHYTEC???s phyCORE Single Board Computer module + +# TEXT_BASE for SPL: = CFG_NAND_U_BOOT_DST-0x40000 is set in board/imx31_phycore/config.mk + +# PAD_TO used to generate a 2kByte binary needed for the combined image +# -> PAD_TO = TEXT_BASE + 2048 +PAD_TO := $(shell expr $$[$(TEXT_BASE) + 2048]) + +ifeq ($(debug),1) +PLATFORM_CPPFLAGS += -DDEBUG +endif
nand_spl/board/imx31_phycore/u-boot.lds new file +65 -0
65 lines not on this page · raw message
nand_spl/nand_boot_mx31.c new file +160 -0
160 lines not on this page · raw message
Signature · 1 line
1.5.2.4
PATCH 1/1 nand booting support (SPL) for phyCORE-i.MX31
Hi
2008/11/29 user <[email protected]>:
Quoted 9 lines
nand booting support (SPL) for phyCORE-i.MX31
This patch allows Phytec phyCORE-i.MX31 based system to boot from embed NAND-flash memory.It not add support for NAND cmd and/or driver for U-BOOT, it is only SPL for U-BOOT. For NAND support in U-BOOT I give refer to Magnus Lilja's aug/2008 patch series for PDK/Litekit boards. ("[U-Boot] [PATCH v3 4/6] i.MX31: Add i.MX31 NAND Flash Controller driver."; MID 1219998982-21289-5-git-send-email-lilja.magnus at gmail.com)
Quoted 8 lines
Some note: by default, Phytec phyCORE-i.MX31 board (pcm-037 on pcm-970) is not suitable for nand-bootloading, because of SW5 switchers block haven't appropriate
modes(8-bit, 2k page or 16-bit, 512B page)for BOOTPINS[4:0] and nand-flash(8-bit mode, 512B page) contemporary. There is require to make RESOLDER for really nand-booting either BOOTPIN state or JN1/2 and RN41/42. This nand-spl work with 8-bit, 512B page size nand-flash.Patch is applicable on v2008.10 release tag master branch.
stgit couldn't apply the patch, but the standard 'patch' command could (it said 'applied with fuzz' on start.S).
Your patch seems to have some trailing whitespaces here and there.
include/asm-arm/arch-mx31/mx31-regs.h line 37
Quoted 10 lines
include/asm-arm/arch-mx31/mx31-regs.h +1
-1@@ -34,7 +34,7 @@#define CCM_PDR1 (CCM_BASE + 0x08)#define CCM_RCSR (CCM_BASE + 0x0c)#define CCM_MPCTL (CCM_BASE + 0x10) -#define CCM_UPCTL (CCM_BASE + 0x10) +#define CCM_UPCTL (CCM_BASE + 0x14)
The above fix should really go into the arm-tree immediately since it's a separate bug fix (IMHO).
Quoted 38 lines
include/asm-arm/arch-mx31/mx31-regs.h +31
-0#define CCM_SPCTL (CCM_BASE + 0x18)#define CCM_COSR (CCM_BASE + 0x1C)#define CCM_CGR0 (CCM_BASE + 0x20)@@ -168,4 +168,100 @@#define CS5_BASE 0xB6000000#define PCMCIA_MEM_BASE 0xC0000000 +/* +* NAND controller +*/ +#define NFC_BASE_ADDR 0xB8000000 + +/* +* Addresses for NFC registers +*/ +#define NFC_BUF_SIZE (*((volatile u16 *)(NFC_BASE_ADDR + 0xE00))) +#define NFC_BUF_ADDR (*((volatile u16 *)(NFC_BASE_ADDR + 0xE04))) +#define NFC_FLASH_ADDR (*((volatile u16 *)(NFC_BASE_ADDR + 0xE06))) +#define NFC_FLASH_CMD (*((volatile u16 *)(NFC_BASE_ADDR + 0xE08))) +#define NFC_CONFIG (*((volatile u16 *)(NFC_BASE_ADDR + 0xE0A))) +#define NFC_ECC_STATUS_RESULT (*((volatile u16 *)(NFC_BASE_ADDR + 0xE0C))) +#define NFC_RSLTMAIN_AREA (*((volatile u16 *)(NFC_BASE_ADDR + 0xE0E))) +#define NFC_RSLTSPARE_AREA (*((volatile u16 *)(NFC_BASE_ADDR + 0xE10))) +#define NFC_WRPROT (*((volatile u16 *)(NFC_BASE_ADDR + 0xE12))) +#define NFC_UNLOCKSTART_BLKADDR (*((volatile u16 *)(NFC_BASE_ADDR + 0xE14))) +#define NFC_UNLOCKEND_BLKADDR (*((volatile u16 *)(NFC_BASE_ADDR + 0xE16))) +#define NFC_NF_WRPRST (*((volatile u16 *)(NFC_BASE_ADDR + 0xE18))) +#define NFC_CONFIG1 (*((volatile u16 *)(NFC_BASE_ADDR + 0xE1A))) +#define NFC_CONFIG2 (*((volatile u16 *)(NFC_BASE_ADDR + 0xE1C))) + +/* +* Addresses for NFC RAM BUFFER Main area 0 +*/ +#define MAIN_AREA0 (volatile u16 *)(NFC_BASE_ADDR + 0x000) +#define MAIN_AREA1 (volatile u16 *)(NFC_BASE_ADDR + 0x200) +#define MAIN_AREA2 (volatile u16 *)(NFC_BASE_ADDR + 0x400) +#define MAIN_AREA3 (volatile u16 *)(NFC_BASE_ADDR + 0x600) +
include/asm-arm/arch-mx31/mx31-regs.h line 211
Quoted 10 lines
include/asm-arm/arch-mx31/mx31-regs.h +10
-0+/* +* Addresses for NFC SPARE BUFFER Spare area 0 +*/ +#define SPARE_AREA0 (volatile u16 *)(NFC_BASE_ADDR + 0x800) +#define SPARE_AREA1 (volatile u16 *)(NFC_BASE_ADDR + 0x810) +#define SPARE_AREA2 (volatile u16 *)(NFC_BASE_ADDR + 0x820) +#define SPARE_AREA3 (volatile u16 *)(NFC_BASE_ADDR + 0x830) + +/* +* Set INT to 0, FCMD to 1, rest to 0 in NFC_CONFIG2 Register for Command
Change "rest" to "reset" (for all #define's below as well).
Quoted 83 lines
include/asm-arm/arch-mx31/mx31-regs.h +55
-0+* operation +*/ +#define NFC_CMD 0x1 + +/* +* Set INT to 0, FADD to 1, rest to 0 in NFC_CONFIG2 Register for Address +* operation +*/ +#define NFC_ADDR 0x2 + +/* +* Set INT to 0, FDI to 1, rest to 0 in NFC_CONFIG2 Register for Input +* operation +*/ +#define NFC_INPUT 0x4 + +/* +* Set INT to 0, FDO to 001, rest to 0 in NFC_CONFIG2 Register for Data +* Output operation +*/ +#define NFC_OUTPUT 0x8 + +/* +* Set INT to 0, FD0 to 010, rest to 0 in NFC_CONFIG2 Register for Read ID +* operation +*/ +#define NFC_ID 0x10 + +/* +* Set INT to 0, FDO to 100, rest to 0 in NFC_CONFIG2 Register for Read +* Status operation +*/ +#define NFC_STATUS 0x20 + +/* +* Set INT to 1, rest to 0 in NFC_CONFIG2 Register for Read Status +* operation +*/ +#define NFC_INT 0x8000 + +#define NFC_SP_EN (1 << 2) +#define NFC_ECC_EN (1 << 3) +#define NFC_INT_MSK (1 << 4) +#define NFC_BIG (1 << 5) +#define NFC_RST (1 << 6) +#define NFC_CE (1 << 7) +#define NFC_ONE_CYCLE (1 << 8) + +/* +* NFMS bit in RCSR register for pagesize of nandflash +*/ +#define NFMS (*((volatile u32 *)CCM_RCSR)) +#define NFMS_BIT 30 +#endif /* __ASM_ARCH_MX31_REGS_H */ +nand_spl/nand_boot_mx31.c new file +19
-0@@ -0,0 +1,160 @@ +/* +* (C) Copyright 2008 +* Maxim Artamonov, <[email protected]> +* +* (C) Copyright 2006-2008 +* Stefan Roese, DENX Software Engineering, sr at denx.de. +* +* 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
nand_spl/nand_boot_mx31.c line 29
Quoted 10 lines
nand_spl/nand_boot_mx31.c new file +10
-0+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, +* MA 02111-1307 USA +*/ +#include <common.h> +#include <nand.h> +#include <asm-arm/arch/mx31-regs.h> + +static void mx31_wait_ready (void ) +{ +while (1 )
Insert space before '('.
nand_spl/nand_boot_mx31.c line 31
Quoted 2 lines
nand_spl/nand_boot_mx31.c new file +2
-0+if (NFC_CONFIG2 &NFC_INT ) + {
Move { to the same line as if.
Quoted 6 lines
nand_spl/nand_boot_mx31.c new file +6
-0+NFC_CONFIG2 =NFC_CONFIG2 & (~NFC_INT );/*int flag reset*/ +break ; + } +} + +static void mx31_nand_init (void )
nand_spl/nand_boot_mx31.c line 47
Quoted 10 lines
nand_spl/nand_boot_mx31.c new file +10
-0+{ +/*unlocking RAM Buff*/ +NFC_CONFIG =0x2 ; + +/* Block of NAND flash to be unlocked */ +/*NFC_UNLOCKSTART_BLKADDR = 0x0;*/ +/*NFC_UNLOCKEND_BLKADDR = 0x4000;*/ + +/* Unlock NAND Flash Block Command for given address range */ +/*NFC_WRPROT = 0x4;*/
If the above is not needed, remove it.
Quoted 10 lines
nand_spl/nand_boot_mx31.c new file +10
-0+ +NFC_CONFIG1 =NFC_ECC_EN ; +} + +static void mx31_nand_command (unsigned short command) +{ +NFC_FLASH_CMD = command; +NFC_CONFIG2 =NFC_CMD ; +mx31_wait_ready (); +}
nand_spl/nand_boot_mx31.c line 67
Quoted 10 lines
nand_spl/nand_boot_mx31.c new file +10
-0+ +static void mx31_nand_page_address (unsigned int page_address) +{ +unsigned int page_count; + +NFC_FLASH_ADDR =0x00 ; +NFC_CONFIG2 =NFC_ADDR ; +mx31_wait_ready (); + +if (CFG_NAND_PAGE_SIZE ==0x800 )
Add space before '('. Add space around '=='.
nand_spl/nand_boot_mx31.c line 68
Quoted 1 line
nand_spl/nand_boot_mx31.c new file +1
-0+ {
Move { to the if-line.
nand_spl/nand_boot_mx31.c line 74
Quoted 6 lines
nand_spl/nand_boot_mx31.c new file +6
-0+NFC_FLASH_ADDR =0x00 ; +NFC_CONFIG2 =NFC_ADDR ; +mx31_wait_ready (); + }; + + page_count =CFG_NAND_CHIP_SIZE /CFG_NAND_PAGE_SIZE ;
Add space around /.
nand_spl/nand_boot_mx31.c line 76
Quoted 2 lines
nand_spl/nand_boot_mx31.c new file +2
-0+ +if (page_address <= (page_count))
No need to have parenthesis around page_count in the if statement.
nand_spl/nand_boot_mx31.c line 77
Quoted 1 line
nand_spl/nand_boot_mx31.c new file +1
-0+ {
Move { to the if-line.
nand_spl/nand_boot_mx31.c line 78
Quoted 1 line
nand_spl/nand_boot_mx31.c new file +1
-0+ page_count--;// transform 0x01000000 to 0x00ffffff
Use C style comments /* .. */ instead of C++.
nand_spl/nand_boot_mx31.c line 80
Quoted 2 lines
nand_spl/nand_boot_mx31.c new file +2
-0+ do + {
Move { to the do-line.
nand_spl/nand_boot_mx31.c line 87
Quoted 7 lines
nand_spl/nand_boot_mx31.c new file +7
-0+NFC_FLASH_ADDR = (unsigned short )(page_address &0xff ); +NFC_CONFIG2 =NFC_ADDR ; +mx31_wait_ready (); + page_address = page_address >>8 ; + page_count = page_count >>8 ; + } +while (page_count);
Add space before parenthesis. The while statement should probably be moved to the previous line (after }) but I'm not sure what the coding style says aout this.
Quoted 4 lines
nand_spl/nand_boot_mx31.c new file +4
-0+ } +} + +static void mx31_nand_data_output (void )
nand_spl/nand_boot_mx31.c line 101
Quoted 10 lines
nand_spl/nand_boot_mx31.c new file +10
-0+{ +NFC_CONFIG1 =NFC_ECC_EN ; +NFC_BUF_ADDR =0 ;/* read in first 0 buffer*/ +NFC_CONFIG2 =NFC_OUTPUT ; +mx31_wait_ready (); +} + +static int mx31_nand_check_ecc (void ) +{ +unsigned short ecc_status_registr;
Add empty line after variable declarations.
nand_spl/nand_boot_mx31.c line 104
Quoted 3 lines
nand_spl/nand_boot_mx31.c new file +3
-0+ ecc_status_registr =NFC_ECC_STATUS_RESULT ; + +if (ecc_status_registr!=0 )
Add space before parenthesis.Add space around '!='.
nand_spl/nand_boot_mx31.c line 112
Quoted 8 lines
nand_spl/nand_boot_mx31.c new file +8
-0+return 1 ;/*error*/ +return 0 ; +} + +static int mx31_read_page (unsigned int page_address,unsigned char *buf) +{ +int i; +u32 *p1,*p2;
Insert empty line after variable declarations. Add space after comma.
nand_spl/nand_boot_mx31.c line 117
Quoted 5 lines
nand_spl/nand_boot_mx31.c new file +5
-0+mx31_nand_init (); +NFC_BUF_ADDR =0 ;/* read in first 0 buffer*/ +mx31_nand_command (NAND_CMD_READ0 ); +mx31_nand_page_address (page_address); +if (CFG_NAND_CHIP_SIZE >=0x08000000 )
Add space before parenthesis.
nand_spl/nand_boot_mx31.c line 120
Quoted 3 lines
nand_spl/nand_boot_mx31.c new file +3
-0+mx31_nand_command (NAND_CMD_READSTART ); +mx31_nand_data_output ();/*fill the main buffer 0*/ +if (mx31_nand_check_ecc ())while (1 ){break ;};/*!!!!!*/
Add space before parenthesis. And split this line into several lines.
nand_spl/nand_boot_mx31.c line 122
Quoted 2 lines
nand_spl/nand_boot_mx31.c new file +2
-0+ + p1=NFC_BASE_ADDR ; p2=buf;
Add spaces around =. Consider placing p2=buf; on a separate line.
nand_spl/nand_boot_mx31.c line 123
Quoted 1 line
nand_spl/nand_boot_mx31.c new file +1
-0+for (i=0 ;i<(CFG_NAND_PAGE_SIZE /4 );i++)
Space before parenthesis, space after ;
nand_spl/nand_boot_mx31.c line 124
Quoted 1 line
nand_spl/nand_boot_mx31.c new file +1
-0+ {
Move { to the for-line.
nand_spl/nand_boot_mx31.c line 125
Quoted 1 line
nand_spl/nand_boot_mx31.c new file +1
-0+ *p2= *p1;
Add space before =.
nand_spl/nand_boot_mx31.c line 126
Quoted 1 line
nand_spl/nand_boot_mx31.c new file +1
-0+ p1++;p2++;
Split in two lines.
nand_spl/nand_boot_mx31.c line 133
Quoted 7 lines
nand_spl/nand_boot_mx31.c new file +7
-0+ } +return 0 ; +} + +static int nand_load (unsigned int from,unsigned int size,unsigned char *buf) +{ +int i;
Add empty line after variable declarations.
nand_spl/nand_boot_mx31.c line 134
Quoted 1 line
nand_spl/nand_boot_mx31.c new file +1
-0+if ((from+size) >CFG_NAND_CHIP_SIZE )
Add space before (.
nand_spl/nand_boot_mx31.c line 139
Quoted 5 lines
nand_spl/nand_boot_mx31.c new file +5
-0+return 1 ; +mx31_nand_init (); + + from = from/CFG_NAND_PAGE_SIZE ;/*from must be set in full pages*/ +for (i=0 ;i<(size/CFG_NAND_PAGE_SIZE );i++)
Add space before (. Add sape after ;. Add space around < and /.
nand_spl/nand_boot_mx31.c line 142
Quoted 3 lines
nand_spl/nand_boot_mx31.c new file +3
-0+ { +mx31_read_page (from, buf); + from ++;
Remove space before ++;
nand_spl/nand_boot_mx31.c line 146
Quoted 4 lines
nand_spl/nand_boot_mx31.c new file +4
-0+ buf = buf +CFG_NAND_PAGE_SIZE ; + } +return 0 ; +}
Insert empty line.
Shouldn't the code check if the current block is marked as bad before copying all the pages from that block into SDRAM? The first block is typically guaranteed to be good (if I understand correctly) but any subsequent block may be marked bad already from the factory and should be skipped. The entire U-boot won't fit in the first block, atleast for small page NAND devices.
nand_spl/nand_boot_mx31.c line 156
Quoted 10 lines
nand_spl/nand_boot_mx31.c new file +10
-0+/* +* The main entry for NAND booting. It's necessary that SDRAM is already +* configured and available since this code loads the main U-Boot image +* from NAND into SDRAM and starts it from there. +*/ +void nand_boot (void ) +{ + __attribute__((noreturn))void (*uboot)(void ); + +nand_load (CFG_NAND_U_BOOT_OFFS ,CFG_NAND_U_BOOT_SIZE , (uchar *)CFG_NAND_U_BOOT_DST );
Split this line into two in order to keep it less than 80 chars long.
Quoted 6 lines
nand_spl/nand_boot_mx31.c new file +4
-1+ + uboot = (void *)CFG_NAND_U_BOOT_START ; +uboot (); +} --1.5.2.4
Regards, Magnus