summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/boot/crt0.S1
-rw-r--r--arch/powerpc/boot/main.c5
-rw-r--r--arch/powerpc/boot/ops.h2
-rw-r--r--arch/powerpc/boot/reg.h22
4 files changed, 26 insertions, 4 deletions
diff --git a/arch/powerpc/boot/crt0.S b/arch/powerpc/boot/crt0.S
index 25ad7453531a..bd7770b60730 100644
--- a/arch/powerpc/boot/crt0.S
+++ b/arch/powerpc/boot/crt0.S
@@ -88,5 +88,4 @@ _zimage_start_lib:
bl platform_init
/* Call start */
- mr r3,r1
b start
diff --git a/arch/powerpc/boot/main.c b/arch/powerpc/boot/main.c
index 33c73295acf3..e1df8feaf16d 100644
--- a/arch/powerpc/boot/main.c
+++ b/arch/powerpc/boot/main.c
@@ -17,6 +17,7 @@
#include "ops.h"
#include "gunzip_util.h"
#include "flatdevtree.h"
+#include "reg.h"
extern char _start[];
extern char __bss_start[];
@@ -247,7 +248,7 @@ struct dt_ops dt_ops;
struct console_ops console_ops;
struct loader_info loader_info;
-void start(void *sp)
+void start(void)
{
struct addr_range vmlinux, initrd;
kernel_entry_t kentry;
@@ -260,7 +261,7 @@ void start(void *sp)
platform_ops.fixups();
printf("\n\rzImage starting: loaded at 0x%p (sp: 0x%p)\n\r",
- _start, sp);
+ _start, get_sp());
vmlinux = prep_kernel();
initrd = prep_initrd(vmlinux, loader_info.initrd_addr,
diff --git a/arch/powerpc/boot/ops.h b/arch/powerpc/boot/ops.h
index ea5368caca59..592dc6c20bdb 100644
--- a/arch/powerpc/boot/ops.h
+++ b/arch/powerpc/boot/ops.h
@@ -73,7 +73,7 @@ struct loader_info {
};
extern struct loader_info loader_info;
-void start(void *sp);
+void start(void);
int ft_init(void *dt_blob, unsigned int max_size, unsigned int max_find_device);
int serial_console_init(void);
int ns16550_console_init(void *devp, struct serial_console_data *scdp);
diff --git a/arch/powerpc/boot/reg.h b/arch/powerpc/boot/reg.h
new file mode 100644
index 000000000000..d3cd9ee98afb
--- /dev/null
+++ b/arch/powerpc/boot/reg.h
@@ -0,0 +1,22 @@
+#ifndef _PPC_BOOT_REG_H
+#define _PPC_BOOT_REG_H
+/*
+ * Copyright 2007 Davud Gibson, IBM Corporation.
+ *
+ * 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.
+ */
+
+static inline u32 mfpvr(void)
+{
+ u32 pvr;
+ asm volatile ("mfpvr %0" : "=r"(pvr));
+ return pvr;
+}
+
+register void *__stack_pointer asm("r1");
+#define get_sp() (__stack_pointer)
+
+#endif /* _PPC_BOOT_REG_H */