|
@@ -1084,67 +1084,6 @@ void lapic_shutdown(void)
|
|
local_irq_restore(flags);
|
|
local_irq_restore(flags);
|
|
}
|
|
}
|
|
|
|
|
|
-/*
|
|
|
|
- * This is to verify that we're looking at a real local APIC.
|
|
|
|
- * Check these against your board if the CPUs aren't getting
|
|
|
|
- * started for no apparent reason.
|
|
|
|
- */
|
|
|
|
-int __init verify_local_APIC(void)
|
|
|
|
-{
|
|
|
|
- unsigned int reg0, reg1;
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * The version register is read-only in a real APIC.
|
|
|
|
- */
|
|
|
|
- reg0 = apic_read(APIC_LVR);
|
|
|
|
- apic_printk(APIC_DEBUG, "Getting VERSION: %x\n", reg0);
|
|
|
|
- apic_write(APIC_LVR, reg0 ^ APIC_LVR_MASK);
|
|
|
|
- reg1 = apic_read(APIC_LVR);
|
|
|
|
- apic_printk(APIC_DEBUG, "Getting VERSION: %x\n", reg1);
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * The two version reads above should print the same
|
|
|
|
- * numbers. If the second one is different, then we
|
|
|
|
- * poke at a non-APIC.
|
|
|
|
- */
|
|
|
|
- if (reg1 != reg0)
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * Check if the version looks reasonably.
|
|
|
|
- */
|
|
|
|
- reg1 = GET_APIC_VERSION(reg0);
|
|
|
|
- if (reg1 == 0x00 || reg1 == 0xff)
|
|
|
|
- return 0;
|
|
|
|
- reg1 = lapic_get_maxlvt();
|
|
|
|
- if (reg1 < 0x02 || reg1 == 0xff)
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * The ID register is read/write in a real APIC.
|
|
|
|
- */
|
|
|
|
- reg0 = apic_read(APIC_ID);
|
|
|
|
- apic_printk(APIC_DEBUG, "Getting ID: %x\n", reg0);
|
|
|
|
- apic_write(APIC_ID, reg0 ^ apic->apic_id_mask);
|
|
|
|
- reg1 = apic_read(APIC_ID);
|
|
|
|
- apic_printk(APIC_DEBUG, "Getting ID: %x\n", reg1);
|
|
|
|
- apic_write(APIC_ID, reg0);
|
|
|
|
- if (reg1 != (reg0 ^ apic->apic_id_mask))
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * The next two are just to see if we have sane values.
|
|
|
|
- * They're only really relevant if we're in Virtual Wire
|
|
|
|
- * compatibility mode, but most boxes are anymore.
|
|
|
|
- */
|
|
|
|
- reg0 = apic_read(APIC_LVT0);
|
|
|
|
- apic_printk(APIC_DEBUG, "Getting LVT0: %x\n", reg0);
|
|
|
|
- reg1 = apic_read(APIC_LVT1);
|
|
|
|
- apic_printk(APIC_DEBUG, "Getting LVT1: %x\n", reg1);
|
|
|
|
-
|
|
|
|
- return 1;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* sync_Arb_IDs - synchronize APIC bus arbitration IDs
|
|
* sync_Arb_IDs - synchronize APIC bus arbitration IDs
|
|
*/
|
|
*/
|
|
@@ -2283,7 +2222,6 @@ int __init APIC_init_uniprocessor(void)
|
|
disable_ioapic_support();
|
|
disable_ioapic_support();
|
|
|
|
|
|
default_setup_apic_routing();
|
|
default_setup_apic_routing();
|
|
- verify_local_APIC();
|
|
|
|
apic_bsp_setup(true);
|
|
apic_bsp_setup(true);
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|