| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Copyright (C) 2020-2022 Loongson Technology Corporation Limited |
| * |
| * Derived from MIPS: |
| * Copyright (C) 2003, 2004 Ralf Baechle |
| * Copyright (C) 2004 Maciej W. Rozycki |
| */ |
| #ifndef __ASM_CPU_FEATURES_H |
| #define __ASM_CPU_FEATURES_H |
| |
| #include <asm/cpu.h> |
| #include <asm/cpu-info.h> |
| |
| #define cpu_opt(opt) (cpu_data[0].options & (opt)) |
| #define cpu_has(feat) (cpu_data[0].options & BIT_ULL(feat)) |
| |
| #define cpu_has_loongarch (cpu_has_loongarch32 | cpu_has_loongarch64) |
| #define cpu_has_loongarch32 (cpu_data[0].isa_level & LOONGARCH_CPU_ISA_32BIT) |
| #define cpu_has_loongarch64 (cpu_data[0].isa_level & LOONGARCH_CPU_ISA_64BIT) |
| |
| #ifdef CONFIG_32BIT |
| # define cpu_has_64bits (cpu_data[0].isa_level & LOONGARCH_CPU_ISA_64BIT) |
| # define cpu_vabits 31 |
| # define cpu_pabits 31 |
| #endif |
| |
| #ifdef CONFIG_64BIT |
| # define cpu_has_64bits 1 |
| # define cpu_vabits cpu_data[0].vabits |
| # define cpu_pabits cpu_data[0].pabits |
| # define __NEED_ADDRBITS_PROBE |
| #endif |
| |
| /* |
| * SMP assumption: Options of CPU 0 are a superset of all processors. |
| * This is true for all known LoongArch systems. |
| */ |
| #define cpu_has_cpucfg cpu_opt(LOONGARCH_CPU_CPUCFG) |
| #define cpu_has_lam cpu_opt(LOONGARCH_CPU_LAM) |
| #define cpu_has_ual cpu_opt(LOONGARCH_CPU_UAL) |
| #define cpu_has_fpu cpu_opt(LOONGARCH_CPU_FPU) |
| #define cpu_has_lsx cpu_opt(LOONGARCH_CPU_LSX) |
| #define cpu_has_lasx cpu_opt(LOONGARCH_CPU_LASX) |
| #define cpu_has_crc32 cpu_opt(LOONGARCH_CPU_CRC32) |
| #define cpu_has_complex cpu_opt(LOONGARCH_CPU_COMPLEX) |
| #define cpu_has_crypto cpu_opt(LOONGARCH_CPU_CRYPTO) |
| #define cpu_has_lvz cpu_opt(LOONGARCH_CPU_LVZ) |
| #define cpu_has_lbt_x86 cpu_opt(LOONGARCH_CPU_LBT_X86) |
| #define cpu_has_lbt_arm cpu_opt(LOONGARCH_CPU_LBT_ARM) |
| #define cpu_has_lbt_mips cpu_opt(LOONGARCH_CPU_LBT_MIPS) |
| #define cpu_has_lbt (cpu_has_lbt_x86|cpu_has_lbt_arm|cpu_has_lbt_mips) |
| #define cpu_has_csr cpu_opt(LOONGARCH_CPU_CSR) |
| #define cpu_has_iocsr cpu_opt(LOONGARCH_CPU_IOCSR) |
| #define cpu_has_tlb cpu_opt(LOONGARCH_CPU_TLB) |
| #define cpu_has_watch cpu_opt(LOONGARCH_CPU_WATCH) |
| #define cpu_has_vint cpu_opt(LOONGARCH_CPU_VINT) |
| #define cpu_has_csripi cpu_opt(LOONGARCH_CPU_CSRIPI) |
| #define cpu_has_extioi cpu_opt(LOONGARCH_CPU_EXTIOI) |
| #define cpu_has_prefetch cpu_opt(LOONGARCH_CPU_PREFETCH) |
| #define cpu_has_pmp cpu_opt(LOONGARCH_CPU_PMP) |
| #define cpu_has_perf cpu_opt(LOONGARCH_CPU_PMP) |
| #define cpu_has_scalefreq cpu_opt(LOONGARCH_CPU_SCALEFREQ) |
| #define cpu_has_flatmode cpu_opt(LOONGARCH_CPU_FLATMODE) |
| #define cpu_has_eiodecode cpu_opt(LOONGARCH_CPU_EIODECODE) |
| #define cpu_has_guestid cpu_opt(LOONGARCH_CPU_GUESTID) |
| #define cpu_has_hypervisor cpu_opt(LOONGARCH_CPU_HYPERVISOR) |
| #define cpu_has_ptw cpu_opt(LOONGARCH_CPU_PTW) |
| #define cpu_has_lspw cpu_opt(LOONGARCH_CPU_LSPW) |
| #define cpu_has_avecint cpu_opt(LOONGARCH_CPU_AVECINT) |
| |
| #endif /* __ASM_CPU_FEATURES_H */ |