1610c5a9cSNicholas Piggin/* SPDX-License-Identifier: GPL-2.0-or-later */ 2610c5a9cSNicholas Piggin/* 3610c5a9cSNicholas Piggin * Copyright (c) 2016 IBM Corporation. 4610c5a9cSNicholas Piggin */ 5610c5a9cSNicholas Piggin 6610c5a9cSNicholas Piggin#include <asm/ppc_asm.h> 7610c5a9cSNicholas Piggin 8610c5a9cSNicholas Piggin .text 9610c5a9cSNicholas Piggin .globl opal_call 10610c5a9cSNicholas Pigginopal_call: 11610c5a9cSNicholas Piggin mr r0,r3 12610c5a9cSNicholas Piggin mr r3,r4 13610c5a9cSNicholas Piggin mr r4,r5 14610c5a9cSNicholas Piggin mr r5,r6 15610c5a9cSNicholas Piggin mr r6,r7 16610c5a9cSNicholas Piggin mflr r11 17610c5a9cSNicholas Piggin std r11,16(r1) 18610c5a9cSNicholas Piggin mfcr r12 19610c5a9cSNicholas Piggin stw r12,8(r1) 20610c5a9cSNicholas Piggin std r2,-8(r1) /* use redzone */ 21610c5a9cSNicholas Piggin 22610c5a9cSNicholas Piggin /* Set opal return address */ 23610c5a9cSNicholas Piggin LOAD_REG_ADDR(r11, opal_return) 24610c5a9cSNicholas Piggin mtlr r11 25610c5a9cSNicholas Piggin mfmsr r12 26610c5a9cSNicholas Piggin std r12,-16(r1) /* use redzone */ 27610c5a9cSNicholas Piggin 28*d4c8e725SNicholas Piggin /* switch to BE and real-mode when we enter OPAL */ 29*d4c8e725SNicholas Piggin li r11,(1 << MSR_LE_BIT) | MSR_IR | MSR_DR 30610c5a9cSNicholas Piggin ori r11,r11,(1 << MSR_EE_BIT) 31610c5a9cSNicholas Piggin andc r12,r12,r11 32610c5a9cSNicholas Piggin mtspr SPR_HSRR1,r12 33610c5a9cSNicholas Piggin 34610c5a9cSNicholas Piggin /* load the opal call entry point and base */ 35610c5a9cSNicholas Piggin LOAD_REG_ADDR(r11, opal) 36610c5a9cSNicholas Piggin ld r12,8(r11) 37610c5a9cSNicholas Piggin ld r2,0(r11) 38610c5a9cSNicholas Piggin mtspr SPR_HSRR0,r12 39610c5a9cSNicholas Piggin hrfid 40610c5a9cSNicholas Piggin 41610c5a9cSNicholas Pigginopal_return: 42610c5a9cSNicholas Piggin FIXUP_ENDIAN 43610c5a9cSNicholas Piggin ld r12,-16(r1) /* use redzone */ 44610c5a9cSNicholas Piggin mtmsrd r12 45610c5a9cSNicholas Piggin ld r2,-8(r1) /* use redzone */ 46610c5a9cSNicholas Piggin lwz r11,8(r1); 47610c5a9cSNicholas Piggin ld r12,16(r1) 48610c5a9cSNicholas Piggin mtcr r11; 49610c5a9cSNicholas Piggin mtlr r12 50610c5a9cSNicholas Piggin blr 51