Skip to contentSkip to conversation

TI: tnetv107x patch series

PATCH Superseded Cyril Chemparathy 2 participants 5 messages Apr 6, 2010 – Apr 11, 2010

Subsystems (2)

v3 of 6 Superseded Latest is v6 →

lore
Share & tools
lore
#0 lore raw

v3 cover TI: tnetv107x patch series

TNETV107X is a Texas Instruments SoC based on an ARM1176 core, and with a bunch on on-chip integrated peripherals. This patch series generalizes current ARM1176 code to allow for the addition of new ARM1176 SOCs. The remaining patches in this series add arch and board support.

The contents of this series are identical to the v2 patch series posted earlier, with the exception of an added comment in tnetv107x_evm.h indicating the reasoning behind reusing the davinci_nand MTDID.

Cyril Chemparathy (3):
ARM1176: Coexist with other ARM1176 platforms
ARM1176: TI: TNETV107X soc initial support
TI: TNETV107X EVM initial support

 MAINTAINERS                                |    4 +
 MAKEALL                                    |    1 +
 Makefile                                   |    3 +
 board/ti/tnetv107xevm/Makefile             |   49 +++
 board/ti/tnetv107xevm/config.mk            |   20 +
 board/ti/tnetv107xevm/sdb_board.c          |   66 ++++
 cpu/arm1176/cpu.c                          |    1 -
 cpu/arm1176/start.S                        |   60 +++-
 cpu/arm1176/tnetv107x/Makefile             |   44 +++
 cpu/arm1176/tnetv107x/aemif.c              |  151 ++++++++
 cpu/arm1176/tnetv107x/clock.c              |  542 ++++++++++++++++++++++++++++
 cpu/arm1176/tnetv107x/init.c               |   41 ++
 cpu/arm1176/tnetv107x/lowlevel_init.S      |   25 ++
 cpu/arm1176/tnetv107x/mux.c                |  463 ++++++++++++++++++++++++
 cpu/arm1176/tnetv107x/timer.c              |  125 +++++++
 cpu/arm1176/tnetv107x/wdt.c                |  172 +++++++++
 include/asm-arm/arch-tnetv107x/clock.h     |   50 +++
 include/asm-arm/arch-tnetv107x/emif_defs.h |    1 +
 include/asm-arm/arch-tnetv107x/hardware.h  |  184 ++++++++++
 include/asm-arm/arch-tnetv107x/mux.h       |  307 ++++++++++++++++
 include/asm-arm/arch-tnetv107x/nand_defs.h |   38 ++
 include/configs/smdk6400.h                 |    6 +
 include/configs/tnetv107x_evm.h            |  214 +++++++++++
 23 files changed, 2558 insertions(+), 9 deletions(-)
 create mode 100644 board/ti/tnetv107xevm/Makefile
 create mode 100644 board/ti/tnetv107xevm/config.mk
 create mode 100644 board/ti/tnetv107xevm/sdb_board.c
 create mode 100644 cpu/arm1176/tnetv107x/Makefile
 create mode 100644 cpu/arm1176/tnetv107x/aemif.c
 create mode 100644 cpu/arm1176/tnetv107x/clock.c
 create mode 100644 cpu/arm1176/tnetv107x/init.c
 create mode 100644 cpu/arm1176/tnetv107x/lowlevel_init.S
 create mode 100644 cpu/arm1176/tnetv107x/mux.c
 create mode 100644 cpu/arm1176/tnetv107x/timer.c
 create mode 100644 cpu/arm1176/tnetv107x/wdt.c
 create mode 100644 include/asm-arm/arch-tnetv107x/clock.h
 create mode 100644 include/asm-arm/arch-tnetv107x/emif_defs.h
 create mode 100644 include/asm-arm/arch-tnetv107x/hardware.h
 create mode 100644 include/asm-arm/arch-tnetv107x/mux.h
 create mode 100644 include/asm-arm/arch-tnetv107x/nand_defs.h
 create mode 100644 include/configs/tnetv107x_evm.h
#1 lore raw

PATCH v3 1/3 ARM1176: Coexist with other ARM1176 platforms

The current ARM1176 CPU specific code is too specific to the SMDK6400 architecture. The following changes were necessary prerequisites for the addition of other SoCs based on ARM1176.

Existing board's (SMDK6400) configuration has been modified to keep behavior unchanged despite these changes.

1. Peripheral port remap configurability
The earlier code had hardcoded remap values specific to s3c64xx in start.S. This change makes the peripheral port remap addresses and sizes configurable.

2. Skip low level initialization
Ability to skip low level initialization if necessary. Many other platforms have a similar capability, and this is quite useful during debug/bring-up.

3. U-Boot code relocation support
Most architectures allow u-boot code to run initially at a different address (possibly in NOR) and then get relocated to its final resting place in RAM. Added support for this capability in ARM1176 architecture.

4. Disable TCM if necessary
If a ROM based bootloader happened to have initialized TCM, we disable it here to keep things sane.

5. Remove unnecessary SoC specific includes
ARM1176 code does not really need this SoC specific include. The presence of this include prevents builds on other ARM1176 archs.

6. ARM926 style MMU disable when !CONFIG_ENABLE_MMU
The original MMU disable code masks out too many bits from the load address when it tries to figure out the physical address of the jump target label. Consequently, it ends up branching to the wrong address after disabling the MMU.

---
v3: unchanged from v2
v2: unchanged from v1

 cpu/arm1176/cpu.c          |    1 -
 cpu/arm1176/start.S        |   60 ++++++++++++++++++++++++++++++++++++++------
 include/configs/smdk6400.h |    6 ++++
 3 files changed, 58 insertions(+), 9 deletions(-)
cpu/arm1176/cpu.c +0 -1
index 2c0014f..c0fd114 100644
@@ -33,7 +33,6 @@
 
 #include <common.h>
 #include <command.h>
-#include <asm/arch/s3c6400.h>
 #include <asm/system.h>
 
 static void cache_flush (void);
cpu/arm1176/start.S +52 -8

118 lines not on this page · raw message

include/configs/smdk6400.h +6 -0
index f04feae..7b4501d 100644
@@ -40,6 +40,12 @@
 #define CONFIG_S3C64XX		1	/* in a SAMSUNG S3C64XX Family  */
 #define CONFIG_SMDK6400		1	/* on a SAMSUNG SMDK6400 Board  */
 
+#define CONFIG_SKIP_RELOCATE_UBOOT
+
+#define CONFIG_PERIPORT_REMAP
+#define CONFIG_PERIPORT_BASE	0x70000000
+#define CONFIG_PERIPORT_SIZE	0x13
+
 #define CONFIG_SYS_SDRAM_BASE	0x50000000
 
 /* input clock of PLL: SMDK6400 has 12MHz input clock */
Signature · 1 line
1.6.3.3
#2 lore raw

PATCH v3 2/3 ARM1176: TI: TNETV107X soc initial support

TNETV107X is a Texas Instruments SoC based on an ARM1176 core, and with a bunch on on-chip integrated peripherals. This is an initial commit with basic functionality, more commits with drivers, etc. to follow.

---
v3: unchanged from v2
v2: macroized aemif configuration to reduce verbosity
v2: consolidated lpsc utilities, inlined clock enable/disable

 cpu/arm1176/tnetv107x/Makefile             |   44 +++
 cpu/arm1176/tnetv107x/aemif.c              |  151 ++++++++
 cpu/arm1176/tnetv107x/clock.c              |  542 ++++++++++++++++++++++++++++
 cpu/arm1176/tnetv107x/init.c               |   41 ++
 cpu/arm1176/tnetv107x/lowlevel_init.S      |   25 ++
 cpu/arm1176/tnetv107x/mux.c                |  463 ++++++++++++++++++++++++
 cpu/arm1176/tnetv107x/timer.c              |  125 +++++++
 cpu/arm1176/tnetv107x/wdt.c                |  172 +++++++++
 include/asm-arm/arch-tnetv107x/clock.h     |   50 +++
 include/asm-arm/arch-tnetv107x/emif_defs.h |    1 +
 include/asm-arm/arch-tnetv107x/hardware.h  |  184 ++++++++++
 include/asm-arm/arch-tnetv107x/mux.h       |  307 ++++++++++++++++
 include/asm-arm/arch-tnetv107x/nand_defs.h |   38 ++
 13 files changed, 2143 insertions(+), 0 deletions(-)
 create mode 100644 cpu/arm1176/tnetv107x/Makefile
 create mode 100644 cpu/arm1176/tnetv107x/aemif.c
 create mode 100644 cpu/arm1176/tnetv107x/clock.c
 create mode 100644 cpu/arm1176/tnetv107x/init.c
 create mode 100644 cpu/arm1176/tnetv107x/lowlevel_init.S
 create mode 100644 cpu/arm1176/tnetv107x/mux.c
 create mode 100644 cpu/arm1176/tnetv107x/timer.c
 create mode 100644 cpu/arm1176/tnetv107x/wdt.c
 create mode 100644 include/asm-arm/arch-tnetv107x/clock.h
 create mode 100644 include/asm-arm/arch-tnetv107x/emif_defs.h
 create mode 100644 include/asm-arm/arch-tnetv107x/hardware.h
 create mode 100644 include/asm-arm/arch-tnetv107x/mux.h
 create mode 100644 include/asm-arm/arch-tnetv107x/nand_defs.h
