Some SCSI devices like UFS use DMA for executing scsi commands and hence
need to know the direction of transfer of the dma. Add a dma_dir element
to the command structure to facilitate this.

Signed-off-by: Faiz Abbas <faiz_ab...@ti.com>
---
 drivers/scsi/scsi.c | 4 ++++
 include/scsi.h      | 3 +++
 2 files changed, 7 insertions(+)

diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
index 7b7d388557..719e0fbfe6 100644
--- a/drivers/scsi/scsi.c
+++ b/drivers/scsi/scsi.c
@@ -167,6 +167,7 @@ static ulong scsi_read(struct udevice *dev, lbaint_t blknr, 
lbaint_t blkcnt,
              block_dev->devnum, start, blks, (unsigned long)buffer);
        do {
                pccb->pdata = (unsigned char *)buf_addr;
+               pccb->dma_dir = DMA_FROM_DEVICE;
 #ifdef CONFIG_SYS_64BIT_LBA
                if (start > SCSI_LBA48_READ) {
                        unsigned long blocks;
@@ -235,6 +236,7 @@ static ulong scsi_write(struct udevice *dev, lbaint_t 
blknr, lbaint_t blkcnt,
              __func__, block_dev->devnum, start, blks, (unsigned long)buffer);
        do {
                pccb->pdata = (unsigned char *)buf_addr;
+               pccb->dma_dir = DMA_TO_DEVICE;
                if (blks > SCSI_MAX_BLK) {
                        pccb->datalen = block_dev->blksz * max_blks;
                        smallblks = max_blks;
@@ -382,6 +384,7 @@ static int scsi_read_capacity(struct udevice *dev, struct 
scsi_cmd *pccb,
        pccb->msgout[0] = SCSI_IDENTIFY; /* NOT USED */
 
        pccb->datalen = 16;
+       pccb->dma_dir = DMA_FROM_DEVICE;
        if (scsi_exec(dev, pccb))
                return 1;
 
@@ -484,6 +487,7 @@ static int scsi_detect_dev(struct udevice *dev, int target, 
int lun,
        pccb->lun = lun;
        pccb->pdata = (unsigned char *)&tempbuff;
        pccb->datalen = 512;
+       pccb->dma_dir = DMA_FROM_DEVICE;
        scsi_setup_inquiry(pccb);
        if (scsi_exec(dev, pccb)) {
                if (pccb->contr_stat == SCSI_SEL_TIME_OUT) {
diff --git a/include/scsi.h b/include/scsi.h
index 076bdbc6a0..7bb2d3ac0f 100644
--- a/include/scsi.h
+++ b/include/scsi.h
@@ -6,6 +6,8 @@
  #ifndef _SCSI_H
  #define _SCSI_H
 
+#include <linux/dma-direction.h>
+
 struct scsi_cmd {
        unsigned char           cmd[16];                                        
/* command                                 */
        /* for request sense */
@@ -26,6 +28,7 @@ struct scsi_cmd {
        unsigned long           trans_bytes;                    /* tranfered 
bytes              */
 
        unsigned int            priv;
+       enum dma_data_direction dma_dir;
 };
 
 /*-----------------------------------------------------------
-- 
2.19.2

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to