diff options
author | Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> | 2023-08-07 07:52:58 +0100 |
---|---|---|
committer | Helge Deller <deller@gmx.de> | 2023-09-16 16:29:08 +0200 |
commit | 844ad96638166682d15aa13295c181ed7bf963aa (patch) | |
tree | 5ff4ef726c7901bb741b6bb7802892e236fee806 | |
parent | 763e3b73499db5fef94087bd310bfc8ccbcf7858 (diff) | |
download | seabios-hppa-844ad96638166682d15aa13295c181ed7bf963aa.zip seabios-hppa-844ad96638166682d15aa13295c181ed7bf963aa.tar.gz seabios-hppa-844ad96638166682d15aa13295c181ed7bf963aa.tar.bz2 |
esp-scsi: flush FIFO before sending SCSI command
The ESP FIFO is used as a buffer for DMA requests and so isn't guaranteed to
be empty in the case of SCSI errors or a mixed DMA/non-DMA request. Flush the
FIFO before sending a SCSI command to guarantee that it is correctly
positioned at the start of the FIFO.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Message-ID: <20230807065300.366070-2-mark.cave-ayland@ilande.co.uk>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-rw-r--r-- | src/hw/esp-scsi.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/hw/esp-scsi.c b/src/hw/esp-scsi.c index 3282437..06ef20d 100644 --- a/src/hw/esp-scsi.c +++ b/src/hw/esp-scsi.c @@ -46,6 +46,7 @@ #define ESP_DMA_WMAC 0x58c #define ESP_CMD_DMA 0x80 +#define ESP_CMD_FLUSH 0x01 #define ESP_CMD_RESET 0x02 #define ESP_CMD_TI 0x10 #define ESP_CMD_ICCS 0x11 @@ -96,6 +97,9 @@ esp_scsi_process_op(struct disk_op_s *op) outb(target, iobase + ESP_WBUSID); + /* Clear FIFO before sending command. */ + outb(ESP_CMD_FLUSH, iobase + ESP_CMD); + /* * We need to pass the LUN at the beginning of the command, and the FIFO * is only 16 bytes, so we cannot support 16-byte CDBs. The alternative |