summaryrefslogtreecommitdiff
path: root/arch/powerpc/boot/opal.c
diff options
context:
space:
mode:
authorAndré Fabian Silva Delgado <emulatorman@parabola.nu>2016-12-07 16:30:11 -0300
committerAndré Fabian Silva Delgado <emulatorman@parabola.nu>2016-12-07 16:30:11 -0300
commit189382f7a338c02b448ab27e1d5566e052165dc8 (patch)
tree14903209649ee76584b17afa492e31a0c9460c27 /arch/powerpc/boot/opal.c
parent62e27076b7a48d1c8fc4eed59ff75f6382915c46 (diff)
Linux-libre 4.8.12-gnupck-4.8.12-gnu
Diffstat (limited to 'arch/powerpc/boot/opal.c')
-rw-r--r--arch/powerpc/boot/opal.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/arch/powerpc/boot/opal.c b/arch/powerpc/boot/opal.c
index 1f37e1c1d..d7b4fd47e 100644
--- a/arch/powerpc/boot/opal.c
+++ b/arch/powerpc/boot/opal.c
@@ -23,14 +23,25 @@ struct opal {
static u32 opal_con_id;
+/* see opal-wrappers.S */
int64_t opal_console_write(int64_t term_number, u64 *length, const u8 *buffer);
int64_t opal_console_read(int64_t term_number, uint64_t *length, u8 *buffer);
int64_t opal_console_write_buffer_space(uint64_t term_number, uint64_t *length);
int64_t opal_console_flush(uint64_t term_number);
int64_t opal_poll_events(uint64_t *outstanding_event_mask);
+void opal_kentry(unsigned long fdt_addr, void *vmlinux_addr);
+
static int opal_con_open(void)
{
+ /*
+ * When OPAL loads the boot kernel it stashes the OPAL base and entry
+ * address in r8 and r9 so the kernel can use the OPAL console
+ * before unflattening the devicetree. While executing the wrapper will
+ * probably trash r8 and r9 so this kentry hook restores them before
+ * entering the decompressed kernel.
+ */
+ platform_ops.kentry = opal_kentry;
return 0;
}