123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /*
- * Copyright (c) 2016 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.
- */
- #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);
|