1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3  * Copyright (C) 2014 ARM Ltd.
4 */
5#ifndef __ASM_CPU_H
6#define __ASM_CPU_H
7
8#include <linux/cpu.h>
9#include <linux/init.h>
10#include <linux/percpu.h>
11
12/*
13 * Records attributes of an individual CPU.
14 */
15struct cpuinfo_arm64 {
16	struct cpu	cpu;
17	struct kobject	kobj;
18	u32		reg_ctr;
19	u32		reg_cntfrq;
20	u32		reg_dczid;
21	u32		reg_midr;
22	u32		reg_revidr;
23
24	u64		reg_id_aa64dfr0;
25	u64		reg_id_aa64dfr1;
26	u64		reg_id_aa64isar0;
27	u64		reg_id_aa64isar1;
28	u64		reg_id_aa64isar2;
29	u64		reg_id_aa64mmfr0;
30	u64		reg_id_aa64mmfr1;
31	u64		reg_id_aa64mmfr2;
32	u64		reg_id_aa64pfr0;
33	u64		reg_id_aa64pfr1;
34	u64		reg_id_aa64zfr0;
35
36	u32		reg_id_dfr0;
37	u32		reg_id_dfr1;
38	u32		reg_id_isar0;
39	u32		reg_id_isar1;
40	u32		reg_id_isar2;
41	u32		reg_id_isar3;
42	u32		reg_id_isar4;
43	u32		reg_id_isar5;
44	u32		reg_id_isar6;
45	u32		reg_id_mmfr0;
46	u32		reg_id_mmfr1;
47	u32		reg_id_mmfr2;
48	u32		reg_id_mmfr3;
49	u32		reg_id_mmfr4;
50	u32		reg_id_mmfr5;
51	u32		reg_id_pfr0;
52	u32		reg_id_pfr1;
53	u32		reg_id_pfr2;
54
55	u32		reg_mvfr0;
56	u32		reg_mvfr1;
57	u32		reg_mvfr2;
58
59	/* pseudo-ZCR for recording maximum ZCR_EL1 LEN value: */
60	u64		reg_zcr;
61};
62
63DECLARE_PER_CPU(struct cpuinfo_arm64, cpu_data);
64
65void cpuinfo_store_cpu(void);
66void __init cpuinfo_store_boot_cpu(void);
67
68void __init init_cpu_features(struct cpuinfo_arm64 *info);
69void update_cpu_features(int cpu, struct cpuinfo_arm64 *info,
70				 struct cpuinfo_arm64 *boot);
71
72#endif /* __ASM_CPU_H */
73