/*
 * Copyright (c) 2018-2024, Arm Limited and Contributors. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef ARM_ARCH_SVC_H
#define ARM_ARCH_SVC_H

#define SMCCC_VERSION			U(0x80000000)
#define SMCCC_ARCH_FEATURES		U(0x80000001)
#define SMCCC_ARCH_SOC_ID		U(0x80000002)
#define SMCCC_ARCH_WORKAROUND_1		U(0x80008000)
#define SMCCC_ARCH_WORKAROUND_2		U(0x80007FFF)
#define SMCCC_ARCH_WORKAROUND_3		U(0x80003FFF)
#define SMCCC_ARCH_FEATURE_AVAILABILITY		U(0x80000003)

#define SMCCC_GET_SOC_VERSION		U(0)
#define SMCCC_GET_SOC_REVISION		U(1)

#ifndef __ASSEMBLER__
#if ARCH_FEATURE_AVAILABILITY
#include <lib/cassert.h>

#if ENABLE_FEAT_FGT2
#define SCR_FEAT_FGT2 SCR_FGTEN2_BIT
#else
#define SCR_FEAT_FGT2 (0)
#endif

#if ENABLE_FEAT_FPMR
#define SCR_FEAT_FPMR SCR_EnFPM_BIT
#else
#define SCR_FEAT_FPMR
#endif

#if ENABLE_FEAT_D128
#define SCR_FEAT_D128 SCR_D128En_BIT
#else
#define SCR_FEAT_D128 (0)
#endif

#if ENABLE_FEAT_S1PIE
#define SCR_FEAT_S1PIE SCR_PIEN_BIT
#else
#define SCR_FEAT_S1PIE (0)
#endif

#if ENABLE_FEAT_SCTLR2
#define SCR_FEAT_SCTLR2 SCR_SCTLR2En_BIT
#else
#define SCR_FEAT_SCTLR2 (0)
#endif

#if ENABLE_FEAT_TCR2
#define SCR_FEAT_TCR2 SCR_TCR2EN_BIT
#else
#define SCR_FEAT_TCR2 (0)
#endif

#if ENABLE_FEAT_THE
#define SCR_FEAT_THE SCR_RCWMASKEn_BIT
#else
#define SCR_FEAT_THE (0)
#endif

#if ENABLE_SME_FOR_NS
#define SCR_FEAT_SME SCR_ENTP2_BIT
#else
#define SCR_FEAT_SME (0)
#endif

#if ENABLE_FEAT_GCS
#define SCR_FEAT_GCS SCR_GCSEn_BIT
#else
#define SCR_FEAT_GCS (0)
#endif

#if ENABLE_FEAT_HCX
#define SCR_FEAT_HCX SCR_HXEn_BIT
#else
#define SCR_FEAT_HCX (0)
#endif

#if ENABLE_FEAT_LS64_ACCDATA
#define SCR_FEAT_LS64_ACCDATA (SCR_ADEn_BIT | SCR_EnAS0_BIT)
#else
#define SCR_FEAT_LS64_ACCDATA (0)
#endif

#if ENABLE_FEAT_AMUv1p1
#define SCR_FEAT_AMUv1p1 SCR_AMVOFFEN_BIT
#else
#define SCR_FEAT_AMUv1p1 (0)
#endif

#if ENABLE_FEAT_ECV
#define SCR_FEAT_ECV SCR_ECVEN_BIT
#else
#define SCR_FEAT_ECV (0)
#endif

#if ENABLE_FEAT_FGT
#define SCR_FEAT_FGT SCR_FGTEN_BIT
#else
#define SCR_FEAT_FGT (0)
#endif

#if ENABLE_FEAT_MTE2
#define SCR_FEAT_MTE2 SCR_ATA_BIT
#else
#define SCR_FEAT_MTE2 (0)
#endif

#if ENABLE_FEAT_CSV2_2
#define SCR_FEAT_CSV2_2 SCR_EnSCXT_BIT
#else
#define SCR_FEAT_CSV2_2 (0)
#endif

#if ENABLE_FEAT_RAS
#define SCR_FEAT_RAS SCR_TERR_BIT
#else
#define SCR_FEAT_RAS (0)
#endif

#ifndef SCR_PLAT_FEATS
#define SCR_PLAT_FEATS (0)
#endif
#ifndef SCR_PLAT_FLIPPED
#define SCR_PLAT_FLIPPED (0)
#endif
#ifndef SCR_PLAT_IGNORED
#define SCR_PLAT_IGNORED (0)
#endif

#ifndef CPTR_PLAT_FEATS
#define CPTR_PLAT_FEATS (0)
#endif
#ifndef CPTR_PLAT_FLIPPED
#define CPTR_PLAT_FLIPPED (0)
#endif

#ifndef MDCR_PLAT_FEATS
#define MDCR_PLAT_FEATS (0)
#endif
#ifndef MDCR_PLAT_FLIPPED
#define MDCR_PLAT_FLIPPED (0)
#endif
#ifndef MDCR_PLAT_IGNORED
#define MDCR_PLAT_IGNORED (0)
#endif
/*
 * XYZ_EL3_FEATS - list all bits that are relevant for feature enablement. It's
 * a constant list based on what features are expected. This relies on the fact
 * that if the feature is in any way disabled, then the relevant bit will not be
 * written by context management.
 *
 * XYZ_EL3_FLIPPED - bits with an active 0, rather than the usual active 1. The
 * spec always uses active 1 to mean that the feature will not trap.
 *
 * XYZ_EL3_IGNORED - list of all bits that are not relevant for feature
 * enablement and should not be reported to lower ELs
 */
