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