162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef __ASM_POWERPC_CPUTABLE_H 362306a36Sopenharmony_ci#define __ASM_POWERPC_CPUTABLE_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <linux/types.h> 762306a36Sopenharmony_ci#include <uapi/asm/cputable.h> 862306a36Sopenharmony_ci#include <asm/asm-const.h> 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef __ASSEMBLY__ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci/* This structure can grow, it's real size is used by head.S code 1362306a36Sopenharmony_ci * via the mkdefs mechanism. 1462306a36Sopenharmony_ci */ 1562306a36Sopenharmony_cistruct cpu_spec; 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_citypedef void (*cpu_setup_t)(unsigned long offset, struct cpu_spec* spec); 1862306a36Sopenharmony_citypedef void (*cpu_restore_t)(void); 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cienum powerpc_pmc_type { 2162306a36Sopenharmony_ci PPC_PMC_DEFAULT = 0, 2262306a36Sopenharmony_ci PPC_PMC_IBM = 1, 2362306a36Sopenharmony_ci PPC_PMC_PA6T = 2, 2462306a36Sopenharmony_ci PPC_PMC_G4 = 3, 2562306a36Sopenharmony_ci}; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cistruct pt_regs; 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ciextern int machine_check_generic(struct pt_regs *regs); 3062306a36Sopenharmony_ciextern int machine_check_4xx(struct pt_regs *regs); 3162306a36Sopenharmony_ciextern int machine_check_440A(struct pt_regs *regs); 3262306a36Sopenharmony_ciextern int machine_check_e500mc(struct pt_regs *regs); 3362306a36Sopenharmony_ciextern int machine_check_e500(struct pt_regs *regs); 3462306a36Sopenharmony_ciextern int machine_check_47x(struct pt_regs *regs); 3562306a36Sopenharmony_ciint machine_check_8xx(struct pt_regs *regs); 3662306a36Sopenharmony_ciint machine_check_83xx(struct pt_regs *regs); 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ciextern void cpu_down_flush_e500v2(void); 3962306a36Sopenharmony_ciextern void cpu_down_flush_e500mc(void); 4062306a36Sopenharmony_ciextern void cpu_down_flush_e5500(void); 4162306a36Sopenharmony_ciextern void cpu_down_flush_e6500(void); 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci/* NOTE WELL: Update identify_cpu() if fields are added or removed! */ 4462306a36Sopenharmony_cistruct cpu_spec { 4562306a36Sopenharmony_ci /* CPU is matched via (PVR & pvr_mask) == pvr_value */ 4662306a36Sopenharmony_ci unsigned int pvr_mask; 4762306a36Sopenharmony_ci unsigned int pvr_value; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci char *cpu_name; 5062306a36Sopenharmony_ci unsigned long cpu_features; /* Kernel features */ 5162306a36Sopenharmony_ci unsigned int cpu_user_features; /* Userland features */ 5262306a36Sopenharmony_ci unsigned int cpu_user_features2; /* Userland features v2 */ 5362306a36Sopenharmony_ci unsigned int mmu_features; /* MMU features */ 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci /* cache line sizes */ 5662306a36Sopenharmony_ci unsigned int icache_bsize; 5762306a36Sopenharmony_ci unsigned int dcache_bsize; 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci /* flush caches inside the current cpu */ 6062306a36Sopenharmony_ci void (*cpu_down_flush)(void); 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci /* number of performance monitor counters */ 6362306a36Sopenharmony_ci unsigned int num_pmcs; 6462306a36Sopenharmony_ci enum powerpc_pmc_type pmc_type; 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci /* this is called to initialize various CPU bits like L1 cache, 6762306a36Sopenharmony_ci * BHT, SPD, etc... from head.S before branching to identify_machine 6862306a36Sopenharmony_ci */ 6962306a36Sopenharmony_ci cpu_setup_t cpu_setup; 7062306a36Sopenharmony_ci /* Used to restore cpu setup on secondary processors and at resume */ 7162306a36Sopenharmony_ci cpu_restore_t cpu_restore; 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci /* Name of processor class, for the ELF AT_PLATFORM entry */ 7462306a36Sopenharmony_ci char *platform; 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci /* Processor specific machine check handling. Return negative 7762306a36Sopenharmony_ci * if the error is fatal, 1 if it was fully recovered and 0 to 7862306a36Sopenharmony_ci * pass up (not CPU originated) */ 7962306a36Sopenharmony_ci int (*machine_check)(struct pt_regs *regs); 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci /* 8262306a36Sopenharmony_ci * Processor specific early machine check handler which is 8362306a36Sopenharmony_ci * called in real mode to handle SLB and TLB errors. 8462306a36Sopenharmony_ci */ 8562306a36Sopenharmony_ci long (*machine_check_early)(struct pt_regs *regs); 8662306a36Sopenharmony_ci}; 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ciextern struct cpu_spec *cur_cpu_spec; 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ciextern unsigned int __start___ftr_fixup, __stop___ftr_fixup; 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ciextern void set_cur_cpu_spec(struct cpu_spec *s); 9362306a36Sopenharmony_ciextern struct cpu_spec *identify_cpu(unsigned long offset, unsigned int pvr); 9462306a36Sopenharmony_ciextern void identify_cpu_name(unsigned int pvr); 9562306a36Sopenharmony_ciextern void do_feature_fixups(unsigned long value, void *fixup_start, 9662306a36Sopenharmony_ci void *fixup_end); 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ciextern const char *powerpc_base_platform; 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci#ifdef CONFIG_JUMP_LABEL_FEATURE_CHECKS 10162306a36Sopenharmony_ciextern void cpu_feature_keys_init(void); 10262306a36Sopenharmony_ci#else 10362306a36Sopenharmony_cistatic inline void cpu_feature_keys_init(void) { } 10462306a36Sopenharmony_ci#endif 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci#endif /* __ASSEMBLY__ */ 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci/* CPU kernel features */ 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci/* Definitions for features that we have on both 32-bit and 64-bit chips */ 11162306a36Sopenharmony_ci#define CPU_FTR_COHERENT_ICACHE ASM_CONST(0x00000001) 11262306a36Sopenharmony_ci#define CPU_FTR_ALTIVEC ASM_CONST(0x00000002) 11362306a36Sopenharmony_ci#define CPU_FTR_DBELL ASM_CONST(0x00000004) 11462306a36Sopenharmony_ci#define CPU_FTR_CAN_NAP ASM_CONST(0x00000008) 11562306a36Sopenharmony_ci#define CPU_FTR_DEBUG_LVL_EXC ASM_CONST(0x00000010) 11662306a36Sopenharmony_ci// ASM_CONST(0x00000020) Free 11762306a36Sopenharmony_ci#define CPU_FTR_FPU_UNAVAILABLE ASM_CONST(0x00000040) 11862306a36Sopenharmony_ci#define CPU_FTR_LWSYNC ASM_CONST(0x00000080) 11962306a36Sopenharmony_ci#define CPU_FTR_NOEXECUTE ASM_CONST(0x00000100) 12062306a36Sopenharmony_ci#define CPU_FTR_EMB_HV ASM_CONST(0x00000200) 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci/* Definitions for features that only exist on 32-bit chips */ 12362306a36Sopenharmony_ci#ifdef CONFIG_PPC32 12462306a36Sopenharmony_ci#define CPU_FTR_L2CR ASM_CONST(0x00002000) 12562306a36Sopenharmony_ci#define CPU_FTR_SPEC7450 ASM_CONST(0x00004000) 12662306a36Sopenharmony_ci#define CPU_FTR_TAU ASM_CONST(0x00008000) 12762306a36Sopenharmony_ci#define CPU_FTR_CAN_DOZE ASM_CONST(0x00010000) 12862306a36Sopenharmony_ci#define CPU_FTR_L3CR ASM_CONST(0x00040000) 12962306a36Sopenharmony_ci#define CPU_FTR_L3_DISABLE_NAP ASM_CONST(0x00080000) 13062306a36Sopenharmony_ci#define CPU_FTR_NAP_DISABLE_L2_PR ASM_CONST(0x00100000) 13162306a36Sopenharmony_ci#define CPU_FTR_DUAL_PLL_750FX ASM_CONST(0x00200000) 13262306a36Sopenharmony_ci#define CPU_FTR_NO_DPM ASM_CONST(0x00400000) 13362306a36Sopenharmony_ci#define CPU_FTR_476_DD2 ASM_CONST(0x00800000) 13462306a36Sopenharmony_ci#define CPU_FTR_NEED_COHERENT ASM_CONST(0x01000000) 13562306a36Sopenharmony_ci#define CPU_FTR_NO_BTIC ASM_CONST(0x02000000) 13662306a36Sopenharmony_ci#define CPU_FTR_PPC_LE ASM_CONST(0x04000000) 13762306a36Sopenharmony_ci#define CPU_FTR_SPE ASM_CONST(0x10000000) 13862306a36Sopenharmony_ci#define CPU_FTR_NEED_PAIRED_STWCX ASM_CONST(0x20000000) 13962306a36Sopenharmony_ci#define CPU_FTR_INDEXED_DCR ASM_CONST(0x40000000) 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci#else /* CONFIG_PPC32 */ 14262306a36Sopenharmony_ci/* Define these to 0 for the sake of tests in common code */ 14362306a36Sopenharmony_ci#define CPU_FTR_PPC_LE (0) 14462306a36Sopenharmony_ci#define CPU_FTR_SPE (0) 14562306a36Sopenharmony_ci#endif 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ci/* 14862306a36Sopenharmony_ci * Definitions for the 64-bit processor unique features; 14962306a36Sopenharmony_ci * on 32-bit, make the names available but defined to be 0. 15062306a36Sopenharmony_ci */ 15162306a36Sopenharmony_ci#ifdef __powerpc64__ 15262306a36Sopenharmony_ci#define LONG_ASM_CONST(x) ASM_CONST(x) 15362306a36Sopenharmony_ci#else 15462306a36Sopenharmony_ci#define LONG_ASM_CONST(x) 0 15562306a36Sopenharmony_ci#endif 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci#define CPU_FTR_REAL_LE LONG_ASM_CONST(0x0000000000001000) 15862306a36Sopenharmony_ci#define CPU_FTR_HVMODE LONG_ASM_CONST(0x0000000000002000) 15962306a36Sopenharmony_ci#define CPU_FTR_ARCH_206 LONG_ASM_CONST(0x0000000000008000) 16062306a36Sopenharmony_ci#define CPU_FTR_ARCH_207S LONG_ASM_CONST(0x0000000000010000) 16162306a36Sopenharmony_ci#define CPU_FTR_ARCH_300 LONG_ASM_CONST(0x0000000000020000) 16262306a36Sopenharmony_ci#define CPU_FTR_MMCRA LONG_ASM_CONST(0x0000000000040000) 16362306a36Sopenharmony_ci#define CPU_FTR_CTRL LONG_ASM_CONST(0x0000000000080000) 16462306a36Sopenharmony_ci#define CPU_FTR_SMT LONG_ASM_CONST(0x0000000000100000) 16562306a36Sopenharmony_ci#define CPU_FTR_PAUSE_ZERO LONG_ASM_CONST(0x0000000000200000) 16662306a36Sopenharmony_ci#define CPU_FTR_PURR LONG_ASM_CONST(0x0000000000400000) 16762306a36Sopenharmony_ci#define CPU_FTR_CELL_TB_BUG LONG_ASM_CONST(0x0000000000800000) 16862306a36Sopenharmony_ci#define CPU_FTR_SPURR LONG_ASM_CONST(0x0000000001000000) 16962306a36Sopenharmony_ci#define CPU_FTR_DSCR LONG_ASM_CONST(0x0000000002000000) 17062306a36Sopenharmony_ci#define CPU_FTR_VSX LONG_ASM_CONST(0x0000000004000000) 17162306a36Sopenharmony_ci#define CPU_FTR_SAO LONG_ASM_CONST(0x0000000008000000) 17262306a36Sopenharmony_ci#define CPU_FTR_CP_USE_DCBTZ LONG_ASM_CONST(0x0000000010000000) 17362306a36Sopenharmony_ci#define CPU_FTR_UNALIGNED_LD_STD LONG_ASM_CONST(0x0000000020000000) 17462306a36Sopenharmony_ci#define CPU_FTR_ASYM_SMT LONG_ASM_CONST(0x0000000040000000) 17562306a36Sopenharmony_ci#define CPU_FTR_STCX_CHECKS_ADDRESS LONG_ASM_CONST(0x0000000080000000) 17662306a36Sopenharmony_ci#define CPU_FTR_POPCNTB LONG_ASM_CONST(0x0000000100000000) 17762306a36Sopenharmony_ci#define CPU_FTR_POPCNTD LONG_ASM_CONST(0x0000000200000000) 17862306a36Sopenharmony_ci/* LONG_ASM_CONST(0x0000000400000000) Free */ 17962306a36Sopenharmony_ci#define CPU_FTR_VMX_COPY LONG_ASM_CONST(0x0000000800000000) 18062306a36Sopenharmony_ci#define CPU_FTR_TM LONG_ASM_CONST(0x0000001000000000) 18162306a36Sopenharmony_ci#define CPU_FTR_CFAR LONG_ASM_CONST(0x0000002000000000) 18262306a36Sopenharmony_ci#define CPU_FTR_HAS_PPR LONG_ASM_CONST(0x0000004000000000) 18362306a36Sopenharmony_ci#define CPU_FTR_DAWR LONG_ASM_CONST(0x0000008000000000) 18462306a36Sopenharmony_ci#define CPU_FTR_DABRX LONG_ASM_CONST(0x0000010000000000) 18562306a36Sopenharmony_ci#define CPU_FTR_PMAO_BUG LONG_ASM_CONST(0x0000020000000000) 18662306a36Sopenharmony_ci#define CPU_FTR_POWER9_DD2_1 LONG_ASM_CONST(0x0000080000000000) 18762306a36Sopenharmony_ci#define CPU_FTR_P9_TM_HV_ASSIST LONG_ASM_CONST(0x0000100000000000) 18862306a36Sopenharmony_ci#define CPU_FTR_P9_TM_XER_SO_BUG LONG_ASM_CONST(0x0000200000000000) 18962306a36Sopenharmony_ci#define CPU_FTR_P9_TLBIE_STQ_BUG LONG_ASM_CONST(0x0000400000000000) 19062306a36Sopenharmony_ci#define CPU_FTR_P9_TIDR LONG_ASM_CONST(0x0000800000000000) 19162306a36Sopenharmony_ci#define CPU_FTR_P9_TLBIE_ERAT_BUG LONG_ASM_CONST(0x0001000000000000) 19262306a36Sopenharmony_ci#define CPU_FTR_P9_RADIX_PREFETCH_BUG LONG_ASM_CONST(0x0002000000000000) 19362306a36Sopenharmony_ci#define CPU_FTR_ARCH_31 LONG_ASM_CONST(0x0004000000000000) 19462306a36Sopenharmony_ci#define CPU_FTR_DAWR1 LONG_ASM_CONST(0x0008000000000000) 19562306a36Sopenharmony_ci#define CPU_FTR_DEXCR_NPHIE LONG_ASM_CONST(0x0010000000000000) 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ci#ifndef __ASSEMBLY__ 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ci#define CPU_FTR_PPCAS_ARCH_V2 (CPU_FTR_NOEXECUTE) 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_ci/* We only set the altivec features if the kernel was compiled with altivec 20262306a36Sopenharmony_ci * support 20362306a36Sopenharmony_ci */ 20462306a36Sopenharmony_ci#ifdef CONFIG_ALTIVEC 20562306a36Sopenharmony_ci#define CPU_FTR_ALTIVEC_COMP CPU_FTR_ALTIVEC 20662306a36Sopenharmony_ci#define PPC_FEATURE_HAS_ALTIVEC_COMP PPC_FEATURE_HAS_ALTIVEC 20762306a36Sopenharmony_ci#else 20862306a36Sopenharmony_ci#define CPU_FTR_ALTIVEC_COMP 0 20962306a36Sopenharmony_ci#define PPC_FEATURE_HAS_ALTIVEC_COMP 0 21062306a36Sopenharmony_ci#endif 21162306a36Sopenharmony_ci 21262306a36Sopenharmony_ci/* We only set the VSX features if the kernel was compiled with VSX 21362306a36Sopenharmony_ci * support 21462306a36Sopenharmony_ci */ 21562306a36Sopenharmony_ci#ifdef CONFIG_VSX 21662306a36Sopenharmony_ci#define CPU_FTR_VSX_COMP CPU_FTR_VSX 21762306a36Sopenharmony_ci#define PPC_FEATURE_HAS_VSX_COMP PPC_FEATURE_HAS_VSX 21862306a36Sopenharmony_ci#else 21962306a36Sopenharmony_ci#define CPU_FTR_VSX_COMP 0 22062306a36Sopenharmony_ci#define PPC_FEATURE_HAS_VSX_COMP 0 22162306a36Sopenharmony_ci#endif 22262306a36Sopenharmony_ci 22362306a36Sopenharmony_ci/* We only set the spe features if the kernel was compiled with spe 22462306a36Sopenharmony_ci * support 22562306a36Sopenharmony_ci */ 22662306a36Sopenharmony_ci#ifdef CONFIG_SPE 22762306a36Sopenharmony_ci#define CPU_FTR_SPE_COMP CPU_FTR_SPE 22862306a36Sopenharmony_ci#define PPC_FEATURE_HAS_SPE_COMP PPC_FEATURE_HAS_SPE 22962306a36Sopenharmony_ci#define PPC_FEATURE_HAS_EFP_SINGLE_COMP PPC_FEATURE_HAS_EFP_SINGLE 23062306a36Sopenharmony_ci#define PPC_FEATURE_HAS_EFP_DOUBLE_COMP PPC_FEATURE_HAS_EFP_DOUBLE 23162306a36Sopenharmony_ci#else 23262306a36Sopenharmony_ci#define CPU_FTR_SPE_COMP 0 23362306a36Sopenharmony_ci#define PPC_FEATURE_HAS_SPE_COMP 0 23462306a36Sopenharmony_ci#define PPC_FEATURE_HAS_EFP_SINGLE_COMP 0 23562306a36Sopenharmony_ci#define PPC_FEATURE_HAS_EFP_DOUBLE_COMP 0 23662306a36Sopenharmony_ci#endif 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_ci/* We only set the TM feature if the kernel was compiled with TM supprt */ 23962306a36Sopenharmony_ci#ifdef CONFIG_PPC_TRANSACTIONAL_MEM 24062306a36Sopenharmony_ci#define CPU_FTR_TM_COMP CPU_FTR_TM 24162306a36Sopenharmony_ci#define PPC_FEATURE2_HTM_COMP PPC_FEATURE2_HTM 24262306a36Sopenharmony_ci#define PPC_FEATURE2_HTM_NOSC_COMP PPC_FEATURE2_HTM_NOSC 24362306a36Sopenharmony_ci#else 24462306a36Sopenharmony_ci#define CPU_FTR_TM_COMP 0 24562306a36Sopenharmony_ci#define PPC_FEATURE2_HTM_COMP 0 24662306a36Sopenharmony_ci#define PPC_FEATURE2_HTM_NOSC_COMP 0 24762306a36Sopenharmony_ci#endif 24862306a36Sopenharmony_ci 24962306a36Sopenharmony_ci/* We need to mark all pages as being coherent if we're SMP or we have a 25062306a36Sopenharmony_ci * 74[45]x and an MPC107 host bridge. Also 83xx and PowerQUICC II 25162306a36Sopenharmony_ci * require it for PCI "streaming/prefetch" to work properly. 25262306a36Sopenharmony_ci * This is also required by 52xx family. 25362306a36Sopenharmony_ci */ 25462306a36Sopenharmony_ci#if defined(CONFIG_SMP) || defined(CONFIG_MPC10X_BRIDGE) \ 25562306a36Sopenharmony_ci || defined(CONFIG_PPC_83xx) || defined(CONFIG_PPC_82xx) \ 25662306a36Sopenharmony_ci || defined(CONFIG_PPC_MPC52xx) 25762306a36Sopenharmony_ci#define CPU_FTR_COMMON CPU_FTR_NEED_COHERENT 25862306a36Sopenharmony_ci#else 25962306a36Sopenharmony_ci#define CPU_FTR_COMMON 0 26062306a36Sopenharmony_ci#endif 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ci/* The powersave features NAP & DOZE seems to confuse BDI when 26362306a36Sopenharmony_ci debugging. So if a BDI is used, disable theses 26462306a36Sopenharmony_ci */ 26562306a36Sopenharmony_ci#ifndef CONFIG_BDI_SWITCH 26662306a36Sopenharmony_ci#define CPU_FTR_MAYBE_CAN_DOZE CPU_FTR_CAN_DOZE 26762306a36Sopenharmony_ci#define CPU_FTR_MAYBE_CAN_NAP CPU_FTR_CAN_NAP 26862306a36Sopenharmony_ci#else 26962306a36Sopenharmony_ci#define CPU_FTR_MAYBE_CAN_DOZE 0 27062306a36Sopenharmony_ci#define CPU_FTR_MAYBE_CAN_NAP 0 27162306a36Sopenharmony_ci#endif 27262306a36Sopenharmony_ci 27362306a36Sopenharmony_ci#define CPU_FTRS_603 (CPU_FTR_COMMON | CPU_FTR_MAYBE_CAN_DOZE | \ 27462306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE | CPU_FTR_NOEXECUTE) 27562306a36Sopenharmony_ci#define CPU_FTRS_604 (CPU_FTR_COMMON | CPU_FTR_PPC_LE) 27662306a36Sopenharmony_ci#define CPU_FTRS_740_NOTAU (CPU_FTR_COMMON | \ 27762306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_L2CR | \ 27862306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE) 27962306a36Sopenharmony_ci#define CPU_FTRS_740 (CPU_FTR_COMMON | \ 28062306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_L2CR | \ 28162306a36Sopenharmony_ci CPU_FTR_TAU | CPU_FTR_MAYBE_CAN_NAP | \ 28262306a36Sopenharmony_ci CPU_FTR_PPC_LE) 28362306a36Sopenharmony_ci#define CPU_FTRS_750 (CPU_FTR_COMMON | \ 28462306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_L2CR | \ 28562306a36Sopenharmony_ci CPU_FTR_TAU | CPU_FTR_MAYBE_CAN_NAP | \ 28662306a36Sopenharmony_ci CPU_FTR_PPC_LE) 28762306a36Sopenharmony_ci#define CPU_FTRS_750CL (CPU_FTRS_750) 28862306a36Sopenharmony_ci#define CPU_FTRS_750FX1 (CPU_FTRS_750 | CPU_FTR_DUAL_PLL_750FX | CPU_FTR_NO_DPM) 28962306a36Sopenharmony_ci#define CPU_FTRS_750FX2 (CPU_FTRS_750 | CPU_FTR_NO_DPM) 29062306a36Sopenharmony_ci#define CPU_FTRS_750FX (CPU_FTRS_750 | CPU_FTR_DUAL_PLL_750FX) 29162306a36Sopenharmony_ci#define CPU_FTRS_750GX (CPU_FTRS_750FX) 29262306a36Sopenharmony_ci#define CPU_FTRS_7400_NOTAU (CPU_FTR_COMMON | \ 29362306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_L2CR | \ 29462306a36Sopenharmony_ci CPU_FTR_ALTIVEC_COMP | \ 29562306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE) 29662306a36Sopenharmony_ci#define CPU_FTRS_7400 (CPU_FTR_COMMON | \ 29762306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_L2CR | \ 29862306a36Sopenharmony_ci CPU_FTR_TAU | CPU_FTR_ALTIVEC_COMP | \ 29962306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE) 30062306a36Sopenharmony_ci#define CPU_FTRS_7450_20 (CPU_FTR_COMMON | \ 30162306a36Sopenharmony_ci CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ 30262306a36Sopenharmony_ci CPU_FTR_L3CR | CPU_FTR_SPEC7450 | \ 30362306a36Sopenharmony_ci CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE | CPU_FTR_NEED_PAIRED_STWCX) 30462306a36Sopenharmony_ci#define CPU_FTRS_7450_21 (CPU_FTR_COMMON | \ 30562306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ 30662306a36Sopenharmony_ci CPU_FTR_L3CR | CPU_FTR_SPEC7450 | \ 30762306a36Sopenharmony_ci CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_L3_DISABLE_NAP | \ 30862306a36Sopenharmony_ci CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE | CPU_FTR_NEED_PAIRED_STWCX) 30962306a36Sopenharmony_ci#define CPU_FTRS_7450_23 (CPU_FTR_COMMON | \ 31062306a36Sopenharmony_ci CPU_FTR_NEED_PAIRED_STWCX | \ 31162306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ 31262306a36Sopenharmony_ci CPU_FTR_L3CR | CPU_FTR_SPEC7450 | \ 31362306a36Sopenharmony_ci CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) 31462306a36Sopenharmony_ci#define CPU_FTRS_7455_1 (CPU_FTR_COMMON | \ 31562306a36Sopenharmony_ci CPU_FTR_NEED_PAIRED_STWCX | \ 31662306a36Sopenharmony_ci CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR | \ 31762306a36Sopenharmony_ci CPU_FTR_SPEC7450 | CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) 31862306a36Sopenharmony_ci#define CPU_FTRS_7455_20 (CPU_FTR_COMMON | \ 31962306a36Sopenharmony_ci CPU_FTR_NEED_PAIRED_STWCX | \ 32062306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ 32162306a36Sopenharmony_ci CPU_FTR_L3CR | CPU_FTR_SPEC7450 | \ 32262306a36Sopenharmony_ci CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_L3_DISABLE_NAP | \ 32362306a36Sopenharmony_ci CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) 32462306a36Sopenharmony_ci#define CPU_FTRS_7455 (CPU_FTR_COMMON | \ 32562306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ 32662306a36Sopenharmony_ci CPU_FTR_L3CR | CPU_FTR_SPEC7450 | CPU_FTR_NAP_DISABLE_L2_PR | \ 32762306a36Sopenharmony_ci CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE | CPU_FTR_NEED_PAIRED_STWCX) 32862306a36Sopenharmony_ci#define CPU_FTRS_7447_10 (CPU_FTR_COMMON | \ 32962306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ 33062306a36Sopenharmony_ci CPU_FTR_L3CR | CPU_FTR_SPEC7450 | CPU_FTR_NAP_DISABLE_L2_PR | \ 33162306a36Sopenharmony_ci CPU_FTR_NEED_COHERENT | CPU_FTR_NO_BTIC | CPU_FTR_PPC_LE | \ 33262306a36Sopenharmony_ci CPU_FTR_NEED_PAIRED_STWCX) 33362306a36Sopenharmony_ci#define CPU_FTRS_7447 (CPU_FTR_COMMON | \ 33462306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ 33562306a36Sopenharmony_ci CPU_FTR_L3CR | CPU_FTR_SPEC7450 | CPU_FTR_NAP_DISABLE_L2_PR | \ 33662306a36Sopenharmony_ci CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE | CPU_FTR_NEED_PAIRED_STWCX) 33762306a36Sopenharmony_ci#define CPU_FTRS_7447A (CPU_FTR_COMMON | \ 33862306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ 33962306a36Sopenharmony_ci CPU_FTR_SPEC7450 | CPU_FTR_NAP_DISABLE_L2_PR | \ 34062306a36Sopenharmony_ci CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE | CPU_FTR_NEED_PAIRED_STWCX) 34162306a36Sopenharmony_ci#define CPU_FTRS_7448 (CPU_FTR_COMMON | \ 34262306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ 34362306a36Sopenharmony_ci CPU_FTR_SPEC7450 | CPU_FTR_NAP_DISABLE_L2_PR | \ 34462306a36Sopenharmony_ci CPU_FTR_PPC_LE | CPU_FTR_NEED_PAIRED_STWCX) 34562306a36Sopenharmony_ci#define CPU_FTRS_82XX (CPU_FTR_COMMON | CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_NOEXECUTE) 34662306a36Sopenharmony_ci#define CPU_FTRS_G2_LE (CPU_FTR_COMMON | CPU_FTR_MAYBE_CAN_DOZE | \ 34762306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_NOEXECUTE) 34862306a36Sopenharmony_ci#define CPU_FTRS_E300 (CPU_FTR_MAYBE_CAN_DOZE | \ 34962306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_NAP | \ 35062306a36Sopenharmony_ci CPU_FTR_COMMON | CPU_FTR_NOEXECUTE) 35162306a36Sopenharmony_ci#define CPU_FTRS_E300C2 (CPU_FTR_MAYBE_CAN_DOZE | \ 35262306a36Sopenharmony_ci CPU_FTR_MAYBE_CAN_NAP | \ 35362306a36Sopenharmony_ci CPU_FTR_COMMON | CPU_FTR_FPU_UNAVAILABLE | CPU_FTR_NOEXECUTE) 35462306a36Sopenharmony_ci#define CPU_FTRS_CLASSIC32 (CPU_FTR_COMMON) 35562306a36Sopenharmony_ci#define CPU_FTRS_8XX (CPU_FTR_NOEXECUTE) 35662306a36Sopenharmony_ci#define CPU_FTRS_40X (CPU_FTR_NOEXECUTE) 35762306a36Sopenharmony_ci#define CPU_FTRS_44X (CPU_FTR_NOEXECUTE) 35862306a36Sopenharmony_ci#define CPU_FTRS_440x6 (CPU_FTR_NOEXECUTE | \ 35962306a36Sopenharmony_ci CPU_FTR_INDEXED_DCR) 36062306a36Sopenharmony_ci#define CPU_FTRS_47X (CPU_FTRS_440x6) 36162306a36Sopenharmony_ci#define CPU_FTRS_E500 (CPU_FTR_MAYBE_CAN_DOZE | \ 36262306a36Sopenharmony_ci CPU_FTR_SPE_COMP | CPU_FTR_MAYBE_CAN_NAP | \ 36362306a36Sopenharmony_ci CPU_FTR_NOEXECUTE) 36462306a36Sopenharmony_ci#define CPU_FTRS_E500_2 (CPU_FTR_MAYBE_CAN_DOZE | \ 36562306a36Sopenharmony_ci CPU_FTR_SPE_COMP | CPU_FTR_MAYBE_CAN_NAP | \ 36662306a36Sopenharmony_ci CPU_FTR_NOEXECUTE) 36762306a36Sopenharmony_ci#define CPU_FTRS_E500MC ( \ 36862306a36Sopenharmony_ci CPU_FTR_LWSYNC | CPU_FTR_NOEXECUTE | \ 36962306a36Sopenharmony_ci CPU_FTR_DBELL | CPU_FTR_DEBUG_LVL_EXC | CPU_FTR_EMB_HV) 37062306a36Sopenharmony_ci/* 37162306a36Sopenharmony_ci * e5500/e6500 erratum A-006958 is a timebase bug that can use the 37262306a36Sopenharmony_ci * same workaround as CPU_FTR_CELL_TB_BUG. 37362306a36Sopenharmony_ci */ 37462306a36Sopenharmony_ci#define CPU_FTRS_E5500 ( \ 37562306a36Sopenharmony_ci CPU_FTR_LWSYNC | CPU_FTR_NOEXECUTE | \ 37662306a36Sopenharmony_ci CPU_FTR_DBELL | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ 37762306a36Sopenharmony_ci CPU_FTR_DEBUG_LVL_EXC | CPU_FTR_EMB_HV | CPU_FTR_CELL_TB_BUG) 37862306a36Sopenharmony_ci#define CPU_FTRS_E6500 ( \ 37962306a36Sopenharmony_ci CPU_FTR_LWSYNC | CPU_FTR_NOEXECUTE | \ 38062306a36Sopenharmony_ci CPU_FTR_DBELL | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ 38162306a36Sopenharmony_ci CPU_FTR_DEBUG_LVL_EXC | CPU_FTR_EMB_HV | CPU_FTR_ALTIVEC_COMP | \ 38262306a36Sopenharmony_ci CPU_FTR_CELL_TB_BUG | CPU_FTR_SMT) 38362306a36Sopenharmony_ci 38462306a36Sopenharmony_ci/* 64-bit CPUs */ 38562306a36Sopenharmony_ci#define CPU_FTRS_PPC970 (CPU_FTR_LWSYNC | \ 38662306a36Sopenharmony_ci CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ 38762306a36Sopenharmony_ci CPU_FTR_ALTIVEC_COMP | CPU_FTR_CAN_NAP | CPU_FTR_MMCRA | \ 38862306a36Sopenharmony_ci CPU_FTR_CP_USE_DCBTZ | CPU_FTR_STCX_CHECKS_ADDRESS | \ 38962306a36Sopenharmony_ci CPU_FTR_HVMODE | CPU_FTR_DABRX) 39062306a36Sopenharmony_ci#define CPU_FTRS_POWER5 (CPU_FTR_LWSYNC | \ 39162306a36Sopenharmony_ci CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ 39262306a36Sopenharmony_ci CPU_FTR_MMCRA | CPU_FTR_SMT | \ 39362306a36Sopenharmony_ci CPU_FTR_COHERENT_ICACHE | CPU_FTR_PURR | \ 39462306a36Sopenharmony_ci CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_DABRX) 39562306a36Sopenharmony_ci#define CPU_FTRS_POWER6 (CPU_FTR_LWSYNC | \ 39662306a36Sopenharmony_ci CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ 39762306a36Sopenharmony_ci CPU_FTR_MMCRA | CPU_FTR_SMT | \ 39862306a36Sopenharmony_ci CPU_FTR_COHERENT_ICACHE | \ 39962306a36Sopenharmony_ci CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ 40062306a36Sopenharmony_ci CPU_FTR_DSCR | CPU_FTR_UNALIGNED_LD_STD | \ 40162306a36Sopenharmony_ci CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_CFAR | \ 40262306a36Sopenharmony_ci CPU_FTR_DABRX) 40362306a36Sopenharmony_ci#define CPU_FTRS_POWER7 (CPU_FTR_LWSYNC | \ 40462306a36Sopenharmony_ci CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_206 |\ 40562306a36Sopenharmony_ci CPU_FTR_MMCRA | CPU_FTR_SMT | \ 40662306a36Sopenharmony_ci CPU_FTR_COHERENT_ICACHE | \ 40762306a36Sopenharmony_ci CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ 40862306a36Sopenharmony_ci CPU_FTR_DSCR | CPU_FTR_SAO | CPU_FTR_ASYM_SMT | \ 40962306a36Sopenharmony_ci CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ 41062306a36Sopenharmony_ci CPU_FTR_CFAR | CPU_FTR_HVMODE | \ 41162306a36Sopenharmony_ci CPU_FTR_VMX_COPY | CPU_FTR_HAS_PPR | CPU_FTR_DABRX ) 41262306a36Sopenharmony_ci#define CPU_FTRS_POWER8 (CPU_FTR_LWSYNC | \ 41362306a36Sopenharmony_ci CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_206 |\ 41462306a36Sopenharmony_ci CPU_FTR_MMCRA | CPU_FTR_SMT | \ 41562306a36Sopenharmony_ci CPU_FTR_COHERENT_ICACHE | \ 41662306a36Sopenharmony_ci CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ 41762306a36Sopenharmony_ci CPU_FTR_DSCR | CPU_FTR_SAO | \ 41862306a36Sopenharmony_ci CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ 41962306a36Sopenharmony_ci CPU_FTR_CFAR | CPU_FTR_HVMODE | CPU_FTR_VMX_COPY | \ 42062306a36Sopenharmony_ci CPU_FTR_DBELL | CPU_FTR_HAS_PPR | CPU_FTR_DAWR | \ 42162306a36Sopenharmony_ci CPU_FTR_ARCH_207S | CPU_FTR_TM_COMP ) 42262306a36Sopenharmony_ci#define CPU_FTRS_POWER8E (CPU_FTRS_POWER8 | CPU_FTR_PMAO_BUG) 42362306a36Sopenharmony_ci#define CPU_FTRS_POWER9 (CPU_FTR_LWSYNC | \ 42462306a36Sopenharmony_ci CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_206 |\ 42562306a36Sopenharmony_ci CPU_FTR_MMCRA | CPU_FTR_SMT | \ 42662306a36Sopenharmony_ci CPU_FTR_COHERENT_ICACHE | \ 42762306a36Sopenharmony_ci CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ 42862306a36Sopenharmony_ci CPU_FTR_DSCR | CPU_FTR_SAO | \ 42962306a36Sopenharmony_ci CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ 43062306a36Sopenharmony_ci CPU_FTR_CFAR | CPU_FTR_HVMODE | CPU_FTR_VMX_COPY | \ 43162306a36Sopenharmony_ci CPU_FTR_DBELL | CPU_FTR_HAS_PPR | CPU_FTR_ARCH_207S | \ 43262306a36Sopenharmony_ci CPU_FTR_TM_COMP | CPU_FTR_ARCH_300 | CPU_FTR_P9_TLBIE_STQ_BUG | \ 43362306a36Sopenharmony_ci CPU_FTR_P9_TLBIE_ERAT_BUG | CPU_FTR_P9_TIDR) 43462306a36Sopenharmony_ci#define CPU_FTRS_POWER9_DD2_0 (CPU_FTRS_POWER9 | CPU_FTR_P9_RADIX_PREFETCH_BUG) 43562306a36Sopenharmony_ci#define CPU_FTRS_POWER9_DD2_1 (CPU_FTRS_POWER9 | \ 43662306a36Sopenharmony_ci CPU_FTR_P9_RADIX_PREFETCH_BUG | \ 43762306a36Sopenharmony_ci CPU_FTR_POWER9_DD2_1) 43862306a36Sopenharmony_ci#define CPU_FTRS_POWER9_DD2_2 (CPU_FTRS_POWER9 | CPU_FTR_POWER9_DD2_1 | \ 43962306a36Sopenharmony_ci CPU_FTR_P9_TM_HV_ASSIST | \ 44062306a36Sopenharmony_ci CPU_FTR_P9_TM_XER_SO_BUG) 44162306a36Sopenharmony_ci#define CPU_FTRS_POWER9_DD2_3 (CPU_FTRS_POWER9 | CPU_FTR_POWER9_DD2_1 | \ 44262306a36Sopenharmony_ci CPU_FTR_P9_TM_HV_ASSIST | \ 44362306a36Sopenharmony_ci CPU_FTR_P9_TM_XER_SO_BUG | \ 44462306a36Sopenharmony_ci CPU_FTR_DAWR) 44562306a36Sopenharmony_ci#define CPU_FTRS_POWER10 (CPU_FTR_LWSYNC | \ 44662306a36Sopenharmony_ci CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_206 |\ 44762306a36Sopenharmony_ci CPU_FTR_MMCRA | CPU_FTR_SMT | \ 44862306a36Sopenharmony_ci CPU_FTR_COHERENT_ICACHE | \ 44962306a36Sopenharmony_ci CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ 45062306a36Sopenharmony_ci CPU_FTR_DSCR | CPU_FTR_SAO | \ 45162306a36Sopenharmony_ci CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ 45262306a36Sopenharmony_ci CPU_FTR_CFAR | CPU_FTR_HVMODE | CPU_FTR_VMX_COPY | \ 45362306a36Sopenharmony_ci CPU_FTR_DBELL | CPU_FTR_HAS_PPR | CPU_FTR_ARCH_207S | \ 45462306a36Sopenharmony_ci CPU_FTR_ARCH_300 | CPU_FTR_ARCH_31 | \ 45562306a36Sopenharmony_ci CPU_FTR_DAWR | CPU_FTR_DAWR1 | \ 45662306a36Sopenharmony_ci CPU_FTR_DEXCR_NPHIE) 45762306a36Sopenharmony_ci#define CPU_FTRS_CELL (CPU_FTR_LWSYNC | \ 45862306a36Sopenharmony_ci CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ 45962306a36Sopenharmony_ci CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \ 46062306a36Sopenharmony_ci CPU_FTR_PAUSE_ZERO | CPU_FTR_CELL_TB_BUG | CPU_FTR_CP_USE_DCBTZ | \ 46162306a36Sopenharmony_ci CPU_FTR_UNALIGNED_LD_STD | CPU_FTR_DABRX) 46262306a36Sopenharmony_ci#define CPU_FTRS_PA6T (CPU_FTR_LWSYNC | \ 46362306a36Sopenharmony_ci CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_ALTIVEC_COMP | \ 46462306a36Sopenharmony_ci CPU_FTR_PURR | CPU_FTR_REAL_LE | CPU_FTR_DABRX) 46562306a36Sopenharmony_ci#define CPU_FTRS_COMPATIBLE (CPU_FTR_PPCAS_ARCH_V2) 46662306a36Sopenharmony_ci 46762306a36Sopenharmony_ci#ifdef CONFIG_PPC64 46862306a36Sopenharmony_ci#ifdef CONFIG_PPC_BOOK3E_64 46962306a36Sopenharmony_ci#define CPU_FTRS_POSSIBLE (CPU_FTRS_E6500 | CPU_FTRS_E5500) 47062306a36Sopenharmony_ci#else 47162306a36Sopenharmony_ci#ifdef CONFIG_CPU_LITTLE_ENDIAN 47262306a36Sopenharmony_ci#define CPU_FTRS_POSSIBLE \ 47362306a36Sopenharmony_ci (CPU_FTRS_POWER7 | CPU_FTRS_POWER8E | CPU_FTRS_POWER8 | \ 47462306a36Sopenharmony_ci CPU_FTR_ALTIVEC_COMP | CPU_FTR_VSX_COMP | CPU_FTRS_POWER9 | \ 47562306a36Sopenharmony_ci CPU_FTRS_POWER9_DD2_1 | CPU_FTRS_POWER9_DD2_2 | \ 47662306a36Sopenharmony_ci CPU_FTRS_POWER9_DD2_3 | CPU_FTRS_POWER10) 47762306a36Sopenharmony_ci#else 47862306a36Sopenharmony_ci#define CPU_FTRS_POSSIBLE \ 47962306a36Sopenharmony_ci (CPU_FTRS_PPC970 | CPU_FTRS_POWER5 | \ 48062306a36Sopenharmony_ci CPU_FTRS_POWER6 | CPU_FTRS_POWER7 | CPU_FTRS_POWER8E | \ 48162306a36Sopenharmony_ci CPU_FTRS_POWER8 | CPU_FTRS_CELL | CPU_FTRS_PA6T | \ 48262306a36Sopenharmony_ci CPU_FTR_VSX_COMP | CPU_FTR_ALTIVEC_COMP | CPU_FTRS_POWER9 | \ 48362306a36Sopenharmony_ci CPU_FTRS_POWER9_DD2_1 | CPU_FTRS_POWER9_DD2_2 | \ 48462306a36Sopenharmony_ci CPU_FTRS_POWER9_DD2_3 | CPU_FTRS_POWER10) 48562306a36Sopenharmony_ci#endif /* CONFIG_CPU_LITTLE_ENDIAN */ 48662306a36Sopenharmony_ci#endif 48762306a36Sopenharmony_ci#else 48862306a36Sopenharmony_cienum { 48962306a36Sopenharmony_ci CPU_FTRS_POSSIBLE = 49062306a36Sopenharmony_ci#ifdef CONFIG_PPC_BOOK3S_604 49162306a36Sopenharmony_ci CPU_FTRS_604 | CPU_FTRS_740_NOTAU | 49262306a36Sopenharmony_ci CPU_FTRS_740 | CPU_FTRS_750 | CPU_FTRS_750FX1 | 49362306a36Sopenharmony_ci CPU_FTRS_750FX2 | CPU_FTRS_750FX | CPU_FTRS_750GX | 49462306a36Sopenharmony_ci CPU_FTRS_7400_NOTAU | CPU_FTRS_7400 | CPU_FTRS_7450_20 | 49562306a36Sopenharmony_ci CPU_FTRS_7450_21 | CPU_FTRS_7450_23 | CPU_FTRS_7455_1 | 49662306a36Sopenharmony_ci CPU_FTRS_7455_20 | CPU_FTRS_7455 | CPU_FTRS_7447_10 | 49762306a36Sopenharmony_ci CPU_FTRS_7447 | CPU_FTRS_7447A | 49862306a36Sopenharmony_ci CPU_FTRS_CLASSIC32 | 49962306a36Sopenharmony_ci#endif 50062306a36Sopenharmony_ci#ifdef CONFIG_PPC_BOOK3S_603 50162306a36Sopenharmony_ci CPU_FTRS_603 | CPU_FTRS_82XX | 50262306a36Sopenharmony_ci CPU_FTRS_G2_LE | CPU_FTRS_E300 | CPU_FTRS_E300C2 | 50362306a36Sopenharmony_ci#endif 50462306a36Sopenharmony_ci#ifdef CONFIG_PPC_8xx 50562306a36Sopenharmony_ci CPU_FTRS_8XX | 50662306a36Sopenharmony_ci#endif 50762306a36Sopenharmony_ci#ifdef CONFIG_40x 50862306a36Sopenharmony_ci CPU_FTRS_40X | 50962306a36Sopenharmony_ci#endif 51062306a36Sopenharmony_ci#ifdef CONFIG_PPC_47x 51162306a36Sopenharmony_ci CPU_FTRS_47X | CPU_FTR_476_DD2 | 51262306a36Sopenharmony_ci#elif defined(CONFIG_44x) 51362306a36Sopenharmony_ci CPU_FTRS_44X | CPU_FTRS_440x6 | 51462306a36Sopenharmony_ci#endif 51562306a36Sopenharmony_ci#ifdef CONFIG_PPC_E500 51662306a36Sopenharmony_ci CPU_FTRS_E500 | CPU_FTRS_E500_2 | 51762306a36Sopenharmony_ci#endif 51862306a36Sopenharmony_ci#ifdef CONFIG_PPC_E500MC 51962306a36Sopenharmony_ci CPU_FTRS_E500MC | CPU_FTRS_E5500 | CPU_FTRS_E6500 | 52062306a36Sopenharmony_ci#endif 52162306a36Sopenharmony_ci 0, 52262306a36Sopenharmony_ci}; 52362306a36Sopenharmony_ci#endif /* __powerpc64__ */ 52462306a36Sopenharmony_ci 52562306a36Sopenharmony_ci#ifdef CONFIG_PPC64 52662306a36Sopenharmony_ci#ifdef CONFIG_PPC_BOOK3E_64 52762306a36Sopenharmony_ci#define CPU_FTRS_ALWAYS (CPU_FTRS_E6500 & CPU_FTRS_E5500) 52862306a36Sopenharmony_ci#else 52962306a36Sopenharmony_ci 53062306a36Sopenharmony_ci#ifdef CONFIG_PPC_DT_CPU_FTRS 53162306a36Sopenharmony_ci#define CPU_FTRS_DT_CPU_BASE \ 53262306a36Sopenharmony_ci (CPU_FTR_LWSYNC | \ 53362306a36Sopenharmony_ci CPU_FTR_FPU_UNAVAILABLE | \ 53462306a36Sopenharmony_ci CPU_FTR_NOEXECUTE | \ 53562306a36Sopenharmony_ci CPU_FTR_COHERENT_ICACHE | \ 53662306a36Sopenharmony_ci CPU_FTR_STCX_CHECKS_ADDRESS | \ 53762306a36Sopenharmony_ci CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \ 53862306a36Sopenharmony_ci CPU_FTR_DAWR | \ 53962306a36Sopenharmony_ci CPU_FTR_ARCH_206 | \ 54062306a36Sopenharmony_ci CPU_FTR_ARCH_207S) 54162306a36Sopenharmony_ci#else 54262306a36Sopenharmony_ci#define CPU_FTRS_DT_CPU_BASE (~0ul) 54362306a36Sopenharmony_ci#endif 54462306a36Sopenharmony_ci 54562306a36Sopenharmony_ci#ifdef CONFIG_CPU_LITTLE_ENDIAN 54662306a36Sopenharmony_ci#define CPU_FTRS_ALWAYS \ 54762306a36Sopenharmony_ci (CPU_FTRS_POSSIBLE & ~CPU_FTR_HVMODE & CPU_FTRS_POWER7 & \ 54862306a36Sopenharmony_ci CPU_FTRS_POWER8E & CPU_FTRS_POWER8 & CPU_FTRS_POWER9 & \ 54962306a36Sopenharmony_ci CPU_FTRS_POWER9_DD2_1 & CPU_FTRS_POWER9_DD2_2 & \ 55062306a36Sopenharmony_ci CPU_FTRS_POWER10 & CPU_FTRS_DT_CPU_BASE) 55162306a36Sopenharmony_ci#else 55262306a36Sopenharmony_ci#define CPU_FTRS_ALWAYS \ 55362306a36Sopenharmony_ci (CPU_FTRS_PPC970 & CPU_FTRS_POWER5 & \ 55462306a36Sopenharmony_ci CPU_FTRS_POWER6 & CPU_FTRS_POWER7 & CPU_FTRS_CELL & \ 55562306a36Sopenharmony_ci CPU_FTRS_PA6T & CPU_FTRS_POWER8 & CPU_FTRS_POWER8E & \ 55662306a36Sopenharmony_ci ~CPU_FTR_HVMODE & CPU_FTRS_POSSIBLE & CPU_FTRS_POWER9 & \ 55762306a36Sopenharmony_ci CPU_FTRS_POWER9_DD2_1 & CPU_FTRS_POWER9_DD2_2 & \ 55862306a36Sopenharmony_ci CPU_FTRS_POWER10 & CPU_FTRS_DT_CPU_BASE) 55962306a36Sopenharmony_ci#endif /* CONFIG_CPU_LITTLE_ENDIAN */ 56062306a36Sopenharmony_ci#endif 56162306a36Sopenharmony_ci#else 56262306a36Sopenharmony_cienum { 56362306a36Sopenharmony_ci CPU_FTRS_ALWAYS = 56462306a36Sopenharmony_ci#ifdef CONFIG_PPC_BOOK3S_604 56562306a36Sopenharmony_ci CPU_FTRS_604 & CPU_FTRS_740_NOTAU & 56662306a36Sopenharmony_ci CPU_FTRS_740 & CPU_FTRS_750 & CPU_FTRS_750FX1 & 56762306a36Sopenharmony_ci CPU_FTRS_750FX2 & CPU_FTRS_750FX & CPU_FTRS_750GX & 56862306a36Sopenharmony_ci CPU_FTRS_7400_NOTAU & CPU_FTRS_7400 & CPU_FTRS_7450_20 & 56962306a36Sopenharmony_ci CPU_FTRS_7450_21 & CPU_FTRS_7450_23 & CPU_FTRS_7455_1 & 57062306a36Sopenharmony_ci CPU_FTRS_7455_20 & CPU_FTRS_7455 & CPU_FTRS_7447_10 & 57162306a36Sopenharmony_ci CPU_FTRS_7447 & CPU_FTRS_7447A & 57262306a36Sopenharmony_ci CPU_FTRS_CLASSIC32 & 57362306a36Sopenharmony_ci#endif 57462306a36Sopenharmony_ci#ifdef CONFIG_PPC_BOOK3S_603 57562306a36Sopenharmony_ci CPU_FTRS_603 & CPU_FTRS_82XX & 57662306a36Sopenharmony_ci CPU_FTRS_G2_LE & CPU_FTRS_E300 & CPU_FTRS_E300C2 & 57762306a36Sopenharmony_ci#endif 57862306a36Sopenharmony_ci#ifdef CONFIG_PPC_8xx 57962306a36Sopenharmony_ci CPU_FTRS_8XX & 58062306a36Sopenharmony_ci#endif 58162306a36Sopenharmony_ci#ifdef CONFIG_40x 58262306a36Sopenharmony_ci CPU_FTRS_40X & 58362306a36Sopenharmony_ci#endif 58462306a36Sopenharmony_ci#ifdef CONFIG_PPC_47x 58562306a36Sopenharmony_ci CPU_FTRS_47X & 58662306a36Sopenharmony_ci#elif defined(CONFIG_44x) 58762306a36Sopenharmony_ci CPU_FTRS_44X & CPU_FTRS_440x6 & 58862306a36Sopenharmony_ci#endif 58962306a36Sopenharmony_ci#ifdef CONFIG_PPC_E500 59062306a36Sopenharmony_ci CPU_FTRS_E500 & CPU_FTRS_E500_2 & 59162306a36Sopenharmony_ci#endif 59262306a36Sopenharmony_ci#ifdef CONFIG_PPC_E500MC 59362306a36Sopenharmony_ci CPU_FTRS_E500MC & CPU_FTRS_E5500 & CPU_FTRS_E6500 & 59462306a36Sopenharmony_ci#endif 59562306a36Sopenharmony_ci ~CPU_FTR_EMB_HV & /* can be removed at runtime */ 59662306a36Sopenharmony_ci CPU_FTRS_POSSIBLE, 59762306a36Sopenharmony_ci}; 59862306a36Sopenharmony_ci#endif /* __powerpc64__ */ 59962306a36Sopenharmony_ci 60062306a36Sopenharmony_ci/* 60162306a36Sopenharmony_ci * Maximum number of hw breakpoint supported on powerpc. Number of 60262306a36Sopenharmony_ci * breakpoints supported by actual hw might be less than this, which 60362306a36Sopenharmony_ci * is decided at run time in nr_wp_slots(). 60462306a36Sopenharmony_ci */ 60562306a36Sopenharmony_ci#define HBP_NUM_MAX 2 60662306a36Sopenharmony_ci 60762306a36Sopenharmony_ci#endif /* !__ASSEMBLY__ */ 60862306a36Sopenharmony_ci 60962306a36Sopenharmony_ci#endif /* __ASM_POWERPC_CPUTABLE_H */ 610