xref: /linux/arch/arm64/include/asm/cpu.h (revision c34e9ab9a612ee8b18273398ef75c207b01f516d)
1caab277bSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2df857416SMark Rutland /*
3df857416SMark Rutland   * Copyright (C) 2014 ARM Ltd.
4df857416SMark Rutland  */
5df857416SMark Rutland #ifndef __ASM_CPU_H
6df857416SMark Rutland #define __ASM_CPU_H
7df857416SMark Rutland 
8df857416SMark Rutland #include <linux/cpu.h>
9df857416SMark Rutland #include <linux/init.h>
10df857416SMark Rutland #include <linux/percpu.h>
11df857416SMark Rutland 
12df857416SMark Rutland /*
13df857416SMark Rutland  * Records attributes of an individual CPU.
14df857416SMark Rutland  */
15930a58b4SWill Deacon struct cpuinfo_32bit {
1680639d4aSMark Rutland 	u32		reg_id_dfr0;
17dd35ec07SAnshuman Khandual 	u32		reg_id_dfr1;
18df857416SMark Rutland 	u32		reg_id_isar0;
19df857416SMark Rutland 	u32		reg_id_isar1;
20df857416SMark Rutland 	u32		reg_id_isar2;
21df857416SMark Rutland 	u32		reg_id_isar3;
22df857416SMark Rutland 	u32		reg_id_isar4;
23df857416SMark Rutland 	u32		reg_id_isar5;
248e3747beSAnshuman Khandual 	u32		reg_id_isar6;
25df857416SMark Rutland 	u32		reg_id_mmfr0;
26df857416SMark Rutland 	u32		reg_id_mmfr1;
27df857416SMark Rutland 	u32		reg_id_mmfr2;
28df857416SMark Rutland 	u32		reg_id_mmfr3;
29858b8a80SAnshuman Khandual 	u32		reg_id_mmfr4;
30152accf8SAnshuman Khandual 	u32		reg_id_mmfr5;
31df857416SMark Rutland 	u32		reg_id_pfr0;
32df857416SMark Rutland 	u32		reg_id_pfr1;
3316824085SAnshuman Khandual 	u32		reg_id_pfr2;
3480639d4aSMark Rutland 
3580639d4aSMark Rutland 	u32		reg_mvfr0;
3680639d4aSMark Rutland 	u32		reg_mvfr1;
3780639d4aSMark Rutland 	u32		reg_mvfr2;
38930a58b4SWill Deacon };
39930a58b4SWill Deacon 
40930a58b4SWill Deacon struct cpuinfo_arm64 {
41930a58b4SWill Deacon 	struct kobject	kobj;
42930a58b4SWill Deacon 	u64		reg_ctr;
43930a58b4SWill Deacon 	u64		reg_cntfrq;
44930a58b4SWill Deacon 	u64		reg_dczid;
45930a58b4SWill Deacon 	u64		reg_midr;
46930a58b4SWill Deacon 	u64		reg_revidr;
47930a58b4SWill Deacon 	u64		reg_aidr;
48d69d5649SMark Brown 	u64		reg_gmid;
49*09e6b306SJames Morse 	u64		reg_smidr;
50930a58b4SWill Deacon 	u64		reg_mpamidr;
51930a58b4SWill Deacon 
52930a58b4SWill Deacon 	u64		reg_id_aa64dfr0;
53930a58b4SWill Deacon 	u64		reg_id_aa64dfr1;
54930a58b4SWill Deacon 	u64		reg_id_aa64isar0;
559e45365fSJoey Gouly 	u64		reg_id_aa64isar1;
56cc9f69a3SMark Brown 	u64		reg_id_aa64isar2;
57930a58b4SWill Deacon 	u64		reg_id_aa64isar3;
58930a58b4SWill Deacon 	u64		reg_id_aa64mmfr0;
59930a58b4SWill Deacon 	u64		reg_id_aa64mmfr1;
60edc25898SJoey Gouly 	u64		reg_id_aa64mmfr2;
61805bb61fSMarc Zyngier 	u64		reg_id_aa64mmfr3;
62930a58b4SWill Deacon 	u64		reg_id_aa64mmfr4;
63930a58b4SWill Deacon 	u64		reg_id_aa64pfr0;
64cc9f69a3SMark Brown 	u64		reg_id_aa64pfr1;
65930a58b4SWill Deacon 	u64		reg_id_aa64pfr2;
665e64b862SMark Brown 	u64		reg_id_aa64zfr0;
67cc9f69a3SMark Brown 	u64		reg_id_aa64smfr0;
68930a58b4SWill Deacon 	u64		reg_id_aa64fpfr0;
69930a58b4SWill Deacon 
70df857416SMark Rutland 	struct cpuinfo_32bit	aarch32;
71df857416SMark Rutland };
72df857416SMark Rutland 
73df857416SMark Rutland DECLARE_PER_CPU(struct cpuinfo_arm64, cpu_data);
74df857416SMark Rutland 
75df857416SMark Rutland void cpuinfo_store_cpu(void);
76df857416SMark Rutland void __init cpuinfo_store_boot_cpu(void);
773c739b57SSuzuki K. Poulose 
783086d391SSuzuki K. Poulose void __init init_cpu_features(struct cpuinfo_arm64 *info);
793086d391SSuzuki K. Poulose void update_cpu_features(int cpu, struct cpuinfo_arm64 *info,
80cdcf817bSSuzuki K. Poulose 				 struct cpuinfo_arm64 *boot);
81df857416SMark Rutland 
82 #endif /* __ASM_CPU_H */
83