diff options
Diffstat (limited to 'src/cpu/amd/model_fxx/processor_name.c')
-rw-r--r-- | src/cpu/amd/model_fxx/processor_name.c | 436 |
1 files changed, 0 insertions, 436 deletions
diff --git a/src/cpu/amd/model_fxx/processor_name.c b/src/cpu/amd/model_fxx/processor_name.c deleted file mode 100644 index de6a514103..0000000000 --- a/src/cpu/amd/model_fxx/processor_name.c +++ /dev/null @@ -1,436 +0,0 @@ -/* - * This file is part of the coreboot project. - * - * Copyright (C) 2006 coresystems GmbH - * (Written by Stefan Reinauer <stepan@coresystems.de> for coresystems GmbH) - * Copyright (C) 2007 University of Mannheim - * (Written by Sven Kapferer <skapfere@rumms.uni-mannheim.de> for Uni Ma.) - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -/* - * This code sets the Processor Name String for AMD64 CPUs. - * - * Written by Stefan Reinauer <stepan@coresystems.de> using - * the Revision Guide for AMD Athlon™ 64 and AMD Opteron™ Processors - * Document ID 25759 Rev 3.59, April 2006 (Public Version). - * - * Updated by Sven Kapferer <skapfere@rumms.uni-mannheim.de> using - * the Revision Guide for AMD NPT Family 0Fh Processors - * Document ID 33610 Rev 3.00, October 2006 (Public Version). - */ - -#include <console/console.h> -#include <string.h> -#include <cpu/x86/msr.h> -#include <cpu/amd/mtrr.h> -#include <cpu/amd/model_fxx_rev.h> - -/* The maximum length of CPU names is 48 bytes, including the final NULL byte. - * If you change these names your BIOS will _NOT_ pass the AMD validation and - * your mainboard will not be posted on the AMD Recommended Motherboard Website - */ - -#if !IS_ENABLED(CONFIG_K8_REV_F_SUPPORT) -static const char *processor_names[]={ - /* 0x00 */ "AMD Engineering Sample", - /* 0x01-0x03 */ NULL, NULL, NULL, - /* 0x04 */ "AMD Athlon(tm) 64 Processor XX00+", - /* 0x05 */ "AMD Athlon(tm) 64 X2 Dual Core Processor XX00+", - /* 0x06-0x07 */ NULL, NULL, - /* 0x08 */ "Mobile AMD Athlon(tm) 64 Processor XX00+", - /* 0x09 */ "Mobile AMD Athlon(tm) 64 Processor XX00+", - /* 0x0A */ "AMD Turion(tm) 64 Mobile Technology ML-XX", - /* 0x0B */ "AMD Turion(tm) 64 Mobile Technology MT-XX", - /* 0x0C */ "AMD Opteron(tm) Processor 1YY", - /* 0x0D */ "AMD Opteron(tm) Processor 1YY", - /* 0x0E */ "AMD Opteron(tm) Processor 1YY HE", - /* 0x0F */ "AMD Opteron(tm) Processor 1YY EE", - /* 0x10 */ "AMD Opteron(tm) Processor 2YY", - /* 0x11 */ "AMD Opteron(tm) Processor 2YY", - /* 0x12 */ "AMD Opteron(tm) Processor 2YY HE", - /* 0x13 */ "AMD Opteron(tm) Processor 2YY EE", - /* 0x14 */ "AMD Opteron(tm) Processor 8YY", - /* 0x15 */ "AMD Opteron(tm) Processor 8YY", - /* 0x16 */ "AMD Opteron(tm) Processor 8YY HE", - /* 0x17 */ "AMD Opteron(tm) Processor 8YY EE", - /* 0x18 */ "AMD Athlon(tm) 64 Processor VV00+", - /* 0x19-0x1C */ NULL, NULL, NULL, NULL, - /* 0x1D */ "Mobile AMD Athlon(tm) XP-M Processor XX00+", - /* 0x1E */ "Mobile AMD Athlon(tm) XP-M Processor XX00+", - /* 0x1F */ NULL, - /* 0x20 */ "AMD Athlon(tm) XP Processor XX00+", - /* 0x21 */ "Mobile AMD Sempron(tm) Processor TT00+", - /* 0x22 */ "AMD Sempron(tm) Processor TT00+", - /* 0x23 */ "Mobile AMD Sempron(tm) Processor TT00+", - /* 0x24 */ "AMD Athlon(tm) 64 FX-ZZ Processor", - /* 0x25 */ NULL, - /* 0x26 */ "AMD Sempron(tm) Processor TT00+", - /* 0x27-0x28 */ NULL, NULL, - /* 0x29 */ "Dual Core AMD Opteron(tm) Processor 1RR SE", - /* 0x2A */ "Dual Core AMD Opteron(tm) Processor 2RR SE", - /* 0x2B */ "Dual Core AMD Opteron(tm) Processor 8RR SE", - /* 0x2C */ "Dual Core AMD Opteron(tm) Processor 1RR", - /* 0x2D */ "Dual Core AMD Opteron(tm) Processor 1RR", - /* 0x2E */ "Dual Core AMD Opteron(tm) Processor 1RR HE", - /* 0x2F */ "Dual Core AMD Opteron(tm) Processor 1RR EE", - /* 0x30 */ "Dual Core AMD Opteron(tm) Processor 2RR", - /* 0x31 */ "Dual Core AMD Opteron(tm) Processor 2RR", - /* 0x32 */ "Dual Core AMD Opteron(tm) Processor 2RR HE", - /* 0x33 */ "Dual Core AMD Opteron(tm) Processor 2RR EE", - /* 0x34 */ "Dual Core AMD Opteron(tm) Processor 8RR", - /* 0x35 */ "Dual Core AMD Opteron(tm) Processor 8RR", - /* 0x36 */ "Dual Core AMD Opteron(tm) Processor 8RR HE", - /* 0x37 */ "Dual Core AMD Opteron(tm) Processor 8RR EE", - /* 0x38 */ "Dual Core AMD Opteron(tm) Processor 1RR", - /* 0x39 */ "Dual Core AMD Opteron(tm) Processor 2RR", - /* 0x3A */ "Dual Core AMD Opteron(tm) Processor 8RR" -#define MAX_CPU_NUMBER 0x3A -}; -#endif - -int init_processor_name(void) -{ -#if !IS_ENABLED(CONFIG_K8_REV_F_SUPPORT) - u32 EightBitBrandId; -#endif - u32 BrandId; - u32 BrandTableIndex; - u32 NN; - u32 ModelNumber=0; - msr_t progmsr; - int i; - - const char *processor_name_string=NULL; - char program_string[48]; - unsigned int *program_values = (unsigned int *)program_string; - -#if !IS_ENABLED(CONFIG_K8_REV_F_SUPPORT) - /* Find out which CPU brand it is */ - EightBitBrandId = cpuid_ebx(0x00000001) & 0xff; - BrandId = cpuid_ebx(0x80000001) & 0xffff; - - if (!EightBitBrandId && !BrandId) { - BrandTableIndex = 0; - NN = 0xffffff; - } else if (!EightBitBrandId) { - BrandTableIndex = (BrandId >> 6) & 0x3f; // BrandId[11:6] - NN = BrandId & 0x3f; // // BrandId[6:0] - } else { - BrandTableIndex = EightBitBrandId >> (5-2) & 0xfc; // { 0b, 8BitBrandId[7:5], 00b } - NN = EightBitBrandId & 0x1f; // 8BitBrandId[4:0] - } - - /* Look up the CPU brand in above table */ - if (BrandTableIndex <= MAX_CPU_NUMBER) - processor_name_string = processor_names[BrandTableIndex]; - - if (!processor_name_string) - processor_name_string = "AMD Processor model unknown"; -#endif - -#if IS_ENABLED(CONFIG_K8_REV_F_SUPPORT) - u32 Socket; - u32 CmpCap; - u32 PwrLmt; - - BrandId = cpuid_ebx(0x80000001) & 0xffff; - Socket = (cpuid_eax(0x80000001) & 0x00000030) >> 4; // 00b = S1g1, 01b = F (1207), 11b = AM2 - CmpCap = cpuid_ecx(0x80000008) & 0x03; // Number of CPU cores - - PwrLmt = ((BrandId >> 14) & 0x01) | ((BrandId >> 5) & 0x0e); // BrandId[8:6,14] - BrandTableIndex = (BrandId >> 9) & 0x1f; // BrandId[13:9] - NN = ((BrandId >> 15) & 0x01) | (BrandId & 0x3f); // BrandId[15,5:0] - - if (((BrandTableIndex == 0) && (PwrLmt == 0)) || (NN == 0)) { - processor_name_string = "AMD Engineering Sample"; - } else { - /* Use all fields to identify CPU */ - switch ((Socket << 16) | (CmpCap << 12) | (BrandTableIndex << 4) - | PwrLmt) { - /* Socket F */ - case 0x10012: - processor_name_string = - "AMD Opteron(tm) Processor 22RR EE"; - break; - case 0x11002: - processor_name_string = - "Dual-Core AMD Opteron(tm) Processor 12RR EE"; - break; - case 0x11006: - processor_name_string = - "Dual-Core AMD Opteron(tm) Processor 12RR HE"; - break; - case 0x11012: - processor_name_string = - "Dual-Core AMD Opteron(tm) Processor 22RR EE"; - break; - case 0x11016: - processor_name_string = - "Dual-Core AMD Opteron(tm) Processor 22RR HE"; - break; - case 0x1101a: - processor_name_string = - "Dual-Core AMD Opteron(tm) Processor 22RR"; - break; - case 0x1101c: - processor_name_string = - "Dual-Core AMD Opteron(tm) Processor 22RR SE"; - break; - case 0x11042: - processor_name_string = - "Dual-Core AMD Opteron(tm) Processor 82RR EE"; - break; - case 0x11046: - processor_name_string = - "Dual-Core AMD Opteron(tm) Processor 82RR HE"; - break; - case 0x1104a: - processor_name_string = - "Dual-Core AMD Opteron(tm) Processor 82RR"; - break; - case 0x1104c: - processor_name_string = - "Dual-Core AMD Opteron(tm) Processor 82RR SE"; - break; - case 0x1106e: - processor_name_string = - "AMD Athlon(tm) 64 Processor FX-ZZ Processor"; - break; - /* Socket AM2 */ - /* single core */ - case 0x30015: - processor_name_string = - "AMD Sempron(tm) Processor LE-1RR0"; - break; - case 0x30026: - processor_name_string = - "AMD Athlon(tm) Processor LE-1ZZ0"; - break; - case 0x30036: - processor_name_string = - "AMD Athlon(tm) Processor 1ZZ0B"; - break; - case 0x30041: - case 0x30042: - case 0x30043: - case 0x30044: - case 0x30045: - case 0x30048: - processor_name_string = - "AMD Athlon(tm) 64 Processor TT00+"; - break; - case 0x30052: - processor_name_string = - "AMD Sempron(tm) Processor RR50p"; - break; - case 0x30064: - case 0x30068: - processor_name_string = - "AMD Sempron(tm) Processor TT00+"; - break; - case 0x30071: - case 0x30072: - processor_name_string = - "AMD Sempron(tm) Processor TT0U"; - break; - case 0x30082: - case 0x30083: - processor_name_string = - "AMD Athlon(tm) Processor TT50e"; - break; - case 0x30092: - processor_name_string = - "AMD Athlon(tm) Neo Processor MV-TT"; - break; - case 0x300c2: - processor_name_string = - "AMD Sempron(tm) Processor 2RRU"; - break; - /* dual-core */ - case 0x31016: - processor_name_string = - "Dual-Core AMD Opteron(tm) Processor 12RR HE"; - break; - case 0x3101a: - processor_name_string = - "Dual-Core AMD Opteron(tm) Processor 12RR"; - break; - case 0x3101c: - processor_name_string = - "Dual-Core AMD Opteron(tm) Processor 12RR SE"; - break; - case 0x31033: - processor_name_string = - "AMD Athlon(tm) X2 Dual Core Processor BE-2TT0"; - break; - case 0x31041: - case 0x31042: - case 0x31046: - case 0x31048: - case 0x3104c: - processor_name_string = - "AMD Athlon(tm) 64 X2 Dual Core Processor TT00+"; - break; - case 0x3105c: - processor_name_string = - "AMD Athlon(tm) 64 FX-ZZ Dual Core Processor"; - break; - case 0x31066: - processor_name_string = - "AMD Sempron(tm) Dual Core Processor RR00"; - break; - case 0x31073: - processor_name_string = - "AMD Athlon(tm) Dual Core Processor TT50e"; - break; - case 0x31076: - case 0x31077: - processor_name_string = - "AMD Athlon(tm) Dual Core Processor TT00B"; - break; - case 0x31083: - processor_name_string = - "AMD Athlon(tm) Dual Core Processor TT50B"; - break; - case 0x31091: - processor_name_string = - "AMD Athlon(tm) X2 Dual Core Processor TT50e"; - break; - case 0x310a1: - case 0x310a2: - processor_name_string = - "AMD Athlon(tm) Neo X2 Dual Core Processor TT50e"; - break; - case 0x310b0: - case 0x310c0: - processor_name_string = - "AMD Turion(tm) Neo X2 Dual Core Processor L6RR"; - break; - /* Socket S1g1 */ - /* single core */ - case 0x00012: - processor_name_string = - "AMD Athlon(tm) 64 Processor TT00+"; - break; - case 0x0002c: - processor_name_string = - "AMD Turion(tm) 64 Mobile Technology MK-YY"; - break; - case 0x00031: - processor_name_string = - "Mobile AMD Sempron(tm) Processor TT00+"; - break; - case 0x00036: - processor_name_string = - "Mobile AMD Sempron(tm) Processor PP00+"; - break; - case 0x0003c: - processor_name_string = - "Mobile AMD Sempron(tm) Processor PP00+"; - break; - case 0x00042: - processor_name_string = - "AMD Sempron(tm) Processor TT00+"; - break; - case 0x00064: - case 0x00066: - case 0x0006c: - processor_name_string = - "AMD Athlon(tm) Processor TF-TT"; - break; - case 0x00073: - processor_name_string = - "AMD Athlon(tm) Processor L1RR"; - break; - /* dual-core */ - case 0x0101c: - processor_name_string = - "AMD Sempron(tm) Dual Core Processor TJ-YY"; - break; - case 0x0102c: - processor_name_string = - "AMD Turion(tm) 64 X2 Mobile Technology TL-YY"; - break; - case 0x01034: - case 0x0103c: - processor_name_string = - "AMD Athlon(tm) 64 X2 Dual-Core Processor TK-YY"; - break; - case 0x01054: - processor_name_string = - "AMD Athlon(tm) 64 X2 Dual Core Processor TT00+"; - break; - case 0x01062: - processor_name_string = - "AMD Athlon(tm) X2 Dual Core Processor L3RR"; - break; - case 0x01074: - processor_name_string = - "AMD Athlon(tm) X2 Dual Core Processor L5RR"; - break; - default: - processor_name_string = "AMD Processor model unknown"; - } - } -#endif - - memset(program_string, 0, 48); - strcpy(program_string, processor_name_string); - - /* Now create a model number - See Table 4. Model Number Calculation - * in the Revision Guide. NOTE: #6, EE was changed to VV because - * otherwise it clashes with the brand names. - */ - - for (i=0; i<47; i++) { // 48 -1 - if (program_string[i] == program_string[i+1]) { - switch (program_string[i]) { -#if !IS_ENABLED(CONFIG_K8_REV_F_SUPPORT) - case 'X': ModelNumber = 22+ NN; break; - case 'Y': ModelNumber = 38 + (2*NN); break; - case 'Z': - case 'T': ModelNumber = 24 + NN; break; - case 'R': ModelNumber = 45 + (5*NN); break; - case 'V': ModelNumber = 9 + NN; break; -#endif - -#if IS_ENABLED(CONFIG_K8_REV_F_SUPPORT) - case 'R': ModelNumber = NN - 1; break; - case 'P': ModelNumber = 26 + NN; break; - case 'T': ModelNumber = 15 + (CmpCap * 10) + NN; break; - case 'Z': ModelNumber = 57 + NN; break; - case 'Y': ModelNumber = 29 + NN; break; -#endif - } - - if (ModelNumber && ModelNumber < 100) { - // No idea what to do with RR=100. According - // to the revision guide this is possible. - // - // --> "AMD Opteron(tm) Processor 8100"? - program_string[i]=(ModelNumber/10)+'0'; - program_string[i+1]=(ModelNumber%10)+'0'; - break; - } - } - } - - printk(BIOS_DEBUG, "CPU model %s\n", program_string); - - for (i=0; i<6; i++) { - progmsr.lo = program_values[(2*i)+0]; - progmsr.hi = program_values[(2*i)+1]; - wrmsr_amd(0xc0010030+i, progmsr); - } - - return 0; -} |