cpu/arm1176/tnetv107x/Makefile new file +44 -0
new file mode 100644
index 0000000..fe9d8a0
@@ -0,0 +1,44 @@
+#
+# 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+
+include $(TOPDIR)/config.mk
+
+LIB	= $(obj)lib$(SOC).a
+
+COBJS	+= aemif.o clock.o init.o mux.o timer.o wdt.o
+SOBJS	+= lowlevel_init.o
+
+SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
+
+OBJS	:= $(addprefix $(obj),$(COBJS) $(SOBJS))
+START	:= $(addprefix $(obj),$(START))
+
+all:	$(obj).depend $(LIB)
+
+$(LIB):	$(OBJS)
+	$(AR) $(ARFLAGS) $@ $(OBJS)
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
cpu/arm1176/tnetv107x/aemif.c new file +151 -0

151 lines not on this page · raw message

cpu/arm1176/tnetv107x/clock.c new file +542 -0

542 lines not on this page · raw message

cpu/arm1176/tnetv107x/init.c new file +41 -0

41 lines not on this page · raw message

cpu/arm1176/tnetv107x/lowlevel_init.S new file +25 -0
new file mode 100644
index 0000000..3ee32ef
@@ -0,0 +1,25 @@
+/*
+ * TNETV107X: Low-level pre-relocation initialization
+ *
+ * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+.globl lowlevel_init
+lowlevel_init:
+	/* nothing for now, maybe needed for more exotic boot modes */
+	mov	pc, lr
cpu/arm1176/tnetv107x/mux.c new file +463 -0

463 lines not on this page · raw message

cpu/arm1176/tnetv107x/timer.c new file +125 -0

125 lines not on this page · raw message

cpu/arm1176/tnetv107x/wdt.c new file +172 -0

172 lines not on this page · raw message

include/asm-arm/arch-tnetv107x/clock.h new file +50 -0

50 lines not on this page · raw message

include/asm-arm/arch-tnetv107x/emif_defs.h new file +1 -0
new file mode 100644
index 0000000..9969a01
@@ -0,0 +1 @@
+#include <asm/arch-davinci/emif_defs.h>
include/asm-arm/arch-tnetv107x/hardware.h new file +184 -0

184 lines not on this page · raw message

include/asm-arm/arch-tnetv107x/mux.h new file +307 -0

307 lines not on this page · raw message

include/asm-arm/arch-tnetv107x/nand_defs.h new file +38 -0
new file mode 100644
index 0000000..961b710
@@ -0,0 +1,38 @@
+/*
+ * TNETV107X: NAND definitions
+ *
+ * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef _NAND_DEFS_H_
+#define _NAND_DEFS_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/emif_defs.h>
+
+#define DAVINCI_ASYNC_EMIF_CNTRL_BASE	TNETV107X_ASYNC_EMIF_CNTRL_BASE
+
+#define	MASK_CLE		0x4000
+#define	MASK_ALE		0x2000
+
+#define NAND_READ_START		0x00
+#define NAND_READ_END		0x30
+#define NAND_STATUS		0x70
+
+extern void davinci_nand_init(struct nand_chip *nand);
+
+#endif
Signature · 1 line
1.6.3.3
#3 lore raw

PATCH v3 3/3 TI: TNETV107X EVM initial support

TNETV107X is a Texas Instruments SoC based on an ARM1176 core, and with a bunch on on-chip integrated peripherals. This patch adds support for the TNETV107X EVM board.

---
v3: Added NAND MTDID comment in board config
v2: Added maintainers entry
v2: Fixed sort order in main makefile
v2: Remove board specific linker script
v2: Style fixes - multiline comments
v2: Replaced clk_get() with clk_get_rate()

 MAINTAINERS                       |    4 +
 MAKEALL                           |    1 +
 Makefile                          |    3 +
 board/ti/tnetv107xevm/Makefile    |   49 +++++++++
 board/ti/tnetv107xevm/config.mk   |   20 ++++
 board/ti/tnetv107xevm/sdb_board.c |   66 +++++++++++
 include/configs/tnetv107x_evm.h   |  214 +++++++++++++++++++++++++++++++++++++
 7 files changed, 357 insertions(+), 0 deletions(-)
 create mode 100644 board/ti/tnetv107xevm/Makefile
 create mode 100644 board/ti/tnetv107xevm/config.mk
 create mode 100644 board/ti/tnetv107xevm/sdb_board.c
 create mode 100644 include/configs/tnetv107x_evm.h
MAINTAINERS +4 -0
index bb03f17..daa074c 100644
@@ -62,6 +62,10 @@ Oliver Brown <[email protected]>
 
 	gw8260		MPC8260
 
+Cyril Chemparathy <[email protected]>
+
+	tnetv107x_evm	tnetv107x
+
 Conn Clark <[email protected]>
 
 	ESTEEM192E	MPC8xx
MAKEALL +1 -0
index a88c31e..63d8d16 100755
@@ -623,6 +623,7 @@ LIST_ARM11="			\
 	mx31pdk_nand		\
 	qong			\
 	smdk6400		\
+	tnetv107x_evm		\
 "
 
 #########################################################################
Makefile +3 -0
index 4532550..d0ef39d 100644
@@ -3313,6 +3313,9 @@ smdk6400_config	:	unconfig
 	fi
 	@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk
 
+tnetv107x_evm_config: unconfig
+	@$(MKCONFIG) $(@:_config=) arm arm1176 tnetv107xevm ti tnetv107x
+
 #========================================================================
 # i386
 #========================================================================
board/ti/tnetv107xevm/Makefile new file +49 -0

49 lines not on this page · raw message

board/ti/tnetv107xevm/config.mk new file +20 -0
new file mode 100644
index 0000000..d24d49a
@@ -0,0 +1,20 @@
+#
+# 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+
+TEXT_BASE = 0x83FC0000
board/ti/tnetv107xevm/sdb_board.c new file +66 -0

66 lines not on this page · raw message

include/configs/tnetv107x_evm.h new file +214 -0

214 lines not on this page · raw message

Signature · 1 line
1.6.3.3
#4 lore raw

PATCH v3 1/3 ARM1176: Coexist with other ARM1176 platforms

In reply to Cyril Chemparathy
Quoted 28 lines · Cyril Chemparathy

The current ARM1176 CPU specific code is too specific to the SMDK6400 architecture. The following changes were necessary prerequisites for the addition of other SoCs based on ARM1176.

Existing board's (SMDK6400) configuration has been modified to keep behavior unchanged despite these changes.

1. Peripheral port remap configurability
The earlier code had hardcoded remap values specific to s3c64xx in start.S. This change makes the peripheral port remap addresses and sizes configurable.

2. Skip low level initialization
Ability to skip low level initialization if necessary. Many other platforms have a similar capability, and this is quite useful during debug/bring-up.

3. U-Boot code relocation support
Most architectures allow u-boot code to run initially at a different address (possibly in NOR) and then get relocated to its final resting place in RAM. Added support for this capability in ARM1176 architecture.

4. Disable TCM if necessary
If a ROM based bootloader happened to have initialized TCM, we disable it here to keep things sane.

5. Remove unnecessary SoC specific includes
ARM1176 code does not really need this SoC specific include. The presence of this include prevents builds on other ARM1176 archs.

Quoted 7 lines

6. ARM926 style MMU disable when !CONFIG_ENABLE_MMU
The original MMU disable code masks out too many bits from the load address when it tries to figure out the physical address of the jump target label. Consequently, it ends up branching to the wrong address after disabling the MMU.

Please rebase this patch.
I had an error when applying it.

Applying: ARM1176: Coexist with other ARM1176 platforms
error: patch failed: cpu/arm1176/cpu.c:33
error: cpu/arm1176/cpu.c: patch does not apply
error: patch failed: cpu/arm1176/start.S:35
error: cpu/arm1176/start.S: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge... Auto-merging cpu/arm1176/cpu.c
CONFLICT (content): Merge conflict in cpu/arm1176/cpu.c Auto-merging cpu/arm1176/start.S
CONFLICT (content): Merge conflict in cpu/arm1176/start.S Failed to merge in the changes.
Patch failed at 0001 ARM1176: Coexist with other ARM1176 platforms

Quoted 41 lines

---
v3: unchanged from v2
v2: unchanged from v1

 cpu/arm1176/cpu.c          |    1 -
 cpu/arm1176/start.S        |   60 ++++++++++++++++++++++++++++++++++++++------
 include/configs/smdk6400.h |    6 ++++
 3 files changed, 58 insertions(+), 9 deletions(-)
cpu/arm1176/cpu.c +0 -1
index 2c0014f..c0fd114 100644
@@ -33,7 +33,6 @@
 
 #include <common.h>
 #include <command.h>
-#include <asm/arch/s3c6400.h>
 #include <asm/system.h>
 
 static void cache_flush (void);
cpu/arm1176/start.S +1 -2
index 68a356d..beec574 100644
@@ -1,5 +1,5 @@
 /*
- *  armboot - Startup Code for S3C6400/ARM1176 CPU-core
+ *  armboot - Startup Code for ARM1176 CPU-core
  *
  * Copyright (c) 2007	Samsung Electronics
  *
@@ -35,7 +35,6 @@
 #ifdef CONFIG_ENABLE_MMU
 #include <asm/proc/domain.h>
 #endif
-#include <asm/arch/s3c6400.h>
 
 #if !defined(CONFIG_ENABLE_MMU) && !defined(CONFIG_SYS_PHY_UBOOT_BASE)
 #define CONFIG_SYS_PHY_UBOOT_BASE	CONFIG_SYS_UBOOT_BASE

cpu/arm1176/start.S reset: · line 147

Quoted 4 lines
cpu/arm1176/start.S +1 -0
@@ -145,6 +144,7 @@ reset:
  *
  *************************************************************************
  */
