No subject
Mon Jun 26 04:21:23 CEST 2006
The ESP SCSI driver currently doesn't check whether a DMA requests has
completed before checking its status. On older qemu versions this
works ok because DMA happens instantly. On never qemu DMA can take an
indeterminate amount of time ooto complete, just like on real
hardware.
The patch waits for the controller to raise the DMA interrupt after
initiating a DMA request.
Modified: openbios-devel/drivers/esp.c
===================================================================
--- openbios-devel/drivers/esp.c 2006-07-28 21:44:07 UTC (rev 72)
+++ openbios-devel/drivers/esp.c 2006-08-12 09:52:34 UTC (rev 73)
@@ -113,6 +113,8 @@
esp->espdma.regs->cond_reg = 0;
// Set ATN, issue command
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 */;
// Check status
status = esp->ll->regs[ESP_STATUS];
@@ -129,6 +131,8 @@
esp->espdma.regs->cond_reg = DMA_ST_WRITE;
// Transfer
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 */;
// Check status
status = esp->ll->regs[ESP_STATUS];
More information about the OpenBIOS
mailing list