From 4cde55b708845dcdcbc2ee410c9e3350b1fc7089 Mon Sep 17 00:00:00 2001 From: Bhargav Gurappadi Date: Mon, 1 Aug 2016 22:23:00 -0700 Subject: [PATCH] ANDROID: GKI: ARM/ARM64: Introduce arch_read_hardware_id Moving towards device tree and arm single binary referring to machine descriptor name for hardware id information under /proc/cpuinfo is not sufficient for soc vendors. Add a hook for soc vendors to supply a per-soc hardware read method Change-Id: Ifcccdffa3c0e1e8b5f96837eb1c023e468d4c287 Signed-off-by: Abhimanyu Kapur Signed-off-by: Prasad Sodagudi Signed-off-by: Rishabh Bhatnagar Signed-off-by: Bhargav Gurappadi (cherry picked from commit b39389c3a628527c408b03438e8cfa4c6664f02a) Signed-off-by: Mark Salyzyn Bug: 153738240 --- arch/arm/include/asm/system_misc.h | 1 + arch/arm/kernel/setup.c | 8 +++++++- arch/arm64/include/asm/system_misc.h | 1 + arch/arm64/kernel/cpuinfo.c | 12 ++++++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/arch/arm/include/asm/system_misc.h b/arch/arm/include/asm/system_misc.h index 8e76db83c498..8a0040f0ac29 100644 --- a/arch/arm/include/asm/system_misc.h +++ b/arch/arm/include/asm/system_misc.h @@ -37,6 +37,7 @@ static inline void harden_branch_predictor(void) #define UDBG_BUS (1 << 4) extern unsigned int user_debug; +extern char* (*arch_read_hardware_id)(void); static inline int handle_guest_sea(phys_addr_t addr, unsigned int esr) { diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 7bbaa293a38c..a17f9b250c4f 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @@ -113,6 +113,9 @@ unsigned int elf_hwcap2 __read_mostly; EXPORT_SYMBOL(elf_hwcap2); +char* (*arch_read_hardware_id)(void); +EXPORT_SYMBOL(arch_read_hardware_id); + #ifdef MULTI_CPU struct processor processor __ro_after_init; #if defined(CONFIG_BIG_LITTLE) && defined(CONFIG_HARDEN_BRANCH_PREDICTOR) @@ -1293,7 +1296,10 @@ static int c_show(struct seq_file *m, void *v) seq_printf(m, "CPU revision\t: %d\n\n", cpuid & 15); } - seq_printf(m, "Hardware\t: %s\n", machine_name); + if (!arch_read_hardware_id) + seq_printf(m, "Hardware\t: %s\n", machine_name); + else + seq_printf(m, "Hardware\t: %s\n", arch_read_hardware_id()); seq_printf(m, "Revision\t: %04x\n", system_rev); seq_printf(m, "Serial\t\t: %s\n", system_serial); diff --git a/arch/arm64/include/asm/system_misc.h b/arch/arm64/include/asm/system_misc.h index 28893a0b141d..8976f4de2a7d 100644 --- a/arch/arm64/include/asm/system_misc.h +++ b/arch/arm64/include/asm/system_misc.h @@ -44,6 +44,7 @@ extern void show_pte(unsigned long addr); extern void __show_regs(struct pt_regs *); extern void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd); +extern char* (*arch_read_hardware_id)(void); int handle_guest_sea(phys_addr_t addr, unsigned int esr); diff --git a/arch/arm64/kernel/cpuinfo.c b/arch/arm64/kernel/cpuinfo.c index dce971f2c167..adb3a3494b99 100644 --- a/arch/arm64/kernel/cpuinfo.c +++ b/arch/arm64/kernel/cpuinfo.c @@ -34,6 +34,12 @@ #include #include #include +#include + +char* (*arch_read_hardware_id)(void); +EXPORT_SYMBOL(arch_read_hardware_id); + +static const char *machine_name; /* * In case the boot CPU is hotpluggable, we record its initial state and @@ -177,6 +183,11 @@ static int c_show(struct seq_file *m, void *v) seq_printf(m, "CPU revision\t: %d\n\n", MIDR_REVISION(midr)); } + if (!arch_read_hardware_id) + seq_printf(m, "Hardware\t: %s\n", machine_name); + else + seq_printf(m, "Hardware\t: %s\n", arch_read_hardware_id()); + return 0; } @@ -383,6 +394,7 @@ void __init cpuinfo_store_boot_cpu(void) boot_cpu_data = *info; init_cpu_features(&boot_cpu_data); + machine_name = of_flat_dt_get_machine_name(); } device_initcall(cpuinfo_regs_init);