Lines Matching refs:lrbp
390 struct ufshcd_lrb *lrbp = &hba->lrb[tag]; in ufshcd_add_command_trace() local
391 struct scsi_cmnd *cmd = lrbp->cmd; in ufshcd_add_command_trace()
410 be32_to_cpu(lrbp->ucd_req_ptr->sc.exp_data_transfer_len); in ufshcd_add_command_trace()
413 group_id = lrbp->cmd->cmnd[6]; in ufshcd_add_command_trace()
499 const struct ufshcd_lrb *lrbp; in ufshcd_print_trs() local
504 lrbp = &hba->lrb[tag]; in ufshcd_print_trs()
507 tag, div_u64(lrbp->issue_time_stamp_local_clock, 1000)); in ufshcd_print_trs()
509 tag, div_u64(lrbp->compl_time_stamp_local_clock, 1000)); in ufshcd_print_trs()
512 tag, (u64)lrbp->utrd_dma_addr); in ufshcd_print_trs()
514 ufshcd_hex_dump("UPIU TRD: ", lrbp->utr_descriptor_ptr, in ufshcd_print_trs()
517 (u64)lrbp->ucd_req_dma_addr); in ufshcd_print_trs()
518 ufshcd_hex_dump("UPIU REQ: ", lrbp->ucd_req_ptr, in ufshcd_print_trs()
521 (u64)lrbp->ucd_rsp_dma_addr); in ufshcd_print_trs()
522 ufshcd_hex_dump("UPIU RSP: ", lrbp->ucd_rsp_ptr, in ufshcd_print_trs()
526 lrbp->utr_descriptor_ptr->prd_table_length); in ufshcd_print_trs()
533 (u64)lrbp->ucd_prdt_dma_addr); in ufshcd_print_trs()
536 ufshcd_hex_dump("UPIU PRDT: ", lrbp->ucd_prdt_ptr, in ufshcd_print_trs()
744 static enum utp_ocs ufshcd_get_tr_ocs(struct ufshcd_lrb *lrbp) in ufshcd_get_tr_ocs() argument
746 return le32_to_cpu(lrbp->utr_descriptor_ptr->header.dword_2) & MASK_OCS; in ufshcd_get_tr_ocs()
2082 struct ufshcd_lrb *lrbp) in ufshcd_should_inform_monitor() argument
2086 return (m->enabled && lrbp && lrbp->cmd && in ufshcd_should_inform_monitor()
2087 (!m->chunk_size || m->chunk_size == lrbp->cmd->sdb.length) && in ufshcd_should_inform_monitor()
2088 ktime_before(hba->monitor.enabled_ts, lrbp->issue_time_stamp)); in ufshcd_should_inform_monitor()
2092 const struct ufshcd_lrb *lrbp) in ufshcd_start_monitor() argument
2094 int dir = ufshcd_monitor_opcode2dir(*lrbp->cmd->cmnd); in ufshcd_start_monitor()
2103 static void ufshcd_update_monitor(struct ufs_hba *hba, const struct ufshcd_lrb *lrbp) in ufshcd_update_monitor() argument
2105 int dir = ufshcd_monitor_opcode2dir(*lrbp->cmd->cmnd); in ufshcd_update_monitor()
2110 const struct request *req = scsi_cmd_to_rq(lrbp->cmd); in ufshcd_update_monitor()
2114 now = lrbp->compl_time_stamp; in ufshcd_update_monitor()
2121 lat = ktime_sub(now, lrbp->issue_time_stamp); in ufshcd_update_monitor()
2143 struct ufshcd_lrb *lrbp = &hba->lrb[task_tag]; in ufshcd_send_command() local
2146 lrbp->issue_time_stamp = ktime_get(); in ufshcd_send_command()
2147 lrbp->issue_time_stamp_local_clock = local_clock(); in ufshcd_send_command()
2148 lrbp->compl_time_stamp = ktime_set(0, 0); in ufshcd_send_command()
2149 lrbp->compl_time_stamp_local_clock = 0; in ufshcd_send_command()
2152 if (unlikely(ufshcd_should_inform_monitor(hba, lrbp))) in ufshcd_send_command()
2153 ufshcd_start_monitor(hba, lrbp); in ufshcd_send_command()
2157 hba->vops->setup_xfer_req(hba, task_tag, !!lrbp->cmd); in ufshcd_send_command()
2167 static inline void ufshcd_copy_sense_data(struct ufshcd_lrb *lrbp) in ufshcd_copy_sense_data() argument
2169 u8 *const sense_buffer = lrbp->cmd->sense_buffer; in ufshcd_copy_sense_data()
2173 ufshcd_get_rsp_upiu_data_seg_len(lrbp->ucd_rsp_ptr)) { in ufshcd_copy_sense_data()
2176 len = be16_to_cpu(lrbp->ucd_rsp_ptr->sr.sense_data_len); in ufshcd_copy_sense_data()
2179 memcpy(sense_buffer, lrbp->ucd_rsp_ptr->sr.sense_data, in ufshcd_copy_sense_data()
2191 int ufshcd_copy_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_copy_query_response() argument
2195 memcpy(&query_res->upiu_res, &lrbp->ucd_rsp_ptr->qr, QUERY_OSF_SIZE); in ufshcd_copy_query_response()
2199 lrbp->ucd_rsp_ptr->qr.opcode == UPIU_QUERY_OPCODE_READ_DESC) { in ufshcd_copy_query_response()
2200 u8 *descp = (u8 *)lrbp->ucd_rsp_ptr + in ufshcd_copy_query_response()
2206 resp_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2) & in ufshcd_copy_query_response()
2406 static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_map_sg() argument
2414 cmd = lrbp->cmd; in ufshcd_map_sg()
2422 lrbp->utr_descriptor_ptr->prd_table_length = in ufshcd_map_sg()
2426 lrbp->utr_descriptor_ptr->prd_table_length = in ufshcd_map_sg()
2429 prd_table = lrbp->ucd_prdt_ptr; in ufshcd_map_sg()
2448 lrbp->utr_descriptor_ptr->prd_table_length = 0; in ufshcd_map_sg()
2503 static void ufshcd_prepare_req_desc_hdr(struct ufshcd_lrb *lrbp, in ufshcd_prepare_req_desc_hdr() argument
2506 struct utp_transfer_req_desc *req_desc = lrbp->utr_descriptor_ptr; in ufshcd_prepare_req_desc_hdr()
2523 dword_0 = data_direction | (lrbp->command_type in ufshcd_prepare_req_desc_hdr()
2525 if (lrbp->intr_cmd) in ufshcd_prepare_req_desc_hdr()
2529 ufshcd_prepare_req_desc_hdr_crypto(lrbp, &dword_0, &dword_1, &dword_3); in ufshcd_prepare_req_desc_hdr()
2553 void ufshcd_prepare_utp_scsi_cmd_upiu(struct ufshcd_lrb *lrbp, u8 upiu_flags) in ufshcd_prepare_utp_scsi_cmd_upiu() argument
2555 struct scsi_cmnd *cmd = lrbp->cmd; in ufshcd_prepare_utp_scsi_cmd_upiu()
2556 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_scsi_cmd_upiu()
2562 lrbp->lun, lrbp->task_tag); in ufshcd_prepare_utp_scsi_cmd_upiu()
2575 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); in ufshcd_prepare_utp_scsi_cmd_upiu()
2586 struct ufshcd_lrb *lrbp, u8 upiu_flags) in ufshcd_prepare_utp_query_req_upiu() argument
2588 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_query_req_upiu()
2595 lrbp->lun, lrbp->task_tag); in ufshcd_prepare_utp_query_req_upiu()
2614 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); in ufshcd_prepare_utp_query_req_upiu()
2617 static inline void ufshcd_prepare_utp_nop_upiu(struct ufshcd_lrb *lrbp) in ufshcd_prepare_utp_nop_upiu() argument
2619 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_nop_upiu()
2626 UPIU_TRANSACTION_NOP_OUT, 0, 0, lrbp->task_tag); in ufshcd_prepare_utp_nop_upiu()
2631 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); in ufshcd_prepare_utp_nop_upiu()
2641 struct ufshcd_lrb *lrbp) in ufshcd_compose_devman_upiu() argument
2647 lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE; in ufshcd_compose_devman_upiu()
2649 lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; in ufshcd_compose_devman_upiu()
2651 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, DMA_NONE); in ufshcd_compose_devman_upiu()
2653 ufshcd_prepare_utp_query_req_upiu(hba, lrbp, upiu_flags); in ufshcd_compose_devman_upiu()
2655 ufshcd_prepare_utp_nop_upiu(lrbp); in ufshcd_compose_devman_upiu()
2668 static int ufshcd_comp_scsi_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_comp_scsi_upiu() argument
2674 lrbp->command_type = UTP_CMD_TYPE_SCSI; in ufshcd_comp_scsi_upiu()
2676 lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; in ufshcd_comp_scsi_upiu()
2678 if (likely(lrbp->cmd)) { in ufshcd_comp_scsi_upiu()
2679 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, in ufshcd_comp_scsi_upiu()
2680 lrbp->cmd->sc_data_direction); in ufshcd_comp_scsi_upiu()
2681 ufshcd_prepare_utp_scsi_cmd_upiu(lrbp, upiu_flags); in ufshcd_comp_scsi_upiu()
2765 struct ufshcd_lrb *lrbp; in ufshcd_queuecommand() local
2829 lrbp = &hba->lrb[tag]; in ufshcd_queuecommand()
2830 WARN_ON(lrbp->cmd); in ufshcd_queuecommand()
2831 lrbp->cmd = cmd; in ufshcd_queuecommand()
2832 lrbp->task_tag = tag; in ufshcd_queuecommand()
2833 lrbp->lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun); in ufshcd_queuecommand()
2834 lrbp->intr_cmd = !ufshcd_is_intr_aggr_allowed(hba); in ufshcd_queuecommand()
2836 ufshcd_prepare_lrbp_crypto(scsi_cmd_to_rq(cmd), lrbp); in ufshcd_queuecommand()
2838 lrbp->req_abort_skip = false; in ufshcd_queuecommand()
2840 ufshpb_prep(hba, lrbp); in ufshcd_queuecommand()
2842 ufshcd_comp_scsi_upiu(hba, lrbp); in ufshcd_queuecommand()
2844 err = ufshcd_map_sg(hba, lrbp); in ufshcd_queuecommand()
2846 lrbp->cmd = NULL; in ufshcd_queuecommand()
2868 struct ufshcd_lrb *lrbp, enum dev_cmd_type cmd_type, int tag) in ufshcd_compose_dev_cmd() argument
2870 lrbp->cmd = NULL; in ufshcd_compose_dev_cmd()
2871 lrbp->task_tag = tag; in ufshcd_compose_dev_cmd()
2872 lrbp->lun = 0; /* device management cmd is not specific to any LUN */ in ufshcd_compose_dev_cmd()
2873 lrbp->intr_cmd = true; /* No interrupt aggregation */ in ufshcd_compose_dev_cmd()
2874 ufshcd_prepare_lrbp_crypto(NULL, lrbp); in ufshcd_compose_dev_cmd()
2877 return ufshcd_compose_devman_upiu(hba, lrbp); in ufshcd_compose_dev_cmd()
2903 ufshcd_check_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_check_query_response() argument
2908 query_res->response = ufshcd_get_rsp_upiu_result(lrbp->ucd_rsp_ptr) >> in ufshcd_check_query_response()
2919 ufshcd_dev_cmd_completion(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_dev_cmd_completion() argument
2925 resp = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr); in ufshcd_dev_cmd_completion()
2936 err = ufshcd_check_query_response(hba, lrbp); in ufshcd_dev_cmd_completion()
2938 err = ufshcd_copy_query_response(hba, lrbp); in ufshcd_dev_cmd_completion()
2957 struct ufshcd_lrb *lrbp, int max_timeout) in ufshcd_wait_for_dev_cmd() argument
2975 err = ufshcd_get_tr_ocs(lrbp); in ufshcd_wait_for_dev_cmd()
2977 err = ufshcd_dev_cmd_completion(hba, lrbp); in ufshcd_wait_for_dev_cmd()
2981 __func__, lrbp->task_tag); in ufshcd_wait_for_dev_cmd()
2982 if (ufshcd_clear_cmds(hba, 1U << lrbp->task_tag) == 0) { in ufshcd_wait_for_dev_cmd()
2991 pending = test_bit(lrbp->task_tag, in ufshcd_wait_for_dev_cmd()
2995 __clear_bit(lrbp->task_tag, in ufshcd_wait_for_dev_cmd()
3010 __func__, lrbp->task_tag); in ufshcd_wait_for_dev_cmd()
3031 struct ufshcd_lrb *lrbp; in ufshcd_exec_dev_cmd() local
3039 lrbp = &hba->lrb[tag]; in ufshcd_exec_dev_cmd()
3040 WARN_ON(lrbp->cmd); in ufshcd_exec_dev_cmd()
3041 err = ufshcd_compose_dev_cmd(hba, lrbp, cmd_type, tag); in ufshcd_exec_dev_cmd()
3047 ufshcd_add_query_upiu_trace(hba, UFS_QUERY_SEND, lrbp->ucd_req_ptr); in ufshcd_exec_dev_cmd()
3050 err = ufshcd_wait_for_dev_cmd(hba, lrbp, timeout); in ufshcd_exec_dev_cmd()
3052 (struct utp_upiu_req *)lrbp->ucd_rsp_ptr); in ufshcd_exec_dev_cmd()
5144 ufshcd_scsi_cmd_status(struct ufshcd_lrb *lrbp, int scsi_status) in ufshcd_scsi_cmd_status() argument
5150 ufshcd_copy_sense_data(lrbp); in ufshcd_scsi_cmd_status()
5158 ufshcd_copy_sense_data(lrbp); in ufshcd_scsi_cmd_status()
5177 ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_transfer_rsp_status() argument
5184 ocs = ufshcd_get_tr_ocs(lrbp); in ufshcd_transfer_rsp_status()
5187 if (be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_1) & in ufshcd_transfer_rsp_status()
5194 result = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr); in ufshcd_transfer_rsp_status()
5202 result = ufshcd_get_rsp_upiu_result(lrbp->ucd_rsp_ptr); in ufshcd_transfer_rsp_status()
5209 result = ufshcd_scsi_cmd_status(lrbp, scsi_status); in ufshcd_transfer_rsp_status()
5225 ufshcd_is_exception_event(lrbp->ucd_rsp_ptr)) in ufshcd_transfer_rsp_status()
5230 ufshpb_rsp_upiu(hba, lrbp); in ufshcd_transfer_rsp_status()
5265 ocs, lrbp->task_tag); in ufshcd_transfer_rsp_status()
5273 ufshcd_print_trs(hba, 1 << lrbp->task_tag, true); in ufshcd_transfer_rsp_status()
5338 struct ufshcd_lrb *lrbp) in ufshcd_release_scsi_cmd() argument
5340 struct scsi_cmnd *cmd = lrbp->cmd; in ufshcd_release_scsi_cmd()
5343 lrbp->cmd = NULL; /* Mark the command as completed. */ in ufshcd_release_scsi_cmd()
5356 struct ufshcd_lrb *lrbp; in __ufshcd_transfer_req_compl() local
5361 lrbp = &hba->lrb[index]; in __ufshcd_transfer_req_compl()
5362 lrbp->compl_time_stamp = ktime_get(); in __ufshcd_transfer_req_compl()
5363 lrbp->compl_time_stamp_local_clock = local_clock(); in __ufshcd_transfer_req_compl()
5364 cmd = lrbp->cmd; in __ufshcd_transfer_req_compl()
5366 if (unlikely(ufshcd_should_inform_monitor(hba, lrbp))) in __ufshcd_transfer_req_compl()
5367 ufshcd_update_monitor(hba, lrbp); in __ufshcd_transfer_req_compl()
5369 cmd->result = ufshcd_transfer_rsp_status(hba, lrbp); in __ufshcd_transfer_req_compl()
5370 ufshcd_release_scsi_cmd(hba, lrbp); in __ufshcd_transfer_req_compl()
5373 } else if (lrbp->command_type == UTP_CMD_TYPE_DEV_MANAGE || in __ufshcd_transfer_req_compl()
5374 lrbp->command_type == UTP_CMD_TYPE_UFS_STORAGE) { in __ufshcd_transfer_req_compl()
6853 struct ufshcd_lrb *lrbp; in ufshcd_issue_devman_upiu_cmd() local
6862 lrbp = &hba->lrb[tag]; in ufshcd_issue_devman_upiu_cmd()
6863 WARN_ON(lrbp->cmd); in ufshcd_issue_devman_upiu_cmd()
6864 lrbp->cmd = NULL; in ufshcd_issue_devman_upiu_cmd()
6865 lrbp->task_tag = tag; in ufshcd_issue_devman_upiu_cmd()
6866 lrbp->lun = 0; in ufshcd_issue_devman_upiu_cmd()
6867 lrbp->intr_cmd = true; in ufshcd_issue_devman_upiu_cmd()
6868 ufshcd_prepare_lrbp_crypto(NULL, lrbp); in ufshcd_issue_devman_upiu_cmd()
6872 lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE; in ufshcd_issue_devman_upiu_cmd()
6874 lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; in ufshcd_issue_devman_upiu_cmd()
6879 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, DMA_NONE); in ufshcd_issue_devman_upiu_cmd()
6882 memcpy(lrbp->ucd_req_ptr, req_upiu, sizeof(*lrbp->ucd_req_ptr)); in ufshcd_issue_devman_upiu_cmd()
6888 memcpy(lrbp->ucd_req_ptr + 1, desc_buff, *buff_len); in ufshcd_issue_devman_upiu_cmd()
6892 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); in ufshcd_issue_devman_upiu_cmd()
6896 ufshcd_add_query_upiu_trace(hba, UFS_QUERY_SEND, lrbp->ucd_req_ptr); in ufshcd_issue_devman_upiu_cmd()
6904 ufshcd_wait_for_dev_cmd(hba, lrbp, QUERY_REQ_TIMEOUT); in ufshcd_issue_devman_upiu_cmd()
6907 memcpy(rsp_upiu, lrbp->ucd_rsp_ptr, sizeof(*rsp_upiu)); in ufshcd_issue_devman_upiu_cmd()
6909 u8 *descp = (u8 *)lrbp->ucd_rsp_ptr + sizeof(*rsp_upiu); in ufshcd_issue_devman_upiu_cmd()
6910 u16 resp_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2) & in ufshcd_issue_devman_upiu_cmd()
6925 (struct utp_upiu_req *)lrbp->ucd_rsp_ptr); in ufshcd_issue_devman_upiu_cmd()
7062 struct ufshcd_lrb *lrbp; in ufshcd_set_req_abort_skip() local
7066 lrbp = &hba->lrb[tag]; in ufshcd_set_req_abort_skip()
7067 lrbp->req_abort_skip = true; in ufshcd_set_req_abort_skip()
7086 struct ufshcd_lrb *lrbp = &hba->lrb[tag]; in ufshcd_try_to_abort_task() local
7093 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag, in ufshcd_try_to_abort_task()
7132 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag, in ufshcd_try_to_abort_task()
7163 struct ufshcd_lrb *lrbp = &hba->lrb[tag]; in ufshcd_abort() local
7219 if (lrbp->lun == UFS_UPIU_UFS_DEVICE_WLUN) { in ufshcd_abort()
7220 ufshcd_update_evt_hist(hba, UFS_EVT_ABORT, lrbp->lun); in ufshcd_abort()
7230 if (lrbp->req_abort_skip) { in ufshcd_abort()
7253 ufshcd_release_scsi_cmd(hba, lrbp); in ufshcd_abort()