blob: 0af86d9242da0f6882f1f5252dfa659038c627ac [file] [log] [blame]
Jeremy Fitzhardinge1353ebb2007-05-02 19:27:12 +02001/*
Jeremy Fitzhardinge1353ebb2007-05-02 19:27:12 +02002 * Copyright (C) 1994 Linus Torvalds
3 *
4 * Cyrix stuff, June 1998 by:
5 * - Rafael R. Reilova (moved everything from head.S),
6 * <rreilova@ececs.uc.edu>
7 * - Channing Corn (tests & fixes),
8 * - Andrew D. Balsa (code cleanup).
9 */
10#include <linux/init.h>
11#include <linux/utsname.h>
Josh Triplett91eb1b72007-07-31 00:39:20 -070012#include <asm/bugs.h>
Jeremy Fitzhardinge1353ebb2007-05-02 19:27:12 +020013#include <asm/processor.h>
Dave Jones7ebad702008-01-30 13:30:39 +010014#include <asm/processor-flags.h>
Ingo Molnar952f07e2015-04-26 16:56:05 +020015#include <asm/fpu/internal.h>
Jeremy Fitzhardinge1353ebb2007-05-02 19:27:12 +020016#include <asm/msr.h>
17#include <asm/paravirt.h>
18#include <asm/alternative.h>
Borislav Petkov62a67e12016-10-24 19:38:43 +020019#include <asm/pgtable.h>
Laura Abbottd1163652017-05-08 15:58:11 -070020#include <asm/set_memory.h>
Jeremy Fitzhardinge1353ebb2007-05-02 19:27:12 +020021
Jeremy Fitzhardinge1353ebb2007-05-02 19:27:12 +020022void __init check_bugs(void)
23{
24 identify_boot_cpu();
Borislav Petkov55a36b62013-04-08 17:57:44 +020025
Borislav Petkov62a67e12016-10-24 19:38:43 +020026 if (!IS_ENABLED(CONFIG_SMP)) {
27 pr_info("CPU: ");
28 print_cpu_info(&boot_cpu_data);
29 }
30
31#ifdef CONFIG_X86_32
Borislav Petkov55a36b62013-04-08 17:57:44 +020032 /*
33 * Check whether we are able to run this kernel safely on SMP.
34 *
35 * - i386 is no longer supported.
36 * - In order to run on anything without a TSC, we need to be
37 * compiled for a i486.
38 */
39 if (boot_cpu_data.x86 < 4)
40 panic("Kernel requires i486+ for 'invlpg' and other features");
41
Miklos Vajnabfe4bb12008-05-17 22:48:13 +020042 init_utsname()->machine[1] =
43 '0' + (boot_cpu_data.x86 > 6 ? 6 : boot_cpu_data.x86);
Jeremy Fitzhardinge1353ebb2007-05-02 19:27:12 +020044 alternative_instructions();
Suresh Siddha304bced2012-08-24 14:13:02 -070045
Ingo Molnar4d164092015-04-22 13:44:25 +020046 fpu__init_check_bugs();
Borislav Petkov62a67e12016-10-24 19:38:43 +020047#else /* CONFIG_X86_64 */
48 alternative_instructions();
49
50 /*
51 * Make sure the first 2MB area is not mapped by huge pages
52 * There are typically fixed size MTRRs in there and overlapping
53 * MTRRs into large pages causes slow downs.
54 *
55 * Right now we don't do that with gbpages because there seems
56 * very little benefit for that case.
57 */
58 if (!direct_gbpages)
59 set_memory_4k((unsigned long)__va(0), 1);
60#endif
Jeremy Fitzhardinge1353ebb2007-05-02 19:27:12 +020061}