Message ID | 1588718832-4891-7-git-send-email-bbhatt@codeaurora.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Bug fixes and improved logging in MHI | expand |
On Tue, May 05, 2020 at 03:47:10PM -0700, Bhaumik Bhatt wrote: > When loading AMSS firmware using BHIe protocol, return -ETIMEDOUT if no > response is received within the timeout or return -EIO in case of a > protocol returned failure or an MHI error state. > > Signed-off-by: Bhaumik Bhatt <bbhatt@codeaurora.org> > Reviewed-by: Jeffrey Hugo <jhugo@codeaurora.org> > --- > drivers/bus/mhi/core/boot.c | 23 ++++++++++++----------- > 1 file changed, 12 insertions(+), 11 deletions(-) > > diff --git a/drivers/bus/mhi/core/boot.c b/drivers/bus/mhi/core/boot.c > index 17c636b..05627fe 100644 > --- a/drivers/bus/mhi/core/boot.c > +++ b/drivers/bus/mhi/core/boot.c > @@ -176,6 +176,7 @@ static int mhi_fw_load_amss(struct mhi_controller *mhi_cntrl, > void __iomem *base = mhi_cntrl->bhie; > rwlock_t *pm_lock = &mhi_cntrl->pm_lock; > u32 tx_status, sequence_id; > + int ret; > > read_lock_bh(pm_lock); > if (!MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state)) { > @@ -198,19 +199,19 @@ static int mhi_fw_load_amss(struct mhi_controller *mhi_cntrl, > read_unlock_bh(pm_lock); > > /* Wait for the image download to complete */ > - wait_event_timeout(mhi_cntrl->state_event, > - MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state) || > - mhi_read_reg_field(mhi_cntrl, base, > - BHIE_TXVECSTATUS_OFFS, > - BHIE_TXVECSTATUS_STATUS_BMSK, > - BHIE_TXVECSTATUS_STATUS_SHFT, > - &tx_status) || tx_status, > - msecs_to_jiffies(mhi_cntrl->timeout_ms)); > - > - if (MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state)) > + ret = wait_event_timeout(mhi_cntrl->state_event, > + MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state) || > + mhi_read_reg_field(mhi_cntrl, base, > + BHIE_TXVECSTATUS_OFFS, > + BHIE_TXVECSTATUS_STATUS_BMSK, > + BHIE_TXVECSTATUS_STATUS_SHFT, If you want to prevent some parameters to be within 80 characters that is fine but do it for all to look uniform: mhi_read_reg_field(mhi_cntrl, base, BHIE_TXVECSTATUS_OFFS, BHIE_TXVECSTATUS_STATUS_BMSK, BHIE_TXVECSTATUS_STATUS_SHFT, &tx_status) || tx_status, Thanks, Mani > + &tx_status) || tx_status, > + msecs_to_jiffies(mhi_cntrl->timeout_ms)); > + if (MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state) || > + tx_status != BHIE_TXVECSTATUS_STATUS_XFER_COMPL) > return -EIO; > > - return (tx_status == BHIE_TXVECSTATUS_STATUS_XFER_COMPL) ? 0 : -EIO; > + return (!ret) ? -ETIMEDOUT : 0; > } > > static int mhi_fw_load_sbl(struct mhi_controller *mhi_cntrl, > -- > The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, > a Linux Foundation Collaborative Project >
diff --git a/drivers/bus/mhi/core/boot.c b/drivers/bus/mhi/core/boot.c index 17c636b..05627fe 100644 --- a/drivers/bus/mhi/core/boot.c +++ b/drivers/bus/mhi/core/boot.c @@ -176,6 +176,7 @@ static int mhi_fw_load_amss(struct mhi_controller *mhi_cntrl, void __iomem *base = mhi_cntrl->bhie; rwlock_t *pm_lock = &mhi_cntrl->pm_lock; u32 tx_status, sequence_id; + int ret; read_lock_bh(pm_lock); if (!MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state)) { @@ -198,19 +199,19 @@ static int mhi_fw_load_amss(struct mhi_controller *mhi_cntrl, read_unlock_bh(pm_lock); /* Wait for the image download to complete */ - wait_event_timeout(mhi_cntrl->state_event, - MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state) || - mhi_read_reg_field(mhi_cntrl, base, - BHIE_TXVECSTATUS_OFFS, - BHIE_TXVECSTATUS_STATUS_BMSK, - BHIE_TXVECSTATUS_STATUS_SHFT, - &tx_status) || tx_status, - msecs_to_jiffies(mhi_cntrl->timeout_ms)); - - if (MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state)) + ret = wait_event_timeout(mhi_cntrl->state_event, + MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state) || + mhi_read_reg_field(mhi_cntrl, base, + BHIE_TXVECSTATUS_OFFS, + BHIE_TXVECSTATUS_STATUS_BMSK, + BHIE_TXVECSTATUS_STATUS_SHFT, + &tx_status) || tx_status, + msecs_to_jiffies(mhi_cntrl->timeout_ms)); + if (MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state) || + tx_status != BHIE_TXVECSTATUS_STATUS_XFER_COMPL) return -EIO; - return (tx_status == BHIE_TXVECSTATUS_STATUS_XFER_COMPL) ? 0 : -EIO; + return (!ret) ? -ETIMEDOUT : 0; } static int mhi_fw_load_sbl(struct mhi_controller *mhi_cntrl,