162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2016 IBM Corporation. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include "ppc_asm.h" 762306a36Sopenharmony_ci#include "../include/asm/opal-api.h" 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci .text 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci .globl opal_kentry 1262306a36Sopenharmony_ciopal_kentry: 1362306a36Sopenharmony_ci /* r3 is the fdt ptr */ 1462306a36Sopenharmony_ci mtctr r4 1562306a36Sopenharmony_ci li r4, 0 1662306a36Sopenharmony_ci li r5, 0 1762306a36Sopenharmony_ci li r6, 0 1862306a36Sopenharmony_ci li r7, 0 1962306a36Sopenharmony_ci LOAD_REG_ADDR(r11, opal) 2062306a36Sopenharmony_ci ld r8,0(r11) 2162306a36Sopenharmony_ci ld r9,8(r11) 2262306a36Sopenharmony_ci bctr 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#define OPAL_CALL(name, token) \ 2562306a36Sopenharmony_ci .globl name; \ 2662306a36Sopenharmony_ciname: \ 2762306a36Sopenharmony_ci li r0, token; \ 2862306a36Sopenharmony_ci b opal_call; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ciopal_call: 3162306a36Sopenharmony_ci mflr r11 3262306a36Sopenharmony_ci std r11,16(r1) 3362306a36Sopenharmony_ci mfcr r12 3462306a36Sopenharmony_ci stw r12,8(r1) 3562306a36Sopenharmony_ci mr r13,r2 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci /* Set opal return address */ 3862306a36Sopenharmony_ci LOAD_REG_ADDR(r11, opal_return) 3962306a36Sopenharmony_ci mtlr r11 4062306a36Sopenharmony_ci mfmsr r12 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci /* switch to BE when we enter OPAL */ 4362306a36Sopenharmony_ci li r11,MSR_LE 4462306a36Sopenharmony_ci andc r12,r12,r11 4562306a36Sopenharmony_ci mtspr SPRN_HSRR1,r12 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci /* load the opal call entry point and base */ 4862306a36Sopenharmony_ci LOAD_REG_ADDR(r11, opal) 4962306a36Sopenharmony_ci ld r12,8(r11) 5062306a36Sopenharmony_ci ld r2,0(r11) 5162306a36Sopenharmony_ci mtspr SPRN_HSRR0,r12 5262306a36Sopenharmony_ci hrfid 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ciopal_return: 5562306a36Sopenharmony_ci FIXUP_ENDIAN 5662306a36Sopenharmony_ci mr r2,r13; 5762306a36Sopenharmony_ci lwz r11,8(r1); 5862306a36Sopenharmony_ci ld r12,16(r1) 5962306a36Sopenharmony_ci mtcr r11; 6062306a36Sopenharmony_ci mtlr r12 6162306a36Sopenharmony_ci blr 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ciOPAL_CALL(opal_console_write, OPAL_CONSOLE_WRITE); 6462306a36Sopenharmony_ciOPAL_CALL(opal_console_read, OPAL_CONSOLE_READ); 6562306a36Sopenharmony_ciOPAL_CALL(opal_console_write_buffer_space, OPAL_CONSOLE_WRITE_BUFFER_SPACE); 6662306a36Sopenharmony_ciOPAL_CALL(opal_poll_events, OPAL_POLL_EVENTS); 6762306a36Sopenharmony_ciOPAL_CALL(opal_console_flush, OPAL_CONSOLE_FLUSH); 68