Hi Bao, On Tue, May 30, 2023 at 6:14 AM Bao D. Nguyen <quic_nguyenb@xxxxxxxxxxx> wrote: > > This patch series enable support for ufshcd_abort() and error handler in MCQ mode. > > Bao D. Nguyen (7): > ufs: core: Combine 32-bit command_desc_base_addr_lo/hi > ufs: core: Update the ufshcd_clear_cmds() functionality > ufs: mcq: Add supporting functions for mcq abort > ufs: mcq: Add support for clean up mcq resources > ufs: mcq: Added ufshcd_mcq_abort() > ufs: mcq: Use ufshcd_mcq_poll_cqe_lock() in mcq mode > ufs: core: Add error handling for MCQ mode > > drivers/ufs/core/ufs-mcq.c | 259 ++++++++++++++++++++++++++++++++++++++++- > drivers/ufs/core/ufshcd-priv.h | 18 ++- > drivers/ufs/core/ufshcd.c | 256 ++++++++++++++++++++++++++++++++-------- > drivers/ufs/host/ufs-qcom.c | 2 +- > include/ufs/ufshcd.h | 5 +- > include/ufs/ufshci.h | 23 +++- > 6 files changed, 501 insertions(+), 62 deletions(-) > --- > Changes compared to v6: > patch #7: Added a new argument force_compl to function ufshcd_mcq_compl_pending_transfer(). > Added a new function ufshcd_mcq_compl_all_cqes_lock(). > This change is to handle the case where the ufs host controller has been reset by > the ufshcd_hba_stop() in ufshcd_host_reset_and_restore() prior to calling > ufshcd_complete_requests(). The new logic is added to correctly complete all the > commands that have been completed in the Completion Queue, or inform the scsi layer > about those commands that are still stuck/pending in the hardware. > --- > v5->v6: Addressed Stanley's comments > patch #1,2,3,4,6: unchanged. > patch #5: fixed extra erroneous if() statement introduced in version v5 > patch #7: Change ufshcd_complete_requests() to call a new mcq function > ufshcd_mcq_compl_pending_transfer(), leaving ufshcd_transfer_req_compl() > to be used in SDB mode only. > > Reset the hwq's head and tail slot variables to default values > when the ufs host controller hw has been reset. > --- > v4->v5: > patch #4: fixed uninitialized variable access introduced in patch v3. > --- > v3->v4: Mainly addressed Bart's comments > patch #1: updated the commit message > patch #2: renamed ufshcd_clear_cmds() into ufshcd_clear_cmd() > patch #3: removed result arg in ufshcd_mcq_sq_cleanup() > patch #4: removed check for "!rq" in ufshcd_cmd_inflight() > avoided access to door bell register in mcq mode > patch #5, 6: unchanged > patch #7: ufshcd_clear_cmds() to ufshcd_clear_cmd() > --- > v2->v3: > patch #1: > New patch per Bart's comment. Helps process utp cmd > descriptor addr easier. > patch #2: > New patch to address Bart's comment regarding potentialoverflow > when mcq queue depth becomes greater than 64. > patch #3: > Address Bart's comments > . Replaced ufshcd_mcq_poll_register() with read_poll_timeout() > . Replace spin_lock(sq_lock) with mutex(sq_mutex) > . Updated ufshcd_mcq_nullify_cmd() and renamed to ufshcd_mcq_nullify_sqe() > . Minor cosmetic changes > patch #4: > Adress Bart's comments. Added new function ufshcd_cmd_inflight() > to replace the usage of lrbp->cmd > patch #5: > Continue replacing lrbp->cmd with ufshcd_cmd_inflight() > patch #6: > No change > patch #7: > Address Stanley Chu's comment about clearing hba->dev_cmd.complete > in clear ufshcd_wait_for_dev_cmd() > Address Bart's comment. > --- > v1->v2: > patch #1: Addressed Powen's comment. Replaced read_poll_timeout() > with ufshcd_mcq_poll_register(). The function read_poll_timeout() > may sleep while the caller is holding a spin_lock(). Poll the registers > in a tight loop instead. > -- > 2.7.4 > Feel free to add below tags to this series, Reviewed-by: Stanley Chu <stanley.chu@xxxxxxxxxxxx> Tested-by: Stanley Chu <stanley.chu@xxxxxxxxxxxx>