|
@@ -38,32 +38,12 @@ static int bigsmp_early_logical_apicid(int cpu)
|
|
|
return early_per_cpu(x86_cpu_to_apicid, cpu);
|
|
return early_per_cpu(x86_cpu_to_apicid, cpu);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-static inline unsigned long calculate_ldr(int cpu)
|
|
|
|
|
-{
|
|
|
|
|
- unsigned long val, id;
|
|
|
|
|
-
|
|
|
|
|
- val = apic_read(APIC_LDR) & ~APIC_LDR_MASK;
|
|
|
|
|
- id = per_cpu(x86_bios_cpu_apicid, cpu);
|
|
|
|
|
- val |= SET_APIC_LOGICAL_ID(id);
|
|
|
|
|
-
|
|
|
|
|
- return val;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
/*
|
|
/*
|
|
|
- * Set up the logical destination ID.
|
|
|
|
|
- *
|
|
|
|
|
- * Intel recommends to set DFR, LDR and TPR before enabling
|
|
|
|
|
- * an APIC. See e.g. "AP-388 82489DX User's Manual" (Intel
|
|
|
|
|
- * document number 292116). So here it goes...
|
|
|
|
|
|
|
+ * bigsmp enables physical destination mode
|
|
|
|
|
+ * and doesn't use LDR and DFR
|
|
|
*/
|
|
*/
|
|
|
static void bigsmp_init_apic_ldr(void)
|
|
static void bigsmp_init_apic_ldr(void)
|
|
|
{
|
|
{
|
|
|
- unsigned long val;
|
|
|
|
|
- int cpu = smp_processor_id();
|
|
|
|
|
-
|
|
|
|
|
- apic_write(APIC_DFR, APIC_DFR_FLAT);
|
|
|
|
|
- val = calculate_ldr(cpu);
|
|
|
|
|
- apic_write(APIC_LDR, val);
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static void bigsmp_setup_apic_routing(void)
|
|
static void bigsmp_setup_apic_routing(void)
|