Lines Matching refs:lrbp

368 	struct ufshcd_lrb *lrbp = &hba->lrb[tag];  in ufshcd_add_command_trace()  local
369 struct scsi_cmnd *cmd = lrbp->cmd; in ufshcd_add_command_trace()
391 lrbp->ucd_req_ptr->sc.exp_data_transfer_len); in ufshcd_add_command_trace()
393 group_id = lrbp->cmd->cmnd[6]; in ufshcd_add_command_trace()
477 struct ufshcd_lrb *lrbp; in ufshcd_print_trs() local
482 lrbp = &hba->lrb[tag]; in ufshcd_print_trs()
485 tag, ktime_to_us(lrbp->issue_time_stamp)); in ufshcd_print_trs()
487 tag, ktime_to_us(lrbp->compl_time_stamp)); in ufshcd_print_trs()
490 tag, (u64)lrbp->utrd_dma_addr); in ufshcd_print_trs()
492 ufshcd_hex_dump("UPIU TRD: ", lrbp->utr_descriptor_ptr, in ufshcd_print_trs()
495 (u64)lrbp->ucd_req_dma_addr); in ufshcd_print_trs()
496 ufshcd_hex_dump("UPIU REQ: ", lrbp->ucd_req_ptr, in ufshcd_print_trs()
499 (u64)lrbp->ucd_rsp_dma_addr); in ufshcd_print_trs()
500 ufshcd_hex_dump("UPIU RSP: ", lrbp->ucd_rsp_ptr, in ufshcd_print_trs()
504 lrbp->utr_descriptor_ptr->prd_table_length); in ufshcd_print_trs()
511 (u64)lrbp->ucd_prdt_dma_addr); in ufshcd_print_trs()
514 ufshcd_hex_dump("UPIU PRDT: ", lrbp->ucd_prdt_ptr, in ufshcd_print_trs()
701 static inline int ufshcd_get_tr_ocs(struct ufshcd_lrb *lrbp) in ufshcd_get_tr_ocs() argument
703 return le32_to_cpu(lrbp->utr_descriptor_ptr->header.dword_2) & MASK_OCS; in ufshcd_get_tr_ocs()
2032 struct ufshcd_lrb *lrbp) in ufshcd_should_inform_monitor() argument
2036 return (m->enabled && lrbp && lrbp->cmd && in ufshcd_should_inform_monitor()
2037 (!m->chunk_size || m->chunk_size == lrbp->cmd->sdb.length) && in ufshcd_should_inform_monitor()
2038 ktime_before(hba->monitor.enabled_ts, lrbp->issue_time_stamp)); in ufshcd_should_inform_monitor()
2041 static void ufshcd_start_monitor(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_start_monitor() argument
2043 int dir = ufshcd_monitor_opcode2dir(*lrbp->cmd->cmnd); in ufshcd_start_monitor()
2052 static void ufshcd_update_monitor(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_update_monitor() argument
2054 int dir = ufshcd_monitor_opcode2dir(*lrbp->cmd->cmnd); in ufshcd_update_monitor()
2059 struct request *req = lrbp->cmd->request; in ufshcd_update_monitor()
2063 now = lrbp->compl_time_stamp; in ufshcd_update_monitor()
2070 lat = ktime_sub(now, lrbp->issue_time_stamp); in ufshcd_update_monitor()
2092 struct ufshcd_lrb *lrbp = &hba->lrb[task_tag]; in ufshcd_send_command() local
2094 lrbp->issue_time_stamp = ktime_get(); in ufshcd_send_command()
2095 lrbp->compl_time_stamp = ktime_set(0, 0); in ufshcd_send_command()
2096 trace_android_vh_ufs_send_command(hba, lrbp); in ufshcd_send_command()
2099 if (unlikely(ufshcd_should_inform_monitor(hba, lrbp))) in ufshcd_send_command()
2100 ufshcd_start_monitor(hba, lrbp); in ufshcd_send_command()
2102 hba->vops->setup_xfer_req(hba, task_tag, !!lrbp->cmd); in ufshcd_send_command()
2124 static inline void ufshcd_copy_sense_data(struct ufshcd_lrb *lrbp) in ufshcd_copy_sense_data() argument
2127 if (lrbp->sense_buffer && in ufshcd_copy_sense_data()
2128 ufshcd_get_rsp_upiu_data_seg_len(lrbp->ucd_rsp_ptr)) { in ufshcd_copy_sense_data()
2131 len = be16_to_cpu(lrbp->ucd_rsp_ptr->sr.sense_data_len); in ufshcd_copy_sense_data()
2134 memcpy(lrbp->sense_buffer, lrbp->ucd_rsp_ptr->sr.sense_data, in ufshcd_copy_sense_data()
2146 int ufshcd_copy_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_copy_query_response() argument
2150 memcpy(&query_res->upiu_res, &lrbp->ucd_rsp_ptr->qr, QUERY_OSF_SIZE); in ufshcd_copy_query_response()
2154 lrbp->ucd_rsp_ptr->qr.opcode == UPIU_QUERY_OPCODE_READ_DESC) { in ufshcd_copy_query_response()
2155 u8 *descp = (u8 *)lrbp->ucd_rsp_ptr + in ufshcd_copy_query_response()
2161 resp_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2) & in ufshcd_copy_query_response()
2360 static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_map_sg() argument
2369 cmd = lrbp->cmd; in ufshcd_map_sg()
2377 lrbp->utr_descriptor_ptr->prd_table_length = in ufshcd_map_sg()
2380 lrbp->utr_descriptor_ptr->prd_table_length = in ufshcd_map_sg()
2383 prd = (struct ufshcd_sg_entry *)lrbp->ucd_prdt_ptr; in ufshcd_map_sg()
2396 lrbp->utr_descriptor_ptr->prd_table_length = 0; in ufshcd_map_sg()
2400 trace_android_vh_ufs_fill_prdt(hba, lrbp, sg_segments, &err); in ufshcd_map_sg()
2453 static void ufshcd_prepare_req_desc_hdr(struct ufshcd_lrb *lrbp, in ufshcd_prepare_req_desc_hdr() argument
2456 struct utp_transfer_req_desc *req_desc = lrbp->utr_descriptor_ptr; in ufshcd_prepare_req_desc_hdr()
2473 dword_0 = data_direction | (lrbp->command_type in ufshcd_prepare_req_desc_hdr()
2475 if (lrbp->intr_cmd) in ufshcd_prepare_req_desc_hdr()
2479 ufshcd_prepare_req_desc_hdr_crypto(lrbp, &dword_0, &dword_1, &dword_3); in ufshcd_prepare_req_desc_hdr()
2503 void ufshcd_prepare_utp_scsi_cmd_upiu(struct ufshcd_lrb *lrbp, u8 upiu_flags) in ufshcd_prepare_utp_scsi_cmd_upiu() argument
2505 struct scsi_cmnd *cmd = lrbp->cmd; in ufshcd_prepare_utp_scsi_cmd_upiu()
2506 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_scsi_cmd_upiu()
2512 lrbp->lun, lrbp->task_tag); in ufshcd_prepare_utp_scsi_cmd_upiu()
2525 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); in ufshcd_prepare_utp_scsi_cmd_upiu()
2536 struct ufshcd_lrb *lrbp, u8 upiu_flags) in ufshcd_prepare_utp_query_req_upiu() argument
2538 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_query_req_upiu()
2545 lrbp->lun, lrbp->task_tag); in ufshcd_prepare_utp_query_req_upiu()
2564 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); in ufshcd_prepare_utp_query_req_upiu()
2567 static inline void ufshcd_prepare_utp_nop_upiu(struct ufshcd_lrb *lrbp) in ufshcd_prepare_utp_nop_upiu() argument
2569 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_nop_upiu()
2576 UPIU_TRANSACTION_NOP_OUT, 0, 0, lrbp->task_tag); in ufshcd_prepare_utp_nop_upiu()
2581 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); in ufshcd_prepare_utp_nop_upiu()
2591 struct ufshcd_lrb *lrbp) in ufshcd_compose_devman_upiu() argument
2597 lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE; in ufshcd_compose_devman_upiu()
2599 lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; in ufshcd_compose_devman_upiu()
2601 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, DMA_NONE); in ufshcd_compose_devman_upiu()
2603 ufshcd_prepare_utp_query_req_upiu(hba, lrbp, upiu_flags); in ufshcd_compose_devman_upiu()
2605 ufshcd_prepare_utp_nop_upiu(lrbp); in ufshcd_compose_devman_upiu()
2618 static int ufshcd_comp_scsi_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_comp_scsi_upiu() argument
2624 lrbp->command_type = UTP_CMD_TYPE_SCSI; in ufshcd_comp_scsi_upiu()
2626 lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; in ufshcd_comp_scsi_upiu()
2628 if (likely(lrbp->cmd)) { in ufshcd_comp_scsi_upiu()
2629 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, in ufshcd_comp_scsi_upiu()
2630 lrbp->cmd->sc_data_direction); in ufshcd_comp_scsi_upiu()
2631 ufshcd_prepare_utp_scsi_cmd_upiu(lrbp, upiu_flags); in ufshcd_comp_scsi_upiu()
2681 struct ufshcd_lrb *lrbp; in ufshcd_queuecommand() local
2746 lrbp = &hba->lrb[tag]; in ufshcd_queuecommand()
2747 WARN_ON(lrbp->cmd); in ufshcd_queuecommand()
2748 lrbp->cmd = cmd; in ufshcd_queuecommand()
2749 lrbp->sense_bufflen = UFS_SENSE_SIZE; in ufshcd_queuecommand()
2750 lrbp->sense_buffer = cmd->sense_buffer; in ufshcd_queuecommand()
2751 lrbp->task_tag = tag; in ufshcd_queuecommand()
2752 lrbp->lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun); in ufshcd_queuecommand()
2753 lrbp->intr_cmd = !ufshcd_is_intr_aggr_allowed(hba) ? true : false; in ufshcd_queuecommand()
2755 ufshcd_prepare_lrbp_crypto(cmd->request, lrbp); in ufshcd_queuecommand()
2757 trace_android_vh_ufs_prepare_command(hba, cmd->request, lrbp, &err); in ufshcd_queuecommand()
2759 lrbp->cmd = NULL; in ufshcd_queuecommand()
2764 lrbp->req_abort_skip = false; in ufshcd_queuecommand()
2766 err = ufshpb_prep(hba, lrbp); in ufshcd_queuecommand()
2768 lrbp->cmd = NULL; in ufshcd_queuecommand()
2773 ufshcd_comp_scsi_upiu(hba, lrbp); in ufshcd_queuecommand()
2775 err = ufshcd_map_sg(hba, lrbp); in ufshcd_queuecommand()
2777 lrbp->cmd = NULL; in ufshcd_queuecommand()
2791 struct ufshcd_lrb *lrbp, enum dev_cmd_type cmd_type, int tag) in ufshcd_compose_dev_cmd() argument
2793 lrbp->cmd = NULL; in ufshcd_compose_dev_cmd()
2794 lrbp->sense_bufflen = 0; in ufshcd_compose_dev_cmd()
2795 lrbp->sense_buffer = NULL; in ufshcd_compose_dev_cmd()
2796 lrbp->task_tag = tag; in ufshcd_compose_dev_cmd()
2797 lrbp->lun = 0; /* device management cmd is not specific to any LUN */ in ufshcd_compose_dev_cmd()
2798 lrbp->intr_cmd = true; /* No interrupt aggregation */ in ufshcd_compose_dev_cmd()
2799 ufshcd_prepare_lrbp_crypto(NULL, lrbp); in ufshcd_compose_dev_cmd()
2802 return ufshcd_compose_devman_upiu(hba, lrbp); in ufshcd_compose_dev_cmd()
2829 ufshcd_check_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_check_query_response() argument
2834 query_res->response = ufshcd_get_rsp_upiu_result(lrbp->ucd_rsp_ptr) >> in ufshcd_check_query_response()
2845 ufshcd_dev_cmd_completion(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_dev_cmd_completion() argument
2851 resp = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr); in ufshcd_dev_cmd_completion()
2862 err = ufshcd_check_query_response(hba, lrbp); in ufshcd_dev_cmd_completion()
2864 err = ufshcd_copy_query_response(hba, lrbp); in ufshcd_dev_cmd_completion()
2883 struct ufshcd_lrb *lrbp, int max_timeout) in ufshcd_wait_for_dev_cmd() argument
2897 err = ufshcd_get_tr_ocs(lrbp); in ufshcd_wait_for_dev_cmd()
2899 err = ufshcd_dev_cmd_completion(hba, lrbp); in ufshcd_wait_for_dev_cmd()
2906 __func__, lrbp->task_tag); in ufshcd_wait_for_dev_cmd()
2907 if (!ufshcd_clear_cmd(hba, lrbp->task_tag)) in ufshcd_wait_for_dev_cmd()
2915 ufshcd_outstanding_req_clear(hba, lrbp->task_tag); in ufshcd_wait_for_dev_cmd()
2935 struct ufshcd_lrb *lrbp; in ufshcd_exec_dev_cmd() local
2943 lrbp = &hba->lrb[tag]; in ufshcd_exec_dev_cmd()
2944 WARN_ON(lrbp->cmd); in ufshcd_exec_dev_cmd()
2945 err = ufshcd_compose_dev_cmd(hba, lrbp, cmd_type, tag); in ufshcd_exec_dev_cmd()
2956 err = ufshcd_wait_for_dev_cmd(hba, lrbp, timeout); in ufshcd_exec_dev_cmd()
4973 ufshcd_scsi_cmd_status(struct ufshcd_lrb *lrbp, int scsi_status) in ufshcd_scsi_cmd_status() argument
4979 ufshcd_copy_sense_data(lrbp); in ufshcd_scsi_cmd_status()
4989 ufshcd_copy_sense_data(lrbp); in ufshcd_scsi_cmd_status()
5008 ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_transfer_rsp_status() argument
5015 ocs = ufshcd_get_tr_ocs(lrbp); in ufshcd_transfer_rsp_status()
5018 if (be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_1) & in ufshcd_transfer_rsp_status()
5025 result = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr); in ufshcd_transfer_rsp_status()
5033 result = ufshcd_get_rsp_upiu_result(lrbp->ucd_rsp_ptr); in ufshcd_transfer_rsp_status()
5040 result = ufshcd_scsi_cmd_status(lrbp, scsi_status); in ufshcd_transfer_rsp_status()
5056 ufshcd_is_exception_event(lrbp->ucd_rsp_ptr) && in ufshcd_transfer_rsp_status()
5067 ufshpb_rsp_upiu(hba, lrbp); in ufshcd_transfer_rsp_status()
5089 lrbp->task_tag, lrbp->cmd && lrbp->cmd->cmnd ? in ufshcd_transfer_rsp_status()
5090 lrbp->cmd->cmnd[0] : 0); in ufshcd_transfer_rsp_status()
5106 ocs, lrbp->task_tag); in ufshcd_transfer_rsp_status()
5114 ufshcd_print_trs(hba, 1 << lrbp->task_tag, true); in ufshcd_transfer_rsp_status()
5179 struct ufshcd_lrb *lrbp) in ufshcd_release_scsi_cmd() argument
5181 struct scsi_cmnd *cmd = lrbp->cmd; in ufshcd_release_scsi_cmd()
5184 ufshcd_crypto_clear_prdt(hba, lrbp); in ufshcd_release_scsi_cmd()
5185 lrbp->cmd = NULL; /* Mark the command as completed. */ in ufshcd_release_scsi_cmd()
5198 struct ufshcd_lrb *lrbp; in __ufshcd_transfer_req_compl() local
5205 lrbp = &hba->lrb[index]; in __ufshcd_transfer_req_compl()
5206 lrbp->compl_time_stamp = ktime_get(); in __ufshcd_transfer_req_compl()
5207 cmd = lrbp->cmd; in __ufshcd_transfer_req_compl()
5209 if (unlikely(ufshcd_should_inform_monitor(hba, lrbp))) in __ufshcd_transfer_req_compl()
5210 ufshcd_update_monitor(hba, lrbp); in __ufshcd_transfer_req_compl()
5211 trace_android_vh_ufs_compl_command(hba, lrbp); in __ufshcd_transfer_req_compl()
5213 cmd->result = ufshcd_transfer_rsp_status(hba, lrbp); in __ufshcd_transfer_req_compl()
5214 ufshcd_release_scsi_cmd(hba, lrbp); in __ufshcd_transfer_req_compl()
5217 } else if (lrbp->command_type == UTP_CMD_TYPE_DEV_MANAGE || in __ufshcd_transfer_req_compl()
5218 lrbp->command_type == UTP_CMD_TYPE_UFS_STORAGE) { in __ufshcd_transfer_req_compl()
5220 trace_android_vh_ufs_compl_command(hba, lrbp); in __ufshcd_transfer_req_compl()
6625 struct ufshcd_lrb *lrbp; in ufshcd_issue_devman_upiu_cmd() local
6634 lrbp = &hba->lrb[tag]; in ufshcd_issue_devman_upiu_cmd()
6635 WARN_ON(lrbp->cmd); in ufshcd_issue_devman_upiu_cmd()
6636 lrbp->cmd = NULL; in ufshcd_issue_devman_upiu_cmd()
6637 lrbp->sense_bufflen = 0; in ufshcd_issue_devman_upiu_cmd()
6638 lrbp->sense_buffer = NULL; in ufshcd_issue_devman_upiu_cmd()
6639 lrbp->task_tag = tag; in ufshcd_issue_devman_upiu_cmd()
6640 lrbp->lun = 0; in ufshcd_issue_devman_upiu_cmd()
6641 lrbp->intr_cmd = true; in ufshcd_issue_devman_upiu_cmd()
6642 ufshcd_prepare_lrbp_crypto(NULL, lrbp); in ufshcd_issue_devman_upiu_cmd()
6646 lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE; in ufshcd_issue_devman_upiu_cmd()
6648 lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; in ufshcd_issue_devman_upiu_cmd()
6653 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, DMA_NONE); in ufshcd_issue_devman_upiu_cmd()
6656 memcpy(lrbp->ucd_req_ptr, req_upiu, sizeof(*lrbp->ucd_req_ptr)); in ufshcd_issue_devman_upiu_cmd()
6662 memcpy(lrbp->ucd_req_ptr + 1, desc_buff, *buff_len); in ufshcd_issue_devman_upiu_cmd()
6666 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); in ufshcd_issue_devman_upiu_cmd()
6679 ufshcd_wait_for_dev_cmd(hba, lrbp, QUERY_REQ_TIMEOUT); in ufshcd_issue_devman_upiu_cmd()
6682 memcpy(rsp_upiu, lrbp->ucd_rsp_ptr, sizeof(*rsp_upiu)); in ufshcd_issue_devman_upiu_cmd()
6684 u8 *descp = (u8 *)lrbp->ucd_rsp_ptr + sizeof(*rsp_upiu); in ufshcd_issue_devman_upiu_cmd()
6685 u16 resp_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2) & in ufshcd_issue_devman_upiu_cmd()
6825 struct ufshcd_lrb *lrbp; in ufshcd_set_req_abort_skip() local
6829 lrbp = &hba->lrb[tag]; in ufshcd_set_req_abort_skip()
6830 lrbp->req_abort_skip = true; in ufshcd_set_req_abort_skip()
6849 struct ufshcd_lrb *lrbp = &hba->lrb[tag]; in ufshcd_try_to_abort_task() local
6856 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag, in ufshcd_try_to_abort_task()
6895 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag, in ufshcd_try_to_abort_task()
6929 struct ufshcd_lrb *lrbp; in ufshcd_abort() local
6935 lrbp = &hba->lrb[tag]; in ufshcd_abort()
6991 if (lrbp->lun == UFS_UPIU_UFS_DEVICE_WLUN) { in ufshcd_abort()
6992 ufshcd_update_evt_hist(hba, UFS_EVT_ABORT, lrbp->lun); in ufshcd_abort()
7002 if (lrbp->req_abort_skip) { in ufshcd_abort()
7024 ufshcd_release_scsi_cmd(hba, lrbp); in ufshcd_abort()