1*610c5a9cSNicholas Piggin/* SPDX-License-Identifier: GPL-2.0-or-later */ 2*610c5a9cSNicholas Piggin/* 3*610c5a9cSNicholas Piggin * Copyright (c) 2016 IBM Corporation. 4*610c5a9cSNicholas Piggin */ 5*610c5a9cSNicholas Piggin 6*610c5a9cSNicholas Piggin#include <asm/ppc_asm.h> 7*610c5a9cSNicholas Piggin 8*610c5a9cSNicholas Piggin .text 9*610c5a9cSNicholas Piggin .globl opal_call 10*610c5a9cSNicholas Pigginopal_call: 11*610c5a9cSNicholas Piggin mr r0,r3 12*610c5a9cSNicholas Piggin mr r3,r4 13*610c5a9cSNicholas Piggin mr r4,r5 14*610c5a9cSNicholas Piggin mr r5,r6 15*610c5a9cSNicholas Piggin mr r6,r7 16*610c5a9cSNicholas Piggin mflr r11 17*610c5a9cSNicholas Piggin std r11,16(r1) 18*610c5a9cSNicholas Piggin mfcr r12 19*610c5a9cSNicholas Piggin stw r12,8(r1) 20*610c5a9cSNicholas Piggin std r2,-8(r1) /* use redzone */ 21*610c5a9cSNicholas Piggin 22*610c5a9cSNicholas Piggin /* Set opal return address */ 23*610c5a9cSNicholas Piggin LOAD_REG_ADDR(r11, opal_return) 24*610c5a9cSNicholas Piggin mtlr r11 25*610c5a9cSNicholas Piggin mfmsr r12 26*610c5a9cSNicholas Piggin std r12,-16(r1) /* use redzone */ 27*610c5a9cSNicholas Piggin 28*610c5a9cSNicholas Piggin /* switch to BE when we enter OPAL */ 29*610c5a9cSNicholas Piggin li r11,(1 << MSR_LE_BIT) 30*610c5a9cSNicholas Piggin ori r11,r11,(1 << MSR_EE_BIT) 31*610c5a9cSNicholas Piggin andc r12,r12,r11 32*610c5a9cSNicholas Piggin mtspr SPR_HSRR1,r12 33*610c5a9cSNicholas Piggin 34*610c5a9cSNicholas Piggin /* load the opal call entry point and base */ 35*610c5a9cSNicholas Piggin LOAD_REG_ADDR(r11, opal) 36*610c5a9cSNicholas Piggin ld r12,8(r11) 37*610c5a9cSNicholas Piggin ld r2,0(r11) 38*610c5a9cSNicholas Piggin mtspr SPR_HSRR0,r12 39*610c5a9cSNicholas Piggin hrfid 40*610c5a9cSNicholas Piggin 41*610c5a9cSNicholas Pigginopal_return: 42*610c5a9cSNicholas Piggin FIXUP_ENDIAN 43*610c5a9cSNicholas Piggin ld r12,-16(r1) /* use redzone */ 44*610c5a9cSNicholas Piggin mtmsrd r12 45*610c5a9cSNicholas Piggin ld r2,-8(r1) /* use redzone */ 46*610c5a9cSNicholas Piggin lwz r11,8(r1); 47*610c5a9cSNicholas Piggin ld r12,16(r1) 48*610c5a9cSNicholas Piggin mtcr r11; 49*610c5a9cSNicholas Piggin mtlr r12 50*610c5a9cSNicholas Piggin blr 51