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@xxxxxxxxxxxxx> > Cc: Yoshinori Sato <ysato@xxxxxxxxxxxxxxxxxxxx> > Cc: Rich Felker <dalias@xxxxxxxx> > Cc: John Paul Adrian Glaubitz <glaubitz@xxxxxxxxxxxxxxxxxxx> > Cc: linux-sh@xxxxxxxxxxxxxxx > --- > 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@xxxxxxxxxxxxxxxxxxx> -- .''`. John Paul Adrian Glaubitz : :' : Debian Developer `. `' Physicist `- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913