+#ifndef CONFIG_SKIP_LOWLEVEL_INIT

CONFIG_SKIP_LOWLEVEL_INIT is not used in the other patches. Why is this needed ?
board/samsung/samsung/smdk6400 has a lowlevel_init.o function. It is confusing why this function is being if-def and not the real lowlevel_init..

cpu/arm1176/start.S cpu_init_crit: · line 174

Quoted 9 lines
cpu/arm1176/start.S +2 -0
 	/*
 	 * we do sys-critical inits only at reboot,
 	 * not when booting from ram!
@@ -170,6 +170,8 @@ cpu_init_crit:
 	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
+
+#ifdef CONFIG_ENABLE_MMU

This logic is may not be quite correct

From include/configs/smdk6400.h
#if !defined(CONFIG_NAND_SPL) && (TEXT_BASE >= 0xc0000000) #define CONFIG_ENABLE_MMU
#endif

cpu/arm1176/start.S mmu_disable: · line 194

Quoted 10 lines
cpu/arm1176/start.S +3 -0
 	/* Prepare to disable the MMU */
 	adr	r1, mmu_disable_phys
 	/* We presume we're within the first 1024 bytes */
@@ -187,20 +189,60 @@ mmu_disable:
 	nop
 	nop
 	mov	pc, r2
+mmu_disable_phys:
+#else
+	mcr	p15, 0, r0, c1, c0, 0

Are the noop's used in the mmu enable code after 'mcr pcr ..' also needed here ?

Quoted 17 lines
cpu/arm1176/start.S +14 -1
 #endif
 
-mmu_disable_phys:
+#ifdef CONFIG_DISABLE_TCM
+	/*
+	 * Disable the TCMs
+	 */
+	mrc	p15, 0, r0, c0, c0, 2	/* Return TCM details */
+	cmp	r0, #0
+	beq	skip_tcmdisable
+	mov	r1, #0
+	mov	r2, #1
+	tst	r0, r2
+	mcrne	p15, 0, r1, c9, c1, 1	/* Disable Instruction TCM if present*/
+	tst	r0, r2, LSL #16
+	mcrne	p15, 0, r1, c9, c1, 0	/* Disable Data TCM if present*/
+skip_tcmdisable:

