[PATCH] scsi: set dma direction to NONE for TEST UNIT READY

SCSI device scan code was executing TEST UNIT READY command without explicitly setting dma direction in struct scsi_cmd to NONE, so command was passed to driver with dma direction set to DMA_FROM_DEVICE, inherited from older usage.
With WDC SDINDDH6-64G ufs device, that caused TEST UNIT READY to return error.
Fix that, by explicitly setting dma direction to NONE for TEST UNIT READY, and restoring it back DMA_FROM_DEVICE for the following READ CAPACITY.
Signed-off-by: Nikita Yushchenko nikita.yoush@cogentembedded.com --- drivers/scsi/scsi.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c index b76aadb0653..1330482c167 100644 --- a/drivers/scsi/scsi.c +++ b/drivers/scsi/scsi.c @@ -374,6 +374,7 @@ static int scsi_read_capacity(struct udevice *dev, struct scsi_cmd *pccb, pccb->cmd[0] = SCSI_RD_CAPAC10; pccb->cmd[1] = pccb->lun << 5; pccb->cmdlen = 10; + pccb->dma_dir = DMA_FROM_DEVICE; pccb->msgout[0] = SCSI_IDENTIFY; /* NOT USED */
pccb->datalen = 8; @@ -538,6 +539,7 @@ static int scsi_detect_dev(struct udevice *dev, int target, int lun,
for (count = 0; count < 3; count++) { pccb->datalen = 0; + pccb->dma_dir = DMA_NONE; scsi_setup_test_unit_ready(pccb); err = scsi_exec(dev, pccb); if (!err)

On 11/13/23 06:51, Nikita Yushchenko wrote:
SCSI device scan code was executing TEST UNIT READY command without explicitly setting dma direction in struct scsi_cmd to NONE, so command was passed to driver with dma direction set to DMA_FROM_DEVICE, inherited from older usage.
With WDC SDINDDH6-64G ufs device, that caused TEST UNIT READY to return error.
Fix that, by explicitly setting dma direction to NONE for TEST UNIT READY, and restoring it back DMA_FROM_DEVICE for the following READ CAPACITY.
Signed-off-by: Nikita Yushchenko nikita.yoush@cogentembedded.com
Reviewed-by: Marek Vasut marex@denx.de
Tom, would be likely good to pick into this release.

On Mon, 13 Nov 2023 11:51:02 +0600, Nikita Yushchenko wrote:
SCSI device scan code was executing TEST UNIT READY command without explicitly setting dma direction in struct scsi_cmd to NONE, so command was passed to driver with dma direction set to DMA_FROM_DEVICE, inherited from older usage.
With WDC SDINDDH6-64G ufs device, that caused TEST UNIT READY to return error.
[...]
Applied to u-boot/master, thanks!
participants (3)
-
Marek Vasut
-
Nikita Yushchenko
-
Tom Rini