diff mbox series

[04/11] dm: Remove uses of device_bind_offset()

Message ID 20201128174958.4.I07862310b4e40efa2ea158f4f84e0f79dcfec7ed@changeid
State Accepted
Commit a2703ce10cfcbe6a82ec8ed9ec10df2aeea08e64
Delegated to: Simon Glass
Headers show
Series dm: Simplify livetree handling | expand

Commit Message

Simon Glass Nov. 29, 2020, 12:50 a.m. UTC
This function is not needed since the standard device_bind() can be used
instead.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/x86/cpu/apollolake/spl.c               |  2 +-
 drivers/clk/at91/compat.c                   | 20 ++++++++------------
 drivers/clk/clk.c                           |  2 +-
 drivers/gpio/mt7621_gpio.c                  |  4 ++--
 drivers/gpio/s5p_gpio.c                     |  4 ++--
 drivers/gpio/sunxi_gpio.c                   |  4 ++--
 drivers/gpio/tegra186_gpio.c                |  4 ++--
 drivers/gpio/tegra_gpio.c                   |  6 +++---
 drivers/net/mvpp2.c                         |  4 ++--
 drivers/pinctrl/broadcom/pinctrl-bcm283x.c  |  5 ++---
 drivers/pinctrl/meson/pinctrl-meson.c       |  4 +++-
 drivers/pinctrl/mscc/pinctrl-jr2.c          |  4 ++--
 drivers/pinctrl/mscc/pinctrl-luton.c        |  4 ++--
 drivers/pinctrl/mscc/pinctrl-ocelot.c       |  4 ++--
 drivers/pinctrl/mscc/pinctrl-serval.c       |  4 ++--
 drivers/pinctrl/mscc/pinctrl-servalt.c      |  4 ++--
 drivers/pinctrl/mvebu/pinctrl-armada-37xx.c |  8 ++++----
 drivers/power/regulator/Kconfig             |  2 +-
 include/dm/device-internal.h                |  4 ++--
 include/power/regulator.h                   |  2 +-
 20 files changed, 46 insertions(+), 49 deletions(-)

Comments

Simon Glass Dec. 10, 2020, 12:26 a.m. UTC | #1
This function is not needed since the standard device_bind() can be used
instead.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 arch/x86/cpu/apollolake/spl.c               |  2 +-
 drivers/clk/at91/compat.c                   | 20 ++++++++------------
 drivers/clk/clk.c                           |  2 +-
 drivers/gpio/mt7621_gpio.c                  |  4 ++--
 drivers/gpio/s5p_gpio.c                     |  4 ++--
 drivers/gpio/sunxi_gpio.c                   |  4 ++--
 drivers/gpio/tegra186_gpio.c                |  4 ++--
 drivers/gpio/tegra_gpio.c                   |  6 +++---
 drivers/net/mvpp2.c                         |  4 ++--
 drivers/pinctrl/broadcom/pinctrl-bcm283x.c  |  5 ++---
 drivers/pinctrl/meson/pinctrl-meson.c       |  4 +++-
 drivers/pinctrl/mscc/pinctrl-jr2.c          |  4 ++--
 drivers/pinctrl/mscc/pinctrl-luton.c        |  4 ++--
 drivers/pinctrl/mscc/pinctrl-ocelot.c       |  4 ++--
 drivers/pinctrl/mscc/pinctrl-serval.c       |  4 ++--
 drivers/pinctrl/mscc/pinctrl-servalt.c      |  4 ++--
 drivers/pinctrl/mvebu/pinctrl-armada-37xx.c |  8 ++++----
 drivers/power/regulator/Kconfig             |  2 +-
 include/dm/device-internal.h                |  4 ++--
 include/power/regulator.h                   |  2 +-
 20 files changed, 46 insertions(+), 49 deletions(-)

Applied to u-boot-dm, thanks!
Eugen Hristev Jan. 31, 2021, 9:18 a.m. UTC | #2
On 10.12.2020 02:26, Simon Glass wrote:
> This function is not needed since the standard device_bind() can be used
> instead.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
> 
>   arch/x86/cpu/apollolake/spl.c               |  2 +-
>   drivers/clk/at91/compat.c                   | 20 ++++++++------------
>   drivers/clk/clk.c                           |  2 +-
>   drivers/gpio/mt7621_gpio.c                  |  4 ++--
>   drivers/gpio/s5p_gpio.c                     |  4 ++--
>   drivers/gpio/sunxi_gpio.c                   |  4 ++--
>   drivers/gpio/tegra186_gpio.c                |  4 ++--
>   drivers/gpio/tegra_gpio.c                   |  6 +++---
>   drivers/net/mvpp2.c                         |  4 ++--
>   drivers/pinctrl/broadcom/pinctrl-bcm283x.c  |  5 ++---
>   drivers/pinctrl/meson/pinctrl-meson.c       |  4 +++-
>   drivers/pinctrl/mscc/pinctrl-jr2.c          |  4 ++--
>   drivers/pinctrl/mscc/pinctrl-luton.c        |  4 ++--
>   drivers/pinctrl/mscc/pinctrl-ocelot.c       |  4 ++--
>   drivers/pinctrl/mscc/pinctrl-serval.c       |  4 ++--
>   drivers/pinctrl/mscc/pinctrl-servalt.c      |  4 ++--
>   drivers/pinctrl/mvebu/pinctrl-armada-37xx.c |  8 ++++----
>   drivers/power/regulator/Kconfig             |  2 +-
>   include/dm/device-internal.h                |  4 ++--
>   include/power/regulator.h                   |  2 +-
>   20 files changed, 46 insertions(+), 49 deletions(-)
> 
> Applied to u-boot-dm, thanks!
> 


Hi Simon,

I bisected the tree and this commit looks to break 
sama5d4_xplained_mmc_defconfig :

<debug_uart>
No serial driver found
Could not initialize timer (err -19)

Could not initialize timer (err -19)

Could not initialize timer (err -19)

Could not initialize timer (err -19)

Could not initialize timer (err -19)

Could not initialize timer (err -19)

Could not initialize timer (err -19)

Could not initialize timer (err -19)

Could not initialize timer (err -19)

Could not initialize timer (err -19)

Booting u-boot fails when adding this commit.

Could you please help or let me know how I can fix it ?

Thanks,
Eugen

a2703ce10cfcbe6a82ec8ed9ec10df2aeea08e64 is the first bad commit
commit a2703ce10cfcbe6a82ec8ed9ec10df2aeea08e64
Author: Simon Glass <sjg@chromium.org>
Date:   Sat Nov 28 17:50:03 2020 -0700

     dm: Remove uses of device_bind_offset()

     This function is not needed since the standard device_bind() can be 
used
     instead.

     Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass Jan. 31, 2021, 3:37 p.m. UTC | #3
Hi Eugen,

On Sun, 31 Jan 2021 at 02:18, <Eugen.Hristev@microchip.com> wrote:
>
> On 10.12.2020 02:26, Simon Glass wrote:
> > This function is not needed since the standard device_bind() can be used
> > instead.
> >
> > Signed-off-by: Simon Glass <sjg@chromium.org>
> > ---
> >
> >   arch/x86/cpu/apollolake/spl.c               |  2 +-
> >   drivers/clk/at91/compat.c                   | 20 ++++++++------------
> >   drivers/clk/clk.c                           |  2 +-
> >   drivers/gpio/mt7621_gpio.c                  |  4 ++--
> >   drivers/gpio/s5p_gpio.c                     |  4 ++--
> >   drivers/gpio/sunxi_gpio.c                   |  4 ++--
> >   drivers/gpio/tegra186_gpio.c                |  4 ++--
> >   drivers/gpio/tegra_gpio.c                   |  6 +++---
> >   drivers/net/mvpp2.c                         |  4 ++--
> >   drivers/pinctrl/broadcom/pinctrl-bcm283x.c  |  5 ++---
> >   drivers/pinctrl/meson/pinctrl-meson.c       |  4 +++-
> >   drivers/pinctrl/mscc/pinctrl-jr2.c          |  4 ++--
> >   drivers/pinctrl/mscc/pinctrl-luton.c        |  4 ++--
> >   drivers/pinctrl/mscc/pinctrl-ocelot.c       |  4 ++--
> >   drivers/pinctrl/mscc/pinctrl-serval.c       |  4 ++--
> >   drivers/pinctrl/mscc/pinctrl-servalt.c      |  4 ++--
> >   drivers/pinctrl/mvebu/pinctrl-armada-37xx.c |  8 ++++----
> >   drivers/power/regulator/Kconfig             |  2 +-
> >   include/dm/device-internal.h                |  4 ++--
> >   include/power/regulator.h                   |  2 +-
> >   20 files changed, 46 insertions(+), 49 deletions(-)
> >
> > Applied to u-boot-dm, thanks!
> >
>
>
> Hi Simon,
>
> I bisected the tree and this commit looks to break
> sama5d4_xplained_mmc_defconfig :
>
> <debug_uart>
> No serial driver found
> Could not initialize timer (err -19)
>
> Could not initialize timer (err -19)
>
> Could not initialize timer (err -19)
>
> Could not initialize timer (err -19)
>
> Could not initialize timer (err -19)
>
> Could not initialize timer (err -19)
>
> Could not initialize timer (err -19)
>
> Could not initialize timer (err -19)
>
> Could not initialize timer (err -19)
>
> Could not initialize timer (err -19)
>
> Booting u-boot fails when adding this commit.
>
> Could you please help or let me know how I can fix it ?

I suspect the problem could be in the changes to
drivers/clk/at91/compat.c although I cannot see why

You could try reverting that change, and just using offset_to_ofnode()
in the device_bind_driver_to_node() call. I actually intended to do
that at the time due to the risk, but somehow I missed this one.

OTOH it would be good to move the code to livetree and stop using fdt offsets.

