cortex_m: enhance core and arch detection
Rework core detection by adding cortex_m_partno enum to detect all CPUs using the same method. Instead of checking the core PARTNO then assign the arch, use the stored information within cortex_m parts[] with the flags inside which can help simplifying a bit the cortex_m_examine code. This change fixes: - the Cortex-M1 detection as ARMv6-M Core (was managed as ARMv7-M) - the displayed CPU name for Cortex-M0+ (was displayed Cortex-M0) Change-Id: I40b6e03f7cf3664c85e297adfc25323196dfe90b Signed-off-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com> Reviewed-on: http://openocd.zylin.com/6233 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
This commit is contained in:
committed by
Antonio Borneo
parent
f69adafb3d
commit
1185760729
@@ -42,12 +42,33 @@
|
||||
|
||||
#define CPUID 0xE000ED00
|
||||
|
||||
#define ARM_CPUID_PARTNO_MASK 0xFFF0
|
||||
#define ARM_CPUID_PARTNO_POS 4
|
||||
#define ARM_CPUID_PARTNO_MASK (0xFFF << ARM_CPUID_PARTNO_POS)
|
||||
|
||||
#define CORTEX_M23_PARTNO 0xD200
|
||||
#define CORTEX_M33_PARTNO 0xD210
|
||||
#define CORTEX_M35P_PARTNO 0xD310
|
||||
#define CORTEX_M55_PARTNO 0xD220
|
||||
enum cortex_m_partno {
|
||||
CORTEX_M0_PARTNO = 0xC20,
|
||||
CORTEX_M1_PARTNO = 0xC21,
|
||||
CORTEX_M3_PARTNO = 0xC23,
|
||||
CORTEX_M4_PARTNO = 0xC24,
|
||||
CORTEX_M7_PARTNO = 0xC27,
|
||||
CORTEX_M0P_PARTNO = 0xC60,
|
||||
CORTEX_M23_PARTNO = 0xD20,
|
||||
CORTEX_M33_PARTNO = 0xD21,
|
||||
CORTEX_M35P_PARTNO = 0xD31,
|
||||
CORTEX_M55_PARTNO = 0xD22,
|
||||
};
|
||||
|
||||
/* Relevant Cortex-M flags, used in struct cortex_m_part_info.flags */
|
||||
#define CORTEX_M_F_HAS_FPV4 BIT(0)
|
||||
#define CORTEX_M_F_HAS_FPV5 BIT(1)
|
||||
#define CORTEX_M_F_TAR_AUTOINCR_BLOCK_4K BIT(2)
|
||||
|
||||
struct cortex_m_part_info {
|
||||
enum cortex_m_partno partno;
|
||||
const char *name;
|
||||
enum arm_arch arch;
|
||||
uint32_t flags;
|
||||
};
|
||||
|
||||
/* Debug Control Block */
|
||||
#define DCB_DHCSR 0xE000EDF0
|
||||
@@ -211,9 +232,9 @@ struct cortex_m_common {
|
||||
|
||||
enum cortex_m_soft_reset_config soft_reset_config;
|
||||
bool vectreset_supported;
|
||||
|
||||
enum cortex_m_isrmasking_mode isrmasking_mode;
|
||||
|
||||
const struct cortex_m_part_info *core_info;
|
||||
struct armv7m_common armv7m;
|
||||
|
||||
int apsel;
|
||||
|
||||
Reference in New Issue
Block a user