fix compile error
Because the location of the macro is moved, other archs cannot find the corresponding macro Signed-off-by: wangmingrong1 <wangmingrong1@xiaomi.com>
This commit is contained in:
parent
e97e33eadc
commit
3ca0d1e478
3 changed files with 79 additions and 0 deletions
|
|
@ -222,4 +222,43 @@
|
|||
|
||||
#define CP15_MODIFY(v,m,a) CP15_SET(a, ((CP15_GET(a) & ~(m)) | ((uintptr_t)(v) & (m))))
|
||||
|
||||
/* MPIDR_EL1, Multiprocessor Affinity Register */
|
||||
|
||||
#define MPIDR_AFFLVL_MASK (0xff)
|
||||
#define MPIDR_ID_MASK (0x00ffffff)
|
||||
|
||||
#define MPIDR_AFF0_SHIFT (0)
|
||||
#define MPIDR_AFF1_SHIFT (8)
|
||||
#define MPIDR_AFF2_SHIFT (16)
|
||||
|
||||
/* mpidr register, the register is define:
|
||||
* - bit 0~7: Aff0
|
||||
* - bit 8~15: Aff1
|
||||
* - bit 16~23: Aff2
|
||||
* - bit 24: MT, multithreading
|
||||
* - bit 25~29: RES0
|
||||
* - bit 30: U, multiprocessor/Uniprocessor
|
||||
* - bit 31: RES1
|
||||
* Different ARM/ARM64 cores will use different Affn define, the mpidr
|
||||
* value is not CPU number, So we need to change CPU number to mpid
|
||||
* and vice versa
|
||||
*/
|
||||
|
||||
#define GET_MPIDR() CP15_GET(MPIDR)
|
||||
|
||||
#define MPIDR_AFFLVL(mpidr, aff_level) \
|
||||
(((mpidr) >> MPIDR_AFF ## aff_level ## _SHIFT) & MPIDR_AFFLVL_MASK)
|
||||
|
||||
#define MPID_TO_CORE(mpid, aff_level) \
|
||||
(((mpid) >> MPIDR_AFF ## aff_level ## _SHIFT) & MPIDR_AFFLVL_MASK)
|
||||
|
||||
#define CORE_TO_MPID(core, aff_level) \
|
||||
({ \
|
||||
uint64_t __mpidr = GET_MPIDR(); \
|
||||
__mpidr &= ~(MPIDR_AFFLVL_MASK << MPIDR_AFF ## aff_level ## _SHIFT); \
|
||||
__mpidr |= (core << MPIDR_AFF ## aff_level ## _SHIFT); \
|
||||
__mpidr &= MPIDR_ID_MASK; \
|
||||
__mpidr; \
|
||||
})
|
||||
|
||||
#endif /* __ARCH_ARM_SRC_ARMV7_R_CP15_H */
|
||||
|
|
|
|||
|
|
@ -239,4 +239,43 @@
|
|||
|
||||
#define CP15_MODIFY(v,m,a) CP15_SET(a, ((CP15_GET(a) & ~(m)) | ((uintptr_t)(v) & (m))))
|
||||
|
||||
/* MPIDR_EL1, Multiprocessor Affinity Register */
|
||||
|
||||
#define MPIDR_AFFLVL_MASK (0xff)
|
||||
#define MPIDR_ID_MASK (0x00ffffff)
|
||||
|
||||
#define MPIDR_AFF0_SHIFT (0)
|
||||
#define MPIDR_AFF1_SHIFT (8)
|
||||
#define MPIDR_AFF2_SHIFT (16)
|
||||
|
||||
/* mpidr register, the register is define:
|
||||
* - bit 0~7: Aff0
|
||||
* - bit 8~15: Aff1
|
||||
* - bit 16~23: Aff2
|
||||
* - bit 24: MT, multithreading
|
||||
* - bit 25~29: RES0
|
||||
* - bit 30: U, multiprocessor/Uniprocessor
|
||||
* - bit 31: RES1
|
||||
* Different ARM/ARM64 cores will use different Affn define, the mpidr
|
||||
* value is not CPU number, So we need to change CPU number to mpid
|
||||
* and vice versa
|
||||
*/
|
||||
|
||||
#define GET_MPIDR() CP15_GET(MPIDR)
|
||||
|
||||
#define MPIDR_AFFLVL(mpidr, aff_level) \
|
||||
(((mpidr) >> MPIDR_AFF ## aff_level ## _SHIFT) & MPIDR_AFFLVL_MASK)
|
||||
|
||||
#define MPID_TO_CORE(mpid, aff_level) \
|
||||
(((mpid) >> MPIDR_AFF ## aff_level ## _SHIFT) & MPIDR_AFFLVL_MASK)
|
||||
|
||||
#define CORE_TO_MPID(core, aff_level) \
|
||||
({ \
|
||||
uint64_t __mpidr = GET_MPIDR(); \
|
||||
__mpidr &= ~(MPIDR_AFFLVL_MASK << MPIDR_AFF ## aff_level ## _SHIFT); \
|
||||
__mpidr |= (core << MPIDR_AFF ## aff_level ## _SHIFT); \
|
||||
__mpidr &= MPIDR_ID_MASK; \
|
||||
__mpidr; \
|
||||
})
|
||||
|
||||
#endif /* __ARCH_ARM_SRC_ARMV8_R_CP15_H */
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
#include <assert.h>
|
||||
|
||||
#include <nuttx/arch.h>
|
||||
#include <arch/armv8-r/cp15.h>
|
||||
#include <arch/barriers.h>
|
||||
#include <arch/irq.h>
|
||||
#include <arch/chip/chip.h>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue