diff --git a/arch/arm/src/armv7-a/cp15.h b/arch/arm/include/armv7-a/cp15.h similarity index 99% rename from arch/arm/src/armv7-a/cp15.h rename to arch/arm/include/armv7-a/cp15.h index f1258091922a4..9c15c2cad5c24 100644 --- a/arch/arm/src/armv7-a/cp15.h +++ b/arch/arm/include/armv7-a/cp15.h @@ -1,5 +1,5 @@ /**************************************************************************** - * arch/arm/src/armv7-a/cp15.h + * arch/arm/include/armv7-a/cp15.h * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with diff --git a/arch/arm/include/armv7-a/irq.h b/arch/arm/include/armv7-a/irq.h index c7876f5f4f3d9..6ca190b07155c 100644 --- a/arch/arm/include/armv7-a/irq.h +++ b/arch/arm/include/armv7-a/irq.h @@ -36,6 +36,8 @@ # include #endif +#include + /**************************************************************************** * Pre-processor Prototypes ****************************************************************************/ @@ -457,11 +459,7 @@ static inline_function int up_cpu_index(void) /* Read the Multiprocessor Affinity Register (MPIDR) */ - __asm__ __volatile__ - ( - "mrc " "p15, " "0" ", %0, " "c0" ", " "c0" ", " "5" "\n" - : "=r"(mpidr) - ); + mpidr = CP15_GET(MPIDR); /* And return the CPU ID field */ @@ -500,23 +498,13 @@ static inline_function uint32_t up_getsp(void) noinstrument_function static inline_function uint32_t *up_current_regs(void) { - uint32_t *regs; - __asm__ __volatile__ - ( - "mrc " "p15, " "0" ", %0, " "c13" ", " "c0" ", " "4" "\n" - : "=r"(regs) - ); - return regs; + return (uint32_t *)CP15_GET(TPIDRPRW); } noinstrument_function static inline_function void up_set_current_regs(uint32_t *regs) { - __asm__ __volatile__ - ( - "mcr " "p15, " "0" ", %0, " "c13" ", " "c0" ", " "4" "\n" - :: "r"(regs) - ); + CP15_SET(TPIDRPRW, regs); } noinstrument_function diff --git a/arch/arm/src/armv7-r/cp15.h b/arch/arm/include/armv7-r/cp15.h similarity index 99% rename from arch/arm/src/armv7-r/cp15.h rename to arch/arm/include/armv7-r/cp15.h index f91c65450448e..4be2acf3f6cab 100644 --- a/arch/arm/src/armv7-r/cp15.h +++ b/arch/arm/include/armv7-r/cp15.h @@ -1,5 +1,5 @@ /**************************************************************************** - * arch/arm/src/armv7-r/cp15.h + * arch/arm/include/armv7-r/cp15.h * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with diff --git a/arch/arm/include/armv7-r/irq.h b/arch/arm/include/armv7-r/irq.h index 1b6d6e1b46131..6a00fbdbc321b 100644 --- a/arch/arm/include/armv7-r/irq.h +++ b/arch/arm/include/armv7-r/irq.h @@ -36,6 +36,8 @@ # include #endif +#include + /**************************************************************************** * Pre-processor Prototypes ****************************************************************************/ @@ -357,7 +359,7 @@ static inline irqstate_t irqstate(void) /* Disable IRQs and return the previous IRQ state */ -static inline irqstate_t up_irq_save(void) +noinstrument_function static inline irqstate_t up_irq_save(void) { unsigned int cpsr; @@ -417,7 +419,7 @@ static inline irqstate_t up_irq_disable(void) /* Restore saved IRQ & FIQ state */ -static inline void up_irq_restore(irqstate_t flags) +noinstrument_function static inline void up_irq_restore(irqstate_t flags) { __asm__ __volatile__ ( @@ -452,11 +454,7 @@ static inline_function int up_cpu_index(void) /* Read the Multiprocessor Affinity Register (MPIDR) */ - __asm__ __volatile__ - ( - "mrc " "p15, " "0" ", %0, " "c0" ", " "c0" ", " "5" "\n" - : "=r"(mpidr) - ); + mpidr = CP15_GET(MPIDR); /* And return the CPU ID field */ @@ -479,26 +477,29 @@ static inline_function uint32_t up_getsp(void) return sp; } +/**************************************************************************** + * Name: + * up_current_regs/up_set_current_regs + * + * Description: + * We use the following code to manipulate the TPIDRPRW register, + * which exists uniquely for each CPU and is primarily designed to store + * current thread information. Currently, we leverage it to store interrupt + * information, with plans to further optimize its use for storing both + * thread and interrupt information in the future. + * + ****************************************************************************/ + noinstrument_function static inline_function uint32_t *up_current_regs(void) { - uint32_t *regs; - __asm__ __volatile__ - ( - "mrc " "p15, " "0" ", %0, " "c13" ", " "c0" ", " "4" "\n" - : "=r"(regs) - ); - return regs; + return (uint32_t *)CP15_GET(TPIDRPRW); } noinstrument_function static inline_function void up_set_current_regs(uint32_t *regs) { - __asm__ __volatile__ - ( - "mcr " "p15, " "0" ", %0, " "c13" ", " "c0" ", " "4" "\n" - :: "r"(regs) - ); + CP15_SET(TPIDRPRW, regs); } noinstrument_function diff --git a/arch/arm/src/armv8-r/cp15.h b/arch/arm/include/armv8-r/cp15.h similarity index 99% rename from arch/arm/src/armv8-r/cp15.h rename to arch/arm/include/armv8-r/cp15.h index 40c4717865717..a0c8a6c16eea7 100644 --- a/arch/arm/src/armv8-r/cp15.h +++ b/arch/arm/include/armv8-r/cp15.h @@ -1,5 +1,5 @@ /**************************************************************************** - * arch/arm/src/armv8-r/cp15.h + * arch/arm/include/armv8-r/cp15.h * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with diff --git a/arch/arm/include/armv8-r/irq.h b/arch/arm/include/armv8-r/irq.h index 53fb064d84db3..360b4a74585f8 100644 --- a/arch/arm/include/armv8-r/irq.h +++ b/arch/arm/include/armv8-r/irq.h @@ -36,6 +36,8 @@ # include #endif +#include + /**************************************************************************** * Pre-processor Prototypes ****************************************************************************/ @@ -357,7 +359,7 @@ static inline irqstate_t irqstate(void) /* Disable IRQs and return the previous IRQ state */ -static inline irqstate_t up_irq_save(void) +noinstrument_function static inline irqstate_t up_irq_save(void) { unsigned int cpsr; @@ -417,7 +419,7 @@ static inline irqstate_t up_irq_disable(void) /* Restore saved IRQ & FIQ state */ -static inline void up_irq_restore(irqstate_t flags) +noinstrument_function static inline void up_irq_restore(irqstate_t flags) { __asm__ __volatile__ ( @@ -452,11 +454,7 @@ static inline_function int up_cpu_index(void) /* Read the Multiprocessor Affinity Register (MPIDR) */ - __asm__ __volatile__ - ( - "mrc " "p15, " "0" ", %0, " "c0" ", " "c0" ", " "5" "\n" - : "=r"(mpidr) - ); + mpidr = CP15_GET(MPIDR); /* And return the CPU ID field */ @@ -479,26 +477,29 @@ static inline_function uint32_t up_getsp(void) return sp; } +/**************************************************************************** + * Name: + * up_current_regs/up_set_current_regs + * + * Description: + * We use the following code to manipulate the TPIDRPRW register, + * which exists uniquely for each CPU and is primarily designed to store + * current thread information. Currently, we leverage it to store interrupt + * information, with plans to further optimize its use for storing both + * thread and interrupt information in the future. + * + ****************************************************************************/ + noinstrument_function static inline_function uint32_t *up_current_regs(void) { - uint32_t *regs; - __asm__ __volatile__ - ( - "mrc " "p15, " "0" ", %0, " "c13" ", " "c0" ", " "4" "\n" - : "=r"(regs) - ); - return regs; + return (uint32_t *)CP15_GET(TPIDRPRW); } noinstrument_function static inline_function void up_set_current_regs(uint32_t *regs) { - __asm__ __volatile__ - ( - "mcr " "p15, " "0" ", %0, " "c13" ", " "c0" ", " "4" "\n" - :: "r"(regs) - ); + CP15_SET(TPIDRPRW, regs); } noinstrument_function diff --git a/arch/arm/src/armv7-a/arm_cpuhead.S b/arch/arm/src/armv7-a/arm_cpuhead.S index 68369dae6b2b4..b1b1493f962f0 100644 --- a/arch/arm/src/armv7-a/arm_cpuhead.S +++ b/arch/arm/src/armv7-a/arm_cpuhead.S @@ -27,7 +27,6 @@ #include #include "arm.h" -#include "cp15.h" #include "sctlr.h" #include "mmu.h" #include "smp.h" diff --git a/arch/arm/src/armv7-a/arm_cpuinfo.c b/arch/arm/src/armv7-a/arm_cpuinfo.c index 3fa7ed1ddbb18..ea5c19c1bc7dd 100644 --- a/arch/arm/src/armv7-a/arm_cpuinfo.c +++ b/arch/arm/src/armv7-a/arm_cpuinfo.c @@ -26,9 +26,10 @@ #include #include +#include + #include "arm_internal.h" #include "hwcap.h" -#include "cp15.h" #if defined(CONFIG_FS_PROCFS) && !defined(CONFIG_FS_PROCFS_EXCLUDE_CPUINFO) diff --git a/arch/arm/src/armv7-a/arm_fpuconfig.S b/arch/arm/src/armv7-a/arm_fpuconfig.S index a45a38f34f0aa..52c210b4226d1 100644 --- a/arch/arm/src/armv7-a/arm_fpuconfig.S +++ b/arch/arm/src/armv7-a/arm_fpuconfig.S @@ -23,7 +23,8 @@ ****************************************************************************/ #include -#include "cp15.h" + +#include #ifdef CONFIG_ARCH_FPU diff --git a/arch/arm/src/armv7-a/arm_head.S b/arch/arm/src/armv7-a/arm_head.S index 804d096a2ce81..4d34efe71fcaf 100644 --- a/arch/arm/src/armv7-a/arm_head.S +++ b/arch/arm/src/armv7-a/arm_head.S @@ -24,8 +24,9 @@ #include +#include + #include "arm.h" -#include "cp15.h" #include "sctlr.h" #include "mmu.h" #include "chip.h" diff --git a/arch/arm/src/armv7-a/arm_pghead.S b/arch/arm/src/armv7-a/arm_pghead.S index b2d45c59e588e..c8b7e9002836b 100644 --- a/arch/arm/src/armv7-a/arm_pghead.S +++ b/arch/arm/src/armv7-a/arm_pghead.S @@ -25,8 +25,9 @@ #include #include +#include + #include "arm.h" -#include "cp15.h" #include "sctlr.h" #include "mmu.h" #include "chip.h" diff --git a/arch/arm/src/armv7-a/arm_scu.c b/arch/arm/src/armv7-a/arm_scu.c index 6c5b0198a43fc..4c49e99b1a284 100644 --- a/arch/arm/src/armv7-a/arm_scu.c +++ b/arch/arm/src/armv7-a/arm_scu.c @@ -26,12 +26,13 @@ #include +#include + #include "arm_internal.h" #include "cp15_cacheops.h" #include "barriers.h" #include "sctlr.h" #include "scu.h" -#include "cp15.h" /**************************************************************************** * Public Functions diff --git a/arch/arm/src/armv7-a/arm_timer.c b/arch/arm/src/armv7-a/arm_timer.c index 798956e823270..c15c2119e935e 100644 --- a/arch/arm/src/armv7-a/arm_timer.c +++ b/arch/arm/src/armv7-a/arm_timer.c @@ -27,10 +27,11 @@ #include #include +#include + #include "arm_timer.h" #include "barriers.h" #include "gic.h" -#include "cp15.h" /**************************************************************************** * Pre-processor Definitions diff --git a/arch/arm/src/armv7-a/arm_vectors.S b/arch/arm/src/armv7-a/arm_vectors.S index 509c44dfa1c3b..ec70f827dff33 100644 --- a/arch/arm/src/armv7-a/arm_vectors.S +++ b/arch/arm/src/armv7-a/arm_vectors.S @@ -26,7 +26,6 @@ #include #include "arm.h" -#include "cp15.h" #include "chip.h" .file "arm_vectors.S" diff --git a/arch/arm/src/armv7-a/sctlr.h b/arch/arm/src/armv7-a/sctlr.h index 917cd7dcb0899..a5837ac5405de 100644 --- a/arch/arm/src/armv7-a/sctlr.h +++ b/arch/arm/src/armv7-a/sctlr.h @@ -34,8 +34,9 @@ * Included Files ****************************************************************************/ +#include + #include "barriers.h" -#include "cp15.h" /**************************************************************************** * Pre-processor Definitions diff --git a/arch/arm/src/armv7-r/arm_cpuhead.S b/arch/arm/src/armv7-r/arm_cpuhead.S index 473e743c36e06..7d6dc5a180d2a 100644 --- a/arch/arm/src/armv7-r/arm_cpuhead.S +++ b/arch/arm/src/armv7-r/arm_cpuhead.S @@ -27,7 +27,6 @@ #include #include "arm.h" -#include "cp15.h" #include "sctlr.h" #include "smp.h" #include "chip.h" diff --git a/arch/arm/src/armv7-r/arm_cpuinfo.c b/arch/arm/src/armv7-r/arm_cpuinfo.c index f3c497d03b69f..e1514ae324762 100644 --- a/arch/arm/src/armv7-r/arm_cpuinfo.c +++ b/arch/arm/src/armv7-r/arm_cpuinfo.c @@ -26,9 +26,10 @@ #include #include +#include + #include "arm_internal.h" #include "hwcap.h" -#include "cp15.h" #if defined(CONFIG_FS_PROCFS) && !defined(CONFIG_FS_PROCFS_EXCLUDE_CPUINFO) diff --git a/arch/arm/src/armv7-r/arm_fpuconfig.S b/arch/arm/src/armv7-r/arm_fpuconfig.S index f6338c6cd5aa2..5faf4631e9e28 100644 --- a/arch/arm/src/armv7-r/arm_fpuconfig.S +++ b/arch/arm/src/armv7-r/arm_fpuconfig.S @@ -23,7 +23,8 @@ ****************************************************************************/ #include -#include "cp15.h" + +#include #ifdef CONFIG_ARCH_FPU diff --git a/arch/arm/src/armv7-r/arm_head.S b/arch/arm/src/armv7-r/arm_head.S index 180902d809092..90a62223a8970 100644 --- a/arch/arm/src/armv7-r/arm_head.S +++ b/arch/arm/src/armv7-r/arm_head.S @@ -24,8 +24,9 @@ #include +#include + #include "arm.h" -#include "cp15.h" #include "sctlr.h" #include "arm_internal.h" diff --git a/arch/arm/src/armv7-r/arm_scu.c b/arch/arm/src/armv7-r/arm_scu.c index 9e2d04f7dc20d..cb0dcd7ef38c9 100644 --- a/arch/arm/src/armv7-r/arm_scu.c +++ b/arch/arm/src/armv7-r/arm_scu.c @@ -26,12 +26,13 @@ #include +#include + #include "arm_internal.h" #include "cp15_cacheops.h" #include "barriers.h" #include "sctlr.h" #include "scu.h" -#include "cp15.h" /**************************************************************************** * Public Functions diff --git a/arch/arm/src/armv7-r/arm_timer.c b/arch/arm/src/armv7-r/arm_timer.c index af7a5a7496cfa..06d89079d176c 100644 --- a/arch/arm/src/armv7-r/arm_timer.c +++ b/arch/arm/src/armv7-r/arm_timer.c @@ -30,7 +30,6 @@ #include "arm_timer.h" #include "barriers.h" #include "gic.h" -#include "cp15.h" /**************************************************************************** * Pre-processor Definitions diff --git a/arch/arm/src/armv7-r/arm_vectors.S b/arch/arm/src/armv7-r/arm_vectors.S index b783430d0f594..312a48f0fd66a 100644 --- a/arch/arm/src/armv7-r/arm_vectors.S +++ b/arch/arm/src/armv7-r/arm_vectors.S @@ -26,7 +26,6 @@ #include #include "arm.h" -#include "cp15.h" .file "arm_vectors.S" diff --git a/arch/arm/src/armv7-r/mpu.h b/arch/arm/src/armv7-r/mpu.h index acbbbdf7495e8..aecabc49bdc42 100644 --- a/arch/arm/src/armv7-r/mpu.h +++ b/arch/arm/src/armv7-r/mpu.h @@ -34,7 +34,6 @@ # include # include "sctlr.h" -# include "cp15.h" #endif /**************************************************************************** diff --git a/arch/arm/src/armv7-r/sctlr.h b/arch/arm/src/armv7-r/sctlr.h index 610024daa3321..3eda5f9fbf58c 100644 --- a/arch/arm/src/armv7-r/sctlr.h +++ b/arch/arm/src/armv7-r/sctlr.h @@ -32,8 +32,9 @@ * Included Files ****************************************************************************/ +#include + #include "barriers.h" -#include "cp15.h" /**************************************************************************** * Pre-processor Definitions diff --git a/arch/arm/src/armv8-r/arm_arch_timer.c b/arch/arm/src/armv8-r/arm_arch_timer.c index cb64fca34506c..1c558fec18df9 100644 --- a/arch/arm/src/armv8-r/arm_arch_timer.c +++ b/arch/arm/src/armv8-r/arm_arch_timer.c @@ -34,7 +34,6 @@ #include #include "barriers.h" -#include "cp15.h" #include "arm_gic.h" #include "arm_arch_timer.h" @@ -418,4 +417,4 @@ void arm_arch_timer_secondary_init() arm_arch_timer_enable(true); #endif } -#endif \ No newline at end of file +#endif diff --git a/arch/arm/src/armv8-r/arm_cpuinfo.c b/arch/arm/src/armv8-r/arm_cpuinfo.c index 0814a428fe9ac..38767b47f7490 100644 --- a/arch/arm/src/armv8-r/arm_cpuinfo.c +++ b/arch/arm/src/armv8-r/arm_cpuinfo.c @@ -26,9 +26,10 @@ #include #include +#include + #include "arm_internal.h" #include "hwcap.h" -#include "cp15.h" #if defined(CONFIG_FS_PROCFS) && !defined(CONFIG_FS_PROCFS_EXCLUDE_CPUINFO) diff --git a/arch/arm/src/armv8-r/arm_fpuconfig.S b/arch/arm/src/armv8-r/arm_fpuconfig.S index 8faae4c9b7f22..f13fc7ea4d519 100644 --- a/arch/arm/src/armv8-r/arm_fpuconfig.S +++ b/arch/arm/src/armv8-r/arm_fpuconfig.S @@ -23,7 +23,8 @@ ****************************************************************************/ #include -#include "cp15.h" + +#include #ifdef CONFIG_ARCH_FPU diff --git a/arch/arm/src/armv8-r/arm_gicv3.c b/arch/arm/src/armv8-r/arm_gicv3.c index 1b83f1bc79222..7ff1d3558242d 100644 --- a/arch/arm/src/armv8-r/arm_gicv3.c +++ b/arch/arm/src/armv8-r/arm_gicv3.c @@ -33,7 +33,6 @@ #include "arm_internal.h" #include "barriers.h" -#include "cp15.h" #include "arm_gic.h" /*************************************************************************** diff --git a/arch/arm/src/armv8-r/arm_head.S b/arch/arm/src/armv8-r/arm_head.S index 02dbfc14a060f..a89f3f0b41ff1 100644 --- a/arch/arm/src/armv8-r/arm_head.S +++ b/arch/arm/src/armv8-r/arm_head.S @@ -24,8 +24,9 @@ #include +#include + #include "arm.h" -#include "cp15.h" #include "cp15_cacheops.h" #include "sctlr.h" #include "arm_internal.h" diff --git a/arch/arm/src/armv8-r/arm_vectors.S b/arch/arm/src/armv8-r/arm_vectors.S index 5ac537c853189..4c2d051da3fe3 100644 --- a/arch/arm/src/armv8-r/arm_vectors.S +++ b/arch/arm/src/armv8-r/arm_vectors.S @@ -26,7 +26,6 @@ #include #include "arm.h" -#include "cp15.h" .file "arm_vectors.S" diff --git a/arch/arm/src/armv8-r/sctlr.h b/arch/arm/src/armv8-r/sctlr.h index 76309d1e82e16..971508a3dca87 100644 --- a/arch/arm/src/armv8-r/sctlr.h +++ b/arch/arm/src/armv8-r/sctlr.h @@ -32,8 +32,9 @@ * Included Files ****************************************************************************/ +#include + #include "barriers.h" -#include "cp15.h" /**************************************************************************** * Pre-processor Definitions diff --git a/arch/arm/src/fvp-v8r-aarch32/fvp_boot.c b/arch/arm/src/fvp-v8r-aarch32/fvp_boot.c index f48f8d94400f2..02530513dc335 100644 --- a/arch/arm/src/fvp-v8r-aarch32/fvp_boot.c +++ b/arch/arm/src/fvp-v8r-aarch32/fvp_boot.c @@ -28,12 +28,12 @@ #include #include +#include #include #include "arm_internal.h" #include "barriers.h" -#include "cp15.h" #include "arm_gic.h" #include "chip.h" #include "fvp_boot.h"