All of lore.kernel.org
 help / color / mirror / Atom feed
From: Matthias Brugger <mbrugger@suse.com>
To: u-boot@lists.denx.de
Subject: [PATCH 1/5] dm: core: Fix devfdt_get_addr_ptr return value
Date: Wed, 27 May 2020 14:05:08 +0200	[thread overview]
Message-ID: <4379a717-97f3-8235-cfd4-1327bb1f7b9b@suse.com> (raw)
In-Reply-To: <20200527064140.21391-1-ovidiu.panait@windriver.com>



On 27/05/2020 08:41, Ovidiu Panait wrote:
> According to the description of devfdt_get_addr_ptr, this function should
> return NULL on failure, but currently it returns (void *)FDT_ADDR_T_NONE.
> 
> This is also a problem because there are two definitions for
> dev_read_addr_ptr, depending on CONFIG_DM_DEV_READ_INLINE:
> 
> 1. one returning NULL on failure (drivers/core/read.c):
> void *dev_read_addr_ptr(const struct udevice *dev)
> {
>         fdt_addr_t addr = dev_read_addr(dev);
> 
>         return (addr == FDT_ADDR_T_NONE) ? NULL : map_sysmem(addr, 0);
> }
> 
> 2. another one, which is a wrapper over devfdt_get_addr_ptr, returning
> (void *)FDT_ADDR_T_NONE (include/dm/read.h)
> 
> static inline void *dev_read_addr_ptr(const struct udevice *dev)
> {
>         return devfdt_get_addr_ptr(dev);
> }
> 
> Currently, some drivers which make use of devfdt_get_addr_ptr check the
> return value for NULL:
> drivers/i2c/mvtwsi.c
> drivers/i2c/designware_i2c.c
> drivers/usb/host/ehci-zynq.c
> 
> while others check the return value for (void *)FDT_ADDR_T_NONE:
> drivers/pinctrl/mvebu/pinctrl-mvebu.c
> drivers/timer/ast_timer.c
> drivers/watchdog/ast_wdt.c
> 
> Fix this by making devfdt_get_addr_ptr return NULL on failure, as
> described in the function comments. Also, update the drivers currently
> checking (void *)FDT_ADDR_T_NONE to check for NULL.
> 
> Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>

Reviewed-by: Matthias Brugger <mbrugger@suse.com>

Simon can you have a look. If it's OK for you I can queue the series through my
tree.

Regards,
Matthias

