0001
0002
0003
0004
0005 #ifndef __ASM_CPU_H
0006 #define __ASM_CPU_H
0007
0008 #include <linux/cpu.h>
0009 #include <linux/init.h>
0010 #include <linux/percpu.h>
0011
0012
0013
0014
0015 struct cpuinfo_32bit {
0016 u32 reg_id_dfr0;
0017 u32 reg_id_dfr1;
0018 u32 reg_id_isar0;
0019 u32 reg_id_isar1;
0020 u32 reg_id_isar2;
0021 u32 reg_id_isar3;
0022 u32 reg_id_isar4;
0023 u32 reg_id_isar5;
0024 u32 reg_id_isar6;
0025 u32 reg_id_mmfr0;
0026 u32 reg_id_mmfr1;
0027 u32 reg_id_mmfr2;
0028 u32 reg_id_mmfr3;
0029 u32 reg_id_mmfr4;
0030 u32 reg_id_mmfr5;
0031 u32 reg_id_pfr0;
0032 u32 reg_id_pfr1;
0033 u32 reg_id_pfr2;
0034
0035 u32 reg_mvfr0;
0036 u32 reg_mvfr1;
0037 u32 reg_mvfr2;
0038 };
0039
0040 struct cpuinfo_arm64 {
0041 struct cpu cpu;
0042 struct kobject kobj;
0043 u64 reg_ctr;
0044 u64 reg_cntfrq;
0045 u64 reg_dczid;
0046 u64 reg_midr;
0047 u64 reg_revidr;
0048 u64 reg_gmid;
0049 u64 reg_smidr;
0050
0051 u64 reg_id_aa64dfr0;
0052 u64 reg_id_aa64dfr1;
0053 u64 reg_id_aa64isar0;
0054 u64 reg_id_aa64isar1;
0055 u64 reg_id_aa64isar2;
0056 u64 reg_id_aa64mmfr0;
0057 u64 reg_id_aa64mmfr1;
0058 u64 reg_id_aa64mmfr2;
0059 u64 reg_id_aa64pfr0;
0060 u64 reg_id_aa64pfr1;
0061 u64 reg_id_aa64zfr0;
0062 u64 reg_id_aa64smfr0;
0063
0064 struct cpuinfo_32bit aarch32;
0065
0066
0067 u64 reg_zcr;
0068
0069
0070 u64 reg_smcr;
0071 };
0072
0073 DECLARE_PER_CPU(struct cpuinfo_arm64, cpu_data);
0074
0075 void cpuinfo_store_cpu(void);
0076 void __init cpuinfo_store_boot_cpu(void);
0077
0078 void __init init_cpu_features(struct cpuinfo_arm64 *info);
0079 void update_cpu_features(int cpu, struct cpuinfo_arm64 *info,
0080 struct cpuinfo_arm64 *boot);
0081
0082 #endif