From 24c9ad1c6c65451a46e50cd407bf18f0e53c42c2 Mon Sep 17 00:00:00 2001 From: Andrey Markovytch Date: Sun, 13 Nov 2016 18:01:53 +0200 Subject: scsi: ufs: fixed DUN size for ICE encryption to be 4k Previously the size was 512 which could have caused performance issues. Change-Id: If9577b1303c7cfad5c7175448ca93582222fbbb5 Signed-off-by: Andrey Markovytch --- drivers/scsi/ufs/ufs-qcom-ice.c | 7 ++++--- drivers/scsi/ufs/ufs-qcom.c | 3 ++- drivers/scsi/ufs/ufshcd.c | 3 --- 3 files changed, 6 insertions(+), 7 deletions(-) (limited to 'drivers/scsi') diff --git a/drivers/scsi/ufs/ufs-qcom-ice.c b/drivers/scsi/ufs/ufs-qcom-ice.c index 1ba4f2bafba3..070d27df6b49 100644 --- a/drivers/scsi/ufs/ufs-qcom-ice.c +++ b/drivers/scsi/ufs/ufs-qcom-ice.c @@ -339,7 +339,8 @@ int ufs_qcom_ice_cfg_start(struct ufs_qcom_host *qcom_host, req = cmd->request; if (req->bio) - lba = req->bio->bi_iter.bi_sector; + lba = (req->bio->bi_iter.bi_sector) >> + UFS_QCOM_ICE_TR_DATA_UNIT_4_KB; slot = req->tag; if (slot < 0 || slot > qcom_host->hba->nutrs) { @@ -390,6 +391,7 @@ int ufs_qcom_ice_cfg_start(struct ufs_qcom_host *qcom_host, bypass = ice_set.decr_bypass ? UFS_QCOM_ICE_ENABLE_BYPASS : UFS_QCOM_ICE_DISABLE_BYPASS; + /* Configure ICE index */ ctrl_info_val = (ice_set.crypto_data.key_index & @@ -398,8 +400,7 @@ int ufs_qcom_ice_cfg_start(struct ufs_qcom_host *qcom_host, /* Configure data unit size of transfer request */ ctrl_info_val |= - (UFS_QCOM_ICE_TR_DATA_UNIT_4_KB & - MASK_UFS_QCOM_ICE_CTRL_INFO_CDU) + UFS_QCOM_ICE_TR_DATA_UNIT_4_KB << OFFSET_UFS_QCOM_ICE_CTRL_INFO_CDU; /* Configure ICE bypass mode */ diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c index 1e200370deea..de7521a7fda4 100644 --- a/drivers/scsi/ufs/ufs-qcom.c +++ b/drivers/scsi/ufs/ufs-qcom.c @@ -822,7 +822,8 @@ static int ufs_qcom_crypto_req_setup(struct ufs_hba *hba, /* Use request LBA as the DUN value */ if (req->bio) - *dun = req->bio->bi_iter.bi_sector; + *dun = (req->bio->bi_iter.bi_sector) >> + UFS_QCOM_ICE_TR_DATA_UNIT_4_KB; ret = ufs_qcom_ice_req_setup(host, lrbp->cmd, cc_index, enable); diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 2c86606ecd2e..99fd079fcefa 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -2466,9 +2466,6 @@ static int ufshcd_prepare_crypto_utrd(struct ufs_hba *hba, goto out; req_desc->header.dword_0 |= cc_index | UTRD_CRYPTO_ENABLE; - if (lrbp->cmd->request && lrbp->cmd->request->bio) - dun = lrbp->cmd->request->bio->bi_iter.bi_sector; - req_desc->header.dword_1 = (u32)(dun & 0xFFFFFFFF); req_desc->header.dword_3 = (u32)((dun >> 32) & 0xFFFFFFFF); out: -- cgit v1.2.3