> ---
> 
>  drivers/clk/aspeed/clk_ast2500.c      | 4 ++--
>  drivers/core/fdtaddr.c                | 5 ++++-
>  drivers/i2c/ast_i2c.c                 | 4 ++--
>  drivers/pinctrl/mvebu/pinctrl-mvebu.c | 2 +-
>  drivers/timer/ast_timer.c             | 4 ++--
>  drivers/watchdog/ast_wdt.c            | 4 ++--
>  6 files changed, 13 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/clk/aspeed/clk_ast2500.c b/drivers/clk/aspeed/clk_ast2500.c
> index ccfeded30c..284f5f58d6 100644
> --- a/drivers/clk/aspeed/clk_ast2500.c
> +++ b/drivers/clk/aspeed/clk_ast2500.c
> @@ -498,8 +498,8 @@ static int ast2500_clk_ofdata_to_platdata(struct udevice *dev)
>  	struct ast2500_clk_priv *priv = dev_get_priv(dev);
>  
>  	priv->scu = devfdt_get_addr_ptr(dev);
> -	if (IS_ERR(priv->scu))
> -		return PTR_ERR(priv->scu);
> +	if (!priv->scu)
> +		return -EINVAL;
>  
>  	return 0;
>  }
> diff --git a/drivers/core/fdtaddr.c b/drivers/core/fdtaddr.c
> index dfcb868f65..044d5871b0 100644
> --- a/drivers/core/fdtaddr.c
> +++ b/drivers/core/fdtaddr.c
> @@ -14,6 +14,7 @@
>  #include <log.h>
>  #include <asm/io.h>
>  #include <dm/device-internal.h>
> +#include <mapmem.h>
>  
>  DECLARE_GLOBAL_DATA_PTR;
>  
> @@ -154,7 +155,9 @@ fdt_addr_t devfdt_get_addr(const struct udevice *dev)
>  
>  void *devfdt_get_addr_ptr(const struct udevice *dev)
>  {
> -	return (void *)(uintptr_t)devfdt_get_addr_index(dev, 0);
> +	fdt_addr_t addr = devfdt_get_addr_index(dev, 0);
> +
> +	return (addr == FDT_ADDR_T_NONE) ? NULL : map_sysmem(addr, 0);
>  }
>  
>  void *devfdt_remap_addr_index(const struct udevice *dev, int index)
> diff --git a/drivers/i2c/ast_i2c.c b/drivers/i2c/ast_i2c.c
> index 214362d04b..253e653666 100644
> --- a/drivers/i2c/ast_i2c.c
> +++ b/drivers/i2c/ast_i2c.c
> @@ -93,8 +93,8 @@ static int ast_i2c_ofdata_to_platdata(struct udevice *dev)
>  	int ret;
>  
>  	priv->regs = devfdt_get_addr_ptr(dev);
> -	if (IS_ERR(priv->regs))
> -		return PTR_ERR(priv->regs);
> +	if (!priv->regs)
> +		return -EINVAL;
>  
>  	ret = clk_get_by_index(dev, 0, &priv->clk);
>  	if (ret < 0) {
> diff --git a/drivers/pinctrl/mvebu/pinctrl-mvebu.c b/drivers/pinctrl/mvebu/pinctrl-mvebu.c
> index 2206e958ec..ac0377e796 100644
> --- a/drivers/pinctrl/mvebu/pinctrl-mvebu.c
> +++ b/drivers/pinctrl/mvebu/pinctrl-mvebu.c
> @@ -194,7 +194,7 @@ int mvebu_pinctl_probe(struct udevice *dev)
>  	}
>  
>  	priv->base_reg = devfdt_get_addr_ptr(dev);
> -	if (priv->base_reg == (void *)FDT_ADDR_T_NONE) {
> +	if (!priv->base_reg) {
>  		debug("%s: Failed to get base address\n", __func__);
>  		return -EINVAL;
>  	}
> diff --git a/drivers/timer/ast_timer.c b/drivers/timer/ast_timer.c
> index 3838601f54..9f28cbfcf9 100644
> --- a/drivers/timer/ast_timer.c
> +++ b/drivers/timer/ast_timer.c
> @@ -65,8 +65,8 @@ static int ast_timer_ofdata_to_platdata(struct udevice *dev)
>  	struct ast_timer_priv *priv = dev_get_priv(dev);
>  
>  	priv->regs = devfdt_get_addr_ptr(dev);
> -	if (IS_ERR(priv->regs))
> -		return PTR_ERR(priv->regs);
> +	if (!priv->regs)
> +		return -EINVAL;
>  
>  	priv->tmc = ast_get_timer_counter(priv->regs, AST_TICK_TIMER);
>  
> diff --git a/drivers/watchdog/ast_wdt.c b/drivers/watchdog/ast_wdt.c
> index 7e11465a57..a21f9a4d14 100644
> --- a/drivers/watchdog/ast_wdt.c
> +++ b/drivers/watchdog/ast_wdt.c
> @@ -91,8 +91,8 @@ static int ast_wdt_ofdata_to_platdata(struct udevice *dev)
>  	struct ast_wdt_priv *priv = dev_get_priv(dev);
>  
>  	priv->regs = devfdt_get_addr_ptr(dev);
> -	if (IS_ERR(priv->regs))
> -		return PTR_ERR(priv->regs);
> +	if (!priv->regs)
> +		return -EINVAL;
>  
>  	return 0;
>  }
> 

  parent reply	other threads:[~2020-05-27 12:05 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-27  6:41 [PATCH 1/5] dm: core: Fix devfdt_get_addr_ptr return value Ovidiu Panait
2020-05-27  6:41 ` [PATCH 2/5] pinctrl: bcm283x: DM_FLAG_PRE_RELOC: Remove OF_CONTROL check Ovidiu Panait
2020-05-27  6:41 ` [PATCH 3/5] pinctrl: bcm283x: Read address from DT in ofdata_to_platdata Ovidiu Panait
2020-05-27  6:41 ` [PATCH 4/5] pinctrl: bcm283x: Fix return value check for dev_read_addr_ptr Ovidiu Panait
2020-05-27  6:41 ` [PATCH 5/5] pinctrl: bcm283x: Store the return value of dev_read_u32_default to int Ovidiu Panait
2020-05-27 12:05 ` Matthias Brugger [this message]
2020-06-11  9:07   ` [PATCH 1/5] dm: core: Fix devfdt_get_addr_ptr return value Ovidiu Panait
2020-05-28  9:22 ` Cédric Le Goater
2020-05-28 14:32 ` Simon Glass
2020-05-28 19:29   ` Sean Anderson
2020-05-29  0:28     ` Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4379a717-97f3-8235-cfd4-1327bb1f7b9b@suse.com \
    --to=mbrugger@suse.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.