[3/4] reset: tegra: check BPMP response return code

Message ID 00e7714871d7568e9fc848dc5f76d14e07984a1e.1504776489.git.talho@nvidia.com
State Accepted
Headers show
Series
  • firmware: tegra: add checks for BPMP error return code
Related show

Commit Message

Timo Alho Sept. 7, 2017, 9:31 a.m.
Add checks for return code in BPMP response message.

Signed-off-by: Timo Alho <talho@nvidia.com>
---
 drivers/reset/tegra/reset-bpmp.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Comments

Jon Hunter Oct. 2, 2017, 8:24 p.m. | #1
On 07/09/17 10:31, Timo Alho wrote:
> Add checks for return code in BPMP response message.
> 
> Signed-off-by: Timo Alho <talho@nvidia.com>
> ---
>  drivers/reset/tegra/reset-bpmp.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/reset/tegra/reset-bpmp.c b/drivers/reset/tegra/reset-bpmp.c
> index 5daf2ee..fac2db6 100644
> --- a/drivers/reset/tegra/reset-bpmp.c
> +++ b/drivers/reset/tegra/reset-bpmp.c
> @@ -23,6 +23,7 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
>  	struct tegra_bpmp *bpmp = to_tegra_bpmp(rstc);
>  	struct mrq_reset_request request;
>  	struct tegra_bpmp_message msg;
> +	int err;
>  
>  	memset(&request, 0, sizeof(request));
>  	request.cmd = command;
> @@ -33,7 +34,13 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
>  	msg.tx.data = &request;
>  	msg.tx.size = sizeof(request);
>  
> -	return tegra_bpmp_transfer(bpmp, &msg);
> +	err = tegra_bpmp_transfer(bpmp, &msg);
> +	if (err < 0)
> +		return err;
> +	else if (msg.rx.ret < 0)
> +		return -EINVAL;
> +
> +	return 0;
>  }
>  
>  static int tegra_bpmp_reset_module(struct reset_controller_dev *rstc,

Acked-by: Jon Hunter <jonathanh@nvidia.com>

Cheers
Jon
Thierry Reding Oct. 17, 2017, 10:40 a.m. | #2
On Thu, Sep 07, 2017 at 12:31:03PM +0300, Timo Alho wrote:
> Add checks for return code in BPMP response message.
> 
> Signed-off-by: Timo Alho <talho@nvidia.com>
> ---
>  drivers/reset/tegra/reset-bpmp.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)

Hi Philipp,

Would you provide an Acked-by on this so that I can take it into the
Tegra tree? There's a build dependency on patch 1/4 in the series.

Quoting in full since you were not previously on Cc, unfortunately.

Timo, please remember to always Cc the relevant maintainers.

Thierry

> diff --git a/drivers/reset/tegra/reset-bpmp.c b/drivers/reset/tegra/reset-bpmp.c
> index 5daf2ee..fac2db6 100644
> --- a/drivers/reset/tegra/reset-bpmp.c
> +++ b/drivers/reset/tegra/reset-bpmp.c
> @@ -23,6 +23,7 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
>  	struct tegra_bpmp *bpmp = to_tegra_bpmp(rstc);
>  	struct mrq_reset_request request;
>  	struct tegra_bpmp_message msg;
> +	int err;
>  
>  	memset(&request, 0, sizeof(request));
>  	request.cmd = command;
> @@ -33,7 +34,13 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
>  	msg.tx.data = &request;
>  	msg.tx.size = sizeof(request);
>  
> -	return tegra_bpmp_transfer(bpmp, &msg);
> +	err = tegra_bpmp_transfer(bpmp, &msg);
> +	if (err < 0)
> +		return err;
> +	else if (msg.rx.ret < 0)
> +		return -EINVAL;
> +
> +	return 0;
>  }
>  
>  static int tegra_bpmp_reset_module(struct reset_controller_dev *rstc,
> -- 
> 2.7.4
>
Philipp Zabel Oct. 17, 2017, 10:52 a.m. | #3
Hi Thierry,

On Tue, 2017-10-17 at 12:40 +0200, Thierry Reding wrote:
> On Thu, Sep 07, 2017 at 12:31:03PM +0300, Timo Alho wrote:
> > Add checks for return code in BPMP response message.
> > 
> > Signed-off-by: Timo Alho <talho@nvidia.com>
> > ---
> >  drivers/reset/tegra/reset-bpmp.c | 9 ++++++++-
> >  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> Hi Philipp,
> 
> Would you provide an Acked-by on this so that I can take it into the
> Tegra tree? There's a build dependency on patch 1/4 in the series.

Acked-by: Philipp Zabel <p.zabel@pengutronix.de>

to take this via the Tegra tree.

> Quoting in full since you were not previously on Cc, unfortunately.
> 
> Timo, please remember to always Cc the relevant maintainers.
> 
> Thierry
> 
> > diff --git a/drivers/reset/tegra/reset-bpmp.c b/drivers/reset/tegra/reset-bpmp.c
> > index 5daf2ee..fac2db6 100644
> > --- a/drivers/reset/tegra/reset-bpmp.c
> > +++ b/drivers/reset/tegra/reset-bpmp.c
> > @@ -23,6 +23,7 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
> >  	struct tegra_bpmp *bpmp = to_tegra_bpmp(rstc);
> >  	struct mrq_reset_request request;
> >  	struct tegra_bpmp_message msg;
> > +	int err;
> >  
> >  	memset(&request, 0, sizeof(request));
> >  	request.cmd = command;
> > @@ -33,7 +34,13 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
> >  	msg.tx.data = &request;
> >  	msg.tx.size = sizeof(request);
> >  
> > -	return tegra_bpmp_transfer(bpmp, &msg);
> > +	err = tegra_bpmp_transfer(bpmp, &msg);
> > +	if (err < 0)
> > +		return err;
> > +	else if (msg.rx.ret < 0)
> > +		return -EINVAL;

I don't really understand why you complicate the call sites like this
instead of just letting tegra_bmp_transfer return -EINVAL if msg.rx.ret
< 0, but I haven't seen the other patches.

regards
Philipp
--
To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Thierry Reding Oct. 17, 2017, 11:49 a.m. | #4
On Tue, Oct 17, 2017 at 12:52:17PM +0200, Philipp Zabel wrote:
> Hi Thierry,
> 
> On Tue, 2017-10-17 at 12:40 +0200, Thierry Reding wrote:
> > On Thu, Sep 07, 2017 at 12:31:03PM +0300, Timo Alho wrote:
> > > Add checks for return code in BPMP response message.
> > > 
> > > Signed-off-by: Timo Alho <talho@nvidia.com>
> > > ---
> > >  drivers/reset/tegra/reset-bpmp.c | 9 ++++++++-
> > >  1 file changed, 8 insertions(+), 1 deletion(-)
> > 
> > Hi Philipp,
> > 
> > Would you provide an Acked-by on this so that I can take it into the
> > Tegra tree? There's a build dependency on patch 1/4 in the series.
> 
> Acked-by: Philipp Zabel <p.zabel@pengutronix.de>
> 
> to take this via the Tegra tree.

Thanks!

> > Quoting in full since you were not previously on Cc, unfortunately.
> > 
> > Timo, please remember to always Cc the relevant maintainers.
> > 
> > Thierry
> > 
> > > diff --git a/drivers/reset/tegra/reset-bpmp.c b/drivers/reset/tegra/reset-bpmp.c
> > > index 5daf2ee..fac2db6 100644
> > > --- a/drivers/reset/tegra/reset-bpmp.c
> > > +++ b/drivers/reset/tegra/reset-bpmp.c
> > > @@ -23,6 +23,7 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
> > >  	struct tegra_bpmp *bpmp = to_tegra_bpmp(rstc);
> > >  	struct mrq_reset_request request;
> > >  	struct tegra_bpmp_message msg;
> > > +	int err;
> > >  
> > >  	memset(&request, 0, sizeof(request));
> > >  	request.cmd = command;
> > > @@ -33,7 +34,13 @@ static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
> > >  	msg.tx.data = &request;
> > >  	msg.tx.size = sizeof(request);
> > >  
> > > -	return tegra_bpmp_transfer(bpmp, &msg);
> > > +	err = tegra_bpmp_transfer(bpmp, &msg);
> > > +	if (err < 0)
> > > +		return err;
> > > +	else if (msg.rx.ret < 0)
> > > +		return -EINVAL;
> 
> I don't really understand why you complicate the call sites like this
> instead of just letting tegra_bmp_transfer return -EINVAL if msg.rx.ret
> < 0, but I haven't seen the other patches.

Timo replied to a similar question from Jon here:

	https://patchwork.ozlabs.org/patch/810934/

Essentially this boils down to that there are cases where we may want to
know the exact error because it is relevant. In this case, we don't, but
BPMP provides a number of other services where the errors may be useful.

Thierry

Patch

diff --git a/drivers/reset/tegra/reset-bpmp.c b/drivers/reset/tegra/reset-bpmp.c
index 5daf2ee..fac2db6 100644
--- a/drivers/reset/tegra/reset-bpmp.c
+++ b/drivers/reset/tegra/reset-bpmp.c
@@ -23,6 +23,7 @@  static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
 	struct tegra_bpmp *bpmp = to_tegra_bpmp(rstc);
 	struct mrq_reset_request request;
 	struct tegra_bpmp_message msg;
+	int err;
 
 	memset(&request, 0, sizeof(request));
 	request.cmd = command;
@@ -33,7 +34,13 @@  static int tegra_bpmp_reset_common(struct reset_controller_dev *rstc,
 	msg.tx.data = &request;
 	msg.tx.size = sizeof(request);
 
-	return tegra_bpmp_transfer(bpmp, &msg);
+	err = tegra_bpmp_transfer(bpmp, &msg);
+	if (err < 0)
+		return err;
+	else if (msg.rx.ret < 0)
+		return -EINVAL;
+
+	return 0;
 }
 
 static int tegra_bpmp_reset_module(struct reset_controller_dev *rstc,