/*
 * Copyright (c) 2017 Jean-Paul Etienne <fractalclone@gmail.com>
 * Contributors: 2018 Antmicro <www.antmicro.com>
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/toolchain.h>

/* exports */
GTEXT(__start)

/* imports */
GTEXT(__initialize)
GTEXT(__irq_wrapper)

SECTION_FUNC(vectors, __start)
#if defined(CONFIG_RISCV_GP)
	/* Initialize global pointer */
	.option push
	.option norelax
	la gp, __global_pointer$
	.option pop
#endif

	.option norvc;

#if defined(CONFIG_RISCV_MTVEC_VECTORED_MODE)
	/*
	 * Set mtvec (Machine Trap-Vector Base-Address Register)
	 * to __ivt (interrupt vector table). Add 1 to base
	 * address of __ivt to indicate that vectored mode
	 * is used (LSB = 0x1). CPU will mask the LSB out of
	 * the address so that base address of __ivt is used.
	 *
	 * NOTE: __ivt is 256-byte aligned. Incorrect alignment
	 *        of __ivt breaks this code.
	 */
	la t0, __ivt /* Load address of interrupt vector table */
	addi t0, t0, 1 /* Enable vectored mode by setting LSB */

/* MTVEC_DIRECT_MODE */
#else
	/*
	 * Set mtvec (Machine Trap-Vector Base-Address Register)
	 * to __irq_wrapper.
	 */
	la t0, __irq_wrapper
#endif

	csrw mtvec, t0

	/* Jump to __reset */
	tail __reset

#if defined(CONFIG_RISCV_MTVEC_VECTORED_MODE)
SECTION_FUNC(reset,  __ivt)
	.option push
	.option norvc
	.balign 0x100 /* must be 256 byte aligned per specification */
	.rept (CONFIG_NUM_IRQS)
	j __irq_wrapper
	.endr
#endif