cpu/arm1176/start.S mmu_disable: · line 218

Quoted 10 lines
cpu/arm1176/start.S +6 -2
+#endif
+#endif
+
+#ifdef CONFIG_PERIPORT_REMAP
 	/* Peri port setup */
-	ldr	r0, =0x70000000
-	orr	r0, r0, #0x13
+	ldr	r0, =CONFIG_PERIPORT_BASE
+	orr	r0, r0, #CONFIG_PERIPORT_SIZE
 	mcr	p15,0,r0,c15,c2,4       @ 256M (0x70000000 - 0x7fffffff)

This comment '@ 256 .. ' is no longer valid.

Quoted 52 lines
cpu/arm1176/start.S +24 -2
+#endif
 
 	/*
 	 * Go setup Memory and board specific bits prior to relocation.
 	 */
 	bl	lowlevel_init		/* go setup pll,mux,memory */
+#endif /* CONFIG_SKIP_LOWLEVEL_INIT */
+
+#ifndef CONFIG_SKIP_RELOCATE_UBOOT
+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         */
+	beq     stack_setup
+
+	ldr	r2, _armboot_start
+	ldr	r3, _bss_start
+	sub	r2, r3, r2		/* r2 <- size of armboot            */
+	add	r2, r0, r2		/* r2 <- source end address         */
+
+copy_loop:
+	ldmia	r0!, {r3-r10}		/* copy from source address [r0]    */
+	stmia	r1!, {r3-r10}		/* copy to   target address [r1]    */
+	cmp	r0, r2			/* until source end addreee [r2]    */
+	ble	copy_loop
+#endif	/* CONFIG_SKIP_RELOCATE_UBOOT */
 
-after_copy:
 #ifdef CONFIG_ENABLE_MMU
 enable_mmu:
 	/* enable domain access */
@@ -236,9 +278,9 @@ mmu_enable:
 	nop
 	nop
 	mov	pc, r2
+skip_hw_init:
 #endif
 
-skip_hw_init:
 	/* Set up the stack						    */
 stack_setup:
 	ldr	r0, =CONFIG_SYS_UBOOT_BASE	/* base of copy in DRAM	    */
@@ -306,6 +348,8 @@ phy_last_jump:
 	mov	r0, #0
 	mov	pc, r9
 #endif
+
+
 /*
  *************************************************************************
  *

cpu/arm1176/start.S phy_last_jump: · line 420

Quoted 5 lines
cpu/arm1176/start.S +1 -1
@@ -373,7 +417,7 @@ phy_last_jump:
 	ldr	r13, _armboot_start
 	/* move past malloc pool */
 	sub	r13, r13, #(CONFIG_SYS_MALLOC_LEN)
-	/* move to reserved a couple spots for abort stack */
+	/* reserved a couple spots for abort stack */

The old comment makes more sense.
Revert this.

include/configs/smdk6400.h line 43

Quoted 12 lines
cpu/arm1176/start.S +0 -0
 	sub	r13, r13, #(CONFIG_SYS_GBL_DATA_SIZE + 8)
 
 	/* save caller lr in position 0 of saved stack */
include/configs/smdk6400.h +1 -0
index f04feae..7b4501d 100644
@@ -40,6 +40,12 @@
 #define CONFIG_S3C64XX		1	/* in a SAMSUNG S3C64XX Family  */
 #define CONFIG_SMDK6400		1	/* on a SAMSUNG SMDK6400 Board  */
 
+#define CONFIG_SKIP_RELOCATE_UBOOT

There is logic later in this file to undef this value. This is likely an error.
If it isn't, add a comment.

include/configs/smdk6400.h line 51

Quoted 8 lines
include/configs/smdk6400.h +5 -0
+
+#define CONFIG_PERIPORT_REMAP
+#define CONFIG_PERIPORT_BASE	0x70000000
+#define CONFIG_PERIPORT_SIZE	0x13
+
 #define CONFIG_SYS_SDRAM_BASE	0x50000000
 
 /* input clock of PLL: SMDK6400 has 12MHz input clock */

Tom