cpukit/aarch64: Add A53-specific registers

This adds registers specific to the Cortex-A53 processor that describe
L1 and L2 cache errors.
This commit is contained in:
Kinsey Moore
2024-06-21 05:57:21 +00:00
committed by Chris Johns
parent 78afce5bf2
commit 27ec46f11b
@@ -11060,6 +11060,134 @@ static inline uint64_t _AArch64_Read_cntvct_el0( void )
return value;
}
/* CPUMERRSR_EL1, CPU Memory Error Syndrome Register, Cortex-A53-specific */
#define AARCH64_CPUMERRSR_EL1_ADDR_SHIFT 0
#define AARCH64_CPUMERRSR_EL1_ADDR_MASK 0xfffLLU
#define AARCH64_CPUMERRSR_EL1_ADDR( _val ) \
( ( _val ) << AARCH64_CPUMERRSR_EL1_ADDR_SHIFT )
#define AARCH64_CPUMERRSR_EL1_ADDR_GET( _reg ) \
( ( ( _reg ) >> AARCH64_CPUMERRSR_EL1_ADDR_SHIFT ) \
& AARCH64_CPUMERRSR_EL1_ADDR_MASK )
#define AARCH64_CPUMERRSR_EL1_CPUIDWAY_SHIFT 18
#define AARCH64_CPUMERRSR_EL1_CPUIDWAY_MASK 0x7LLU
#define AARCH64_CPUMERRSR_EL1_CPUIDWAY( _val ) \
( ( _val ) << AARCH64_CPUMERRSR_EL1_CPUIDWAY_SHIFT )
#define AARCH64_CPUMERRSR_EL1_CPUIDWAY_GET( _reg ) \
( ( ( _reg ) >> AARCH64_CPUMERRSR_EL1_CPUIDWAY_SHIFT ) \
& AARCH64_CPUMERRSR_EL1_CPUIDWAY_MASK )
#define AARCH64_CPUMERRSR_EL1_RAMID_SHIFT 24
#define AARCH64_CPUMERRSR_EL1_RAMID_MASK 0x7fLLU
#define AARCH64_CPUMERRSR_EL1_RAMID( _val ) \
( ( _val ) << AARCH64_CPUMERRSR_EL1_RAMID_SHIFT )
#define AARCH64_CPUMERRSR_EL1_RAMID_GET( _reg ) \
( ( ( _reg ) >> AARCH64_CPUMERRSR_EL1_RAMID_SHIFT ) \
& AARCH64_CPUMERRSR_EL1_RAMID_MASK )
#define AARCH64_CPUMERRSR_EL1_VALID 0x80000000LLU
#define AARCH64_CPUMERRSR_EL1_REPEATERR_SHIFT 32
#define AARCH64_CPUMERRSR_EL1_REPEATERR_MASK 0xffLLU
#define AARCH64_CPUMERRSR_EL1_REPEATERR( _val ) \
( ( _val ) << AARCH64_CPUMERRSR_EL1_REPEATERR_SHIFT )
#define AARCH64_CPUMERRSR_EL1_REPEATERR_GET( _reg ) \
( ( ( _reg ) >> AARCH64_CPUMERRSR_EL1_REPEATERR_SHIFT ) \
& AARCH64_CPUMERRSR_EL1_REPEATERR_MASK )
#define AARCH64_CPUMERRSR_EL1_OTHERERR_SHIFT 40
#define AARCH64_CPUMERRSR_EL1_OTHERERR_MASK 0xffLLU
#define AARCH64_CPUMERRSR_EL1_OTHERERR( _val ) \
( ( _val ) << AARCH64_CPUMERRSR_EL1_OTHERERR_SHIFT )
#define AARCH64_CPUMERRSR_EL1_OTHERERR_GET( _reg ) \
( ( ( _reg ) >> AARCH64_CPUMERRSR_EL1_OTHERERR_SHIFT ) \
& AARCH64_CPUMERRSR_EL1_OTHERERR_MASK )
#define AARCH64_CPUMERRSR_EL1_FATAL 0x8000000000000000LLU
static inline uint64_t _AArch64_Read_cpumerrsr_el1( void )
{
uint64_t value;
__asm__ volatile (
"mrs %0, S3_1_c15_c2_2" : "=&r" ( value ) : : "memory"
);
return value;
}
static inline void _AArch64_Write_cpumerrsr_el1( uint64_t value )
{
__asm__ volatile (
"msr S3_1_c15_c2_2, %0" : : "r" ( value ) : "memory"
);
}
/* L2MERRSR_EL1, CPU Memory Error Syndrome Register, Cortex-A53-specific */
#define AARCH64_L2MERRSR_EL1_ADDR_SHIFT 3
#define AARCH64_L2MERRSR_EL1_ADDR_MASK 0x3fffLLU
#define AARCH64_L2MERRSR_EL1_ADDR( _val ) \
( ( _val ) << AARCH64_L2MERRSR_EL1_ADDR_SHIFT )
#define AARCH64_L2MERRSR_EL1_ADDR_GET( _reg ) \
( ( ( _reg ) >> AARCH64_L2MERRSR_EL1_ADDR_SHIFT ) \
& AARCH64_L2MERRSR_EL1_ADDR_MASK )
#define AARCH64_L2MERRSR_EL1_CPUIDWAY_SHIFT 18
#define AARCH64_L2MERRSR_EL1_CPUIDWAY_MASK 0xfLLU
#define AARCH64_L2MERRSR_EL1_CPUIDWAY( _val ) \
( ( _val ) << AARCH64_L2MERRSR_EL1_CPUIDWAY_SHIFT )
#define AARCH64_L2MERRSR_EL1_CPUIDWAY_GET( _reg ) \
( ( ( _reg ) >> AARCH64_L2MERRSR_EL1_CPUIDWAY_SHIFT ) \
& AARCH64_L2MERRSR_EL1_CPUIDWAY_MASK )
#define AARCH64_L2MERRSR_EL1_RAMID_SHIFT 24
#define AARCH64_L2MERRSR_EL1_RAMID_MASK 0x7fLLU
#define AARCH64_L2MERRSR_EL1_RAMID( _val ) \
( ( _val ) << AARCH64_L2MERRSR_EL1_RAMID_SHIFT )
#define AARCH64_L2MERRSR_EL1_RAMID_GET( _reg ) \
( ( ( _reg ) >> AARCH64_L2MERRSR_EL1_RAMID_SHIFT ) \
& AARCH64_L2MERRSR_EL1_RAMID_MASK )
#define AARCH64_L2MERRSR_EL1_VALID 0x80000000LLU
#define AARCH64_L2MERRSR_EL1_REPEATERR_SHIFT 32
#define AARCH64_L2MERRSR_EL1_REPEATERR_MASK 0xffLLU
#define AARCH64_L2MERRSR_EL1_REPEATERR( _val ) \
( ( _val ) << AARCH64_L2MERRSR_EL1_REPEATERR_SHIFT )
#define AARCH64_L2MERRSR_EL1_REPEATERR_GET( _reg ) \
( ( ( _reg ) >> AARCH64_L2MERRSR_EL1_REPEATERR_SHIFT ) \
& AARCH64_L2MERRSR_EL1_REPEATERR_MASK )
#define AARCH64_L2MERRSR_EL1_OTHERERR_SHIFT 40
#define AARCH64_L2MERRSR_EL1_OTHERERR_MASK 0xffLLU
#define AARCH64_L2MERRSR_EL1_OTHERERR( _val ) \
( ( _val ) << AARCH64_L2MERRSR_EL1_OTHERERR_SHIFT )
#define AARCH64_L2MERRSR_EL1_OTHERERR_GET( _reg ) \
( ( ( _reg ) >> AARCH64_L2MERRSR_EL1_OTHERERR_SHIFT ) \
& AARCH64_L2MERRSR_EL1_OTHERERR_MASK )
#define AARCH64_L2MERRSR_EL1_FATAL 0x8000000000000000LLU
static inline uint64_t _AArch64_Read_l2merrsr_el1( void )
{
uint64_t value;
__asm__ volatile (
"mrs %0, S3_1_c15_c2_3" : "=&r" ( value ) : : "memory"
);
return value;
}
static inline void _AArch64_Write_l2merrsr_el1( uint64_t value )
{
__asm__ volatile (
"msr S3_1_c15_c2_3, %0" : : "r" ( value ) : "memory"
);
}
#ifdef __cplusplus
}
#endif