12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /* 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
- LOAD_REG_ADDR(r11, opal)
- 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 */
- LOAD_REG_ADDR(r11, opal_return)
- 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 */
- LOAD_REG_ADDR(r11, opal)
- 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);
|