arm64: Get rid of struct cpu_table
authorMarc Zyngier <marc.zyngier@arm.com>
Wed, 18 Mar 2015 14:55:20 +0000 (14:55 +0000)
committerWill Deacon <will.deacon@arm.com>
Thu, 19 Mar 2015 19:46:00 +0000 (19:46 +0000)
struct cpu_table is an artifact left from the (very) early days of
the arm64 port, and its only real use is to allow the most beautiful
"AArch64 Processor" string to be displayed at boot time.

Really? Yes, really.

Let's get rid of it. In order to avoid another BogoMips-gate, the
aforementioned string is preserved.

Acked-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm64/include/asm/cputable.h [deleted file]
arch/arm64/kernel/Makefile
arch/arm64/kernel/asm-offsets.c
arch/arm64/kernel/cputable.c [deleted file]
arch/arm64/kernel/head.S
arch/arm64/kernel/setup.c

diff --git a/arch/arm64/include/asm/cputable.h b/arch/arm64/include/asm/cputable.h
deleted file mode 100644 (file)
index e3bd983..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * arch/arm64/include/asm/cputable.h
- *
- * Copyright (C) 2012 ARM Ltd.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef __ASM_CPUTABLE_H
-#define __ASM_CPUTABLE_H
-
-struct cpu_info {
-       unsigned int    cpu_id_val;
-       unsigned int    cpu_id_mask;
-       const char      *cpu_name;
-       unsigned long   (*cpu_setup)(void);
-};
-
-extern struct cpu_info *lookup_processor_type(unsigned int);
-
-#endif
index 5ee07eee80c2b0c1f5ba2b1292420eb396103be0..d5e70747c7a2c2ace1afd72c4f0c44523ef8d00d 100644 (file)
@@ -12,7 +12,7 @@ CFLAGS_REMOVE_insn.o = -pg
 CFLAGS_REMOVE_return_address.o = -pg
 
 # Object file lists.
-arm64-obj-y            := cputable.o debug-monitors.o entry.o irq.o fpsimd.o   \
+arm64-obj-y            := debug-monitors.o entry.o irq.o fpsimd.o              \
                           entry-fpsimd.o process.o ptrace.o setup.o signal.o   \
                           sys.o stacktrace.o time.o traps.o io.o vdso.o        \
                           hyp-stub.o psci.o psci-call.o cpu_ops.o insn.o       \
index f7fa65d4c3525e47de17d8349e4ae415e4de18ad..14dd3d1afa578b52f0dc65ed6f236bddded096ad 100644 (file)
@@ -24,7 +24,6 @@
 #include <linux/kvm_host.h>
 #include <asm/thread_info.h>
 #include <asm/memory.h>
-#include <asm/cputable.h>
 #include <asm/smp_plat.h>
 #include <asm/suspend.h>
 #include <asm/vdso_datapage.h>
@@ -71,9 +70,6 @@ int main(void)
   BLANK();
   DEFINE(PAGE_SZ,              PAGE_SIZE);
   BLANK();
-  DEFINE(CPU_INFO_SZ,          sizeof(struct cpu_info));
-  DEFINE(CPU_INFO_SETUP,       offsetof(struct cpu_info, cpu_setup));
-  BLANK();
   DEFINE(DMA_BIDIRECTIONAL,    DMA_BIDIRECTIONAL);
   DEFINE(DMA_TO_DEVICE,                DMA_TO_DEVICE);
   DEFINE(DMA_FROM_DEVICE,      DMA_FROM_DEVICE);
diff --git a/arch/arm64/kernel/cputable.c b/arch/arm64/kernel/cputable.c
deleted file mode 100644 (file)
index fd3993c..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * arch/arm64/kernel/cputable.c
- *
- * Copyright (C) 2012 ARM Ltd.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <linux/init.h>
-
-#include <asm/cputable.h>
-
-extern unsigned long __cpu_setup(void);
-
-struct cpu_info cpu_table[] = {
-       {
-               .cpu_id_val     = 0x000f0000,
-               .cpu_id_mask    = 0x000f0000,
-               .cpu_name       = "AArch64 Processor",
-               .cpu_setup      = __cpu_setup,
-       },
-       { /* Empty */ },
-};
index d17649d393922deeed6f8c98eaee80ffa41b8999..ebb9e630230a89adc7cd161b660667088af3a1e8 100644 (file)
@@ -245,22 +245,12 @@ ENTRY(stext)
        bl      __calc_phys_offset              // x24=PHYS_OFFSET, x28=PHYS_OFFSET-PAGE_OFFSET
        bl      set_cpu_boot_mode_flag
        mrs     x22, midr_el1                   // x22=cpuid
-       mov     x0, x22
-       bl      lookup_processor_type
-       mov     x23, x0                         // x23=current cpu_table
-       /*
-        * __error_p may end up out of range for cbz if text areas are
-        * aligned up to section sizes.
-        */
-       cbnz    x23, 1f                         // invalid processor (x23=0)?
-       b       __error_p
-1:
+
        bl      __vet_fdt
        bl      __create_page_tables            // x25=TTBR0, x26=TTBR1
        /*
-        * The following calls CPU specific code in a position independent
-        * manner. See arch/arm64/mm/proc.S for details. x23 = base of
-        * cpu_info structure selected by lookup_processor_type above.
+        * The following calls CPU setup code, see arch/arm64/mm/proc.S for
+        * details.
         * On return, the CPU will be ready for the MMU to be turned on and
         * the TCR will have been set.
         */
@@ -268,9 +258,7 @@ ENTRY(stext)
                                                // MMU has been enabled
        adrp    lr, __enable_mmu                // return (PIC) address
        add     lr, lr, #:lo12:__enable_mmu
-       ldr     x12, [x23, #CPU_INFO_SETUP]
-       add     x12, x12, x28                   // __virt_to_phys
-       br      x12                             // initialise processor
+       b       __cpu_setup                     // initialise processor
 ENDPROC(stext)
 
 /*
@@ -634,15 +622,9 @@ ENTRY(secondary_startup)
         * Common entry point for secondary CPUs.
         */
        mrs     x22, midr_el1                   // x22=cpuid
-       mov     x0, x22
-       bl      lookup_processor_type
-       mov     x23, x0                         // x23=current cpu_table
-       cbz     x23, __error_p                  // invalid processor (x23=0)?
 
        pgtbl   x25, x26, x28                   // x25=TTBR0, x26=TTBR1
-       ldr     x12, [x23, #CPU_INFO_SETUP]
-       add     x12, x12, x28                   // __virt_to_phys
-       blr     x12                             // initialise processor
+       bl      __cpu_setup                     // initialise processor
 
        ldr     x21, =secondary_data
        ldr     x27, =__secondary_switched      // address to jump to after enabling the MMU
@@ -708,51 +690,3 @@ ENDPROC(__calc_phys_offset)
        .align 3
 1:     .quad   .
        .quad   PAGE_OFFSET
-
-/*
- * Exception handling. Something went wrong and we can't proceed. We ought to
- * tell the user, but since we don't have any guarantee that we're even
- * running on the right architecture, we do virtually nothing.
- */
-__error_p:
-ENDPROC(__error_p)
-
-__error:
-1:     nop
-       b       1b
-ENDPROC(__error)
-
-/*
- * This function gets the processor ID in w0 and searches the cpu_table[] for
- * a match. It returns a pointer to the struct cpu_info it found. The
- * cpu_table[] must end with an empty (all zeros) structure.
- *
- * This routine can be called via C code and it needs to work with the MMU
- * both disabled and enabled (the offset is calculated automatically).
- */
-ENTRY(lookup_processor_type)
-       adr     x1, __lookup_processor_type_data
-       ldp     x2, x3, [x1]
-       sub     x1, x1, x2                      // get offset between VA and PA
-       add     x3, x3, x1                      // convert VA to PA
-1:
-       ldp     w5, w6, [x3]                    // load cpu_id_val and cpu_id_mask
-       cbz     w5, 2f                          // end of list?
-       and     w6, w6, w0
-       cmp     w5, w6
-       b.eq    3f
-       add     x3, x3, #CPU_INFO_SZ
-       b       1b
-2:
-       mov     x3, #0                          // unknown processor
-3:
-       mov     x0, x3
-       ret
-ENDPROC(lookup_processor_type)
-
-       .align  3
-       .type   __lookup_processor_type_data, %object
-__lookup_processor_type_data:
-       .quad   .
-       .quad   cpu_table
-       .size   __lookup_processor_type_data, . - __lookup_processor_type_data
index 14808947bf46714fc48d0f67dbe8f1983dec27fe..3852405d70b50de2a46c9647f93877df5f0a2495 100644 (file)
@@ -50,7 +50,6 @@
 #include <asm/cpu.h>
 #include <asm/cputype.h>
 #include <asm/elf.h>
-#include <asm/cputable.h>
 #include <asm/cpufeature.h>
 #include <asm/cpu_ops.h>
 #include <asm/sections.h>
@@ -84,7 +83,6 @@ unsigned int compat_elf_hwcap2 __read_mostly;
 
 DECLARE_BITMAP(cpu_hwcaps, ARM64_NCAPS);
 
-static const char *cpu_name;
 phys_addr_t __fdt_pointer __initdata;
 
 /*
@@ -234,22 +232,12 @@ void __init up_late_init(void)
 
 static void __init setup_processor(void)
 {
-       struct cpu_info *cpu_info;
        u64 features, block;
        u32 cwg;
        int cls;
 
-       cpu_info = lookup_processor_type(read_cpuid_id());
-       if (!cpu_info) {
-               printk("CPU configuration botched (ID %08x), unable to continue.\n",
-                      read_cpuid_id());
-               while (1);
-       }
-
-       cpu_name = cpu_info->cpu_name;
-
-       printk("CPU: %s [%08x] revision %d\n",
-              cpu_name, read_cpuid_id(), read_cpuid_id() & 15);
+       printk("CPU: AArch64 Processor [%08x] revision %d\n",
+              read_cpuid_id(), read_cpuid_id() & 15);
 
        sprintf(init_utsname()->machine, ELF_PLATFORM);
        elf_hwcap = 0;