19ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta/* 29ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved. 39ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * 49ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * Redistribution and use in source and binary forms, with or without 59ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * modification, are permitted provided that the following conditions are met: 69ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * 79ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * Redistributions of source code must retain the above copyright notice, this 89ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * list of conditions and the following disclaimer. 99ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * 109ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * Redistributions in binary form must reproduce the above copyright notice, 119ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * this list of conditions and the following disclaimer in the documentation 129ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * and/or other materials provided with the distribution. 139ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * 149ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * Neither the name of ARM nor the names of its contributors may be used 159ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * to endorse or promote products derived from this software without specific 169ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * prior written permission. 179ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * 189ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 199ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 209ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 219ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 229ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 239ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 249ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 259ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 269ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 279ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 289ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * POSSIBILITY OF SUCH DAMAGE. 299ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta */ 309ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 3197043ac98e13a726dbf8b3b41654dca759e3da2cDan Handley#include <arch.h> 320a30cf54af7bb1f77b405062b1d5b44e809d0290Andrew Thoelke#include <asm_macros.S> 3397043ac98e13a726dbf8b3b41654dca759e3da2cDan Handley#include <context.h> 349ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 359ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta/* ----------------------------------------------------- 369ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * The following function strictly follows the AArch64 379ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * PCS to use x9-x17 (temporary caller-saved registers) 389ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * to save EL1 system register context. It assumes that 399ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * 'x0' is pointing to a 'el1_sys_regs' structure where 409ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * the register context will be saved. 419ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * ----------------------------------------------------- 429ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta */ 439ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta .global el1_sysregs_context_save 440a30cf54af7bb1f77b405062b1d5b44e809d0290Andrew Thoelkefunc el1_sysregs_context_save 459ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 469ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x9, spsr_el1 479ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x10, elr_el1 489ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp x9, x10, [x0, #CTX_SPSR_EL1] 499ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 509ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x11, spsr_abt 519ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x12, spsr_und 529ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp x11, x12, [x0, #CTX_SPSR_ABT] 539ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 549ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x13, spsr_irq 559ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x14, spsr_fiq 569ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp x13, x14, [x0, #CTX_SPSR_IRQ] 579ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 589ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x15, sctlr_el1 599ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x16, actlr_el1 609ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp x15, x16, [x0, #CTX_SCTLR_EL1] 619ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 629ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x17, cpacr_el1 639ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x9, csselr_el1 649ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp x17, x9, [x0, #CTX_CPACR_EL1] 659ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 669ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x10, sp_el1 679ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x11, esr_el1 689ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp x10, x11, [x0, #CTX_SP_EL1] 699ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 709ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x12, ttbr0_el1 719ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x13, ttbr1_el1 729ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp x12, x13, [x0, #CTX_TTBR0_EL1] 739ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 749ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x14, mair_el1 759ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x15, amair_el1 769ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp x14, x15, [x0, #CTX_MAIR_EL1] 779ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 789ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x16, tcr_el1 799ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x17, tpidr_el1 809ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp x16, x17, [x0, #CTX_TCR_EL1] 819ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 829ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x9, tpidr_el0 839ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x10, tpidrro_el0 849ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp x9, x10, [x0, #CTX_TPIDR_EL0] 859ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 869ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x11, dacr32_el2 879ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x12, ifsr32_el2 889ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp x11, x12, [x0, #CTX_DACR32_EL2] 899ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 909ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x13, par_el1 919ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x14, far_el1 929ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp x13, x14, [x0, #CTX_PAR_EL1] 939ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 949ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x15, afsr0_el1 959ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x16, afsr1_el1 969ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp x15, x16, [x0, #CTX_AFSR0_EL1] 979ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 989ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x17, contextidr_el1 999ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x9, vbar_el1 1009ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp x17, x9, [x0, #CTX_CONTEXTIDR_EL1] 1019ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1022da8d8bfc0877b9c723514133554dfee4c0638f1Jeenu Viswambharan /* Save NS timer registers if the build has instructed so */ 1032da8d8bfc0877b9c723514133554dfee4c0638f1Jeenu Viswambharan#if NS_TIMER_SWITCH 1049ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x10, cntp_ctl_el0 1059ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x11, cntp_cval_el0 1069ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp x10, x11, [x0, #CTX_CNTP_CTL_EL0] 1079ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1089ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x12, cntv_ctl_el0 1099ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x13, cntv_cval_el0 1109ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp x12, x13, [x0, #CTX_CNTV_CTL_EL0] 1119ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1129ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x14, cntkctl_el1 1132da8d8bfc0877b9c723514133554dfee4c0638f1Jeenu Viswambharan str x14, [x0, #CTX_CNTKCTL_EL1] 1142da8d8bfc0877b9c723514133554dfee4c0638f1Jeenu Viswambharan#endif 1152da8d8bfc0877b9c723514133554dfee4c0638f1Jeenu Viswambharan 1169ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x15, fpexc32_el2 1172da8d8bfc0877b9c723514133554dfee4c0638f1Jeenu Viswambharan str x15, [x0, #CTX_FP_FPEXC32_EL2] 1189ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1199ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ret 1209ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1219ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta/* ----------------------------------------------------- 1229ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * The following function strictly follows the AArch64 1239ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * PCS to use x9-x17 (temporary caller-saved registers) 1249ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * to restore EL1 system register context. It assumes 1259ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * that 'x0' is pointing to a 'el1_sys_regs' structure 1269ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * from where the register context will be restored 1279ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * ----------------------------------------------------- 1289ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta */ 1299ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta .global el1_sysregs_context_restore 1300a30cf54af7bb1f77b405062b1d5b44e809d0290Andrew Thoelkefunc el1_sysregs_context_restore 1319ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1329ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp x9, x10, [x0, #CTX_SPSR_EL1] 1339ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr spsr_el1, x9 1349ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr elr_el1, x10 1359ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1369ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp x11, x12, [x0, #CTX_SPSR_ABT] 1379ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr spsr_abt, x11 1389ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr spsr_und, x12 1399ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1409ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp x13, x14, [x0, #CTX_SPSR_IRQ] 1419ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr spsr_irq, x13 1429ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr spsr_fiq, x14 1439ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1449ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp x15, x16, [x0, #CTX_SCTLR_EL1] 1459ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr sctlr_el1, x15 1469ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr actlr_el1, x16 1479ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1489ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp x17, x9, [x0, #CTX_CPACR_EL1] 1499ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr cpacr_el1, x17 1509ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr csselr_el1, x9 1519ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1529ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp x10, x11, [x0, #CTX_SP_EL1] 1539ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr sp_el1, x10 1549ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr esr_el1, x11 1559ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1569ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp x12, x13, [x0, #CTX_TTBR0_EL1] 1579ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr ttbr0_el1, x12 1589ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr ttbr1_el1, x13 1599ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1609ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp x14, x15, [x0, #CTX_MAIR_EL1] 1619ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr mair_el1, x14 1629ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr amair_el1, x15 1639ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1649ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp x16, x17, [x0, #CTX_TCR_EL1] 1659ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr tcr_el1, x16 1669ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr tpidr_el1, x17 1679ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1689ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp x9, x10, [x0, #CTX_TPIDR_EL0] 1699ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr tpidr_el0, x9 1709ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr tpidrro_el0, x10 1719ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1729ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp x11, x12, [x0, #CTX_DACR32_EL2] 1739ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr dacr32_el2, x11 1749ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr ifsr32_el2, x12 1759ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1769ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp x13, x14, [x0, #CTX_PAR_EL1] 1779ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr par_el1, x13 1789ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr far_el1, x14 1799ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1809ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp x15, x16, [x0, #CTX_AFSR0_EL1] 1819ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr afsr0_el1, x15 1829ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr afsr1_el1, x16 1839ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1849ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp x17, x9, [x0, #CTX_CONTEXTIDR_EL1] 1859ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr contextidr_el1, x17 1869ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr vbar_el1, x9 1879ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1882da8d8bfc0877b9c723514133554dfee4c0638f1Jeenu Viswambharan /* Restore NS timer registers if the build has instructed so */ 1892da8d8bfc0877b9c723514133554dfee4c0638f1Jeenu Viswambharan#if NS_TIMER_SWITCH 1909ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp x10, x11, [x0, #CTX_CNTP_CTL_EL0] 1919ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr cntp_ctl_el0, x10 1929ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr cntp_cval_el0, x11 1939ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1949ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp x12, x13, [x0, #CTX_CNTV_CTL_EL0] 1959ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr cntv_ctl_el0, x12 1969ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr cntv_cval_el0, x13 1979ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 1982da8d8bfc0877b9c723514133554dfee4c0638f1Jeenu Viswambharan ldr x14, [x0, #CTX_CNTKCTL_EL1] 1999ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr cntkctl_el1, x14 2002da8d8bfc0877b9c723514133554dfee4c0638f1Jeenu Viswambharan#endif 2012da8d8bfc0877b9c723514133554dfee4c0638f1Jeenu Viswambharan 2022da8d8bfc0877b9c723514133554dfee4c0638f1Jeenu Viswambharan ldr x15, [x0, #CTX_FP_FPEXC32_EL2] 2039ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr fpexc32_el2, x15 2049ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 2059ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta /* No explict ISB required here as ERET covers it */ 2069ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 2079ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ret 2089ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 2099ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta/* ----------------------------------------------------- 21044804252881c11668e0af9b7803a0667922c93ebSandrine Bailleux * The following function follows the aapcs_64 strictly 2119ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * to use x9-x17 (temporary caller-saved registers 2129ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * according to AArch64 PCS) to save floating point 2139ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * register context. It assumes that 'x0' is pointing to 2149ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * a 'fp_regs' structure where the register context will 2159ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * be saved. 2169ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * 2179ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * Access to VFP registers will trap if CPTR_EL3.TFP is 2189ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * set. However currently we don't use VFP registers 2199ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * nor set traps in Trusted Firmware, and assume it's 2209ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * cleared 2219ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * 2229ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * TODO: Revisit when VFP is used in secure world 2239ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * ----------------------------------------------------- 2249ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta */ 2250f21c547fe7693d9759616dbdc747fe3cca79a70Juan Castillo#if CTX_INCLUDE_FPREGS 2269ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta .global fpregs_context_save 2270a30cf54af7bb1f77b405062b1d5b44e809d0290Andrew Thoelkefunc fpregs_context_save 2289ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp q0, q1, [x0, #CTX_FP_Q0] 2299ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp q2, q3, [x0, #CTX_FP_Q2] 2309ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp q4, q5, [x0, #CTX_FP_Q4] 2319ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp q6, q7, [x0, #CTX_FP_Q6] 2329ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp q8, q9, [x0, #CTX_FP_Q8] 2339ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp q10, q11, [x0, #CTX_FP_Q10] 2349ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp q12, q13, [x0, #CTX_FP_Q12] 2359ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp q14, q15, [x0, #CTX_FP_Q14] 2369ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp q16, q17, [x0, #CTX_FP_Q16] 2379ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp q18, q19, [x0, #CTX_FP_Q18] 2389ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp q20, q21, [x0, #CTX_FP_Q20] 2399ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp q22, q23, [x0, #CTX_FP_Q22] 2409ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp q24, q25, [x0, #CTX_FP_Q24] 2419ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp q26, q27, [x0, #CTX_FP_Q26] 2429ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp q28, q29, [x0, #CTX_FP_Q28] 2439ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta stp q30, q31, [x0, #CTX_FP_Q30] 2449ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 2459ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x9, fpsr 2469ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta str x9, [x0, #CTX_FP_FPSR] 2479ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 2489ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta mrs x10, fpcr 2499ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta str x10, [x0, #CTX_FP_FPCR] 2509ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 2519ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ret 2529ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 2539ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta/* ----------------------------------------------------- 2549ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * The following function follows the aapcs_64 strictly 2559ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * to use x9-x17 (temporary caller-saved registers 2569ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * according to AArch64 PCS) to restore floating point 2579ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * register context. It assumes that 'x0' is pointing to 2589ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * a 'fp_regs' structure from where the register context 2599ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * will be restored. 2609ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * 2619ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * Access to VFP registers will trap if CPTR_EL3.TFP is 2629ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * set. However currently we don't use VFP registers 2639ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * nor set traps in Trusted Firmware, and assume it's 2649ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * cleared 2659ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * 2669ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * TODO: Revisit when VFP is used in secure world 2679ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * ----------------------------------------------------- 2689ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta */ 2699ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta .global fpregs_context_restore 2700a30cf54af7bb1f77b405062b1d5b44e809d0290Andrew Thoelkefunc fpregs_context_restore 2719ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp q0, q1, [x0, #CTX_FP_Q0] 2729ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp q2, q3, [x0, #CTX_FP_Q2] 2739ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp q4, q5, [x0, #CTX_FP_Q4] 2749ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp q6, q7, [x0, #CTX_FP_Q6] 2759ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp q8, q9, [x0, #CTX_FP_Q8] 2769ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp q10, q11, [x0, #CTX_FP_Q10] 2779ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp q12, q13, [x0, #CTX_FP_Q12] 2789ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp q14, q15, [x0, #CTX_FP_Q14] 2799ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp q16, q17, [x0, #CTX_FP_Q16] 2809ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp q18, q19, [x0, #CTX_FP_Q18] 2819ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp q20, q21, [x0, #CTX_FP_Q20] 2829ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp q22, q23, [x0, #CTX_FP_Q22] 2839ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp q24, q25, [x0, #CTX_FP_Q24] 2849ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp q26, q27, [x0, #CTX_FP_Q26] 2859ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp q28, q29, [x0, #CTX_FP_Q28] 2869ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldp q30, q31, [x0, #CTX_FP_Q30] 2879ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 2889ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ldr x9, [x0, #CTX_FP_FPSR] 2899ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr fpsr, x9 2909ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 2919ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta str x10, [x0, #CTX_FP_FPCR] 2929ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta msr fpcr, x10 2939ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 2949ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta /* 2959ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * No explict ISB required here as ERET to 2969ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * swtich to secure EL1 or non-secure world 2979ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta * covers it 2989ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta */ 2999ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta 3009ac63c59c4b6de7e48a6702ad799dc961a4fd6deAchin Gupta ret 3010f21c547fe7693d9759616dbdc747fe3cca79a70Juan Castillo#endif /* CTX_INCLUDE_FPREGS */ 302