public inbox for linuxppc-dev@ozlabs.org 
 help / color / mirror / Atom feed
From: David Gibson <david@gibson•dropbear.id.au>
To: <linuxppc-dev@ozlabs•org>
Subject: [PATCH 5/16] powerpc: Add zImage platform hook for kernel address
Date: Tue, 13 Feb 2007 17:10:24 +1100 (EST)	[thread overview]
Message-ID: <20070213061024.A82ABDDD0C@ozlabs.org> (raw)
In-Reply-To: <20070213060904.GA6214@localhost.localdomain>

Unlike "classic" 32 and 64-bit PowerPC processors, the early setup
code for 4xx is not able to relocate the kernel if loaded at an
address other than 0.  For 440 it's even potentially difficult to add
this support, because at entry the kernel doesn't necessarily know the
full MMU configuration.

This patch, therefore, adds a hook to the zImage wrapper code which
allows a platform to specify a function giving the address to which
the vmlinux must be moved before entering the kernel.

Signed-off-by: David Gibson <dwg@au1•ibm.com>
---

 arch/powerpc/boot/main.c |   19 +++++++++++++++----
 arch/powerpc/boot/ops.h  |    1 +
 2 files changed, 16 insertions(+), 4 deletions(-)

Index: working-2.6/arch/powerpc/boot/main.c
===================================================================
--- working-2.6.orig/arch/powerpc/boot/main.c	2007-01-12 14:43:34.000000000 +1100
+++ working-2.6/arch/powerpc/boot/main.c	2007-01-12 14:48:10.000000000 +1100
@@ -249,12 +249,23 @@ static void prep_kernel(unsigned long a1
 			vmlinuz.size);
 	}
 
-	/* Skip over the ELF header */
+	/* Move into final position */
+	if (platform_ops.vmlinux_addr) {
+		unsigned long old_addr = vmlinux.addr;
+		vmlinux.addr = platform_ops.vmlinux_addr(vmlinux.size);
 #ifdef DEBUG
-	printf("... skipping 0x%lx bytes of ELF header\n\r",
-			elfoffset);
+		printf("...moving kernel to final address 0x%lx\n\r", vmlinux.addr);
 #endif
-	vmlinux.addr += elfoffset;
+		memmove((void *)vmlinux.addr, (void *)old_addr+elfoffset,
+			vmlinux.size);
+	} else {
+		/* Just Skip over the ELF header */
+#ifdef DEBUG
+		printf("... skipping 0x%lx bytes of ELF header\n\r",
+		       elfoffset);
+#endif
+		vmlinux.addr += elfoffset;
+	}
 
 	flush_cache((void *)vmlinux.addr, vmlinux.size);
 }
Index: working-2.6/arch/powerpc/boot/ops.h
===================================================================
--- working-2.6.orig/arch/powerpc/boot/ops.h	2007-01-12 14:42:11.000000000 +1100
+++ working-2.6/arch/powerpc/boot/ops.h	2007-01-12 14:45:43.000000000 +1100
@@ -25,6 +25,7 @@ struct platform_ops {
 	void	(*free)(void *ptr);
 	void *	(*realloc)(void *ptr, unsigned long size);
 	void	(*exit)(void);
+	unsigned long (*vmlinux_addr)(unsigned long size);
 };
 extern struct platform_ops platform_ops;
 

  parent reply	other threads:[~2007-02-13  6:10 UTC|newest]

Thread overview: 111+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-02-13  6:09 [0/16] Preliminary Ebony (440GP) support for arch/powerpc David Gibson
2007-02-13  6:10 ` [PATCH 2/16] More DCR native fixups David Gibson
2007-02-13  6:22   ` Benjamin Herrenschmidt
2007-02-13  6:10 ` [PATCH 6/16] Port 44x MMU definitions to ARCH=powerpc David Gibson
2007-02-13  6:24   ` Benjamin Herrenschmidt
2007-02-13 17:13     ` Roland Dreier
2007-02-13 17:45       ` Josh Boyer
2007-02-13 21:36       ` Benjamin Herrenschmidt
2007-02-13  6:10 ` [PATCH 8/16] Define FIXED_PORT flag for serial_core David Gibson
2007-02-13  6:10 ` David Gibson [this message]
2007-02-13  6:10 ` [PATCH 1/16] Remove ibm4{xx,4x}.h from arch/powerpc David Gibson
2007-02-13 14:19   ` Josh Boyer
2007-02-13  6:10 ` [PATCH 3/16] [powerpc] Use udbg_early_init() on ppc32 David Gibson
2007-02-13  6:22   ` Benjamin Herrenschmidt
2007-02-13  6:10 ` [PATCH 7/16] Early serial debug support for PPC44x David Gibson
2007-02-13 15:04   ` Josh Boyer
2007-02-14  0:16     ` David Gibson
2007-02-14  1:02       ` Josh Boyer
2007-02-14  1:00         ` David Gibson
2007-02-14  2:00           ` Alan Modra
2007-02-14  2:02             ` David Gibson
2007-02-14  2:38               ` Alan Modra
2007-02-14 15:41                 ` Josh Boyer
2007-02-14 23:05                   ` David Gibson
2007-02-13  6:10 ` [PATCH 4/16] powerpc: Allow duplicate lmb_reserve() calls David Gibson
2007-02-13  7:05   ` Michael Neuling
2007-02-13  8:48     ` Michael Ellerman
2007-02-13 20:44     ` Benjamin Herrenschmidt
2007-02-13  6:10 ` [PATCH 11/16] zImage wrapper for Ebony David Gibson
2007-02-13 17:05   ` Geoff Levand
2007-02-14  0:17     ` David Gibson
2007-02-13  6:10 ` [PATCH 14/16] Add arch/powerpc driver for UIC, PPC4xx interrupt controller David Gibson
2007-02-13  6:10 ` [PATCH 13/16] Add initrd properties to device tree from zImage David Gibson
2007-02-13  6:10 ` [PATCH 9/16] Use resource_size_t for serial port IO addresses David Gibson
2007-02-13  6:10 ` [PATCH 12/16] Automatically lmb_reserve() initrd David Gibson
2007-02-13  7:14   ` Michael Neuling
2007-02-13  6:10 ` [PATCH 10/16] Add support for BSS stack for zImage wrapper David Gibson
2007-02-13  6:10 ` [PATCH 15/16] Add device tree for Ebony David Gibson
2007-02-13 20:08   ` Segher Boessenkool
2007-02-14  0:22     ` David Gibson
2007-02-14  1:51       ` Benjamin Herrenschmidt
2007-02-14  4:46         ` David Gibson
2007-02-14 17:54           ` Segher Boessenkool
2007-02-14 23:18             ` David Gibson
2007-02-15  0:25               ` Segher Boessenkool
2007-02-14 17:51         ` Segher Boessenkool
2007-02-14 17:48       ` Segher Boessenkool
2007-02-14 21:30         ` Benjamin Herrenschmidt
2007-02-15  0:03           ` Segher Boessenkool
2007-02-15  0:53             ` Benjamin Herrenschmidt
2007-02-15  1:00               ` Segher Boessenkool
2007-02-15  2:22                 ` Benjamin Herrenschmidt
2007-02-15  2:51                   ` Segher Boessenkool
2007-02-14 23:17         ` David Gibson
2007-02-15  0:27           ` Segher Boessenkool
2007-02-15 14:02             ` Jon Loeliger
2007-02-15 14:56               ` Segher Boessenkool
2007-02-15 17:02                 ` Yoder Stuart-B08248
2007-02-15 17:10                   ` Scott Wood
2007-02-16  9:20                   ` Segher Boessenkool
2007-02-14 16:14   ` Yoder Stuart-B08248
2007-02-14 16:32     ` Josh Boyer
2007-02-14 17:58       ` Segher Boessenkool
2007-02-14 20:08         ` Yoder Stuart-B08248
2007-02-14 21:12           ` Segher Boessenkool
2007-02-14 21:35             ` Yoder Stuart-B08248
2007-02-14 21:42               ` Benjamin Herrenschmidt
2007-02-14 21:59                 ` Scott Wood
2007-02-15  0:20                   ` Segher Boessenkool
2007-02-14 22:50                 ` Yoder Stuart-B08248
2007-02-14 22:57                   ` Benjamin Herrenschmidt
2007-02-15  0:17                 ` Segher Boessenkool
2007-02-15  2:12                   ` Paul Mackerras
2007-02-15  2:43                     ` Segher Boessenkool
2007-02-15  3:15                       ` Paul Mackerras
2007-02-15 14:40                         ` Segher Boessenkool
2007-02-16  1:17                           ` Paul Mackerras
2007-02-16  9:41                             ` Segher Boessenkool
2007-02-15  0:10               ` Segher Boessenkool
2007-02-14 23:32             ` David Gibson
2007-02-14 23:27           ` David Gibson
2007-02-14 23:22         ` David Gibson
2007-02-14 23:51           ` Benjamin Herrenschmidt
2007-02-15  0:36             ` Segher Boessenkool
2007-02-15  0:31           ` Segher Boessenkool
2007-02-15  1:53             ` David Gibson
2007-02-15  3:09               ` Segher Boessenkool
2007-02-15  3:33                 ` David Gibson
2007-02-15 14:47                   ` Segher Boessenkool
2007-02-15 10:52                 ` Benjamin Herrenschmidt
2007-02-15 14:52                   ` Segher Boessenkool
2007-02-15 20:43                     ` Benjamin Herrenschmidt
2007-02-16  9:23                       ` Segher Boessenkool
2007-02-15 16:37                 ` Yoder Stuart-B08248
2007-02-15 21:41                   ` Benjamin Herrenschmidt
2007-02-16  9:25                     ` Segher Boessenkool
2007-02-16 15:32                     ` Hartmut Penner
2007-02-16 16:47                       ` Yoder Stuart-B08248
2007-02-19 12:02                         ` Hartmut Penner
2007-02-14 21:29       ` Benjamin Herrenschmidt
2007-02-13  6:10 ` [PATCH 16/16] Support for Ebony in arch/powerpc David Gibson
2007-02-13 17:18   ` Roland Dreier
2007-02-14  0:20     ` David Gibson
2007-02-13 14:37 ` [0/16] Preliminary Ebony (440GP) support for arch/powerpc Josh Boyer
2007-02-13 20:21   ` Josh Boyer
2007-02-13 15:46 ` Josh Boyer
2007-02-14 16:06   ` Josh Boyer
2007-02-14 23:12     ` David Gibson
2007-02-16  2:19       ` Josh Boyer
2007-02-16  2:53         ` David Gibson
2007-02-16  4:33           ` Josh Boyer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070213061024.A82ABDDD0C@ozlabs.org \
    --to=david@gibson$(echo .)dropbear.id.au \
    --cc=linuxppc-dev@ozlabs$(echo .)org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox