mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.2 KiB
67 lines
1.2 KiB
/* SPDX-License-Identifier: GPL-2.0-or-later */ |
|
/* |
|
* Copyright (c) 2016 IBM Corporation. |
|
*/ |
|
|
|
#include "ppc_asm.h" |
|
#include "../include/asm/opal-api.h" |
|
|
|
.text |
|
|
|
.globl opal_kentry |
|
opal_kentry: |
|
/* r3 is the fdt ptr */ |
|
mtctr r4 |
|
li r4, 0 |
|
li r5, 0 |
|
li r6, 0 |
|
li r7, 0 |
|
ld r11,opal@got(r2) |
|
ld r8,0(r11) |
|
ld r9,8(r11) |
|
bctr |
|
|
|
#define OPAL_CALL(name, token) \ |
|
.globl name; \ |
|
name: \ |
|
li r0, token; \ |
|
b opal_call; |
|
|
|
opal_call: |
|
mflr r11 |
|
std r11,16(r1) |
|
mfcr r12 |
|
stw r12,8(r1) |
|
mr r13,r2 |
|
|
|
/* Set opal return address */ |
|
ld r11,opal_return@got(r2) |
|
mtlr r11 |
|
mfmsr r12 |
|
|
|
/* switch to BE when we enter OPAL */ |
|
li r11,MSR_LE |
|
andc r12,r12,r11 |
|
mtspr SPRN_HSRR1,r12 |
|
|
|
/* load the opal call entry point and base */ |
|
ld r11,opal@got(r2) |
|
ld r12,8(r11) |
|
ld r2,0(r11) |
|
mtspr SPRN_HSRR0,r12 |
|
hrfid |
|
|
|
opal_return: |
|
FIXUP_ENDIAN |
|
mr r2,r13; |
|
lwz r11,8(r1); |
|
ld r12,16(r1) |
|
mtcr r11; |
|
mtlr r12 |
|
blr |
|
|
|
OPAL_CALL(opal_console_write, OPAL_CONSOLE_WRITE); |
|
OPAL_CALL(opal_console_read, OPAL_CONSOLE_READ); |
|
OPAL_CALL(opal_console_write_buffer_space, OPAL_CONSOLE_WRITE_BUFFER_SPACE); |
|
OPAL_CALL(opal_poll_events, OPAL_POLL_EVENTS); |
|
OPAL_CALL(opal_console_flush, OPAL_CONSOLE_FLUSH);
|
|
|