diff mbox series

[v2] pinctrl: rzn1: Fix check for used MDIO bus

Message ID 20181015150147.23295-1-phil.edworthy@renesas.com (mailing list archive)
State Superseded
Delegated to: Geert Uytterhoeven
Headers show
Series [v2] pinctrl: rzn1: Fix check for used MDIO bus | expand

Commit Message

Phil Edworthy Oct. 15, 2018, 3:01 p.m. UTC
This fixes the check for unused mdio bus setting and the following static
checker warning:
 drivers/pinctrl/pinctrl-rzn1.c:198 rzn1_pinctrl_mdio_select()
 warn: always true condition '(ipctl->mdio_func[mdio] >= 0) => (0-u32max >= 0)'

It also fixes the return var when calling of_get_child_count()

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
---
v2:
 - Don't use implicit type conversion.
 - Fix type of return var when calling of_get_child_count().
---
 drivers/pinctrl/pinctrl-rzn1.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

Jacopo Mondi Oct. 15, 2018, 3:12 p.m. UTC | #1
Hi Phil,

On Mon, Oct 15, 2018 at 04:01:47PM +0100, Phil Edworthy wrote:
> This fixes the check for unused mdio bus setting and the following static
> checker warning:
>  drivers/pinctrl/pinctrl-rzn1.c:198 rzn1_pinctrl_mdio_select()
>  warn: always true condition '(ipctl->mdio_func[mdio] >= 0) => (0-u32max >= 0)'
>
> It also fixes the return var when calling of_get_child_count()
>

Not really, since you skip the assignement if return value is <= 0:

	nfuncs = of_get_child_count(np);
	if (nfuncs <= 0)
		return 0;

	ipctl->nfunctions = nfuncs;

This seems more likely to be here to make 'rzn1_pmx_get_funcs_count()'
happy, as it returns a signed integer, but since nfunctions is only
assigned if 'nfuncs' > 0, then the cast is safe there.

I would keep this unsigned, and rather return an error if
'of_get_child_count()' returns an error of any sort in 'probe_dt()',
otherwise assign 'ipctl->nfunctions = nfuncs;' unconditionally and
return immediately if nfuncs == 0. This makes sure nfunctions is
initialized even if there are no functions registered.

Anyway, small issues, this just doesn't belong to this patch, but it's
likely not to cause any harm I guess.


> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
> Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
> ---
> v2:
>  - Don't use implicit type conversion.
>  - Fix type of return var when calling of_get_child_count().
> ---
>  drivers/pinctrl/pinctrl-rzn1.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/pinctrl/pinctrl-rzn1.c b/drivers/pinctrl/pinctrl-rzn1.c
> index ce05e3a00be2..4998463c54a0 100644
> --- a/drivers/pinctrl/pinctrl-rzn1.c
> +++ b/drivers/pinctrl/pinctrl-rzn1.c
> @@ -112,13 +112,13 @@ struct rzn1_pinctrl {
>  	struct rzn1_pinctrl_regs __iomem *lev2;
>  	u32 lev1_protect_phys;
>  	u32 lev2_protect_phys;
> -	u32 mdio_func[2];
> +	int mdio_func[2];
>
>  	struct rzn1_pin_group *groups;
>  	unsigned int ngroups;
>
>  	struct rzn1_pmx_func *functions;
> -	unsigned int nfunctions;
> +	int nfunctions;
>  };
>
>  #define RZN1_PINS_PROP "pinmux"
> @@ -195,9 +195,9 @@ static void rzn1_hw_set_lock(struct rzn1_pinctrl *ipctl, u8 lock, u8 value)
>  static void rzn1_pinctrl_mdio_select(struct rzn1_pinctrl *ipctl, int mdio,
>  				     u32 func)
>  {
> -	if (ipctl->mdio_func[mdio] >= 0 && ipctl->mdio_func[mdio] != func)
> +	if (ipctl->mdio_func[mdio] >= 0 && ipctl->mdio_func[mdio] != (int)func)
>  		dev_warn(ipctl->dev, "conflicting setting for mdio%d!\n", mdio);
> -	ipctl->mdio_func[mdio] = func;
> +	ipctl->mdio_func[mdio] = (int)func;
>
>  	dev_dbg(ipctl->dev, "setting mdio%d to %u\n", mdio, func);
>
> @@ -810,8 +810,8 @@ static int rzn1_pinctrl_probe_dt(struct platform_device *pdev,
>  	struct device_node *np = pdev->dev.of_node;
>  	struct device_node *child;
>  	unsigned int maxgroups = 0;
> -	unsigned int nfuncs = 0;
>  	unsigned int i = 0;
> +	int nfuncs = 0;
>  	int ret;
>
>  	nfuncs = of_get_child_count(np);
> --
> 2.17.1
>
Phil Edworthy Oct. 16, 2018, 8:04 a.m. UTC | #2
Hi Jacopo,

On 15 October 2018 16:12 jacopo mondi wrote:
> On Mon, Oct 15, 2018 at 04:01:47PM +0100, Phil Edworthy wrote:
> > This fixes the check for unused mdio bus setting and the following
> > static checker warning:
> >  drivers/pinctrl/pinctrl-rzn1.c:198 rzn1_pinctrl_mdio_select()
> >  warn: always true condition '(ipctl->mdio_func[mdio] >= 0) => (0-u32max
> >= 0)'
> >
> > It also fixes the return var when calling of_get_child_count()
> >
> 
> Not really, since you skip the assignement if return value is <= 0:
> 
> 	nfuncs = of_get_child_count(np);
> 	if (nfuncs <= 0)
> 		return 0;
> 
> 	ipctl->nfunctions = nfuncs;
> 
> This seems more likely to be here to make 'rzn1_pmx_get_funcs_count()'
> happy, as it returns a signed integer, but since nfunctions is only assigned if
> 'nfuncs' > 0, then the cast is safe there.
> 
> I would keep this unsigned, and rather return an error if
> 'of_get_child_count()' returns an error of any sort in 'probe_dt()', otherwise
> assign 'ipctl->nfunctions = nfuncs;' unconditionally and return immediately if
> nfuncs == 0. This makes sure nfunctions is initialized even if there are no
> functions registered.
Ok, I get what you're saying, though nfunctions will always be initialised due
to allocation with devm_kzalloc.

> Anyway, small issues, this just doesn't belong to this patch, but it's likely not
> to cause any harm I guess.
True... should I leave this patch as is or respin again?

Thanks
Phil
 
> > Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
> > Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
> > ---
> > v2:
> >  - Don't use implicit type conversion.
> >  - Fix type of return var when calling of_get_child_count().
> > ---
> >  drivers/pinctrl/pinctrl-rzn1.c | 10 +++++-----
> >  1 file changed, 5 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/pinctrl/pinctrl-rzn1.c
> > b/drivers/pinctrl/pinctrl-rzn1.c index ce05e3a00be2..4998463c54a0
> > 100644
> > --- a/drivers/pinctrl/pinctrl-rzn1.c
> > +++ b/drivers/pinctrl/pinctrl-rzn1.c
> > @@ -112,13 +112,13 @@ struct rzn1_pinctrl {
> >  	struct rzn1_pinctrl_regs __iomem *lev2;
> >  	u32 lev1_protect_phys;
> >  	u32 lev2_protect_phys;
> > -	u32 mdio_func[2];
> > +	int mdio_func[2];
> >
> >  	struct rzn1_pin_group *groups;
> >  	unsigned int ngroups;
> >
> >  	struct rzn1_pmx_func *functions;
> > -	unsigned int nfunctions;
> > +	int nfunctions;
> >  };
> >
> >  #define RZN1_PINS_PROP "pinmux"
> > @@ -195,9 +195,9 @@ static void rzn1_hw_set_lock(struct rzn1_pinctrl
> > *ipctl, u8 lock, u8 value)  static void rzn1_pinctrl_mdio_select(struct
> rzn1_pinctrl *ipctl, int mdio,
> >  				     u32 func)
> >  {
> > -	if (ipctl->mdio_func[mdio] >= 0 && ipctl->mdio_func[mdio] != func)
> > +	if (ipctl->mdio_func[mdio] >= 0 && ipctl->mdio_func[mdio] !=
> > +(int)func)
> >  		dev_warn(ipctl->dev, "conflicting setting for mdio%d!\n",
> mdio);
> > -	ipctl->mdio_func[mdio] = func;
> > +	ipctl->mdio_func[mdio] = (int)func;
> >
> >  	dev_dbg(ipctl->dev, "setting mdio%d to %u\n", mdio, func);
> >
> > @@ -810,8 +810,8 @@ static int rzn1_pinctrl_probe_dt(struct
> platform_device *pdev,
> >  	struct device_node *np = pdev->dev.of_node;
> >  	struct device_node *child;
> >  	unsigned int maxgroups = 0;
> > -	unsigned int nfuncs = 0;
> >  	unsigned int i = 0;
> > +	int nfuncs = 0;
> >  	int ret;
> >
> >  	nfuncs = of_get_child_count(np);
> > --
> > 2.17.1
> >
Jacopo Mondi Oct. 16, 2018, 8:24 a.m. UTC | #3
Hi Phil,

On Tue, Oct 16, 2018 at 08:04:53AM +0000, Phil Edworthy wrote:
> Hi Jacopo,
>
> On 15 October 2018 16:12 jacopo mondi wrote:
> > On Mon, Oct 15, 2018 at 04:01:47PM +0100, Phil Edworthy wrote:
> > > This fixes the check for unused mdio bus setting and the following
> > > static checker warning:
> > >  drivers/pinctrl/pinctrl-rzn1.c:198 rzn1_pinctrl_mdio_select()
> > >  warn: always true condition '(ipctl->mdio_func[mdio] >= 0) => (0-u32max
> > >= 0)'
> > >
> > > It also fixes the return var when calling of_get_child_count()
> > >
> >
> > Not really, since you skip the assignement if return value is <= 0:
> >
> > 	nfuncs = of_get_child_count(np);
> > 	if (nfuncs <= 0)
> > 		return 0;
> >
> > 	ipctl->nfunctions = nfuncs;
> >
> > This seems more likely to be here to make 'rzn1_pmx_get_funcs_count()'
> > happy, as it returns a signed integer, but since nfunctions is only assigned if
> > 'nfuncs' > 0, then the cast is safe there.
> >
> > I would keep this unsigned, and rather return an error if
> > 'of_get_child_count()' returns an error of any sort in 'probe_dt()', otherwise
> > assign 'ipctl->nfunctions = nfuncs;' unconditionally and return immediately if
> > nfuncs == 0. This makes sure nfunctions is initialized even if there are no
> > functions registered.
> Ok, I get what you're saying, though nfunctions will always be initialised due
> to allocation with devm_kzalloc.
>

Right, sorry for missing that.

> > Anyway, small issues, this just doesn't belong to this patch, but it's likely not
> > to cause any harm I guess.
> True... should I leave this patch as is or respin again?

I think you should handle the case where of_get_child_count() returns
an error, but in a follow up patch. You can leave this one as it is,
even if that change is imho not necessary.

Thanks
   j

>
> Thanks
> Phil
>
> > > Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
> > > Signed-off-by: Phil Edworthy <phil.edworthy@renesas.com>
> > > ---
> > > v2:
> > >  - Don't use implicit type conversion.
> > >  - Fix type of return var when calling of_get_child_count().
> > > ---
> > >  drivers/pinctrl/pinctrl-rzn1.c | 10 +++++-----
> > >  1 file changed, 5 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/drivers/pinctrl/pinctrl-rzn1.c
> > > b/drivers/pinctrl/pinctrl-rzn1.c index ce05e3a00be2..4998463c54a0
> > > 100644
> > > --- a/drivers/pinctrl/pinctrl-rzn1.c
> > > +++ b/drivers/pinctrl/pinctrl-rzn1.c
> > > @@ -112,13 +112,13 @@ struct rzn1_pinctrl {
> > >  	struct rzn1_pinctrl_regs __iomem *lev2;
> > >  	u32 lev1_protect_phys;
> > >  	u32 lev2_protect_phys;
> > > -	u32 mdio_func[2];
> > > +	int mdio_func[2];
> > >
> > >  	struct rzn1_pin_group *groups;
> > >  	unsigned int ngroups;
> > >
> > >  	struct rzn1_pmx_func *functions;
> > > -	unsigned int nfunctions;
> > > +	int nfunctions;
> > >  };
> > >
> > >  #define RZN1_PINS_PROP "pinmux"
> > > @@ -195,9 +195,9 @@ static void rzn1_hw_set_lock(struct rzn1_pinctrl
> > > *ipctl, u8 lock, u8 value)  static void rzn1_pinctrl_mdio_select(struct
> > rzn1_pinctrl *ipctl, int mdio,
> > >  				     u32 func)
> > >  {
> > > -	if (ipctl->mdio_func[mdio] >= 0 && ipctl->mdio_func[mdio] != func)
> > > +	if (ipctl->mdio_func[mdio] >= 0 && ipctl->mdio_func[mdio] !=
> > > +(int)func)
> > >  		dev_warn(ipctl->dev, "conflicting setting for mdio%d!\n",
> > mdio);
> > > -	ipctl->mdio_func[mdio] = func;
> > > +	ipctl->mdio_func[mdio] = (int)func;
> > >
> > >  	dev_dbg(ipctl->dev, "setting mdio%d to %u\n", mdio, func);
> > >
> > > @@ -810,8 +810,8 @@ static int rzn1_pinctrl_probe_dt(struct
> > platform_device *pdev,
> > >  	struct device_node *np = pdev->dev.of_node;
> > >  	struct device_node *child;
> > >  	unsigned int maxgroups = 0;
> > > -	unsigned int nfuncs = 0;
> > >  	unsigned int i = 0;
> > > +	int nfuncs = 0;
> > >  	int ret;
> > >
> > >  	nfuncs = of_get_child_count(np);
> > > --
> > > 2.17.1
> > >
diff mbox series

Patch

diff --git a/drivers/pinctrl/pinctrl-rzn1.c b/drivers/pinctrl/pinctrl-rzn1.c
index ce05e3a00be2..4998463c54a0 100644
--- a/drivers/pinctrl/pinctrl-rzn1.c
+++ b/drivers/pinctrl/pinctrl-rzn1.c
@@ -112,13 +112,13 @@  struct rzn1_pinctrl {
 	struct rzn1_pinctrl_regs __iomem *lev2;
 	u32 lev1_protect_phys;
 	u32 lev2_protect_phys;
-	u32 mdio_func[2];
+	int mdio_func[2];
 
 	struct rzn1_pin_group *groups;
 	unsigned int ngroups;
 
 	struct rzn1_pmx_func *functions;
-	unsigned int nfunctions;
+	int nfunctions;
 };
 
 #define RZN1_PINS_PROP "pinmux"
@@ -195,9 +195,9 @@  static void rzn1_hw_set_lock(struct rzn1_pinctrl *ipctl, u8 lock, u8 value)
 static void rzn1_pinctrl_mdio_select(struct rzn1_pinctrl *ipctl, int mdio,
 				     u32 func)
 {
-	if (ipctl->mdio_func[mdio] >= 0 && ipctl->mdio_func[mdio] != func)
+	if (ipctl->mdio_func[mdio] >= 0 && ipctl->mdio_func[mdio] != (int)func)
 		dev_warn(ipctl->dev, "conflicting setting for mdio%d!\n", mdio);
-	ipctl->mdio_func[mdio] = func;
+	ipctl->mdio_func[mdio] = (int)func;
 
 	dev_dbg(ipctl->dev, "setting mdio%d to %u\n", mdio, func);
 
@@ -810,8 +810,8 @@  static int rzn1_pinctrl_probe_dt(struct platform_device *pdev,
 	struct device_node *np = pdev->dev.of_node;
 	struct device_node *child;
 	unsigned int maxgroups = 0;
-	unsigned int nfuncs = 0;
 	unsigned int i = 0;
+	int nfuncs = 0;
 	int ret;
 
 	nfuncs = of_get_child_count(np);