Lines Matching refs:lrbp
345 struct ufshcd_lrb *lrbp = &hba->lrb[tag]; in ufshcd_add_command_trace() local
350 if (lrbp->cmd) in ufshcd_add_command_trace()
355 if (lrbp->cmd) { /* data phase exists */ in ufshcd_add_command_trace()
358 opcode = (u8)(*lrbp->cmd->cmnd); in ufshcd_add_command_trace()
364 if (lrbp->cmd->request && lrbp->cmd->request->bio) in ufshcd_add_command_trace()
366 lrbp->cmd->request->bio->bi_iter.bi_sector; in ufshcd_add_command_trace()
368 lrbp->ucd_req_ptr->sc.exp_data_transfer_len); in ufshcd_add_command_trace()
437 struct ufshcd_lrb *lrbp; in ufshcd_print_trs() local
442 lrbp = &hba->lrb[tag]; in ufshcd_print_trs()
445 tag, ktime_to_us(lrbp->issue_time_stamp)); in ufshcd_print_trs()
447 tag, ktime_to_us(lrbp->compl_time_stamp)); in ufshcd_print_trs()
450 tag, (u64)lrbp->utrd_dma_addr); in ufshcd_print_trs()
452 ufshcd_hex_dump("UPIU TRD: ", lrbp->utr_descriptor_ptr, in ufshcd_print_trs()
455 (u64)lrbp->ucd_req_dma_addr); in ufshcd_print_trs()
456 ufshcd_hex_dump("UPIU REQ: ", lrbp->ucd_req_ptr, in ufshcd_print_trs()
459 (u64)lrbp->ucd_rsp_dma_addr); in ufshcd_print_trs()
460 ufshcd_hex_dump("UPIU RSP: ", lrbp->ucd_rsp_ptr, in ufshcd_print_trs()
464 lrbp->utr_descriptor_ptr->prd_table_length); in ufshcd_print_trs()
468 (u64)lrbp->ucd_prdt_dma_addr); in ufshcd_print_trs()
471 ufshcd_hex_dump("UPIU PRDT: ", lrbp->ucd_prdt_ptr, in ufshcd_print_trs()
643 static inline int ufshcd_get_tr_ocs(struct ufshcd_lrb *lrbp) in ufshcd_get_tr_ocs() argument
645 return le32_to_cpu(lrbp->utr_descriptor_ptr->header.dword_2) & MASK_OCS; in ufshcd_get_tr_ocs()
1878 static inline void ufshcd_copy_sense_data(struct ufshcd_lrb *lrbp) in ufshcd_copy_sense_data() argument
1881 if (lrbp->sense_buffer && in ufshcd_copy_sense_data()
1882 ufshcd_get_rsp_upiu_data_seg_len(lrbp->ucd_rsp_ptr)) { in ufshcd_copy_sense_data()
1885 len = be16_to_cpu(lrbp->ucd_rsp_ptr->sr.sense_data_len); in ufshcd_copy_sense_data()
1888 memcpy(lrbp->sense_buffer, in ufshcd_copy_sense_data()
1889 lrbp->ucd_rsp_ptr->sr.sense_data, in ufshcd_copy_sense_data()
1901 int ufshcd_copy_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_copy_query_response() argument
1905 memcpy(&query_res->upiu_res, &lrbp->ucd_rsp_ptr->qr, QUERY_OSF_SIZE); in ufshcd_copy_query_response()
1908 if (lrbp->ucd_rsp_ptr->qr.opcode == UPIU_QUERY_OPCODE_READ_DESC) { in ufshcd_copy_query_response()
1909 u8 *descp = (u8 *)lrbp->ucd_rsp_ptr + in ufshcd_copy_query_response()
1915 resp_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2) & in ufshcd_copy_query_response()
2087 static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_map_sg() argument
2095 cmd = lrbp->cmd; in ufshcd_map_sg()
2102 lrbp->utr_descriptor_ptr->prd_table_length = in ufshcd_map_sg()
2106 lrbp->utr_descriptor_ptr->prd_table_length = in ufshcd_map_sg()
2109 prd_table = (struct ufshcd_sg_entry *)lrbp->ucd_prdt_ptr; in ufshcd_map_sg()
2121 lrbp->utr_descriptor_ptr->prd_table_length = 0; in ufshcd_map_sg()
2176 static void ufshcd_prepare_req_desc_hdr(struct ufshcd_lrb *lrbp, in ufshcd_prepare_req_desc_hdr() argument
2179 struct utp_transfer_req_desc *req_desc = lrbp->utr_descriptor_ptr; in ufshcd_prepare_req_desc_hdr()
2194 dword_0 = data_direction | (lrbp->command_type in ufshcd_prepare_req_desc_hdr()
2196 if (lrbp->intr_cmd) in ufshcd_prepare_req_desc_hdr()
2223 void ufshcd_prepare_utp_scsi_cmd_upiu(struct ufshcd_lrb *lrbp, u32 upiu_flags) in ufshcd_prepare_utp_scsi_cmd_upiu() argument
2225 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_scsi_cmd_upiu()
2231 lrbp->lun, lrbp->task_tag); in ufshcd_prepare_utp_scsi_cmd_upiu()
2239 cpu_to_be32(lrbp->cmd->sdb.length); in ufshcd_prepare_utp_scsi_cmd_upiu()
2241 cdb_len = min_t(unsigned short, lrbp->cmd->cmd_len, MAX_CDB_SIZE); in ufshcd_prepare_utp_scsi_cmd_upiu()
2243 memcpy(ucd_req_ptr->sc.cdb, lrbp->cmd->cmnd, cdb_len); in ufshcd_prepare_utp_scsi_cmd_upiu()
2245 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); in ufshcd_prepare_utp_scsi_cmd_upiu()
2256 struct ufshcd_lrb *lrbp, u32 upiu_flags) in ufshcd_prepare_utp_query_req_upiu() argument
2258 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_query_req_upiu()
2261 u8 *descp = (u8 *)lrbp->ucd_req_ptr + GENERAL_UPIU_REQUEST_SIZE; in ufshcd_prepare_utp_query_req_upiu()
2266 lrbp->lun, lrbp->task_tag); in ufshcd_prepare_utp_query_req_upiu()
2285 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); in ufshcd_prepare_utp_query_req_upiu()
2288 static inline void ufshcd_prepare_utp_nop_upiu(struct ufshcd_lrb *lrbp) in ufshcd_prepare_utp_nop_upiu() argument
2290 struct utp_upiu_req *ucd_req_ptr = lrbp->ucd_req_ptr; in ufshcd_prepare_utp_nop_upiu()
2297 UPIU_TRANSACTION_NOP_OUT, 0, 0, lrbp->task_tag); in ufshcd_prepare_utp_nop_upiu()
2302 memset(lrbp->ucd_rsp_ptr, 0, sizeof(struct utp_upiu_rsp)); in ufshcd_prepare_utp_nop_upiu()
2311 static int ufshcd_comp_devman_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_comp_devman_upiu() argument
2318 lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE; in ufshcd_comp_devman_upiu()
2320 lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; in ufshcd_comp_devman_upiu()
2322 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, DMA_NONE); in ufshcd_comp_devman_upiu()
2324 ufshcd_prepare_utp_query_req_upiu(hba, lrbp, upiu_flags); in ufshcd_comp_devman_upiu()
2326 ufshcd_prepare_utp_nop_upiu(lrbp); in ufshcd_comp_devman_upiu()
2339 static int ufshcd_comp_scsi_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_comp_scsi_upiu() argument
2346 lrbp->command_type = UTP_CMD_TYPE_SCSI; in ufshcd_comp_scsi_upiu()
2348 lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE; in ufshcd_comp_scsi_upiu()
2350 if (likely(lrbp->cmd)) { in ufshcd_comp_scsi_upiu()
2351 ufshcd_prepare_req_desc_hdr(lrbp, &upiu_flags, in ufshcd_comp_scsi_upiu()
2352 lrbp->cmd->sc_data_direction); in ufshcd_comp_scsi_upiu()
2353 ufshcd_prepare_utp_scsi_cmd_upiu(lrbp, upiu_flags); in ufshcd_comp_scsi_upiu()
2381 struct ufshcd_lrb *lrbp; in ufshcd_queuecommand() local
2450 lrbp = &hba->lrb[tag]; in ufshcd_queuecommand()
2452 WARN_ON(lrbp->cmd); in ufshcd_queuecommand()
2453 lrbp->cmd = cmd; in ufshcd_queuecommand()
2454 lrbp->sense_bufflen = UFSHCD_REQ_SENSE_SIZE; in ufshcd_queuecommand()
2455 lrbp->sense_buffer = cmd->sense_buffer; in ufshcd_queuecommand()
2456 lrbp->task_tag = tag; in ufshcd_queuecommand()
2457 lrbp->lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun); in ufshcd_queuecommand()
2458 lrbp->intr_cmd = !ufshcd_is_intr_aggr_allowed(hba) ? true : false; in ufshcd_queuecommand()
2459 lrbp->req_abort_skip = false; in ufshcd_queuecommand()
2461 ufshcd_comp_scsi_upiu(hba, lrbp); in ufshcd_queuecommand()
2463 err = ufshcd_map_sg(hba, lrbp); in ufshcd_queuecommand()
2465 lrbp->cmd = NULL; in ufshcd_queuecommand()
2474 ufshcd_vops_setup_xfer_req(hba, tag, (lrbp->cmd ? true : false)); in ufshcd_queuecommand()
2484 struct ufshcd_lrb *lrbp, enum dev_cmd_type cmd_type, int tag) in ufshcd_compose_dev_cmd() argument
2486 lrbp->cmd = NULL; in ufshcd_compose_dev_cmd()
2487 lrbp->sense_bufflen = 0; in ufshcd_compose_dev_cmd()
2488 lrbp->sense_buffer = NULL; in ufshcd_compose_dev_cmd()
2489 lrbp->task_tag = tag; in ufshcd_compose_dev_cmd()
2490 lrbp->lun = 0; /* device management cmd is not specific to any LUN */ in ufshcd_compose_dev_cmd()
2491 lrbp->intr_cmd = true; /* No interrupt aggregation */ in ufshcd_compose_dev_cmd()
2494 return ufshcd_comp_devman_upiu(hba, lrbp); in ufshcd_compose_dev_cmd()
2521 ufshcd_check_query_response(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_check_query_response() argument
2526 query_res->response = ufshcd_get_rsp_upiu_result(lrbp->ucd_rsp_ptr) >> in ufshcd_check_query_response()
2537 ufshcd_dev_cmd_completion(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_dev_cmd_completion() argument
2543 resp = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr); in ufshcd_dev_cmd_completion()
2554 err = ufshcd_check_query_response(hba, lrbp); in ufshcd_dev_cmd_completion()
2556 err = ufshcd_copy_query_response(hba, lrbp); in ufshcd_dev_cmd_completion()
2575 struct ufshcd_lrb *lrbp, int max_timeout) in ufshcd_wait_for_dev_cmd() argument
2589 err = ufshcd_get_tr_ocs(lrbp); in ufshcd_wait_for_dev_cmd()
2591 err = ufshcd_dev_cmd_completion(hba, lrbp); in ufshcd_wait_for_dev_cmd()
2598 __func__, lrbp->task_tag); in ufshcd_wait_for_dev_cmd()
2599 if (!ufshcd_clear_cmd(hba, lrbp->task_tag)) in ufshcd_wait_for_dev_cmd()
2607 ufshcd_outstanding_req_clear(hba, lrbp->task_tag); in ufshcd_wait_for_dev_cmd()
2663 struct ufshcd_lrb *lrbp; in ufshcd_exec_dev_cmd() local
2679 lrbp = &hba->lrb[tag]; in ufshcd_exec_dev_cmd()
2680 WARN_ON(lrbp->cmd); in ufshcd_exec_dev_cmd()
2681 err = ufshcd_compose_dev_cmd(hba, lrbp, cmd_type, tag); in ufshcd_exec_dev_cmd()
2691 ufshcd_vops_setup_xfer_req(hba, tag, (lrbp->cmd ? true : false)); in ufshcd_exec_dev_cmd()
2695 err = ufshcd_wait_for_dev_cmd(hba, lrbp, timeout); in ufshcd_exec_dev_cmd()
4651 ufshcd_scsi_cmd_status(struct ufshcd_lrb *lrbp, int scsi_status) in ufshcd_scsi_cmd_status() argument
4657 ufshcd_copy_sense_data(lrbp); in ufshcd_scsi_cmd_status()
4666 ufshcd_copy_sense_data(lrbp); in ufshcd_scsi_cmd_status()
4685 ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) in ufshcd_transfer_rsp_status() argument
4692 ocs = ufshcd_get_tr_ocs(lrbp); in ufshcd_transfer_rsp_status()
4696 result = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr); in ufshcd_transfer_rsp_status()
4704 result = ufshcd_get_rsp_upiu_result(lrbp->ucd_rsp_ptr); in ufshcd_transfer_rsp_status()
4711 result = ufshcd_scsi_cmd_status(lrbp, scsi_status); in ufshcd_transfer_rsp_status()
4726 ufshcd_is_exception_event(lrbp->ucd_rsp_ptr)) in ufshcd_transfer_rsp_status()
4759 ocs, lrbp->task_tag); in ufshcd_transfer_rsp_status()
4766 ufshcd_print_trs(hba, 1 << lrbp->task_tag, true); in ufshcd_transfer_rsp_status()
4797 struct ufshcd_lrb *lrbp; in __ufshcd_transfer_req_compl() local
4803 lrbp = &hba->lrb[index]; in __ufshcd_transfer_req_compl()
4804 cmd = lrbp->cmd; in __ufshcd_transfer_req_compl()
4807 result = ufshcd_transfer_rsp_status(hba, lrbp); in __ufshcd_transfer_req_compl()
4811 lrbp->cmd = NULL; in __ufshcd_transfer_req_compl()
4816 } else if (lrbp->command_type == UTP_CMD_TYPE_DEV_MANAGE || in __ufshcd_transfer_req_compl()
4817 lrbp->command_type == UTP_CMD_TYPE_UFS_STORAGE) { in __ufshcd_transfer_req_compl()
4827 lrbp->compl_time_stamp = ktime_get(); in __ufshcd_transfer_req_compl()
5712 struct ufshcd_lrb *lrbp; in ufshcd_eh_device_reset_handler() local
5719 lrbp = &hba->lrb[tag]; in ufshcd_eh_device_reset_handler()
5720 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, 0, UFS_LOGICAL_RESET, &resp); in ufshcd_eh_device_reset_handler()
5729 if (hba->lrb[pos].lun == lrbp->lun) { in ufshcd_eh_device_reset_handler()
5752 struct ufshcd_lrb *lrbp; in ufshcd_set_req_abort_skip() local
5756 lrbp = &hba->lrb[tag]; in ufshcd_set_req_abort_skip()
5757 lrbp->req_abort_skip = true; in ufshcd_set_req_abort_skip()
5782 struct ufshcd_lrb *lrbp; in ufshcd_abort() local
5788 lrbp = &hba->lrb[tag]; in ufshcd_abort()
5803 if (lrbp->lun == UFS_UPIU_UFS_DEVICE_WLUN) in ufshcd_abort()
5844 if (lrbp->req_abort_skip) { in ufshcd_abort()
5850 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag, in ufshcd_abort()
5889 err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag, in ufshcd_abort()