Re: [PATCH v7 0/7] ufs: core: mcq: Add ufshcd_abort() and error handler support in MCQ mode

Stanley Chu
2023-05-30T00:23:52Z

Hi Bao,

On Tue, May 30, 2023 at 6:14 AM Bao D. Nguyen <quic_nguyenb@quicinc.com> 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@mediatek.com>
Tested-by: Stanley Chu <stanley.chu@mediatek.com>