#define SCR_EL3_FEATS (								\
	SCR_FEAT_FGT2		|						\
	SCR_FEAT_FPMR		|						\
	SCR_FEAT_D128		|						\
	SCR_FEAT_S1PIE		|						\
	SCR_FEAT_SCTLR2		|						\
	SCR_FEAT_TCR2		|						\
	SCR_FEAT_THE		|						\
	SCR_FEAT_SME		|						\
	SCR_FEAT_GCS		|						\
	SCR_FEAT_HCX		|						\
	SCR_FEAT_LS64_ACCDATA	|						\
	SCR_FEAT_AMUv1p1	|						\
	SCR_FEAT_ECV		|						\
	SCR_FEAT_FGT		|						\
	SCR_FEAT_MTE2		|						\
	SCR_FEAT_CSV2_2		|						\
	SCR_APK_BIT		| /* FEAT_Pauth */				\
	SCR_FEAT_RAS		|						\
	SCR_PLAT_FEATS)
#define SCR_EL3_FLIPPED (							\
	SCR_FEAT_RAS		|						\
	SCR_PLAT_FLIPPED)
#define SCR_EL3_IGNORED (							\
	SCR_API_BIT		|						\
	SCR_RW_BIT		|						\
	SCR_SIF_BIT		|						\
	SCR_HCE_BIT		|						\
	SCR_FIQ_BIT		|						\
	SCR_IRQ_BIT		|						\
	SCR_NS_BIT		|						\
	SCR_RES1_BITS		|						\
	SCR_PLAT_IGNORED)
CASSERT((SCR_EL3_FEATS & SCR_EL3_IGNORED) == 0, scr_feat_is_ignored);
CASSERT((SCR_EL3_FLIPPED & SCR_EL3_FEATS) == SCR_EL3_FLIPPED, scr_flipped_not_a_feat);

#if ENABLE_SYS_REG_TRACE_FOR_NS
#define CPTR_SYS_REG_TRACE (TCPAC_BIT | TTA_BIT)
#else
#define CPTR_SYS_REG_TRACE (0)
#endif

#if ENABLE_FEAT_AMU
#define CPTR_FEAT_AMU TAM_BIT
#else
#define CPTR_FEAT_AMU (0)
#endif

#if ENABLE_SME_FOR_NS
#define CPTR_FEAT_SME ESM_BIT
#else
#define CPTR_FEAT_SME (0)
#endif

#if ENABLE_SVE_FOR_NS
#define CPTR_FEAT_SVE CPTR_EZ_BIT
#else
#define CPTR_FEAT_SVE (0)
#endif

#define CPTR_EL3_FEATS (							\
	CPTR_SYS_REG_TRACE	|						\
	CPTR_FEAT_AMU		|						\
	CPTR_FEAT_SME		|						\
	TFP_BIT			|						\
	CPTR_FEAT_SVE		|						\
	CPTR_PLAT_FEATS)
#define CPTR_EL3_FLIPPED (							\
	CPTR_SYS_REG_TRACE	|						\
	CPTR_FEAT_AMU		|						\
	TFP_BIT			|						\
	CPTR_PLAT_FLIPPED)
