Message ID | 20230613224545.371697797@linutronix.de |
---|---|
State | New |
Headers | show |
Series | init, treewide, x86: Cleanup check_bugs() and start sanitizing the x86 boot process | expand |
On 14/6/23 01:39, Thomas Gleixner wrote: > check_bugs() is about to be phased out. Switch over to the new > arch_cpu_finalize_init() implementation. > > No functional change. > > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > Cc: Yoshinori Sato <ysato@users.sourceforge.jp> > Cc: Rich Felker <dalias@libc.org> > Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> > Cc: linux-sh@vger.kernel.org > --- > arch/sh/Kconfig | 1 > arch/sh/include/asm/bugs.h | 74 ---------------------------------------- > arch/sh/include/asm/processor.h | 2 + > arch/sh/kernel/idle.c | 1 > arch/sh/kernel/setup.c | 55 +++++++++++++++++++++++++++++ > 5 files changed, 59 insertions(+), 74 deletions(-) Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
On Wed, 2023-06-14 at 01:39 +0200, Thomas Gleixner wrote: > check_bugs() is about to be phased out. Switch over to the new > arch_cpu_finalize_init() implementation. > > No functional change. > > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > Cc: Yoshinori Sato <ysato@users.sourceforge.jp> > Cc: Rich Felker <dalias@libc.org> > Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> > Cc: linux-sh@vger.kernel.org > --- > arch/sh/Kconfig | 1 > arch/sh/include/asm/bugs.h | 74 ---------------------------------------- > arch/sh/include/asm/processor.h | 2 + > arch/sh/kernel/idle.c | 1 > arch/sh/kernel/setup.c | 55 +++++++++++++++++++++++++++++ > 5 files changed, 59 insertions(+), 74 deletions(-) > > --- a/arch/sh/Kconfig > +++ b/arch/sh/Kconfig > @@ -6,6 +6,7 @@ config SUPERH > select ARCH_ENABLE_MEMORY_HOTREMOVE if SPARSEMEM && MMU > select ARCH_HAVE_NMI_SAFE_CMPXCHG if (GUSA_RB || CPU_SH4A) > select ARCH_HAS_BINFMT_FLAT if !MMU > + select ARCH_HAS_CPU_FINALIZE_INIT > select ARCH_HAS_CURRENT_STACK_POINTER > select ARCH_HAS_GIGANTIC_PAGE > select ARCH_HAS_GCOV_PROFILE_ALL > --- a/arch/sh/include/asm/bugs.h > +++ /dev/null > @@ -1,74 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0 */ > -#ifndef __ASM_SH_BUGS_H > -#define __ASM_SH_BUGS_H > - > -/* > - * This is included by init/main.c to check for architecture-dependent bugs. > - * > - * Needs: > - * void check_bugs(void); > - */ > - > -/* > - * I don't know of any Super-H bugs yet. > - */ > - > -#include <asm/processor.h> > - > -extern void select_idle_routine(void); > - > -static void __init check_bugs(void) > -{ > - extern unsigned long loops_per_jiffy; > - char *p = &init_utsname()->machine[2]; /* "sh" */ > - > - select_idle_routine(); > - > - current_cpu_data.loops_per_jiffy = loops_per_jiffy; > - > - switch (current_cpu_data.family) { > - case CPU_FAMILY_SH2: > - *p++ = '2'; > - break; > - case CPU_FAMILY_SH2A: > - *p++ = '2'; > - *p++ = 'a'; > - break; > - case CPU_FAMILY_SH3: > - *p++ = '3'; > - break; > - case CPU_FAMILY_SH4: > - *p++ = '4'; > - break; > - case CPU_FAMILY_SH4A: > - *p++ = '4'; > - *p++ = 'a'; > - break; > - case CPU_FAMILY_SH4AL_DSP: > - *p++ = '4'; > - *p++ = 'a'; > - *p++ = 'l'; > - *p++ = '-'; > - *p++ = 'd'; > - *p++ = 's'; > - *p++ = 'p'; > - break; > - case CPU_FAMILY_UNKNOWN: > - /* > - * Specifically use CPU_FAMILY_UNKNOWN rather than > - * default:, so we're able to have the compiler whine > - * about unhandled enumerations. > - */ > - break; > - } > - > - printk("CPU: %s\n", get_cpu_subtype(¤t_cpu_data)); > - > -#ifndef __LITTLE_ENDIAN__ > - /* 'eb' means 'Endian Big' */ > - *p++ = 'e'; > - *p++ = 'b'; > -#endif > - *p = '\0'; > -} > -#endif /* __ASM_SH_BUGS_H */ > --- a/arch/sh/include/asm/processor.h > +++ b/arch/sh/include/asm/processor.h > @@ -166,6 +166,8 @@ extern unsigned int instruction_size(uns > #define instruction_size(insn) (2) > #endif > > +void select_idle_routine(void); > + > #endif /* __ASSEMBLY__ */ > > #include <asm/processor_32.h> > --- a/arch/sh/kernel/idle.c > +++ b/arch/sh/kernel/idle.c > @@ -15,6 +15,7 @@ > #include <linux/irqflags.h> > #include <linux/smp.h> > #include <linux/atomic.h> > +#include <asm/processor.h> > #include <asm/smp.h> > #include <asm/bl_bit.h> > > --- a/arch/sh/kernel/setup.c > +++ b/arch/sh/kernel/setup.c > @@ -43,6 +43,7 @@ > #include <asm/smp.h> > #include <asm/mmu_context.h> > #include <asm/mmzone.h> > +#include <asm/processor.h> > #include <asm/sparsemem.h> > #include <asm/platform_early.h> > > @@ -354,3 +355,57 @@ int test_mode_pin(int pin) > { > return sh_mv.mv_mode_pins() & pin; > } > + > +void __init arch_cpu_finalize_init(void) > +{ > + char *p = &init_utsname()->machine[2]; /* "sh" */ > + > + select_idle_routine(); > + > + current_cpu_data.loops_per_jiffy = loops_per_jiffy; > + > + switch (current_cpu_data.family) { > + case CPU_FAMILY_SH2: > + *p++ = '2'; > + break; > + case CPU_FAMILY_SH2A: > + *p++ = '2'; > + *p++ = 'a'; > + break; > + case CPU_FAMILY_SH3: > + *p++ = '3'; > + break; > + case CPU_FAMILY_SH4: > + *p++ = '4'; > + break; > + case CPU_FAMILY_SH4A: > + *p++ = '4'; > + *p++ = 'a'; > + break; > + case CPU_FAMILY_SH4AL_DSP: > + *p++ = '4'; > + *p++ = 'a'; > + *p++ = 'l'; > + *p++ = '-'; > + *p++ = 'd'; > + *p++ = 's'; > + *p++ = 'p'; > + break; > + case CPU_FAMILY_UNKNOWN: > + /* > + * Specifically use CPU_FAMILY_UNKNOWN rather than > + * default:, so we're able to have the compiler whine > + * about unhandled enumerations. > + */ > + break; > + } > + > + pr_info("CPU: %s\n", get_cpu_subtype(¤t_cpu_data)); > + > +#ifndef __LITTLE_ENDIAN__ > + /* 'eb' means 'Endian Big' */ > + *p++ = 'e'; > + *p++ = 'b'; > +#endif > + *p = '\0'; > +} Acked-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
--- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig @@ -6,6 +6,7 @@ config SUPERH select ARCH_ENABLE_MEMORY_HOTREMOVE if SPARSEMEM && MMU select ARCH_HAVE_NMI_SAFE_CMPXCHG if (GUSA_RB || CPU_SH4A) select ARCH_HAS_BINFMT_FLAT if !MMU + select ARCH_HAS_CPU_FINALIZE_INIT select ARCH_HAS_CURRENT_STACK_POINTER select ARCH_HAS_GIGANTIC_PAGE select ARCH_HAS_GCOV_PROFILE_ALL --- a/arch/sh/include/asm/bugs.h +++ /dev/null @@ -1,74 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#ifndef __ASM_SH_BUGS_H -#define __ASM_SH_BUGS_H - -/* - * This is included by init/main.c to check for architecture-dependent bugs. - * - * Needs: - * void check_bugs(void); - */ - -/* - * I don't know of any Super-H bugs yet. - */ - -#include <asm/processor.h> - -extern void select_idle_routine(void); - -static void __init check_bugs(void) -{ - extern unsigned long loops_per_jiffy; - char *p = &init_utsname()->machine[2]; /* "sh" */ - - select_idle_routine(); - - current_cpu_data.loops_per_jiffy = loops_per_jiffy; - - switch (current_cpu_data.family) { - case CPU_FAMILY_SH2: - *p++ = '2'; - break; - case CPU_FAMILY_SH2A: - *p++ = '2'; - *p++ = 'a'; - break; - case CPU_FAMILY_SH3: - *p++ = '3'; - break; - case CPU_FAMILY_SH4: - *p++ = '4'; - break; - case CPU_FAMILY_SH4A: - *p++ = '4'; - *p++ = 'a'; - break; - case CPU_FAMILY_SH4AL_DSP: - *p++ = '4'; - *p++ = 'a'; - *p++ = 'l'; - *p++ = '-'; - *p++ = 'd'; - *p++ = 's'; - *p++ = 'p'; - break; - case CPU_FAMILY_UNKNOWN: - /* - * Specifically use CPU_FAMILY_UNKNOWN rather than - * default:, so we're able to have the compiler whine - * about unhandled enumerations. - */ - break; - } - - printk("CPU: %s\n", get_cpu_subtype(¤t_cpu_data)); - -#ifndef __LITTLE_ENDIAN__ - /* 'eb' means 'Endian Big' */ - *p++ = 'e'; - *p++ = 'b'; -#endif - *p = '\0'; -} -#endif /* __ASM_SH_BUGS_H */ --- a/arch/sh/include/asm/processor.h +++ b/arch/sh/include/asm/processor.h @@ -166,6 +166,8 @@ extern unsigned int instruction_size(uns #define instruction_size(insn) (2) #endif +void select_idle_routine(void); + #endif /* __ASSEMBLY__ */ #include <asm/processor_32.h> --- a/arch/sh/kernel/idle.c +++ b/arch/sh/kernel/idle.c @@ -15,6 +15,7 @@ #include <linux/irqflags.h> #include <linux/smp.h> #include <linux/atomic.h> +#include <asm/processor.h> #include <asm/smp.h> #include <asm/bl_bit.h> --- a/arch/sh/kernel/setup.c +++ b/arch/sh/kernel/setup.c @@ -43,6 +43,7 @@ #include <asm/smp.h> #include <asm/mmu_context.h> #include <asm/mmzone.h> +#include <asm/processor.h> #include <asm/sparsemem.h> #include <asm/platform_early.h> @@ -354,3 +355,57 @@ int test_mode_pin(int pin) { return sh_mv.mv_mode_pins() & pin; } + +void __init arch_cpu_finalize_init(void) +{ + char *p = &init_utsname()->machine[2]; /* "sh" */ + + select_idle_routine(); + + current_cpu_data.loops_per_jiffy = loops_per_jiffy; + + switch (current_cpu_data.family) { + case CPU_FAMILY_SH2: + *p++ = '2'; + break; + case CPU_FAMILY_SH2A: + *p++ = '2'; + *p++ = 'a'; + break; + case CPU_FAMILY_SH3: + *p++ = '3'; + break; + case CPU_FAMILY_SH4: + *p++ = '4'; + break; + case CPU_FAMILY_SH4A: + *p++ = '4'; + *p++ = 'a'; + break; + case CPU_FAMILY_SH4AL_DSP: + *p++ = '4'; + *p++ = 'a'; + *p++ = 'l'; + *p++ = '-'; + *p++ = 'd'; + *p++ = 's'; + *p++ = 'p'; + break; + case CPU_FAMILY_UNKNOWN: + /* + * Specifically use CPU_FAMILY_UNKNOWN rather than + * default:, so we're able to have the compiler whine + * about unhandled enumerations. + */ + break; + } + + pr_info("CPU: %s\n", get_cpu_subtype(¤t_cpu_data)); + +#ifndef __LITTLE_ENDIAN__ + /* 'eb' means 'Endian Big' */ + *p++ = 'e'; + *p++ = 'b'; +#endif + *p = '\0'; +}
check_bugs() is about to be phased out. Switch over to the new arch_cpu_finalize_init() implementation. No functional change. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Yoshinori Sato <ysato@users.sourceforge.jp> Cc: Rich Felker <dalias@libc.org> Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> Cc: linux-sh@vger.kernel.org --- arch/sh/Kconfig | 1 arch/sh/include/asm/bugs.h | 74 ---------------------------------------- arch/sh/include/asm/processor.h | 2 + arch/sh/kernel/idle.c | 1 arch/sh/kernel/setup.c | 55 +++++++++++++++++++++++++++++ 5 files changed, 59 insertions(+), 74 deletions(-)