summaryrefslogtreecommitdiffstats
path: root/arch/ppc
diff options
context:
space:
mode:
authorRenaud Barbier <renaud.barbier@ge.com>2014-02-28 12:58:52 +0000
committerSascha Hauer <s.hauer@pengutronix.de>2014-03-03 09:07:20 +0100
commit35c49577dea944f6f8c0546860dd67714e247ffd (patch)
tree4a65742a0b53dee03d3a61ff1745985484425f8e /arch/ppc
parenta7dd756dfc79bf9ffcd614b739e8b347b6252bbc (diff)
downloadbarebox-35c49577dea944f6f8c0546860dd67714e247ffd.tar.gz
barebox-35c49577dea944f6f8c0546860dd67714e247ffd.tar.xz
MPC85xx: fix memory layout to prevent corruption during memtest
Memory regions on MPC85xx boards are incorrectly defined leading to corruption when running memory tests. This patch updates the memory layout of MPC85xx boards so that critical memory regions can be correctly reserved during the memory test. Tested on the P2020RDB and DA923RC. Signed-off-by: Renaud Barbier <renaud.barbier@ge.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/ppc')
-rw-r--r--arch/ppc/Kconfig1
-rw-r--r--arch/ppc/cpu-85xx/start.S3
-rw-r--r--arch/ppc/lib/board.c6
-rw-r--r--arch/ppc/mach-mpc5xxx/Kconfig1
-rw-r--r--arch/ppc/mach-mpc85xx/barebox.lds.S8
-rw-r--r--arch/ppc/mach-mpc85xx/cpu.c11
6 files changed, 18 insertions, 12 deletions
diff --git a/arch/ppc/Kconfig b/arch/ppc/Kconfig
index db269dd971..eaf60e0fe4 100644
--- a/arch/ppc/Kconfig
+++ b/arch/ppc/Kconfig
@@ -3,7 +3,6 @@ config PPC
select HAVE_CONFIGURABLE_TEXT_BASE
select HAS_KALLSYMS
select HAS_MODULES
- select HAVE_CONFIGURABLE_MEMORY_LAYOUT
select OFTREE
default y
diff --git a/arch/ppc/cpu-85xx/start.S b/arch/ppc/cpu-85xx/start.S
index 0402cf0ed7..57f007b783 100644
--- a/arch/ppc/cpu-85xx/start.S
+++ b/arch/ppc/cpu-85xx/start.S
@@ -879,9 +879,6 @@ relocate_code:
sub r3, r3, r5
lwz r5,GOT(__init_end) /* Copy to init_end only */
sub r5,r5,r4
- lis r10, 0xffff0000@h /* Round down to 64KB */
- ori r10, r10, 0xffff0000@l
- and r3, r3, r10 /* Destination */
mr r1, r3
mr r10, r3
li r6,CACHELINE_SIZE
diff --git a/arch/ppc/lib/board.c b/arch/ppc/lib/board.c
index 18d2588e2c..3f13db9218 100644
--- a/arch/ppc/lib/board.c
+++ b/arch/ppc/lib/board.c
@@ -46,11 +46,7 @@ void board_init_r (ulong end_of_ram)
_text_base = end_of_ram;
#endif
- /*
- * FIXME: 128k stack size. Is this enough? should
- * it be configurable?
- */
- malloc_end = (_text_base - (128 << 10)) & ~(4095);
+ malloc_end = (_text_base - STACK_SIZE) & ~(4095);
debug("malloc_end: 0x%08lx\n", malloc_end);
debug("TEXT_BASE after relocation: 0x%08lx\n", _text_base);
diff --git a/arch/ppc/mach-mpc5xxx/Kconfig b/arch/ppc/mach-mpc5xxx/Kconfig
index 180aa32ad1..1ecce3a56c 100644
--- a/arch/ppc/mach-mpc5xxx/Kconfig
+++ b/arch/ppc/mach-mpc5xxx/Kconfig
@@ -32,6 +32,7 @@ config ARCH_MPC5200
config MPC5xxx
bool
depends on MACH_PHYCORE_MPC5200B_TINY
+ select HAVE_CONFIGURABLE_MEMORY_LAYOUT
default y
menu "Board specific settings"
diff --git a/arch/ppc/mach-mpc85xx/barebox.lds.S b/arch/ppc/mach-mpc85xx/barebox.lds.S
index 980359e3a1..87ab7acfe2 100644
--- a/arch/ppc/mach-mpc85xx/barebox.lds.S
+++ b/arch/ppc/mach-mpc85xx/barebox.lds.S
@@ -32,6 +32,8 @@ PHDRS
SECTIONS
{
. = TEXT_BASE;
+ _stext = .;
+ PROVIDE (stext = .);
.interp : { *(.interp) }
.hash : { *(.hash) }
@@ -96,8 +98,6 @@ SECTIONS
*(.dynamic*)
CONSTRUCTORS
}
- _edata = .;
- PROVIDE (edata = .);
. = .;
__barebox_cmd_start = .;
@@ -118,6 +118,9 @@ SECTIONS
__ex_table : { *(__ex_table) }
__stop___ex_table = .;
+ _edata = .;
+ PROVIDE (edata = .);
+
. = ALIGN(256);
__init_begin = .;
.text.init : { *(.text.init) }
@@ -130,7 +133,6 @@ SECTIONS
.bootpg RESET_VECTOR_ADDRESS - 0xffc :
{
_text = .;
- _stext = .;
arch/ppc/cpu-85xx/start.o (.bootpg)
} :text = 0xffff
diff --git a/arch/ppc/mach-mpc85xx/cpu.c b/arch/ppc/mach-mpc85xx/cpu.c
index 17a1c4cb37..4f4f06b044 100644
--- a/arch/ppc/mach-mpc85xx/cpu.c
+++ b/arch/ppc/mach-mpc85xx/cpu.c
@@ -24,7 +24,10 @@
#include <config.h>
#include <common.h>
+#include <memory.h>
+#include <init.h>
#include <asm/fsl_ddr_sdram.h>
+#include <asm-generic/memory_layout.h>
#include <mach/mmu.h>
#include <mach/immap_85xx.h>
@@ -81,3 +84,11 @@ phys_size_t fsl_get_effective_memsize(void)
return sdram_size;
}
+
+static int fsl_reserve_region(void)
+{
+ request_sdram_region("stack", _text_base - STACK_SIZE,
+ STACK_SIZE);
+ return 0;
+}
+coredevice_initcall(fsl_reserve_region);