1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited 4 * 5 * Derived from MIPS: 6 * Copyright (C) 2003, 2004 Ralf Baechle 7 * Copyright (C) 2004 Maciej W. Rozycki 8 */ 9 #ifndef __ASM_CPU_FEATURES_H 10 #define __ASM_CPU_FEATURES_H 11 12 #include <asm/cpu.h> 13 #include <asm/cpu-info.h> 14 15 #define cpu_opt(opt) (cpu_data[0].options & (opt)) 16 #define cpu_has(feat) (cpu_data[0].options & BIT_ULL(feat)) 17 18 #define cpu_has_loongarch (cpu_has_loongarch32 | cpu_has_loongarch64) 19 #define cpu_has_loongarch32 (cpu_data[0].isa_level & LOONGARCH_CPU_ISA_32BIT) 20 #define cpu_has_loongarch64 (cpu_data[0].isa_level & LOONGARCH_CPU_ISA_64BIT) 21 22 #define cpu_icache_line_size() cpu_data[0].icache.linesz 23 #define cpu_dcache_line_size() cpu_data[0].dcache.linesz 24 #define cpu_vcache_line_size() cpu_data[0].vcache.linesz 25 #define cpu_scache_line_size() cpu_data[0].scache.linesz 26 27 #ifdef CONFIG_32BIT 28 # define cpu_has_64bits (cpu_data[0].isa_level & LOONGARCH_CPU_ISA_64BIT) 29 # define cpu_vabits 31 30 # define cpu_pabits 31 31 #endif 32 33 #ifdef CONFIG_64BIT 34 # define cpu_has_64bits 1 35 # define cpu_vabits cpu_data[0].vabits 36 # define cpu_pabits cpu_data[0].pabits 37 # define __NEED_ADDRBITS_PROBE 38 #endif 39 40 /* 41 * SMP assumption: Options of CPU 0 are a superset of all processors. 42 * This is true for all known LoongArch systems. 43 */ 44 #define cpu_has_cpucfg cpu_opt(LOONGARCH_CPU_CPUCFG) 45 #define cpu_has_lam cpu_opt(LOONGARCH_CPU_LAM) 46 #define cpu_has_ual cpu_opt(LOONGARCH_CPU_UAL) 47 #define cpu_has_fpu cpu_opt(LOONGARCH_CPU_FPU) 48 #define cpu_has_lsx cpu_opt(LOONGARCH_CPU_LSX) 49 #define cpu_has_lasx cpu_opt(LOONGARCH_CPU_LASX) 50 #define cpu_has_complex cpu_opt(LOONGARCH_CPU_COMPLEX) 51 #define cpu_has_crypto cpu_opt(LOONGARCH_CPU_CRYPTO) 52 #define cpu_has_lvz cpu_opt(LOONGARCH_CPU_LVZ) 53 #define cpu_has_lbt_x86 cpu_opt(LOONGARCH_CPU_LBT_X86) 54 #define cpu_has_lbt_arm cpu_opt(LOONGARCH_CPU_LBT_ARM) 55 #define cpu_has_lbt_mips cpu_opt(LOONGARCH_CPU_LBT_MIPS) 56 #define cpu_has_lbt (cpu_has_lbt_x86|cpu_has_lbt_arm|cpu_has_lbt_mips) 57 #define cpu_has_csr cpu_opt(LOONGARCH_CPU_CSR) 58 #define cpu_has_tlb cpu_opt(LOONGARCH_CPU_TLB) 59 #define cpu_has_watch cpu_opt(LOONGARCH_CPU_WATCH) 60 #define cpu_has_vint cpu_opt(LOONGARCH_CPU_VINT) 61 #define cpu_has_csripi cpu_opt(LOONGARCH_CPU_CSRIPI) 62 #define cpu_has_extioi cpu_opt(LOONGARCH_CPU_EXTIOI) 63 #define cpu_has_prefetch cpu_opt(LOONGARCH_CPU_PREFETCH) 64 #define cpu_has_pmp cpu_opt(LOONGARCH_CPU_PMP) 65 #define cpu_has_perf cpu_opt(LOONGARCH_CPU_PMP) 66 #define cpu_has_scalefreq cpu_opt(LOONGARCH_CPU_SCALEFREQ) 67 #define cpu_has_flatmode cpu_opt(LOONGARCH_CPU_FLATMODE) 68 #define cpu_has_eiodecode cpu_opt(LOONGARCH_CPU_EIODECODE) 69 #define cpu_has_guestid cpu_opt(LOONGARCH_CPU_GUESTID) 70 #define cpu_has_hypervisor cpu_opt(LOONGARCH_CPU_HYPERVISOR) 71 72 73 #endif /* __ASM_CPU_FEATURES_H */ 74