Regards,
Simon
Eugen Hristev Feb. 1, 2021, 8:13 a.m. UTC | #4
On 31.01.2021 17:37, Simon Glass wrote:
> Hi Eugen,
> 
> On Sun, 31 Jan 2021 at 02:18, <Eugen.Hristev@microchip.com> wrote:
>>
>> On 10.12.2020 02:26, Simon Glass wrote:
>>> This function is not needed since the standard device_bind() can be used
>>> instead.
>>>
>>> Signed-off-by: Simon Glass <sjg@chromium.org>
>>> ---
>>>
>>>    arch/x86/cpu/apollolake/spl.c               |  2 +-
>>>    drivers/clk/at91/compat.c                   | 20 ++++++++------------
>>>    drivers/clk/clk.c                           |  2 +-
>>>    drivers/gpio/mt7621_gpio.c                  |  4 ++--
>>>    drivers/gpio/s5p_gpio.c                     |  4 ++--
>>>    drivers/gpio/sunxi_gpio.c                   |  4 ++--
>>>    drivers/gpio/tegra186_gpio.c                |  4 ++--
>>>    drivers/gpio/tegra_gpio.c                   |  6 +++---
>>>    drivers/net/mvpp2.c                         |  4 ++--
>>>    drivers/pinctrl/broadcom/pinctrl-bcm283x.c  |  5 ++---
>>>    drivers/pinctrl/meson/pinctrl-meson.c       |  4 +++-
>>>    drivers/pinctrl/mscc/pinctrl-jr2.c          |  4 ++--
>>>    drivers/pinctrl/mscc/pinctrl-luton.c        |  4 ++--
>>>    drivers/pinctrl/mscc/pinctrl-ocelot.c       |  4 ++--
>>>    drivers/pinctrl/mscc/pinctrl-serval.c       |  4 ++--
>>>    drivers/pinctrl/mscc/pinctrl-servalt.c      |  4 ++--
>>>    drivers/pinctrl/mvebu/pinctrl-armada-37xx.c |  8 ++++----
>>>    drivers/power/regulator/Kconfig             |  2 +-
>>>    include/dm/device-internal.h                |  4 ++--
>>>    include/power/regulator.h                   |  2 +-
>>>    20 files changed, 46 insertions(+), 49 deletions(-)
>>>
>>> Applied to u-boot-dm, thanks!
>>>
>>
>>
>> Hi Simon,
>>
>> I bisected the tree and this commit looks to break
>> sama5d4_xplained_mmc_defconfig :
>>
>> <debug_uart>
>> No serial driver found
>> Could not initialize timer (err -19)
>>
>> Could not initialize timer (err -19)
>>
>> Could not initialize timer (err -19)
>>
>> Could not initialize timer (err -19)
>>
>> Could not initialize timer (err -19)
>>
>> Could not initialize timer (err -19)
>>
>> Could not initialize timer (err -19)
>>
>> Could not initialize timer (err -19)
>>
>> Could not initialize timer (err -19)
>>
>> Could not initialize timer (err -19)
>>
>> Booting u-boot fails when adding this commit.
>>
>> Could you please help or let me know how I can fix it ?
> 
> I suspect the problem could be in the changes to
> drivers/clk/at91/compat.c although I cannot see why
> 
> You could try reverting that change, and just using offset_to_ofnode()
> in the device_bind_driver_to_node() call. I actually intended to do
> that at the time due to the risk, but somehow I missed this one.
> 
> OTOH it would be good to move the code to livetree and stop using fdt offsets.
> 
> Regards,
> Simon
> 

I reverted the changes in compat.c and indeed now it boots correctly.

I tried to do the following change on top of your code as you suggested 
but it does not help:


--- a/drivers/clk/at91/compat.c
+++ b/drivers/clk/at91/compat.c
@@ -67,7 +67,7 @@ int at91_clk_sub_device_bind(struct udevice *dev, 
const char *drv_name)
         bool pre_reloc_only = !(gd->flags & GD_FLG_RELOC);
         const char *name;
         int ret;
