]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
scsi: ufs: Add Support for UFS version2 UTRD commands
authorNaveen Kumar Arepalli <naveenk@nvidia.com>
Tue, 21 Apr 2015 04:11:56 +0000 (09:41 +0530)
committerNaveen Kumar Arepalli <naveenk@nvidia.com>
Wed, 6 May 2015 11:00:55 +0000 (04:00 -0700)
-UFS Host version2 supports UTP packets which has command type of
only UFS_STORAGE(0x1)

Bug 200091472

Change-Id: I551bdae71ddd25caffe744808a9ec973dd2184c2
Signed-off-by: Naveen Kumar Arepalli <naveenk@nvidia.com>
Reviewed-on: http://git-master/r/733186
Reviewed-by: Venkata Jagadish <vjagadish@nvidia.com>
Reviewed-by: Venu Byravarasu <vbyravarasu@nvidia.com>
drivers/scsi/ufs/ufshcd.c
drivers/scsi/ufs/ufshci.h

index 4bb36641e46dbbb1f4a876d235994bccbf72fa4f..ee47685d44aac845219afdb2868722bc0495d514 100644 (file)
@@ -1080,12 +1080,14 @@ static void ufshcd_disable_intr(struct ufs_hba *hba, u32 intrs)
  * @upiu_flags: flags required in the header
  * @cmd_dir: requests data direction
  */
-static void ufshcd_prepare_req_desc_hdr(struct ufshcd_lrb *lrbp,
-               u32 *upiu_flags, enum dma_data_direction cmd_dir)
+static void ufshcd_prepare_req_desc_hdr(struct ufs_hba *hba,
+               struct ufshcd_lrb *lrbp, u32 *upiu_flags,
+               enum dma_data_direction cmd_dir)
 {
        struct utp_transfer_req_desc *req_desc = lrbp->utr_descriptor_ptr;
        u32 data_direction;
        u32 dword_0;
+       int utrd_command_type;
 
        if (cmd_dir == DMA_FROM_DEVICE) {
                data_direction = UTP_DEVICE_TO_HOST;
@@ -1098,7 +1100,13 @@ static void ufshcd_prepare_req_desc_hdr(struct ufshcd_lrb *lrbp,
                *upiu_flags = UPIU_CMD_FLAGS_NONE;
        }
 
-       dword_0 = data_direction | (lrbp->command_type
+       /* UFS host version_2 supports only 0x1(UFS) as a utrd command type*/
+       if (hba->ufs_version == UFSHCI_VERSION_20)
+               utrd_command_type = UTP_CMD_TYPE_UFS;
+       else
+               utrd_command_type = lrbp->command_type;
+
+       dword_0 = data_direction | (utrd_command_type
                                << UPIU_COMMAND_TYPE_OFFSET);
        if (lrbp->intr_cmd)
                dword_0 |= UTP_REQ_DESC_INT_CMD;
@@ -1204,7 +1212,7 @@ static int ufshcd_compose_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
        switch (lrbp->command_type) {
        case UTP_CMD_TYPE_SCSI:
                if (likely(lrbp->cmd)) {
-                       ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags,
+                       ufshcd_prepare_req_desc_hdr(hba, lrbp, &upiu_flags,
                                        lrbp->cmd->sc_data_direction);
                        ufshcd_prepare_utp_scsi_cmd_upiu(lrbp, upiu_flags);
                } else {
@@ -1212,7 +1220,7 @@ static int ufshcd_compose_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
                }
                break;
        case UTP_CMD_TYPE_DEV_MANAGE:
-               ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, DMA_NONE);
+               ufshcd_prepare_req_desc_hdr(hba, lrbp, &upiu_flags, DMA_NONE);
                if (hba->dev_cmd.type == DEV_CMD_TYPE_QUERY)
                        ufshcd_prepare_utp_query_req_upiu(
                                        hba, lrbp, upiu_flags);
index d5721199e9cc2a5fd2fd9d979869d5e49cb167ac..4f3d39f5188945dacd61f82d819e1e26c7112c2b 100644 (file)
@@ -3,6 +3,7 @@
  *
  * This code is based on drivers/scsi/ufs/ufshci.h
  * Copyright (C) 2011-2013 Samsung India Software Operations
+ * Copyright (c) 2015, NVIDIA CORPORATION.  All rights reserved.
  *
  * Authors:
  *     Santosh Yaraganavi <santosh.sy@samsung.com>
@@ -91,6 +92,7 @@ enum {
 enum {
        UFSHCI_VERSION_10 = 0x00010000,
        UFSHCI_VERSION_11 = 0x00010100,
+       UFSHCI_VERSION_20 = 0x00000200,
 };
 
 /*