static int baytrail_get_count(struct udevice *dev) { int ecx = 0; /* * Use the algorithm described in Intel 64 and IA-32 Architectures * Software Developer's Manual Volume 3 (3A, 3B & 3C): System * Programming Guide, Jan-2015. Section 8.9.2: Hierarchical Mapping * of CPUID Extended Topology Leaf. */ while (1) { struct cpuid_result leaf_b; leaf_b = cpuid_ext(0xb, ecx); /* * Bay Trail doesn't have hyperthreading so just determine the * number of cores by from level type (ecx[15:8] == * 2) */ if ((leaf_b.ecx & 0xff00) == 0x0200) return leaf_b.ebx & 0xffff; ecx++; } return 0; }
static void detect_num_cpus(struct pattrs *attrs) { int ecx = 0; while (1) { struct cpuid_result leaf_b; leaf_b = cpuid_ext(0xb, ecx); /* Bay Trail doesn't have hyperthreading so just determine the * number of cores by from level type (ecx[15:8] == * 2). */ if ((leaf_b.ecx & 0xff00) == 0x0200) { attrs->num_cpus = leaf_b.ebx & 0xffff; break; } ecx++; } }