-
+       int offset = dev_of_offset(dev);
         ofnode_for_each_subnode(node, parent) {
                 if (pre_reloc_only && !ofnode_pre_reloc(node))
                         continue;
@@ -84,7 +84,7 @@ int at91_clk_sub_device_bind(struct udevice *dev, 
const char *drv_name)
                 name = ofnode_get_name(node);
                 if (!name)
                         return -EINVAL;
-               ret = device_bind_driver_to_node(dev, drv_name, name, node,
+               ret = device_bind_driver_to_node(dev, drv_name, name, 
offset_to_ofnode(offset),
                                                  NULL);
                 if (ret)
                         return ret;


I have a feeling the 'for loop' for the subnodes misses an essential 
driver and thus it fails booting
Simon Glass Feb. 1, 2021, 12:02 p.m. UTC | #5
Hi Eugen,

On Mon, 1 Feb 2021 at 01:13, <Eugen.Hristev@microchip.com> wrote:
>
> On 31.01.2021 17:37, Simon Glass wrote:
> > Hi Eugen,
> >
> > On Sun, 31 Jan 2021 at 02:18, <Eugen.Hristev@microchip.com> wrote:
> >>
> >> On 10.12.2020 02:26, Simon Glass wrote:
> >>> This function is not needed since the standard device_bind() can be used
> >>> instead.
> >>>
> >>> Signed-off-by: Simon Glass <sjg@chromium.org>
> >>> ---
> >>>
> >>>    arch/x86/cpu/apollolake/spl.c               |  2 +-
> >>>    drivers/clk/at91/compat.c                   | 20 ++++++++------------
> >>>    drivers/clk/clk.c                           |  2 +-
> >>>    drivers/gpio/mt7621_gpio.c                  |  4 ++--
> >>>    drivers/gpio/s5p_gpio.c                     |  4 ++--
> >>>    drivers/gpio/sunxi_gpio.c                   |  4 ++--
> >>>    drivers/gpio/tegra186_gpio.c                |  4 ++--
> >>>    drivers/gpio/tegra_gpio.c                   |  6 +++---
> >>>    drivers/net/mvpp2.c                         |  4 ++--
> >>>    drivers/pinctrl/broadcom/pinctrl-bcm283x.c  |  5 ++---
> >>>    drivers/pinctrl/meson/pinctrl-meson.c       |  4 +++-
> >>>    drivers/pinctrl/mscc/pinctrl-jr2.c          |  4 ++--
> >>>    drivers/pinctrl/mscc/pinctrl-luton.c        |  4 ++--
> >>>    drivers/pinctrl/mscc/pinctrl-ocelot.c       |  4 ++--
> >>>    drivers/pinctrl/mscc/pinctrl-serval.c       |  4 ++--
> >>>    drivers/pinctrl/mscc/pinctrl-servalt.c      |  4 ++--
> >>>    drivers/pinctrl/mvebu/pinctrl-armada-37xx.c |  8 ++++----
> >>>    drivers/power/regulator/Kconfig             |  2 +-
> >>>    include/dm/device-internal.h                |  4 ++--
> >>>    include/power/regulator.h                   |  2 +-
> >>>    20 files changed, 46 insertions(+), 49 deletions(-)
> >>>
> >>> Applied to u-boot-dm, thanks!
> >>>
> >>
> >>
> >> Hi Simon,
> >>
> >> I bisected the tree and this commit looks to break
> >> sama5d4_xplained_mmc_defconfig :
> >>
> >> <debug_uart>
> >> No serial driver found
> >> Could not initialize timer (err -19)
> >>
> >> Could not initialize timer (err -19)
> >>
> >> Could not initialize timer (err -19)
> >>
> >> Could not initialize timer (err -19)
> >>
> >> Could not initialize timer (err -19)
> >>
> >> Could not initialize timer (err -19)
> >>
> >> Could not initialize timer (err -19)
> >>
> >> Could not initialize timer (err -19)
> >>
> >> Could not initialize timer (err -19)
> >>
> >> Could not initialize timer (err -19)
> >>
> >> Booting u-boot fails when adding this commit.
> >>
> >> Could you please help or let me know how I can fix it ?
> >
> > I suspect the problem could be in the changes to
> > drivers/clk/at91/compat.c although I cannot see why
> >
> > You could try reverting that change, and just using offset_to_ofnode()
> > in the device_bind_driver_to_node() call. I actually intended to do
> > that at the time due to the risk, but somehow I missed this one.
> >
> > OTOH it would be good to move the code to livetree and stop using fdt offsets.
> >
> > Regards,
> > Simon
> >
>
> I reverted the changes in compat.c and indeed now it boots correctly.
>
> I tried to do the following change on top of your code as you suggested
> but it does not help:
>
>
> --- a/drivers/clk/at91/compat.c
> +++ b/drivers/clk/at91/compat.c
> @@ -67,7 +67,7 @@ int at91_clk_sub_device_bind(struct udevice *dev,
> const char *drv_name)
>          bool pre_reloc_only = !(gd->flags & GD_FLG_RELOC);
>          const char *name;
>          int ret;
> -
> +       int offset = dev_of_offset(dev);
>          ofnode_for_each_subnode(node, parent) {
>                  if (pre_reloc_only && !ofnode_pre_reloc(node))
>                          continue;
> @@ -84,7 +84,7 @@ int at91_clk_sub_device_bind(struct udevice *dev,
> const char *drv_name)
>                  name = ofnode_get_name(node);
>                  if (!name)
>                          return -EINVAL;
> -               ret = device_bind_driver_to_node(dev, drv_name, name, node,
> +               ret = device_bind_driver_to_node(dev, drv_name, name,
> offset_to_ofnode(offset),
>                                                   NULL);
>                  if (ret)
>                          return ret;
>
>
> I have a feeling the 'for loop' for the subnodes misses an essential
> driver and thus it fails booting

Then I think reverting all the changes is the best thing in this file.
Can you send a patch?

Ultimately this should be figured out, but I cannot see what is wrong
and don't have that hardware to try. I do have an old SAM9260/9263 but
I'm not sure if that uses the same driver.

Regards,
Simon
Eugen Hristev Feb. 1, 2021, 12:14 p.m. UTC | #6
On 01.02.2021 14:02, Simon Glass wrote:
> Hi Eugen,
> 
> On Mon, 1 Feb 2021 at 01:13, <Eugen.Hristev@microchip.com> wrote:
>>
>> On 31.01.2021 17:37, Simon Glass wrote:
>>> Hi Eugen,
>>>
>>> On Sun, 31 Jan 2021 at 02:18, <Eugen.Hristev@microchip.com> wrote:
>>>>
>>>> On 10.12.2020 02:26, Simon Glass wrote:
>>>>> This function is not needed since the standard device_bind() can be used
>>>>> instead.
>>>>>
>>>>> Signed-off-by: Simon Glass <sjg@chromium.org>
>>>>> ---
>>>>>
>>>>>     arch/x86/cpu/apollolake/spl.c               |  2 +-
>>>>>     drivers/clk/at91/compat.c                   | 20 ++++++++------------
>>>>>     drivers/clk/clk.c                           |  2 +-
>>>>>     drivers/gpio/mt7621_gpio.c                  |  4 ++--
>>>>>     drivers/gpio/s5p_gpio.c                     |  4 ++--
>>>>>     drivers/gpio/sunxi_gpio.c                   |  4 ++--
>>>>>     drivers/gpio/tegra186_gpio.c                |  4 ++--
>>>>>     drivers/gpio/tegra_gpio.c                   |  6 +++---
>>>>>     drivers/net/mvpp2.c                         |  4 ++--
>>>>>     drivers/pinctrl/broadcom/pinctrl-bcm283x.c  |  5 ++---
>>>>>     drivers/pinctrl/meson/pinctrl-meson.c       |  4 +++-
>>>>>     drivers/pinctrl/mscc/pinctrl-jr2.c          |  4 ++--
>>>>>     drivers/pinctrl/mscc/pinctrl-luton.c        |  4 ++--
>>>>>     drivers/pinctrl/mscc/pinctrl-ocelot.c       |  4 ++--
>>>>>     drivers/pinctrl/mscc/pinctrl-serval.c       |  4 ++--
>>>>>     drivers/pinctrl/mscc/pinctrl-servalt.c      |  4 ++--
>>>>>     drivers/pinctrl/mvebu/pinctrl-armada-37xx.c |  8 ++++----
>>>>>     drivers/power/regulator/Kconfig             |  2 +-
>>>>>     include/dm/device-internal.h                |  4 ++--
>>>>>     include/power/regulator.h                   |  2 +-
>>>>>     20 files changed, 46 insertions(+), 49 deletions(-)
>>>>>
>>>>> Applied to u-boot-dm, thanks!
>>>>>
>>>>
>>>>
>>>> Hi Simon,
>>>>
>>>> I bisected the tree and this commit looks to break
>>>> sama5d4_xplained_mmc_defconfig :
>>>>
>>>> <debug_uart>
>>>> No serial driver found
>>>> Could not initialize timer (err -19)
>>>>
>>>> Could not initialize timer (err -19)
>>>>
>>>> Could not initialize timer (err -19)
>>>>
>>>> Could not initialize timer (err -19)
>>>>
>>>> Could not initialize timer (err -19)
>>>>
>>>> Could not initialize timer (err -19)
>>>>
>>>> Could not initialize timer (err -19)
>>>>
>>>> Could not initialize timer (err -19)
>>>>
>>>> Could not initialize timer (err -19)
>>>>
>>>> Could not initialize timer (err -19)
>>>>
>>>> Booting u-boot fails when adding this commit.
>>>>
>>>> Could you please help or let me know how I can fix it ?
>>>
>>> I suspect the problem could be in the changes to
>>> drivers/clk/at91/compat.c although I cannot see why
>>>
>>> You could try reverting that change, and just using offset_to_ofnode()
>>> in the device_bind_driver_to_node() call. I actually intended to do
>>> that at the time due to the risk, but somehow I missed this one.
>>>
>>> OTOH it would be good to move the code to livetree and stop using fdt offsets.
>>>
>>> Regards,
>>> Simon
>>>
>>
>> I reverted the changes in compat.c and indeed now it boots correctly.
>>
>> I tried to do the following change on top of your code as you suggested
>> but it does not help:
>>
>>
>> --- a/drivers/clk/at91/compat.c
>> +++ b/drivers/clk/at91/compat.c
>> @@ -67,7 +67,7 @@ int at91_clk_sub_device_bind(struct udevice *dev,
>> const char *drv_name)
>>           bool pre_reloc_only = !(gd->flags & GD_FLG_RELOC);
>>           const char *name;
>>           int ret;
>> -
>> +       int offset = dev_of_offset(dev);
>>           ofnode_for_each_subnode(node, parent) {
>>                   if (pre_reloc_only && !ofnode_pre_reloc(node))
>>                           continue;
>> @@ -84,7 +84,7 @@ int at91_clk_sub_device_bind(struct udevice *dev,
>> const char *drv_name)
>>                   name = ofnode_get_name(node);
>>                   if (!name)
>>                           return -EINVAL;
>> -               ret = device_bind_driver_to_node(dev, drv_name, name, node,
>> +               ret = device_bind_driver_to_node(dev, drv_name, name,
>> offset_to_ofnode(offset),
>>                                                    NULL);
>>                   if (ret)
>>                           return ret;
>>
>>
>> I have a feeling the 'for loop' for the subnodes misses an essential
>> driver and thus it fails booting
> 
> Then I think reverting all the changes is the best thing in this file.
> Can you send a patch?
> 
> Ultimately this should be figured out, but I cannot see what is wrong
> and don't have that hardware to try. I do have an old SAM9260/9263 but
> I'm not sure if that uses the same driver.
> 
> Regards,
> Simon
> 

I can do that, but if you have any hunches, I can test patches for you.
diff mbox series

Patch

diff --git a/arch/x86/cpu/apollolake/spl.c b/arch/x86/cpu/apollolake/spl.c
index 1f75e1894b7..089b37c59f8 100644
--- a/arch/x86/cpu/apollolake/spl.c
+++ b/arch/x86/cpu/apollolake/spl.c
@@ -86,7 +86,7 @@  static int apl_flash_probe(struct udevice *dev)
 /*
  * Manually set the parent of the SPI flash to SPI, since dtoc doesn't. We also
  * need to allocate the parent_platdata since by the time this function is
- * called device_bind_offset() has already gone past that step.
+ * called device_bind() has already gone past that step.
  */
 static int apl_flash_bind(struct udevice *dev)
 {
diff --git a/drivers/clk/at91/compat.c b/drivers/clk/at91/compat.c
index 9563285674b..afd67b290d8 100644
--- a/drivers/clk/at91/compat.c
+++ b/drivers/clk/at91/compat.c
@@ -62,34 +62,30 @@  static int at91_pmc_core_probe(struct udevice *dev)
  */
 int at91_clk_sub_device_bind(struct udevice *dev, const char *drv_name)
 {
-	const void *fdt = gd->fdt_blob;
-	int offset = dev_of_offset(dev);
+	ofnode parent = dev_ofnode(dev);
+	ofnode node;
 	bool pre_reloc_only = !(gd->flags & GD_FLG_RELOC);
 	const char *name;
 	int ret;
 
-	for (offset = fdt_first_subnode(fdt, offset);
-	     offset > 0;
-	     offset = fdt_next_subnode(fdt, offset)) {
-		if (pre_reloc_only &&
-		    !ofnode_pre_reloc(offset_to_ofnode(offset)))
+	ofnode_for_each_subnode(node, parent) {
+		if (pre_reloc_only && !ofnode_pre_reloc(node))
 			continue;
 		/*
 		 * If this node has "compatible" property, this is not
 		 * a clock sub-node, but a normal device. skip.
 		 */
-		fdt_get_property(fdt, offset, "compatible", &ret);
-		if (ret >= 0)
+		if (ofnode_read_prop(node, "compatible", NULL))
 			continue;
 
 		if (ret != -FDT_ERR_NOTFOUND)
 			return ret;
 
-		name = fdt_get_name(fdt, offset, NULL);
+		name = ofnode_get_name(node);
 		if (!name)
 			return -EINVAL;
-		ret = device_bind_driver_to_node(dev, drv_name, name,
-					offset_to_ofnode(offset), NULL);
+		ret = device_bind_driver_to_node(dev, drv_name, name, node,
+						 NULL);
 		if (ret)
 			return ret;
 	}
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index 1fa9bec6fea..928ad13641a 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -36,7 +36,7 @@  int clk_register(struct clk *clk, const char *drv_name,
 		return -ENOENT;
 	}
 
-	ret = device_bind_offset(parent, drv, name, NULL, -1, &clk->dev);
+	ret = device_bind(parent, drv, name, NULL, ofnode_null(), &clk->dev);
 	if (ret) {
 		printf("%s: CLK: %s driver bind error [%d]!\n", __func__, name,
 		       ret);
diff --git a/drivers/gpio/mt7621_gpio.c b/drivers/gpio/mt7621_gpio.c
index b64bc838a31..8b41e34844e 100644
--- a/drivers/gpio/mt7621_gpio.c
+++ b/drivers/gpio/mt7621_gpio.c
@@ -157,8 +157,8 @@  static int gpio_mediatek_bind(struct udevice *parent)
 		plat->gpio_count = MTK_BANK_WIDTH;
 		plat->bank = bank;
 
-		ret = device_bind_offset(parent, parent->driver,
-					 plat->bank_name, plat, -1, &dev);
+		ret = device_bind(parent, parent->driver, plat->bank_name, plat,
+				  ofnode_null(), &dev);
 		if (ret)
 			return ret;
 
diff --git a/drivers/gpio/s5p_gpio.c b/drivers/gpio/s5p_gpio.c
index 4f9fedd6129..d6054c4a6dd 100644
--- a/drivers/gpio/s5p_gpio.c
+++ b/drivers/gpio/s5p_gpio.c
@@ -332,8 +332,8 @@  static int gpio_exynos_bind(struct udevice *parent)
 			return -ENOMEM;
 
 		plat->bank_name = fdt_get_name(blob, node, NULL);
-		ret = device_bind_offset(parent, parent->driver,
-					 plat->bank_name, plat, -1, &dev);
+		ret = device_bind(parent, parent->driver, plat->bank_name, plat,
+				  ofnode_null(), &dev);
 		if (ret)
 			return ret;
 
diff --git a/drivers/gpio/sunxi_gpio.c b/drivers/gpio/sunxi_gpio.c
index f18f0c8152c..b6b0e9acbdb 100644
--- a/drivers/gpio/sunxi_gpio.c
+++ b/drivers/gpio/sunxi_gpio.c
@@ -305,8 +305,8 @@  static int gpio_sunxi_bind(struct udevice *parent)
 		plat->bank_name = gpio_bank_name(soc_data->start + bank);
 		plat->gpio_count = SUNXI_GPIOS_PER_BANK;
 
-		ret = device_bind_offset(parent, parent->driver,
-					 plat->bank_name, plat, -1, &dev);
+		ret = device_bind(parent, parent->driver, plat->bank_name, plat,
+				  ofnode_null(), &dev);
 		if (ret)
 			return ret;
 		dev_set_of_offset(dev, dev_of_offset(parent));
diff --git a/drivers/gpio/tegra186_gpio.c b/drivers/gpio/tegra186_gpio.c
index a518a395cab..bcc322c3b02 100644
--- a/drivers/gpio/tegra186_gpio.c
+++ b/drivers/gpio/tegra186_gpio.c
@@ -190,8 +190,8 @@  static int tegra186_gpio_bind(struct udevice *parent)
 		plat->name = ctlr_data->ports[port].name;
 		plat->regs = &(regs[ctlr_data->ports[port].offset / 4]);
 
-		ret = device_bind_offset(parent, parent->driver, plat->name,
-					 plat, -1, &dev);
+		ret = device_bind(parent, parent->driver, plat->name, plat,
+				  ofnode_null(), &dev);
 		if (ret)
 			return ret;
 		dev_set_of_offset(dev, dev_of_offset(parent));
diff --git a/drivers/gpio/tegra_gpio.c b/drivers/gpio/tegra_gpio.c
index 0056171fc51..3877ee659af 100644
--- a/drivers/gpio/tegra_gpio.c
+++ b/drivers/gpio/tegra_gpio.c
@@ -360,9 +360,9 @@  static int gpio_tegra_bind(struct udevice *parent)
 			plat->base_gpio = TEGRA_GPIOS_PER_PORT * base_port;
 			plat->port_name = gpio_port_name(base_port);
 
-			ret = device_bind_offset(parent, parent->driver,
-						 plat->port_name, plat, -1,
-						 &dev);
+			ret = device_bind(parent, parent->driver,
+					  plat->port_name, plat, ofnode_null(),
+					  &dev);
 			if (ret)
 				return ret;
 			dev_set_of_offset(dev, dev_of_offset(parent));
diff --git a/drivers/net/mvpp2.c b/drivers/net/mvpp2.c
index df77a0d5e8e..c1a78a2918e 100644
--- a/drivers/net/mvpp2.c
+++ b/drivers/net/mvpp2.c
@@ -5477,8 +5477,8 @@  static int mvpp2_base_bind(struct udevice *parent)
 		sprintf(name, "mvpp2-%d", id);
 
 		/* Create child device UCLASS_ETH and bind it */
-		device_bind_offset(parent, &mvpp2_driver, name, plat, subnode, &dev);
-		dev_set_of_offset(dev, subnode);
+		device_bind(parent, &mvpp2_driver, name, plat,
+			    offset_to_ofnode(subnode), &dev);
 	}
 
 	return 0;
diff --git a/drivers/pinctrl/broadcom/pinctrl-bcm283x.c b/drivers/pinctrl/broadcom/pinctrl-bcm283x.c
index 54928a607cb..5f5f3f3622f 100644
--- a/drivers/pinctrl/broadcom/pinctrl-bcm283x.c
+++ b/drivers/pinctrl/broadcom/pinctrl-bcm283x.c
@@ -125,9 +125,8 @@  int bcm283x_pinctl_probe(struct udevice *dev)
 	struct udevice *pdev;
 
 	/* Create GPIO device as well */
-	ret = device_bind_offset(dev, lists_driver_lookup_name("gpio_bcm2835"),
-				 "gpio_bcm2835", NULL, dev_of_offset(dev),
-				 &pdev);
+	ret = device_bind(dev, lists_driver_lookup_name("gpio_bcm2835"),
+			  "gpio_bcm2835", NULL, dev_ofnode(dev), &pdev);
 	if (ret) {
 		/*
 		 * While we really want the pinctrl driver to work to make
diff --git a/drivers/pinctrl/meson/pinctrl-meson.c b/drivers/pinctrl/meson/pinctrl-meson.c
index 45a1ccf58d6..c35e4c42a09 100644
--- a/drivers/pinctrl/meson/pinctrl-meson.c
+++ b/drivers/pinctrl/meson/pinctrl-meson.c
@@ -347,6 +347,7 @@  int meson_pinctrl_probe(struct udevice *dev)
 	int na, ns;
 	char *name;
 
+	/* FIXME: Should use livetree */
 	na = fdt_address_cells(gd->fdt_blob, dev_of_offset(dev->parent));
 	if (na < 1) {
 		debug("bad #address-cells\n");
@@ -419,7 +420,8 @@  int meson_pinctrl_probe(struct udevice *dev)
 	sprintf(name, "meson-gpio");
 
 	/* Create child device UCLASS_GPIO and bind it */
-	device_bind_offset(dev, priv->data->gpio_driver, name, NULL, gpio, &gpio_dev);
+	device_bind(dev, priv->data->gpio_driver, name, NULL,
+		    offset_to_ofnode(gpio), &gpio_dev);
 	dev_set_of_offset(gpio_dev, gpio);
 
 	return 0;
diff --git a/drivers/pinctrl/mscc/pinctrl-jr2.c b/drivers/pinctrl/mscc/pinctrl-jr2.c
index fc730b79d6a..6de7a416f0e 100644
--- a/drivers/pinctrl/mscc/pinctrl-jr2.c
+++ b/drivers/pinctrl/mscc/pinctrl-jr2.c
@@ -299,8 +299,8 @@  static int jr2_pinctrl_probe(struct udevice *dev)
 	if (ret)
 		return ret;
 
-	ret = device_bind_offset(dev, &jr2_gpio_driver, "jr2-gpio", NULL,
-				 dev_of_offset(dev), NULL);
+	ret = device_bind(dev, &jr2_gpio_driver, "jr2-gpio", NULL,
+			  dev_ofnode(dev), NULL);
 
 	if (ret)
 		return ret;
diff --git a/drivers/pinctrl/mscc/pinctrl-luton.c b/drivers/pinctrl/mscc/pinctrl-luton.c
index 4fb17984abe..0adeef9ec67 100644
--- a/drivers/pinctrl/mscc/pinctrl-luton.c
+++ b/drivers/pinctrl/mscc/pinctrl-luton.c
@@ -165,8 +165,8 @@  int luton_pinctrl_probe(struct udevice *dev)
 	if (ret)
 		return ret;
 
-	ret = device_bind_offset(dev, &luton_gpio_driver, "luton-gpio", NULL,
-				 dev_of_offset(dev), NULL);
+	ret = device_bind(dev, &luton_gpio_driver, "luton-gpio", NULL,
+			  dev_ofnode(dev), NULL);
 
 	return 0;
 }
diff --git a/drivers/pinctrl/mscc/pinctrl-ocelot.c b/drivers/pinctrl/mscc/pinctrl-ocelot.c
index 12ecad7a6e9..4df5eef1b10 100644
--- a/drivers/pinctrl/mscc/pinctrl-ocelot.c
+++ b/drivers/pinctrl/mscc/pinctrl-ocelot.c
@@ -181,8 +181,8 @@  int ocelot_pinctrl_probe(struct udevice *dev)
 	if (ret)
 		return ret;
 
-	ret = device_bind_offset(dev, &ocelot_gpio_driver, "ocelot-gpio", NULL,
-				 dev_of_offset(dev), NULL);
+	ret = device_bind(dev, &ocelot_gpio_driver, "ocelot-gpio", NULL,
+			  dev_ofnode(dev), NULL);
 
 	return ret;
 }
diff --git a/drivers/pinctrl/mscc/pinctrl-serval.c b/drivers/pinctrl/mscc/pinctrl-serval.c
index 93b31d20833..2cef5df3dc2 100644
--- a/drivers/pinctrl/mscc/pinctrl-serval.c
+++ b/drivers/pinctrl/mscc/pinctrl-serval.c
@@ -209,8 +209,8 @@  static int serval_pinctrl_probe(struct udevice *dev)
 	if (ret)
 		return ret;
 
-	ret = device_bind_offset(dev, &serval_gpio_driver, "serval-gpio", NULL,
-				 dev_of_offset(dev), NULL);
+	ret = device_bind(dev, &serval_gpio_driver, "serval-gpio", NULL,
+			  dev_ofnode(dev), NULL);
 
 	if (ret)
 		return ret;
diff --git a/drivers/pinctrl/mscc/pinctrl-servalt.c b/drivers/pinctrl/mscc/pinctrl-servalt.c
index 9bbc7698a52..37ce52ce7b8 100644
--- a/drivers/pinctrl/mscc/pinctrl-servalt.c
+++ b/drivers/pinctrl/mscc/pinctrl-servalt.c
@@ -245,8 +245,8 @@  static int servalt_pinctrl_probe(struct udevice *dev)
 	if (ret)
 		return ret;
 
-	ret = device_bind_offset(dev, &servalt_gpio_driver, "servalt-gpio", NULL,
-				 dev_of_offset(dev), NULL);
+	ret = device_bind(dev, &servalt_gpio_driver, "servalt-gpio", NULL,
+			  dev_ofnode(dev), NULL);
 
 	if (ret)
 		return ret;
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
index 7bbeb413ba5..17d7603ebdb 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
@@ -547,13 +547,14 @@  static int armada_37xx_gpiochip_register(struct udevice *parent,
 	int subnode;
 	char *name;
 
-	/* Lookup GPIO driver */
+	/* FIXME: Should not need to lookup GPIO uclass */
 	drv = lists_uclass_lookup(UCLASS_GPIO);
 	if (!drv) {
 		puts("Cannot find GPIO driver\n");
 		return -ENOENT;
 	}
 
+	/* FIXME: Use livtree and check the result of device_bind() below */
 	fdt_for_each_subnode(subnode, blob, node) {
 		if (fdtdec_get_bool(blob, subnode, "gpio-controller")) {
 			ret = 0;
@@ -567,9 +568,8 @@  static int armada_37xx_gpiochip_register(struct udevice *parent,
 	sprintf(name, "armada-37xx-gpio");
 
 	/* Create child device UCLASS_GPIO and bind it */
-	device_bind_offset(parent, &armada_37xx_gpio_driver, name, NULL,
-			   subnode, &dev);
-	dev_set_of_offset(dev, subnode);
+	device_bind(parent, &armada_37xx_gpio_driver, name, NULL,
+		    offset_to_ofnode(subnode), &dev);
 
 	return 0;
 }
diff --git a/drivers/power/regulator/Kconfig b/drivers/power/regulator/Kconfig
index a6f78d96706..d431102462a 100644
--- a/drivers/power/regulator/Kconfig
+++ b/drivers/power/regulator/Kconfig
@@ -11,7 +11,7 @@  config DM_REGULATOR
 	- 'include/power/regulator.h'
 	- 'drivers/power/pmic/pmic-uclass.c'
 	- 'drivers/power/pmic/regulator-uclass.c'
-	It's important to call the device_bind_offset() with the proper node offset,
+	It's important to call the device_bind() with the proper node offset,
 	when binding the regulator devices. The pmic_bind_childs() can be used
 	for this purpose if PMIC I/O driver is implemented or dm_scan_fdt_dev()
 	otherwise. Detailed information can be found in the header file.
diff --git a/include/dm/device-internal.h b/include/dm/device-internal.h
index 636210f73ed..6f4f8510f7e 100644
--- a/include/dm/device-internal.h
+++ b/include/dm/device-internal.h
@@ -37,8 +37,8 @@  struct udevice;
  * @return 0 if OK, -ve on error
  */
 int device_bind_offset(struct udevice *parent, const struct driver *drv,
-		       const char *name, void *platdata, int of_offset,
-		       struct udevice **devp);
+		const char *name, void *platdata, int of_offset,
+		struct udevice **devp);
 
 int device_bind(struct udevice *parent, const struct driver *drv,
 		const char *name, void *platdata, ofnode node,
diff --git a/include/power/regulator.h b/include/power/regulator.h
index 4d58a436fea..7f278e8c7dc 100644
--- a/include/power/regulator.h
+++ b/include/power/regulator.h
@@ -48,7 +48,7 @@ 
  * If regulator-name property is not provided, node name will be chosen.
  *
  * Regulator bind:
- * For each regulator device, the device_bind_offset() should be called with passed
+ * For each regulator device, the device_bind() should be called with passed
  * device tree offset. This is required for this uclass's '.post_bind' method,
  * which does the scan on the device node, for the 'regulator-name' constraint.
  * If the parent is not a PMIC device, and the child is not bind by function: