# CONFIG_M586 is not set
# CONFIG_M586TSC is not set
CONFIG_M686=y
+# CONFIG_M686FX is not set
# CONFIG_MK6 is not set
# CONFIG_MK7 is not set
CONFIG_X86_WP_WORKS_OK=y
# CONFIG_BLK_DEV_OFFBOARD is not set
# CONFIG_IDEDMA_PCI_AUTO is not set
# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_PCI_EXPERIMENTAL is not set
# CONFIG_IDEDMA_PCI_WIP is not set
# CONFIG_IDEDMA_NEW_DRIVE_LISTINGS is not set
# CONFIG_BLK_DEV_AEC62XX is not set
void __init sync_Arb_IDs(void)
{
+ /*
+ * Wait for idle.
+ */
+ apic_wait_icr_idle();
+
Dprintk("Synchronizing Arb IDs.\n");
apic_write_around(APIC_ICR, APIC_DEST_ALLINC | APIC_INT_LEVELTRIG
| APIC_DM_INIT);
*/
unsigned int cfg;
+ /*
+ * Wait for idle.
+ */
+ apic_wait_icr_idle();
+
/*
* No need to touch the target chip field
*/
__save_flags(flags);
__cli();
+ /*
+ * Wait for idle.
+ */
+ apic_wait_icr_idle();
+
/*
* prepare target chip field
*/
for (i = 0; i < sizeof(regs) / sizeof(*regs); i++) {
printk("... APIC #%d %s: ", apicid, names[i]);
+ /*
+ * Wait for idle.
+ */
+ apic_wait_icr_idle();
+
apic_write_around(APIC_ICR2, SET_APIC_DEST_FIELD(apicid));
apic_write_around(APIC_ICR, APIC_DM_REMRD | regs[i]);
return *((volatile unsigned long *)(APIC_BASE+reg));
}
+static __inline__ void apic_wait_icr_idle(void)
+{
+ do { } while ( apic_read( APIC_ICR ) & APIC_ICR_BUSY );
+}
+
extern unsigned int apic_timer_irqs [NR_CPUS];
#ifdef CONFIG_X86_GOOD_APIC