[SCSI] ufs: Assign UTRLBAU = upper_32_ bits(UTRLD base address)
authorSantosh Yaraganavi <santoshsy@gmail.com>
Mon, 23 Apr 2012 13:22:11 +0000 (18:52 +0530)
committerJames Bottomley <JBottomley@Parallels.com>
Thu, 10 May 2012 07:59:26 +0000 (08:59 +0100)
UTP Transfer request list base registers UTRLBA and UTRLBAU
must be assigned, lower-32 and upper-32 bits of UTRLD list
physical base addresses respectively.

Currently UTRLBAU is being assigned lower-32 bits of UTRLD
physical base address. This will cause an issue with
controllers that can support 64-bit addressing.

This patch correctly assigns upper-32 bits of UTRLD physical
base address to UTRLBAU.

Reported-by: Rene De Jong <rene.dejong@arm.com>
Signed-off-by: Santosh Yaraganavi <santoshsy@gmail.com>
Reviewed-by: Vinayak Holikatti <vinholikatti@gmail.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/ufs/ufshcd.c

index 78be71cfc636a995bc089961263544183838d1a9..4e010b727818cd341968bdb378a1cb3f6e544cdf 100644 (file)
@@ -1032,11 +1032,11 @@ static int ufshcd_initialize_hba(struct ufs_hba *hba)
                return -EIO;
 
        /* Configure UTRL and UTMRL base address registers */
-       writel(hba->utrdl_dma_addr,
-              (hba->mmio_base + REG_UTP_TRANSFER_REQ_LIST_BASE_L));
        writel(lower_32_bits(hba->utrdl_dma_addr),
+              (hba->mmio_base + REG_UTP_TRANSFER_REQ_LIST_BASE_L));
+       writel(upper_32_bits(hba->utrdl_dma_addr),
               (hba->mmio_base + REG_UTP_TRANSFER_REQ_LIST_BASE_H));
-       writel(hba->utmrdl_dma_addr,
+       writel(lower_32_bits(hba->utmrdl_dma_addr),
               (hba->mmio_base + REG_UTP_TASK_REQ_LIST_BASE_L));
        writel(upper_32_bits(hba->utmrdl_dma_addr),
               (hba->mmio_base + REG_UTP_TASK_REQ_LIST_BASE_H));