18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci  * Copyright (C) 2014 ARM Ltd.
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci#ifndef __ASM_CPU_H
68c2ecf20Sopenharmony_ci#define __ASM_CPU_H
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#include <linux/cpu.h>
98c2ecf20Sopenharmony_ci#include <linux/init.h>
108c2ecf20Sopenharmony_ci#include <linux/percpu.h>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci/*
138c2ecf20Sopenharmony_ci * Records attributes of an individual CPU.
148c2ecf20Sopenharmony_ci */
158c2ecf20Sopenharmony_cistruct cpuinfo_arm64 {
168c2ecf20Sopenharmony_ci	struct cpu	cpu;
178c2ecf20Sopenharmony_ci	struct kobject	kobj;
188c2ecf20Sopenharmony_ci	u32		reg_ctr;
198c2ecf20Sopenharmony_ci	u32		reg_cntfrq;
208c2ecf20Sopenharmony_ci	u32		reg_dczid;
218c2ecf20Sopenharmony_ci	u32		reg_midr;
228c2ecf20Sopenharmony_ci	u32		reg_revidr;
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci	u64		reg_id_aa64dfr0;
258c2ecf20Sopenharmony_ci	u64		reg_id_aa64dfr1;
268c2ecf20Sopenharmony_ci	u64		reg_id_aa64isar0;
278c2ecf20Sopenharmony_ci	u64		reg_id_aa64isar1;
288c2ecf20Sopenharmony_ci	u64		reg_id_aa64isar2;
298c2ecf20Sopenharmony_ci	u64		reg_id_aa64mmfr0;
308c2ecf20Sopenharmony_ci	u64		reg_id_aa64mmfr1;
318c2ecf20Sopenharmony_ci	u64		reg_id_aa64mmfr2;
328c2ecf20Sopenharmony_ci	u64		reg_id_aa64pfr0;
338c2ecf20Sopenharmony_ci	u64		reg_id_aa64pfr1;
348c2ecf20Sopenharmony_ci	u64		reg_id_aa64zfr0;
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci	u32		reg_id_dfr0;
378c2ecf20Sopenharmony_ci	u32		reg_id_dfr1;
388c2ecf20Sopenharmony_ci	u32		reg_id_isar0;
398c2ecf20Sopenharmony_ci	u32		reg_id_isar1;
408c2ecf20Sopenharmony_ci	u32		reg_id_isar2;
418c2ecf20Sopenharmony_ci	u32		reg_id_isar3;
428c2ecf20Sopenharmony_ci	u32		reg_id_isar4;
438c2ecf20Sopenharmony_ci	u32		reg_id_isar5;
448c2ecf20Sopenharmony_ci	u32		reg_id_isar6;
458c2ecf20Sopenharmony_ci	u32		reg_id_mmfr0;
468c2ecf20Sopenharmony_ci	u32		reg_id_mmfr1;
478c2ecf20Sopenharmony_ci	u32		reg_id_mmfr2;
488c2ecf20Sopenharmony_ci	u32		reg_id_mmfr3;
498c2ecf20Sopenharmony_ci	u32		reg_id_mmfr4;
508c2ecf20Sopenharmony_ci	u32		reg_id_mmfr5;
518c2ecf20Sopenharmony_ci	u32		reg_id_pfr0;
528c2ecf20Sopenharmony_ci	u32		reg_id_pfr1;
538c2ecf20Sopenharmony_ci	u32		reg_id_pfr2;
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ci	u32		reg_mvfr0;
568c2ecf20Sopenharmony_ci	u32		reg_mvfr1;
578c2ecf20Sopenharmony_ci	u32		reg_mvfr2;
588c2ecf20Sopenharmony_ci
598c2ecf20Sopenharmony_ci	/* pseudo-ZCR for recording maximum ZCR_EL1 LEN value: */
608c2ecf20Sopenharmony_ci	u64		reg_zcr;
618c2ecf20Sopenharmony_ci};
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_ciDECLARE_PER_CPU(struct cpuinfo_arm64, cpu_data);
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_civoid cpuinfo_store_cpu(void);
668c2ecf20Sopenharmony_civoid __init cpuinfo_store_boot_cpu(void);
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_civoid __init init_cpu_features(struct cpuinfo_arm64 *info);
698c2ecf20Sopenharmony_civoid update_cpu_features(int cpu, struct cpuinfo_arm64 *info,
708c2ecf20Sopenharmony_ci				 struct cpuinfo_arm64 *boot);
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ci#endif /* __ASM_CPU_H */
73