Mark Cave-Ayland
cb22ce5038
esp.c: zero command register when TI command terminates due to phase change
...
This is the behaviour documented in the datasheet and allows the state machine
to correctly process multiple consecutive TI commands.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-63-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
036120f3af
esp.c: remove DATA IN phase logic when reading from FIFO
...
Whilst the FIFO is used a storage buffer for both DMA and non-DMA requests, the
loading and unloading is managed directly issuing commands to the ESP. As a
result there is no need to manually invoke the non-DMA command handler.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-62-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
c90b279229
esp.c: use deferred interrupts for both DATA IN and DATA OUT phases
...
This brings DATA OUT transfers in line with DATA IN transfers by ensuring that
the guest visible function complete interrupt is only set once the SCSI layer
has returned.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-61-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
a4608fa0a5
esp.c: separate logic based upon ESP command in esp_transfer_data()
...
The handling of the INTR_FC and INTR_BS bits is different depending upon the
last command executed by the ESP. Note that currently INTR_FC is managed
elsewhere, but that will change soon.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-60-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
8bb2249585
esp.c: separate logic based upon ESP command in esp_command_complete()
...
The handling of the INTR_FC and INTR_BS bits is different depending upon the
last command executed by the ESP. Note that currently INTR_FC is managed
elsewhere, but that will change soon.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-59-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
8dded6de15
esp.c: rename data_in_ready to to data_ready
...
This field is currently used to handle deferred interrupts for the DATA IN phase
but the code will soon be updated to do the same for the DATA OUT phase.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-58-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
b46a43a224
esp.c: remove unused PDMA callback implementation
...
Note that this is a migration break for the q800 machine because the extra PDMA
information is no longer included.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-57-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
34e9bb92b5
esp.c: always use esp_do_dma() in pdma_cb()
...
There is now only a single implementation contained within esp_do_dma() so
call it directly.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-56-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
8baa14728b
esp.c: move CMD_ICCS command logic to esp_do_dma()
...
The special logic in write_response_pdma_cb() is now no longer required since
esp_do_dma() can be used as a direct replacement.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-55-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
bb272e245b
esp.c: replace do_dma_pdma_cb() with esp_do_dma()
...
Now that the DMA logic is identical between do_dma_pdma_cb() and esp_do_dma()
we can replace do_dma_pdma_cb() with esp_do_dma().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-54-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
db4d4150ba
esp.c: move CMD_SELATNS end of command logic to esp_do_dma() and do_dma_pdma_cb()
...
The special logic in satn_stop_pdma_cb() is now no longer required since
esp_do_dma() can be used as a direct replacement.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-53-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
9ff0fd12a2
esp.c: don't use get_cmd() for CMD_SEL DMA commands
...
This can now be done using the existing logic in esp_do_dma() and do_dma_pdma_cb().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-52-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
3fd325a2de
esp.c: move CMD_TI end of message phase detection to esp_do_dma() and do_dma_pdma_cb()
...
The existing check for TC == 0 is only valid during a TI command.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-51-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
3ee9a475a5
esp.c: move CMD_SELATN end of message phase detection to esp_do_dma() and do_dma_pdma_cb()
...
The special logic in satn_pdma_cb() is now no longer required since esp_do_dma()
can be used as a direct replacement.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-50-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
79a6c7c610
esp.c: untangle MESSAGE OUT and COMMAND phase logic in esp_do_nodma()
...
This makes it clearer that ATN is asserted until the end of the next TI command
in the MESSAGE OUT phase.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-49-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
9e60cf788c
esp.c: untangle MESSAGE OUT and COMMAND phase logic in do_dma_pdma_cb()
...
This makes it clearer that ATN is asserted until the end of the next TI command
in the MESSAGE OUT phase.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-48-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
46b0c36125
esp.c: untangle MESSAGE OUT and COMMAND phase logic in esp_do_dma()
...
This makes it clearer that ATN is asserted until the end of the next TI command
in the MESSAGE OUT phase.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-47-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
6d97f5acbf
esp.c: remove do_cmd from ESPState
...
Now that the accumulation of the CDB is handled by SCSI phase, there is no need
for a separate variable to control it.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-46-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
df91fd4ecd
esp.c: convert esp_reg_write() do_cmd path to check for SCSI phase instead
...
Currently do_cmd is used to determine whether MESSAGE OUT and COMMAND phase data
is being accumulated in cmdfifo. Update esp_do_dma() to check directly for these
two SCSI phases instead.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-45-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
83e803decd
esp.c: convert esp_do_nodma() do_cmd path to check for SCSI phase instead
...
Currently do_cmd is used to determine whether MESSAGE OUT and COMMAND phase data
is being accumulated in cmdfifo. Update esp_do_dma() to check directly for these
two SCSI phases instead.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-44-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
e8c84b1973
esp.c: convert do_dma_pdma_cb() do_cmd path to check for SCSI phase instead
...
Currently do_cmd is used to determine whether MESSAGE OUT and COMMAND phase data
is being accumulated in cmdfifo. Update esp_do_dma() to check directly for these
two SCSI phases instead.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-43-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
ad2725af57
esp.c: convert esp_do_dma() do_cmd path to check for SCSI phase instead
...
Currently do_cmd is used to determine whether MESSAGE OUT and COMMAND phase data
is being accumulated in cmdfifo. Update esp_do_dma() to check directly for these
two SCSI phases instead.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-42-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
9d1aa52b76
esp.c: convert esp_do_nodma() to switch statement based upon SCSI phase
...
Currently only the DATA IN and DATA OUT phases are supported.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-41-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
844b3a84ea
esp.c: convert do_dma_pdma_db() to switch statement based upon SCSI phase
...
Currently only the DATA IN and DATA OUT phases are supported.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-40-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
1454dc765b
esp.c: convert esp_do_dma() to switch statement based upon SCSI phase
...
Currently only the DATA IN and DATA OUT phases are supported.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-39-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
5a83e83e1c
esp.c: introduce esp_get_phase() function
...
Make use of this new function in all places where the SCSI phase bits are
manually masked from the ESP_RSTAT register.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Message-Id: <20240112125420.514425-38-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
66fd565733
esp.c: remove s_without_satn_pdma_cb() PDMA callback
...
This can now be handled by the existing do_dma_pdma_cb() function.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-37-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:28 +00:00
Mark Cave-Ayland
1b2e34ca2e
esp.c: move end of SCSI transfer check after TC adjustment in do_dma_pdma_cb()
...
Now it is possible to move the end of SCSI transfer check to after the TC
adjustment in do_dma_pdma_cb() when transferring data from the device
without triggering an assert() in the SCSI code. This brings this check in
line with all the others in esp_do_dma() and do_dma_pdma_cb().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-36-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
Mark Cave-Ayland
4460b86a04
esp.c: update esp_do_dma() bypass if async_len is zero to include non-zero transfer check
...
In the PDMA case the last transfer from the device to the FIFO has occurred
(async_len is zero) but esp_do_dma() is still being called to drain the
remaining FIFO contents.
The additional non-zero transfer check ensures that we still defer the SCSI
layer in the case where we are waiting for data for a TI command or a DMA
enable signal.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-35-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
Mark Cave-Ayland
3c7f3c8b57
esp.c: copy logic for do_cmd transfers from do_dma_pdma_cb() to esp_do_dma()
...
This is so that PDMA transfers can be performend by esp_do_dma() as well as
do_dma_pdma_cb().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-34-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
Mark Cave-Ayland
19e9afb1a3
esp.c: copy PDMA logic for transfers to device from do_dma_pdma_cb() to esp_do_dma()
...
This is so that PDMA transfers can be performend by esp_do_dma() as well as
do_dma_pdma_cb().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-33-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
Mark Cave-Ayland
004826d03e
esp.c: rename esp_dma_done() to esp_dma_ti_check()
...
This is because a single DMA request can be transferred using multiple TI
commands, and so a TC equal to zero may not represent the completion of
the SCSI DMA command.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-32-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
Mark Cave-Ayland
af74b3c15d
esp.c: move TC and FIFO check logic into esp_dma_done()
...
This helps simplify the existing implementation.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-31-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
Mark Cave-Ayland
cb9881999d
esp.c: fix premature end of phase logic esp_command_complete
...
There are two cases here: the first is when the TI command underflows, in which
case we raise INTR_BS to indicate an early change of phase, and the second is
when the TI command overflows because the host requested a transfer for more
data than is available. In the latter case force TC to zero so that the TI
completion logic executes correctly.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-30-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
Mark Cave-Ayland
e4e166c8ef
esp.c: consolidate async_len and TC == 0 checks in do_dma_pdma_cb() and esp_do_dma()
...
Ensure that the async_len checks for requesting data from the SCSI layer and
the TC == 0 checks to detect the end of the DMA transfer are consistent in both
do_dma_pdma_cb() and esp_do_dma(). In particular this involves adding the check
to see if the FIFO is at its low threshold since PDMA and mixed DMA and non-DMA
requests can leave data remaining in the FIFO.
At the same time update all the comments so that they are also consistent between
all similar code paths.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-29-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
Mark Cave-Ayland
a79e767ab1
esp.c: update end of transfer logic at the end of esp_transfer_data()
...
Since esp_dma_done() is called in both cases, and ti_size cannot be zero
(otherwise esp_command_complete() would have been called instead), replace
the conditional logic with a single call to esp_dma_done().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-28-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
Mark Cave-Ayland
fe082b5475
esp.c: remove unneeded if() check in esp_transfer_data()
...
The following ti_cmd checks ensure that only DMA and non-DMA TI commmands will
can call into the esp_do_dma() and esp_do_nodma() callbacks.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-27-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
Mark Cave-Ayland
81ed2ed3e8
esp.c: remove unaligned adjustment in do_dma_pdma_cb() to device path
...
With the latest changes this condition cannot occur anymore and so the logic
can be completely removed.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-26-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
Mark Cave-Ayland
12486e4f6d
esp.c: remove TC adjustment in esp_do_dma() from device path
...
Now that the TC is updated for each PDMA access (rather than once the FIFO is
full) there is no need to adjust the TC at start of each DMA transfer if the
FIFO is not empty.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-25-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
Mark Cave-Ayland
fabcba4966
esp.c: don't immediately raise INTR_BS if SCSI data needed in esp_do_dma()
...
In the case when more data is requested from the SCSI layer during a DMA data
transfer from a device, don't immediately fall through to the TC check logic.
Otherwise when TC is zero INTR_BS will be raised immediately rather than when
the next set of SCSI data is ready.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-24-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
Mark Cave-Ayland
68ef41fb13
esp.c: ensure that the PDMA callback is called for every device read
...
Rather than wait for the FIFO to fill up before calling the PDMA callback, push
that logic directly into the from_device logic in do_dma_pdma_cb().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-23-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
Mark Cave-Ayland
c5bd505524
esp.c: update condition for esp_dma_done() in esp_do_dma() to device path
...
Ensure that esp_dma_done() is only called when TC is zero, which is currently
always the case for DMA transfers.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-22-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
Mark Cave-Ayland
6b7b0030fb
esp.c: update condition for esp_dma_done() in esp_do_dma() from device path
...
No change to the condition itself, other than to clarify that esp_dma_done()
must be called when TC is zero.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-21-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:27 +00:00
Mark Cave-Ayland
27bd0cc044
esp.c: remove zero transfer size check from esp_do_dma()
...
The TI end of transfer interrupt only occurs when the TC reaches zero and is
not related to the SCSI layer transfer.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-20-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:23 +00:00
Mark Cave-Ayland
942ee6c83f
esp.c: don't clear RFLAGS register when DMA is complete
...
The internal state of the ESP sequencer is not affected when raising an interrupt
to indicate the end of a DMA transfer.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-19-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:23 +00:00
Mark Cave-Ayland
e7a661d117
esp.c: don't reset the TC and ESP_RSEQ state when executing a SCSI command
...
There is no need to manually reset these values as the ESP emulation now
correctly handles them within its existing logic.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-18-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:23 +00:00
Mark Cave-Ayland
a1ccceb9c4
esp.c: remove MacOS TI workaround that pads FIFO transfers to ESP_FIFO_SZ
...
This workaround is no longer required with the current code and so can be
removed.
[Note: whilst MacOS itself can boot correctly, removing this hack prevents
a bootable EMILE CDROM from working. This is caused by a separate bug which
will be fixed by a subsequent patch]
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-17-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:23 +00:00
Mark Cave-Ayland
f0a24eeed9
esp.c: remove another set of manual STAT_TC updates
...
Following on from the recent changes to when the TC is updated, it is now
possible to remove another set of manual STAT_TC updates so that its state
is now managed within esp_set_tc().
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-16-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:23 +00:00
Mark Cave-Ayland
abc139cda0
esp.c: introduce esp_set_phase() helper function
...
This function is used to set the current SCSI bus phase in the ESP_RSTAT register
without affecting any of flag bits.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-15-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:23 +00:00
Mark Cave-Ayland
a034765161
esp.c: decrement the TC during MESSAGE OUT and COMMAND phases
...
This is to ensure that STAT_TC is triggered during the right parts of the
transfer when it is controlled exclusively by the TC.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
Tested-by: Helge Deller <deller@gmx.de >
Tested-by: Thomas Huth <thuth@redhat.com >
Message-Id: <20240112125420.514425-14-mark.cave-ayland@ilande.co.uk >
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk >
2024-02-13 19:37:23 +00:00