cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

trans_pgd-asm.S (1939B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2
      3/*
      4 * Copyright (c) 2021, Microsoft Corporation.
      5 * Pasha Tatashin <pasha.tatashin@soleen.com>
      6 */
      7
      8#include <linux/linkage.h>
      9#include <asm/assembler.h>
     10#include <asm/kvm_asm.h>
     11
     12.macro invalid_vector	label
     13SYM_CODE_START_LOCAL(\label)
     14	.align 7
     15	b	\label
     16SYM_CODE_END(\label)
     17.endm
     18
     19.macro el1_sync_vector
     20SYM_CODE_START_LOCAL(el1_sync)
     21	.align 7
     22	cmp	x0, #HVC_SET_VECTORS	/* Called from hibernate */
     23	b.ne	1f
     24	msr	vbar_el2, x1
     25	mov	x0, xzr
     26	eret
     271:	cmp	x0, #HVC_SOFT_RESTART	/* Called from kexec */
     28	b.ne	2f
     29	mov	x0, x2
     30	mov	x2, x4
     31	mov	x4, x1
     32	mov	x1, x3
     33	br	x4
     342:	/* Unexpected argument, set an error */
     35	mov_q	x0, HVC_STUB_ERR
     36	eret
     37SYM_CODE_END(el1_sync)
     38.endm
     39
     40SYM_CODE_START(trans_pgd_stub_vectors)
     41	invalid_vector	hyp_stub_el2t_sync_invalid	// Synchronous EL2t
     42	invalid_vector	hyp_stub_el2t_irq_invalid	// IRQ EL2t
     43	invalid_vector	hyp_stub_el2t_fiq_invalid	// FIQ EL2t
     44	invalid_vector	hyp_stub_el2t_error_invalid	// Error EL2t
     45
     46	invalid_vector	hyp_stub_el2h_sync_invalid	// Synchronous EL2h
     47	invalid_vector	hyp_stub_el2h_irq_invalid	// IRQ EL2h
     48	invalid_vector	hyp_stub_el2h_fiq_invalid	// FIQ EL2h
     49	invalid_vector	hyp_stub_el2h_error_invalid	// Error EL2h
     50
     51	el1_sync_vector					// Synchronous 64-bit EL1
     52	invalid_vector	hyp_stub_el1_irq_invalid	// IRQ 64-bit EL1
     53	invalid_vector	hyp_stub_el1_fiq_invalid	// FIQ 64-bit EL1
     54	invalid_vector	hyp_stub_el1_error_invalid	// Error 64-bit EL1
     55
     56	invalid_vector	hyp_stub_32b_el1_sync_invalid	// Synchronous 32-bit EL1
     57	invalid_vector	hyp_stub_32b_el1_irq_invalid	// IRQ 32-bit EL1
     58	invalid_vector	hyp_stub_32b_el1_fiq_invalid	// FIQ 32-bit EL1
     59	invalid_vector	hyp_stub_32b_el1_error_invalid	// Error 32-bit EL1
     60	.align 11
     61SYM_INNER_LABEL(__trans_pgd_stub_vectors_end, SYM_L_LOCAL)
     62SYM_CODE_END(trans_pgd_stub_vectors)
     63
     64# Check the trans_pgd_stub_vectors didn't overflow
     65.org . - (__trans_pgd_stub_vectors_end - trans_pgd_stub_vectors) + SZ_2K