diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index f86f7ac777f7..6c7681699f26 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -418,8 +418,6 @@ static void ufshcd_print_host_regs(struct ufs_hba *hba) ufshcd_print_clk_freqs(hba); - ufshcd_vops_dbg_register_dump(hba); - ufshcd_crypto_debug(hba); } @@ -3912,6 +3910,7 @@ out: ufshcd_print_host_state(hba); ufshcd_print_pwr_info(hba); ufshcd_print_host_regs(hba); + ufshcd_vops_dbg_register_dump(hba); } spin_lock_irqsave(hba->host->host_lock, flags); @@ -4623,6 +4622,7 @@ out: ufshcd_print_host_state(hba); ufshcd_print_pwr_info(hba); ufshcd_print_host_regs(hba); + ufshcd_vops_dbg_register_dump(hba); } return ret; } @@ -4979,8 +4979,10 @@ ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) dev_err(hba->dev, "OCS error from controller = %x for tag %d\n", ocs, lrbp->task_tag); - ufshcd_print_host_regs(hba); ufshcd_print_host_state(hba); + ufshcd_print_pwr_info(hba); + ufshcd_print_host_regs(hba); + ufshcd_vops_dbg_register_dump(hba); break; } /* end of switch */ @@ -5533,6 +5535,11 @@ static void ufshcd_err_handler(struct work_struct *work) if (!ret) goto skip_err_handling; } + + spin_unlock_irqrestore(hba->host->host_lock, flags); + ufshcd_vops_dbg_register_dump(hba); + spin_lock_irqsave(hba->host->host_lock, flags); + if ((hba->saved_err & INT_FATAL_ERRORS) || (hba->saved_err & UFSHCD_UIC_HIBERN8_MASK) || ((hba->saved_err & UIC_ERROR) && @@ -5780,8 +5787,9 @@ static irqreturn_t ufshcd_check_errors(struct ufs_hba *hba) __func__, hba->saved_err, hba->saved_uic_err); - ufshcd_print_host_regs(hba); + ufshcd_print_host_state(hba); ufshcd_print_pwr_info(hba); + ufshcd_print_host_regs(hba); ufshcd_print_tmrs(hba, hba->outstanding_tasks); ufshcd_print_trs(hba, hba->outstanding_reqs, pr_prdt); @@ -6358,10 +6366,11 @@ static int ufshcd_abort(struct scsi_cmnd *cmd) scsi_print_command(hba->lrb[tag].cmd); if (!hba->req_abort_count) { ufshcd_update_reg_hist(&hba->ufs_stats.task_abort, 0); - ufshcd_print_host_regs(hba); + ufshcd_print_trs(hba, 1 << tag, true); ufshcd_print_host_state(hba); ufshcd_print_pwr_info(hba); - ufshcd_print_trs(hba, 1 << tag, true); + ufshcd_print_host_regs(hba); + ufshcd_vops_dbg_register_dump(hba); } else { ufshcd_print_trs(hba, 1 << tag, false); } @@ -8744,8 +8753,9 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq) err = ufshcd_hba_enable(hba); if (err) { dev_err(hba->dev, "Host controller enable failed\n"); - ufshcd_print_host_regs(hba); ufshcd_print_host_state(hba); + ufshcd_print_host_regs(hba); + ufshcd_vops_dbg_register_dump(hba); goto out_remove_scsi_host; }