[coreboot] AMD Athlon(tm) dual core processor, (X2 AM2 ,,,,)

Chris Lingard chris at stockwith.co.uk
Wed Nov 12 17:52:24 CET 2008

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); // 

On the other hand the value in the case statement

                case 0x31046:
                         processor_name_string =
                             "AMD Athlon(tm) 64 X2 Dual Core Processor 

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

More information about the coreboot mailing list