xref: /OK3568_Linux_fs/kernel/arch/sh/include/asm/bugs.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #ifndef __ASM_SH_BUGS_H
3*4882a593Smuzhiyun #define __ASM_SH_BUGS_H
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun /*
6*4882a593Smuzhiyun  * This is included by init/main.c to check for architecture-dependent bugs.
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  * Needs:
9*4882a593Smuzhiyun  *	void check_bugs(void);
10*4882a593Smuzhiyun  */
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun /*
13*4882a593Smuzhiyun  * I don't know of any Super-H bugs yet.
14*4882a593Smuzhiyun  */
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #include <asm/processor.h>
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun extern void select_idle_routine(void);
19*4882a593Smuzhiyun 
check_bugs(void)20*4882a593Smuzhiyun static void __init check_bugs(void)
21*4882a593Smuzhiyun {
22*4882a593Smuzhiyun 	extern unsigned long loops_per_jiffy;
23*4882a593Smuzhiyun 	char *p = &init_utsname()->machine[2]; /* "sh" */
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun 	select_idle_routine();
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun 	current_cpu_data.loops_per_jiffy = loops_per_jiffy;
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun 	switch (current_cpu_data.family) {
30*4882a593Smuzhiyun 	case CPU_FAMILY_SH2:
31*4882a593Smuzhiyun 		*p++ = '2';
32*4882a593Smuzhiyun 		break;
33*4882a593Smuzhiyun 	case CPU_FAMILY_SH2A:
34*4882a593Smuzhiyun 		*p++ = '2';
35*4882a593Smuzhiyun 		*p++ = 'a';
36*4882a593Smuzhiyun 		break;
37*4882a593Smuzhiyun 	case CPU_FAMILY_SH3:
38*4882a593Smuzhiyun 		*p++ = '3';
39*4882a593Smuzhiyun 		break;
40*4882a593Smuzhiyun 	case CPU_FAMILY_SH4:
41*4882a593Smuzhiyun 		*p++ = '4';
42*4882a593Smuzhiyun 		break;
43*4882a593Smuzhiyun 	case CPU_FAMILY_SH4A:
44*4882a593Smuzhiyun 		*p++ = '4';
45*4882a593Smuzhiyun 		*p++ = 'a';
46*4882a593Smuzhiyun 		break;
47*4882a593Smuzhiyun 	case CPU_FAMILY_SH4AL_DSP:
48*4882a593Smuzhiyun 		*p++ = '4';
49*4882a593Smuzhiyun 		*p++ = 'a';
50*4882a593Smuzhiyun 		*p++ = 'l';
51*4882a593Smuzhiyun 		*p++ = '-';
52*4882a593Smuzhiyun 		*p++ = 'd';
53*4882a593Smuzhiyun 		*p++ = 's';
54*4882a593Smuzhiyun 		*p++ = 'p';
55*4882a593Smuzhiyun 		break;
56*4882a593Smuzhiyun 	case CPU_FAMILY_UNKNOWN:
57*4882a593Smuzhiyun 		/*
58*4882a593Smuzhiyun 		 * Specifically use CPU_FAMILY_UNKNOWN rather than
59*4882a593Smuzhiyun 		 * default:, so we're able to have the compiler whine
60*4882a593Smuzhiyun 		 * about unhandled enumerations.
61*4882a593Smuzhiyun 		 */
62*4882a593Smuzhiyun 		break;
63*4882a593Smuzhiyun 	}
64*4882a593Smuzhiyun 
65*4882a593Smuzhiyun 	printk("CPU: %s\n", get_cpu_subtype(&current_cpu_data));
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun #ifndef __LITTLE_ENDIAN__
68*4882a593Smuzhiyun 	/* 'eb' means 'Endian Big' */
69*4882a593Smuzhiyun 	*p++ = 'e';
70*4882a593Smuzhiyun 	*p++ = 'b';
71*4882a593Smuzhiyun #endif
72*4882a593Smuzhiyun 	*p = '\0';
73*4882a593Smuzhiyun }
74*4882a593Smuzhiyun #endif /* __ASM_SH_BUGS_H */
75