1 // SPDX-License-Identifier: GPL-2.0-only 1 2 /* -*- linux-c -*- --------------------------- 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 * Copyright 2007-2008 rPath, Inc. - All Rig 6 * 7 * ------------------------------------------- 8 9 /* 10 * arch/x86/boot/cpu.c 11 * 12 * Check for obligatory CPU features and abort 13 * present. 14 */ 15 16 #include "boot.h" 17 #include "cpustr.h" 18 19 static char *cpu_name(int level) 20 { 21 static char buf[6]; 22 23 if (level == 64) { 24 return "x86-64"; 25 } else { 26 if (level == 15) 27 level = 6; 28 sprintf(buf, "i%d86", level); 29 return buf; 30 } 31 } 32 33 static void show_cap_strs(u32 *err_flags) 34 { 35 int i, j; 36 const unsigned char *msg_strs = (const 37 for (i = 0; i < NCAPINTS; i++) { 38 u32 e = err_flags[i]; 39 for (j = 0; j < 32; j++) { 40 if (msg_strs[0] < i || 41 (msg_strs[0] == i 42 /* Skip to the 43 msg_strs += 2; 44 while (*msg_st 45 ; 46 } 47 if (e & 1) { 48 if (msg_strs[0 49 msg_strs[1 50 msg_strs[2 51 printf 52 else 53 printf 54 } 55 e >>= 1; 56 } 57 } 58 } 59 60 int validate_cpu(void) 61 { 62 u32 *err_flags; 63 int cpu_level, req_level; 64 65 check_cpu(&cpu_level, &req_level, &err 66 67 if (cpu_level < req_level) { 68 printf("This kernel requires a 69 cpu_name(req_level)); 70 printf("but only detected an % 71 cpu_name(cpu_level)); 72 return -1; 73 } 74 75 if (err_flags) { 76 puts("This kernel requires the 77 "not present on the CPU:\ 78 show_cap_strs(err_flags); 79 putchar('\n'); 80 return -1; 81 } else if (check_knl_erratum()) { 82 return -1; 83 } else { 84 return 0; 85 } 86 } 87
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.