xref: /kernel/linux/linux-6.6/arch/arm64/include/asm/cpu.h (revision 62306a36)
162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci  * Copyright (C) 2014 ARM Ltd.
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci#ifndef __ASM_CPU_H
662306a36Sopenharmony_ci#define __ASM_CPU_H
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#include <linux/cpu.h>
962306a36Sopenharmony_ci#include <linux/init.h>
1062306a36Sopenharmony_ci#include <linux/percpu.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci/*
1362306a36Sopenharmony_ci * Records attributes of an individual CPU.
1462306a36Sopenharmony_ci */
1562306a36Sopenharmony_cistruct cpuinfo_32bit {
1662306a36Sopenharmony_ci	u32		reg_id_dfr0;
1762306a36Sopenharmony_ci	u32		reg_id_dfr1;
1862306a36Sopenharmony_ci	u32		reg_id_isar0;
1962306a36Sopenharmony_ci	u32		reg_id_isar1;
2062306a36Sopenharmony_ci	u32		reg_id_isar2;
2162306a36Sopenharmony_ci	u32		reg_id_isar3;
2262306a36Sopenharmony_ci	u32		reg_id_isar4;
2362306a36Sopenharmony_ci	u32		reg_id_isar5;
2462306a36Sopenharmony_ci	u32		reg_id_isar6;
2562306a36Sopenharmony_ci	u32		reg_id_mmfr0;
2662306a36Sopenharmony_ci	u32		reg_id_mmfr1;
2762306a36Sopenharmony_ci	u32		reg_id_mmfr2;
2862306a36Sopenharmony_ci	u32		reg_id_mmfr3;
2962306a36Sopenharmony_ci	u32		reg_id_mmfr4;
3062306a36Sopenharmony_ci	u32		reg_id_mmfr5;
3162306a36Sopenharmony_ci	u32		reg_id_pfr0;
3262306a36Sopenharmony_ci	u32		reg_id_pfr1;
3362306a36Sopenharmony_ci	u32		reg_id_pfr2;
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci	u32		reg_mvfr0;
3662306a36Sopenharmony_ci	u32		reg_mvfr1;
3762306a36Sopenharmony_ci	u32		reg_mvfr2;
3862306a36Sopenharmony_ci};
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_cistruct cpuinfo_arm64 {
4162306a36Sopenharmony_ci	struct cpu	cpu;
4262306a36Sopenharmony_ci	struct kobject	kobj;
4362306a36Sopenharmony_ci	u64		reg_ctr;
4462306a36Sopenharmony_ci	u64		reg_cntfrq;
4562306a36Sopenharmony_ci	u64		reg_dczid;
4662306a36Sopenharmony_ci	u64		reg_midr;
4762306a36Sopenharmony_ci	u64		reg_revidr;
4862306a36Sopenharmony_ci	u64		reg_gmid;
4962306a36Sopenharmony_ci	u64		reg_smidr;
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci	u64		reg_id_aa64dfr0;
5262306a36Sopenharmony_ci	u64		reg_id_aa64dfr1;
5362306a36Sopenharmony_ci	u64		reg_id_aa64isar0;
5462306a36Sopenharmony_ci	u64		reg_id_aa64isar1;
5562306a36Sopenharmony_ci	u64		reg_id_aa64isar2;
5662306a36Sopenharmony_ci	u64		reg_id_aa64mmfr0;
5762306a36Sopenharmony_ci	u64		reg_id_aa64mmfr1;
5862306a36Sopenharmony_ci	u64		reg_id_aa64mmfr2;
5962306a36Sopenharmony_ci	u64		reg_id_aa64mmfr3;
6062306a36Sopenharmony_ci	u64		reg_id_aa64pfr0;
6162306a36Sopenharmony_ci	u64		reg_id_aa64pfr1;
6262306a36Sopenharmony_ci	u64		reg_id_aa64zfr0;
6362306a36Sopenharmony_ci	u64		reg_id_aa64smfr0;
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci	struct cpuinfo_32bit	aarch32;
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci	/* pseudo-ZCR for recording maximum ZCR_EL1 LEN value: */
6862306a36Sopenharmony_ci	u64		reg_zcr;
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci	/* pseudo-SMCR for recording maximum SMCR_EL1 LEN value: */
7162306a36Sopenharmony_ci	u64		reg_smcr;
7262306a36Sopenharmony_ci};
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ciDECLARE_PER_CPU(struct cpuinfo_arm64, cpu_data);
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_civoid cpuinfo_store_cpu(void);
7762306a36Sopenharmony_civoid __init cpuinfo_store_boot_cpu(void);
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_civoid __init init_cpu_features(struct cpuinfo_arm64 *info);
8062306a36Sopenharmony_civoid update_cpu_features(int cpu, struct cpuinfo_arm64 *info,
8162306a36Sopenharmony_ci				 struct cpuinfo_arm64 *boot);
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci#endif /* __ASM_CPU_H */
84