scsi: ufs: core: Fix MCQ tag calculation
The transfer command descriptor is allocated in ufshcd_memory_alloc() and referenced by the transfer request descriptor with stride size sizeof_utp_transfer_cmd_desc() instead of sizeof(struct utp_transfer_cmd_desc). Consequently, computing tag by address offset should also refer to the same stride. Signed-off-by: Po-Wen Kao <powen.kao@mediatek.com> Link: https://lore.kernel.org/r/20230504154454.26654-2-powen.kao@mediatek.com Reviewed-by: Bart Van Assche <bvanassche@acm.org> Reviewed-by: Manivannan Sadhasivam <mani@kernel.org> Reviewed-by: Stanley Chu <stanley.chu@mediatek.com> Reviewed-by: Ziqi Chen <quic_ziqichen@quicinc.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
1a7edd041f
commit
5149452ca6
|
@ -265,7 +265,7 @@ static int ufshcd_mcq_get_tag(struct ufs_hba *hba,
|
||||||
addr = (le64_to_cpu(cqe->command_desc_base_addr) & CQE_UCD_BA) -
|
addr = (le64_to_cpu(cqe->command_desc_base_addr) & CQE_UCD_BA) -
|
||||||
hba->ucdl_dma_addr;
|
hba->ucdl_dma_addr;
|
||||||
|
|
||||||
return div_u64(addr, sizeof(struct utp_transfer_cmd_desc));
|
return div_u64(addr, sizeof_utp_transfer_cmd_desc(hba));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ufshcd_mcq_process_cqe(struct ufs_hba *hba,
|
static void ufshcd_mcq_process_cqe(struct ufs_hba *hba,
|
||||||
|
|
|
@ -8452,7 +8452,7 @@ static void ufshcd_release_sdb_queue(struct ufs_hba *hba, int nutrs)
|
||||||
{
|
{
|
||||||
size_t ucdl_size, utrdl_size;
|
size_t ucdl_size, utrdl_size;
|
||||||
|
|
||||||
ucdl_size = sizeof(struct utp_transfer_cmd_desc) * nutrs;
|
ucdl_size = sizeof_utp_transfer_cmd_desc(hba) * nutrs;
|
||||||
dmam_free_coherent(hba->dev, ucdl_size, hba->ucdl_base_addr,
|
dmam_free_coherent(hba->dev, ucdl_size, hba->ucdl_base_addr,
|
||||||
hba->ucdl_dma_addr);
|
hba->ucdl_dma_addr);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue