mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-22 12:34:19 +00:00
gic v3: Turn macros into static inline functions
Change-Id: Ib587f12f36810fc7d4f4b8f575195554299b8ed4 Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
This commit is contained in:
parent
2a7c9e15c2
commit
b9f68dfbfe
2 changed files with 43 additions and 17 deletions
|
@ -27,20 +27,28 @@
|
||||||
* GICD_IROUTER. Bits[31:24] in the MPIDR are cleared as they are not relevant
|
* GICD_IROUTER. Bits[31:24] in the MPIDR are cleared as they are not relevant
|
||||||
* to GICv3.
|
* to GICv3.
|
||||||
*/
|
*/
|
||||||
#define gicd_irouter_val_from_mpidr(_mpidr, _irm) \
|
static inline u_register_t gicd_irouter_val_from_mpidr(u_register_t mpidr,
|
||||||
((_mpidr & ~(0xff << 24)) | \
|
unsigned int irm)
|
||||||
(_irm & IROUTER_IRM_MASK) << IROUTER_IRM_SHIFT)
|
{
|
||||||
|
return (mpidr & ~(U(0xff) << 24)) |
|
||||||
|
((irm & IROUTER_IRM_MASK) << IROUTER_IRM_SHIFT);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Macro to convert a GICR_TYPER affinity value into a MPIDR value. Bits[31:24]
|
* Macro to convert a GICR_TYPER affinity value into a MPIDR value. Bits[31:24]
|
||||||
* are zeroes.
|
* are zeroes.
|
||||||
*/
|
*/
|
||||||
#ifdef AARCH32
|
#ifdef AARCH32
|
||||||
#define mpidr_from_gicr_typer(_typer_val) (((_typer_val) >> 32) & 0xffffff)
|
static inline u_register_t mpidr_from_gicr_typer(uint64_t typer_val)
|
||||||
|
{
|
||||||
|
return (((typer_val) >> 32) & U(0xffffff));
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
#define mpidr_from_gicr_typer(_typer_val) \
|
static inline u_register_t mpidr_from_gicr_typer(uint64_t typer_val)
|
||||||
(((((_typer_val) >> 56) & MPIDR_AFFLVL_MASK) << MPIDR_AFF3_SHIFT) | \
|
{
|
||||||
(((_typer_val) >> 32) & 0xffffff))
|
return (((typer_val >> 56) & MPIDR_AFFLVL_MASK) << MPIDR_AFF3_SHIFT) |
|
||||||
|
((typer_val >> 32) & U(0xffffff));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
|
|
@ -209,30 +209,48 @@
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
#include <arch_helpers.h>
|
||||||
#include <gic_common.h>
|
#include <gic_common.h>
|
||||||
#include <interrupt_props.h>
|
#include <interrupt_props.h>
|
||||||
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <utils_def.h>
|
#include <utils_def.h>
|
||||||
|
|
||||||
#define gicv3_is_intr_id_special_identifier(id) \
|
static inline bool gicv3_is_intr_id_special_identifier(unsigned int id)
|
||||||
(((id) >= PENDING_G1S_INTID) && ((id) <= GIC_SPURIOUS_INTERRUPT))
|
{
|
||||||
|
return (id >= PENDING_G1S_INTID) && (id <= GIC_SPURIOUS_INTERRUPT);
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Helper GICv3 macros for SEL1
|
* Helper GICv3 macros for SEL1
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#define gicv3_acknowledge_interrupt_sel1() read_icc_iar1_el1() &\
|
static inline uint32_t gicv3_acknowledge_interrupt_sel1(void)
|
||||||
IAR1_EL1_INTID_MASK
|
{
|
||||||
#define gicv3_get_pending_interrupt_id_sel1() read_icc_hppir1_el1() &\
|
return (uint32_t)read_icc_iar1_el1() & IAR1_EL1_INTID_MASK;
|
||||||
HPPIR1_EL1_INTID_MASK
|
}
|
||||||
#define gicv3_end_of_interrupt_sel1(id) write_icc_eoir1_el1(id)
|
|
||||||
|
|
||||||
|
static inline uint32_t gicv3_get_pending_interrupt_id_sel1(void)
|
||||||
|
{
|
||||||
|
return (uint32_t)read_icc_hppir1_el1() & HPPIR1_EL1_INTID_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void gicv3_end_of_interrupt_sel1(unsigned int id)
|
||||||
|
{
|
||||||
|
write_icc_eoir1_el1(id);
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Helper GICv3 macros for EL3
|
* Helper GICv3 macros for EL3
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#define gicv3_acknowledge_interrupt() read_icc_iar0_el1() &\
|
static inline uint32_t gicv3_acknowledge_interrupt(void)
|
||||||
IAR0_EL1_INTID_MASK
|
{
|
||||||
#define gicv3_end_of_interrupt(id) write_icc_eoir0_el1(id)
|
return (uint32_t)read_icc_iar0_el1() & IAR0_EL1_INTID_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void gicv3_end_of_interrupt(unsigned int id)
|
||||||
|
{
|
||||||
|
return write_icc_eoir0_el1(id);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This macro returns the total number of GICD registers corresponding to
|
* This macro returns the total number of GICD registers corresponding to
|
||||||
|
|
Loading…
Add table
Reference in a new issue