Coreboot fails to identify this cpu correctly, so I hacked processer_name .c as follows
u32 Test;
Test = cpuid_ebx(0x80000001); printk_debug("cpuid_ebx %x\n", Test);
BrandId = Test & 0xffff; Test = cpuid_eax(0x80000001); printk_debug("cpuid_eax %x\n", Test); Socket = (Test & 0x00000030) >> 4; // 00b = S1g1, 01b = F (1207), 11b = AM2 Test = cpuid_ecx(0x80000008); printk_debug("cpuid_ecx %x\n", Test); CmpCap = Test & 0x03; // Number of CPU cores
Each core is tested and both return the following.
cpuid_ebx 9a3 cpuid_eax 40f33 cpuid_ecx 1
After a bit of desk checking, either a shift is wrong, or the lookup value in the following case statement is wrong.
The following hack fixes it
/* Original code commented out, the second shift is increaed by 1 PwrLmt = ((BrandId >> 14) & 0x01) | ((BrandId >> 5) & 0x0e); // BrandId[8:6,14] */ PwrLmt = ((BrandId >> 14) & 0x01) | ((BrandId >> 6) & 0x0e); // BrandId[8:6,14]
On the other hand the value in the case statement
case 0x31046: processor_name_string = "AMD Athlon(tm) 64 X2 Dual Core Processor TT00+";
should be 0x3104c
I do not know which
The above module tests each core for number of cores, so this will always be 1. It treats it as a two CPU machine. Does this make any difference? The calculation for number of cores could be dropped.
Chris Lingard