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

Bao D. Nguyen
2023-05-30T02:14:25Z

On 5/29/2023 5:23 PM, Stanley Chu wrote:
> 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>
Thank you very much, Stanley.
I will add these tags if a new rev is needed.

Thanks,
Bao