CASSERT((CPTR_EL3_FLIPPED & CPTR_EL3_FEATS) == CPTR_EL3_FLIPPED, cptr_flipped_not_a_feat);

/*
 * Some features enables are expressed with more than 1 bit in order to cater
 * for multi world enablement. In those cases (BRB, TRB, SPE) only the last bit
 * is used and reported. This (ab)uses the convenient fact that the last bit
 * always means "enabled for this world" when context switched correctly.
 * The per-world values have been adjusted such that this is always true.
 */
#if ENABLE_BRBE_FOR_NS
#define MDCR_FEAT_BRBE MDCR_SBRBE(1UL)
#else
#define MDCR_FEAT_BRBE (0)
#endif

#if ENABLE_FEAT_FGT
#define MDCR_FEAT_FGT MDCR_TDCC_BIT
#else
#define MDCR_FEAT_FGT (0)
#endif

#if ENABLE_TRBE_FOR_NS
#define MDCR_FEAT_TRBE MDCR_NSTB(1UL)
#else
#define MDCR_FEAT_TRBE (0)
#endif

#if ENABLE_TRF_FOR_NS
#define MDCR_FEAT_TRF MDCR_TTRF_BIT
#else
#define MDCR_FEAT_TRF (0)
#endif

#if ENABLE_SPE_FOR_NS
#define MDCR_FEAT_SPE MDCR_NSPB(1UL)
#else
#define MDCR_FEAT_SPE (0)
#endif

#define MDCR_EL3_FEATS (							\
	MDCR_FEAT_BRBE		|						\
	MDCR_FEAT_FGT		|						\
	MDCR_FEAT_TRBE		|						\
	MDCR_FEAT_TRF		|						\
	MDCR_FEAT_SPE		|						\
	MDCR_TDOSA_BIT		|						\
	MDCR_TDA_BIT		|						\
	MDCR_TPM_BIT		| /* FEAT_PMUv3 */				\
	MDCR_PLAT_FEATS)
#define MDCR_EL3_FLIPPED (							\
	MDCR_FEAT_FGT		|						\
	MDCR_FEAT_TRF		|						\
	MDCR_TDOSA_BIT		|						\
	MDCR_TDA_BIT		|						\
	MDCR_TPM_BIT		|						\
	MDCR_PLAT_FLIPPED)
#define MDCR_EL3_IGNORED (							\
	MDCR_EBWE_BIT		|						\
	MDCR_EnPMSN_BIT		|						\
	MDCR_SBRBE(2UL)		|						\
	MDCR_MTPME_BIT		|						\
	MDCR_NSTBE_BIT		|						\
	MDCR_NSTB(2UL)		|						\
	MDCR_SDD_BIT		|						\
	MDCR_SPD32(3UL)		|						\
	MDCR_NSPB(2UL)		|						\
	MDCR_NSPBE_BIT		|						\
	MDCR_PLAT_IGNORED)
CASSERT((MDCR_EL3_FEATS & MDCR_EL3_IGNORED) == 0, mdcr_feat_is_ignored);
CASSERT((MDCR_EL3_FLIPPED & MDCR_EL3_FEATS) == MDCR_EL3_FLIPPED, mdcr_flipped_not_a_feat);

#define MPAM3_EL3_FEATS		(MPAM3_EL3_TRAPLOWER_BIT)
#define MPAM3_EL3_FLIPPED	(MPAM3_EL3_TRAPLOWER_BIT)
#define MPAM3_EL3_IGNORED	(MPAM3_EL3_MPAMEN_BIT)
CASSERT((MPAM3_EL3_FEATS & MPAM3_EL3_IGNORED) == 0, mpam3_feat_is_ignored);
CASSERT((MPAM3_EL3_FLIPPED & MPAM3_EL3_FEATS) == MPAM3_EL3_FLIPPED, mpam3_flipped_not_a_feat);

/* The hex representations of these registers' S3 encoding */
#define SCR_EL3_OPCODE  			U(0x1E1100)
#define CPTR_EL3_OPCODE 			U(0x1E1140)
#define MDCR_EL3_OPCODE 			U(0x1E1320)
#define MPAM3_EL3_OPCODE 			U(0x1EA500)

#endif /* ARCH_FEATURE_AVAILABILITY */
#endif /* __ASSEMBLER__ */
#endif /* ARM_ARCH_SVC_H */
