@@ -2904,8 +2904,32 @@ static void ufshcd_comp_scsi_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
29042904 ufshcd_prepare_utp_scsi_cmd_upiu (lrbp , upiu_flags );
29052905}
29062906
2907- static void __ufshcd_setup_cmd (struct ufshcd_lrb * lrbp , struct scsi_cmnd * cmd , u8 lun , int tag )
2907+ static void ufshcd_init_lrb (struct ufs_hba * hba , struct ufshcd_lrb * lrb , int i )
2908+ {
2909+ struct utp_transfer_cmd_desc * cmd_descp =
2910+ (void * )hba -> ucdl_base_addr + i * ufshcd_get_ucd_size (hba );
2911+ struct utp_transfer_req_desc * utrdlp = hba -> utrdl_base_addr ;
2912+ dma_addr_t cmd_desc_element_addr =
2913+ hba -> ucdl_dma_addr + i * ufshcd_get_ucd_size (hba );
2914+ u16 response_offset = le16_to_cpu (utrdlp [i ].response_upiu_offset );
2915+ u16 prdt_offset = le16_to_cpu (utrdlp [i ].prd_table_offset );
2916+
2917+ lrb -> utr_descriptor_ptr = utrdlp + i ;
2918+ lrb -> utrd_dma_addr =
2919+ hba -> utrdl_dma_addr + i * sizeof (struct utp_transfer_req_desc );
2920+ lrb -> ucd_req_ptr = (struct utp_upiu_req * )cmd_descp -> command_upiu ;
2921+ lrb -> ucd_req_dma_addr = cmd_desc_element_addr ;
2922+ lrb -> ucd_rsp_ptr = (struct utp_upiu_rsp * )cmd_descp -> response_upiu ;
2923+ lrb -> ucd_rsp_dma_addr = cmd_desc_element_addr + response_offset ;
2924+ lrb -> ucd_prdt_ptr = (struct ufshcd_sg_entry * )cmd_descp -> prd_table ;
2925+ lrb -> ucd_prdt_dma_addr = cmd_desc_element_addr + prdt_offset ;
2926+ }
2927+
2928+ static void __ufshcd_setup_cmd (struct ufs_hba * hba , struct ufshcd_lrb * lrbp ,
2929+ struct scsi_cmnd * cmd , u8 lun , int tag )
29082930{
2931+ ufshcd_init_lrb (hba , lrbp , tag );
2932+
29092933 memset (lrbp -> ucd_req_ptr , 0 , sizeof (* lrbp -> ucd_req_ptr ));
29102934
29112935 lrbp -> cmd = cmd ;
@@ -2917,7 +2941,7 @@ static void __ufshcd_setup_cmd(struct ufshcd_lrb *lrbp, struct scsi_cmnd *cmd, u
29172941static void ufshcd_setup_scsi_cmd (struct ufs_hba * hba , struct ufshcd_lrb * lrbp ,
29182942 struct scsi_cmnd * cmd , u8 lun , int tag )
29192943{
2920- __ufshcd_setup_cmd (lrbp , cmd , lun , tag );
2944+ __ufshcd_setup_cmd (hba , lrbp , cmd , lun , tag );
29212945 lrbp -> intr_cmd = !ufshcd_is_intr_aggr_allowed (hba );
29222946 lrbp -> req_abort_skip = false;
29232947
@@ -2972,27 +2996,6 @@ static void ufshcd_map_queues(struct Scsi_Host *shost)
29722996 }
29732997}
29742998
2975- static void ufshcd_init_lrb (struct ufs_hba * hba , struct ufshcd_lrb * lrb , int i )
2976- {
2977- struct utp_transfer_cmd_desc * cmd_descp = (void * )hba -> ucdl_base_addr +
2978- i * ufshcd_get_ucd_size (hba );
2979- struct utp_transfer_req_desc * utrdlp = hba -> utrdl_base_addr ;
2980- dma_addr_t cmd_desc_element_addr = hba -> ucdl_dma_addr +
2981- i * ufshcd_get_ucd_size (hba );
2982- u16 response_offset = le16_to_cpu (utrdlp [i ].response_upiu_offset );
2983- u16 prdt_offset = le16_to_cpu (utrdlp [i ].prd_table_offset );
2984-
2985- lrb -> utr_descriptor_ptr = utrdlp + i ;
2986- lrb -> utrd_dma_addr = hba -> utrdl_dma_addr +
2987- i * sizeof (struct utp_transfer_req_desc );
2988- lrb -> ucd_req_ptr = (struct utp_upiu_req * )cmd_descp -> command_upiu ;
2989- lrb -> ucd_req_dma_addr = cmd_desc_element_addr ;
2990- lrb -> ucd_rsp_ptr = (struct utp_upiu_rsp * )cmd_descp -> response_upiu ;
2991- lrb -> ucd_rsp_dma_addr = cmd_desc_element_addr + response_offset ;
2992- lrb -> ucd_prdt_ptr = (struct ufshcd_sg_entry * )cmd_descp -> prd_table ;
2993- lrb -> ucd_prdt_dma_addr = cmd_desc_element_addr + prdt_offset ;
2994- }
2995-
29962999/**
29973000 * ufshcd_queuecommand - main entry point for SCSI requests
29983001 * @host: SCSI host pointer
@@ -3085,7 +3088,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
30853088static void ufshcd_setup_dev_cmd (struct ufs_hba * hba , struct ufshcd_lrb * lrbp ,
30863089 enum dev_cmd_type cmd_type , u8 lun , int tag )
30873090{
3088- __ufshcd_setup_cmd (lrbp , NULL , lun , tag );
3091+ __ufshcd_setup_cmd (hba , lrbp , NULL , lun , tag );
30893092 lrbp -> intr_cmd = true; /* No interrupt aggregation */
30903093 hba -> dev_cmd .type = cmd_type ;
30913094}
@@ -4048,8 +4051,6 @@ static void ufshcd_host_memory_configure(struct ufs_hba *hba)
40484051 utrdlp [i ].response_upiu_length =
40494052 cpu_to_le16 (ALIGNED_UPIU_SIZE >> 2 );
40504053 }
4051-
4052- ufshcd_init_lrb (hba , & hba -> lrb [i ], i );
40534054 }
40544055}
40554056
0 commit comments