kernel_samsung_a53x/drivers/soc/samsung/debug/system-regs.h
2024-06-15 16:02:09 -03:00

135 lines
2.4 KiB
C
Executable file

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2021 Samsung Electronics Co., Ltd.
* http://www.samsung.com
*/
#ifndef _SYSTEM_REGS_H
#define _SYSTEM_REGS_H
struct armv8_a_ERRSELR_EL1_field {
u64 SEL :16;
u64 RES0 :48;
};
struct armv8_a_ERRIDR_EL1_field {
u64 NUM :16;
u64 RES0 :48;
};
struct armv8_a_ERXSTATUS_EL1_field {
u64 SERR :8;
u64 IERR :8;
u64 RES0 :4;
u64 UET :2;
u64 PN :1;
u64 DE :1;
u64 CE :2;
u64 MV :1;
u64 OF :1;
u64 ER :1;
u64 UE :1;
u64 Valid :1;
u64 AV :1;
u64 RES1 :32;
};
struct armv8_a_ERXMISC0_EL1_field {
u64 REG;
};
struct armv8_a_ERXMISC1_EL1_field {
u64 REG;
};
struct armv8_a_ERXADDR_EL1_field {
u64 REG;
};
#define ARMv8_A_SYSTEM_REGISTER(name) \
typedef struct armv8_a_##name { \
union { \
struct armv8_a_##name##_field field; \
u64 reg; \
}; \
} name##_t;
ARMv8_A_SYSTEM_REGISTER(ERRSELR_EL1);
ARMv8_A_SYSTEM_REGISTER(ERRIDR_EL1);
ARMv8_A_SYSTEM_REGISTER(ERXSTATUS_EL1);
ARMv8_A_SYSTEM_REGISTER(ERXMISC0_EL1);
ARMv8_A_SYSTEM_REGISTER(ERXMISC1_EL1);
ARMv8_A_SYSTEM_REGISTER(ERXADDR_EL1);
static inline u64 read_ERRSELR_EL1(void)
{
u64 reg;
asm volatile ("mrs %0, S3_0_c5_c3_1\n" : "=r" (reg));
return reg;
}
static inline void write_ERRSELR_EL1(u64 val)
{
asm volatile ("msr S3_0_c5_c3_1, %0\n"
"isb\n" :: "r" ((__u64)val));
}
static inline u64 read_ERRIDR_EL1(void)
{
u64 reg;
asm volatile ("mrs %0, S3_0_c5_c3_0\n" : "=r" (reg));
return reg;
}
static inline u64 read_ERXSTATUS_EL1(void)
{
u64 reg;
asm volatile ("mrs %0, S3_0_c5_c4_2\n" : "=r" (reg));
return reg;
}
static inline void __attribute__((unused)) write_ERXSTATUS_EL1(u64 val)
{
asm volatile ("msr S3_0_c5_c4_2, %0\n"
"isb\n" :: "r" ((__u64)val));
}
static inline u64 read_ERXMISC0_EL1(void)
{
u64 reg;
asm volatile ("mrs %0, S3_0_c5_c5_0\n" : "=r" (reg));
return reg;
}
static inline void __attribute__((unused)) write_ERXMISC0_EL1(u64 val)
{
asm volatile ("msr S3_0_c5_c5_0, %0\n"
"isb\n" :: "r" ((__u64)val));
}
static inline u64 read_ERXMISC1_EL1(void)
{
u64 reg;
asm volatile ("mrs %0, S3_0_c5_c5_1\n" : "=r" (reg));
return reg;
}
static inline void __attribute__((unused)) write_ERXMISC1_EL1(u64 val)
{
asm volatile ("msr S3_0_c5_c5_1, %0\n"
"isb\n" :: "r" ((__u64)val));
}
static inline u64 read_ERXADDR_EL1(void)
{
u64 reg;
asm volatile ("mrs %0, S3_0_c5_c4_3\n" : "=r" (reg));
return reg;
}
#endif