From d3aebe27d399926b3b336ceb4c1a8074f4926de1 Mon Sep 17 00:00:00 2001 From: Blue Swirl Date: Sat, 16 Jan 2010 08:47:39 +0000 Subject: [PATCH] ESP: fix spurious guest interrupts during boot Signed-off-by: Blue Swirl git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@665 f158a5a8-5612-0410-a976-696ce0be7e32 --- drivers/esp.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/esp.c b/drivers/esp.c index 7297ff5..02e206a 100644 --- a/drivers/esp.c +++ b/drivers/esp.c @@ -101,6 +101,9 @@ do_command(esp_private_t *esp, sd_private_t *sd, int cmdlen, int replylen) esp->ll->regs[ESP_CMD] = ESP_CMD_SELA | ESP_CMD_DMA; // Wait for DMA to complete. Can this fail? while ((esp->espdma.regs->cond_reg & DMA_HNDL_INTR) == 0) /* no-op */; + // Clear interrupts to avoid guests seeing spurious interrupts + (void)esp->ll->regs[ESP_INTRPT]; + // Check status status = esp->ll->regs[ESP_STATUS]; @@ -124,6 +127,10 @@ do_command(esp_private_t *esp, sd_private_t *sd, int cmdlen, int replylen) esp->ll->regs[ESP_CMD] = ESP_CMD_TI | ESP_CMD_DMA; // Wait for DMA to complete while ((esp->espdma.regs->cond_reg & DMA_HNDL_INTR) == 0) /* no-op */; + + // Clear interrupts to avoid guests seeing spurious interrupts + (void)esp->ll->regs[ESP_INTRPT]; + // Check status status = esp->ll->regs[ESP_STATUS];