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


--
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to