diff options
author | Stephen Warren | 2016-08-05 09:47:51 -0600 |
---|---|---|
committer | Simon Glass | 2016-08-12 09:20:27 -0600 |
commit | 6e06acb73248e32457064d8fe820cbc217c45f3f (patch) | |
tree | 106717d17611a41e530114091fd12693233759bc /drivers | |
parent | 11e44fc6bda2248271d26a8488f5efe189b55a30 (diff) |
fdt: allow fdtdec_get_addr_size_*() to translate addresses
Some code may want to read reg values from DT, but from nodes that aren't
associated with DM devices, so using dev_get_addr_index() isn't
appropriate. In this case, fdtdec_get_addr_size_*() are the functions to
use. However, "translation" (via the chain of ranges properties in parent
nodes) may still be desirable. Add a function parameter to request that,
and implement it. Update all call sites to default to the original
behaviour.
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Squashed in build fix from Stephen:
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/core/device.c | 2 | ||||
-rw-r--r-- | drivers/gpio/mpc85xx_gpio.c | 2 | ||||
-rw-r--r-- | drivers/i2c/fsl_i2c.c | 2 | ||||
-rw-r--r-- | drivers/mmc/msm_sdhci.c | 3 | ||||
-rw-r--r-- | drivers/net/cpsw.c | 3 | ||||
-rw-r--r-- | drivers/spmi/spmi-msm.c | 5 |
6 files changed, 10 insertions, 7 deletions
diff --git a/drivers/core/device.c b/drivers/core/device.c index 5bb1d7793dd..b737f1c7890 100644 --- a/drivers/core/device.c +++ b/drivers/core/device.c @@ -671,7 +671,7 @@ fdt_addr_t dev_get_addr_index(struct udevice *dev, int index) addr = fdtdec_get_addr_size_auto_parent(gd->fdt_blob, dev->parent->of_offset, dev->of_offset, "reg", - index, NULL); + index, NULL, false); if (CONFIG_IS_ENABLED(SIMPLE_BUS) && addr != FDT_ADDR_T_NONE) { if (device_get_uclass_id(dev->parent) == UCLASS_SIMPLE_BUS) diff --git a/drivers/gpio/mpc85xx_gpio.c b/drivers/gpio/mpc85xx_gpio.c index 3754a8215c3..168c696c4dc 100644 --- a/drivers/gpio/mpc85xx_gpio.c +++ b/drivers/gpio/mpc85xx_gpio.c @@ -170,7 +170,7 @@ static int mpc85xx_gpio_ofdata_to_platdata(struct udevice *dev) { fdt_size_t size; addr = fdtdec_get_addr_size_auto_noparent(gd->fdt_blob, dev->of_offset, - "reg", 0, &size); + "reg", 0, &size, false); plat->addr = addr; plat->size = size; diff --git a/drivers/i2c/fsl_i2c.c b/drivers/i2c/fsl_i2c.c index 407c4a7b10b..c3f826d68c7 100644 --- a/drivers/i2c/fsl_i2c.c +++ b/drivers/i2c/fsl_i2c.c @@ -587,7 +587,7 @@ static int fsl_i2c_ofdata_to_platdata(struct udevice *bus) fdt_size_t size; addr = fdtdec_get_addr_size_auto_noparent(gd->fdt_blob, bus->of_offset, - "reg", 0, &size); + "reg", 0, &size, false); dev->base = map_sysmem(CONFIG_SYS_IMMR + addr, size); diff --git a/drivers/mmc/msm_sdhci.c b/drivers/mmc/msm_sdhci.c index a8cb9e249df..8d4399e9675 100644 --- a/drivers/mmc/msm_sdhci.c +++ b/drivers/mmc/msm_sdhci.c @@ -178,7 +178,8 @@ static int msm_ofdata_to_platdata(struct udevice *dev) priv->base = (void *)fdtdec_get_addr_size_auto_parent(gd->fdt_blob, parent->of_offset, dev->of_offset, - "reg", 1, NULL); + "reg", 1, NULL, + false); if (priv->base == (void *)FDT_ADDR_T_NONE || host->ioaddr == (void *)FDT_ADDR_T_NONE) return -EINVAL; diff --git a/drivers/net/cpsw.c b/drivers/net/cpsw.c index 774b021e356..8a2f88a0955 100644 --- a/drivers/net/cpsw.c +++ b/drivers/net/cpsw.c @@ -1146,7 +1146,8 @@ static const struct eth_ops cpsw_eth_ops = { static inline fdt_addr_t cpsw_get_addr_by_node(const void *fdt, int node) { - return fdtdec_get_addr_size_auto_noparent(fdt, node, "reg", 0, NULL); + return fdtdec_get_addr_size_auto_noparent(fdt, node, "reg", 0, NULL, + false); } static int cpsw_eth_ofdata_to_platdata(struct udevice *dev) diff --git a/drivers/spmi/spmi-msm.c b/drivers/spmi/spmi-msm.c index 0cef505e37d..48bc1575964 100644 --- a/drivers/spmi/spmi-msm.c +++ b/drivers/spmi/spmi-msm.c @@ -153,11 +153,12 @@ static int msm_spmi_probe(struct udevice *dev) priv->spmi_core = fdtdec_get_addr_size_auto_parent(gd->fdt_blob, parent->of_offset, dev->of_offset, - "reg", 1, NULL); + "reg", 1, NULL, + false); priv->spmi_obs = fdtdec_get_addr_size_auto_parent(gd->fdt_blob, parent->of_offset, dev->of_offset, "reg", - 2, NULL); + 2, NULL, false); if (priv->arb_chnl == FDT_ADDR_T_NONE || priv->spmi_core == FDT_ADDR_T_NONE || priv->spmi_obs == FDT_ADDR_T_NONE) |