2020-11-06 00:37:50

by Bhaumik Bhatt

[permalink] [raw]
Subject: [PATCH v1 6/6] bus: mhi: core: Skip RDDM download for unknown execution environment

If MHI is unable to determine the execution environment during
the panic path, host must skip the RDDM download. This can happen
if the BHI offset read or the BHI_EXECENV register read fails
indicating that the underlying transport is unresponsive. Hence,
there is no need to trigger an RDDM using SYSERR or request an
SOC reset.

Suggested-by: Hemant Kumar <[email protected]>
Signed-off-by: Bhaumik Bhatt <[email protected]>
---
drivers/bus/mhi/core/boot.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/bus/mhi/core/boot.c b/drivers/bus/mhi/core/boot.c
index 16244cc..40606e5 100644
--- a/drivers/bus/mhi/core/boot.c
+++ b/drivers/bus/mhi/core/boot.c
@@ -92,6 +92,9 @@ static int __mhi_download_rddm_in_panic(struct mhi_controller *mhi_cntrl)
* image download completion.
*/
ee = mhi_get_exec_env(mhi_cntrl);
+ if (ee == MHI_EE_MAX)
+ goto error_exit_rddm;
+
if (ee != MHI_EE_RDDM) {
dev_dbg(dev, "Trigger device into RDDM mode using SYS ERR\n");
mhi_set_mhi_state(mhi_cntrl, MHI_STATE_SYS_ERR);
@@ -140,9 +143,11 @@ static int __mhi_download_rddm_in_panic(struct mhi_controller *mhi_cntrl)
ret = mhi_read_reg(mhi_cntrl, base, BHIE_RXVECSTATUS_OFFS, &rx_status);

dev_err(dev, "Did not complete RDDM transfer\n");
- dev_err(dev, "Current EE: %s\n", TO_MHI_EXEC_STR(ee));
dev_err(dev, "RXVEC_STATUS: 0x%x\n", rx_status);

+error_exit_rddm:
+ dev_err(dev, "Current EE: %s\n", TO_MHI_EXEC_STR(ee));
+
return -EIO;
}

--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project


2020-11-06 05:40:20

by Manivannan Sadhasivam

[permalink] [raw]
Subject: Re: [PATCH v1 6/6] bus: mhi: core: Skip RDDM download for unknown execution environment

On Thu, Nov 05, 2020 at 04:34:29PM -0800, Bhaumik Bhatt wrote:
> If MHI is unable to determine the execution environment during
> the panic path, host must skip the RDDM download. This can happen
> if the BHI offset read or the BHI_EXECENV register read fails
> indicating that the underlying transport is unresponsive. Hence,
> there is no need to trigger an RDDM using SYSERR or request an
> SOC reset.
>
> Suggested-by: Hemant Kumar <[email protected]>
> Signed-off-by: Bhaumik Bhatt <[email protected]>
> ---
> drivers/bus/mhi/core/boot.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/bus/mhi/core/boot.c b/drivers/bus/mhi/core/boot.c
> index 16244cc..40606e5 100644
> --- a/drivers/bus/mhi/core/boot.c
> +++ b/drivers/bus/mhi/core/boot.c
> @@ -92,6 +92,9 @@ static int __mhi_download_rddm_in_panic(struct mhi_controller *mhi_cntrl)
> * image download completion.
> */
> ee = mhi_get_exec_env(mhi_cntrl);
> + if (ee == MHI_EE_MAX)
> + goto error_exit_rddm;
> +
> if (ee != MHI_EE_RDDM) {
> dev_dbg(dev, "Trigger device into RDDM mode using SYS ERR\n");
> mhi_set_mhi_state(mhi_cntrl, MHI_STATE_SYS_ERR);
> @@ -140,9 +143,11 @@ static int __mhi_download_rddm_in_panic(struct mhi_controller *mhi_cntrl)
> ret = mhi_read_reg(mhi_cntrl, base, BHIE_RXVECSTATUS_OFFS, &rx_status);
>
> dev_err(dev, "Did not complete RDDM transfer\n");
> - dev_err(dev, "Current EE: %s\n", TO_MHI_EXEC_STR(ee));
> dev_err(dev, "RXVEC_STATUS: 0x%x\n", rx_status);
>
> +error_exit_rddm:
> + dev_err(dev, "Current EE: %s\n", TO_MHI_EXEC_STR(ee));

Can this error message improved? It doesn't make much sense if error
path is taken.

Thanks,
Mani

> +
> return -EIO;
> }
>
> --
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project
>