/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Non-emulated single-stepping support (currently limited to basic integer
 * computations) used to validate the instruction emulation infrastructure.
 *
 * Copyright (C) 2019 IBM Corporation
 */

#include <asm/asm-offsets.h>
#include <asm/ppc_asm.h>
#include <asm/code-patching-asm.h>
#include <linux/errno.h>

/* int exec_instr(struct pt_regs *regs) */
_GLOBAL(exec_instr)

	/*
	 * Stack frame layout (INT_FRAME_SIZE bytes)
	 *   In-memory pt_regs	(SP + STACK_FRAME_OVERHEAD)
	 *   Scratch space	(SP + 8)
	 *   Back chain		(SP + 0)
	 */

	/*
	 * Allocate a new stack frame with enough space to hold the register
	 * states in an in-memory pt_regs and also create the back chain to
	 * the caller's stack frame.
	 */
	stdu	r1, -INT_FRAME_SIZE(r1)

	/*
	 * Save non-volatile GPRs on stack. This includes TOC pointer (GPR2)
	 * and local variables (GPR14 to GPR31). The register for the pt_regs
	 * parameter (GPR3) is saved additionally to ensure that the resulting
	 * register state can still be saved even if GPR3 gets overwritten
	 * when loading the initial register state for the test instruction.
	 * The stack pointer (GPR1) and the thread pointer (GPR13) are not
	 * saved as these should not be modified anyway.
	 */
	SAVE_2GPRS(2, r1)
	SAVE_NVGPRS(r1)

	/*
	 * Save LR on stack to ensure that the return address is available
	 * even if it gets overwritten by the test instruction.
	 */
	mflr	r0
	std	r0, _LINK(r1)

	/*
	 * Save CR on stack. For simplicity, the entire register is saved
	 * even though only fields 2 to 4 are non-volatile.
	 */
	mfcr	r0
	std	r0, _CCR(r1)

	/*
	 * Load register state for the test instruction without touching the
	 * critical non-volatile registers. The register state is passed as a
	 * pointer to a pt_regs instance.
	 */
	subi	r31, r3, GPR0

	/* Load LR from pt_regs */
	ld	r0, _LINK(r31)
	mtlr	r0

	/* Load CR from pt_regs */
	ld	r0, _CCR(r31)
	mtcr	r0

	/* Load XER from pt_regs */
	ld	r0, _XER(r31)
	mtxer	r0

	/* Load GPRs from pt_regs */
	REST_GPR(0, r31)
	REST_10GPRS(2, r31)
	REST_GPR(12, r31)
	REST_NVGPRS(r31)

	/* Placeholder for the test instruction */
1:	nop
	patch_site 1b patch__exec_instr

	/*
	 * Since GPR3 is overwritten, temporarily restore it back to its
	 * original state, i.e. the pointer to pt_regs, to ensure that the
	 * resulting register state can be saved. Before doing this, a copy
	 * of it is created in the scratch space which is used later on to
	 * save it to pt_regs.
	 */
	std	r3, 8(r1)
	REST_GPR(3, r1)

	/* Save resulting GPR state to pt_regs */
	subi	r3, r3, GPR0
	SAVE_GPR(0, r3)
	SAVE_GPR(2, r3)
	SAVE_8GPRS(4, r3)
	SAVE_GPR(12, r3)
	SAVE_NVGPRS(r3)

	/* Save resulting LR to pt_regs */
	mflr	r0
	std	r0, _LINK(r3)

	/* Save resulting CR to pt_regs */
	mfcr	r0
	std	r0, _CCR(r3)

	/* Save resulting XER to pt_regs */
	mfxer	r0
	std	r0, _XER(r3)

	/* Restore resulting GPR3 from scratch space and save it to pt_regs */
	ld	r0, 8(r1)
	std	r0, GPR3(r3)

	/* Set return value to denote execution success */
	li	r3, 0

	/* Continue */
	b	3f

	/* Set return value to denote execution failure */
2:	li	r3, -EFAULT

	/* Restore the non-volatile GPRs from stack */
3:	REST_GPR(2, r1)
	REST_NVGPRS(r1)

	/* Restore LR from stack to be able to return */
	ld	r0, _LINK(r1)
	mtlr	r0

	/* Restore CR from stack */
	ld	r0, _CCR(r1)
	mtcr	r0

	/* Tear down stack frame */
	addi	r1, r1, INT_FRAME_SIZE

	/* Return */
	blr

	/* Setup exception table */
	EX_TABLE(1b, 2b)

_ASM_NOKPROBE_SYMBOL(exec_instr)
