Add a 10 millisecond delay after sending the initial INIT IPI. This

matches the algorithm in the MP specification (1.4).  Previously we
were sending out the deassert INIT IPI immediately after the initial
INIT IPI was sent.
This commit is contained in:
John Baldwin 2012-08-13 16:33:22 +00:00
parent 1221cc675d
commit a4284ef768
2 changed files with 4 additions and 2 deletions

View File

@ -1048,14 +1048,15 @@ ipi_startup(int apic_id, int vector)
/* wait for pending status end */
lapic_ipi_wait(-1);
DELAY(10000); /* wait ~10mS */
/* do an INIT IPI: deassert RESET */
lapic_ipi_raw(APIC_DEST_ALLESELF | APIC_TRIGMOD_LEVEL |
APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_INIT, 0);
/* wait for pending status end */
DELAY(10000); /* wait ~10mS */
lapic_ipi_wait(-1);
DELAY(10000); /* wait ~10mS */
/*
* next we do a STARTUP IPI: the previous INIT IPI might still be

View File

@ -1148,14 +1148,15 @@ ipi_startup(int apic_id, int vector)
/* wait for pending status end */
lapic_ipi_wait(-1);
DELAY(10000); /* wait ~10mS */
/* do an INIT IPI: deassert RESET */
lapic_ipi_raw(APIC_DEST_ALLESELF | APIC_TRIGMOD_LEVEL |
APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_INIT, 0);
/* wait for pending status end */
DELAY(10000); /* wait ~10mS */
lapic_ipi_wait(-1);
DELAY(10000); /* wait ~10mS */
/*
* next we do a STARTUP IPI: the previous INIT IPI might still be