diff mbox

next boot: 34 pass, 5 fail (next-20140122)

Message ID 52E10AB4.9060002@ti.com (mailing list archive)
State New, archived
Headers show

Commit Message

Tero Kristo Jan. 23, 2014, 12:27 p.m. UTC
On 01/23/2014 11:41 AM, Florian Vaussard wrote:
>
>
> On 01/23/2014 10:15 AM, Florian Vaussard wrote:
>>
>>
>> On 01/23/2014 10:00 AM, Tero Kristo wrote:
>>> On 01/23/2014 10:14 AM, Florian Vaussard wrote:
>>>> Hello,
>>>>
>>>> On 01/23/2014 07:23 AM, Tero Kristo wrote:
>>>>> On 01/23/2014 03:35 AM, Kevin Hilman wrote:
>>>>>> On Wed, Jan 22, 2014 at 4:46 PM, Kevin's boot bot <khilman@linaro.org>
>>>>>> wrote:
>>>>>>> Automated DT boot report for various ARM defconfigs.
>>>>>>>
>>>>>>>
>>>>>>> Tree/Branch: next
>>>>>>> Git describe: next-20140122
>>>>>>> Failed boot tests (console logs at the end)
>>>>>>> ===========================================
>>>>>>>            omap3-tobi,3730storm:     FAIL:    omap2plus_defconfig
>>>>>> [...]
>>>>>>>            omap3-tobi,3730storm:     FAIL:    multi_v7_defconfig
>>>>>>
>>>>>> These OMAP3 failures are new regressions.  Full failure boot log
>>>>>> attached.
>>>>>> Bisected down to:
>>>>>>
>>>>>> cfa9667d4ac9da8b3ba2269f934ecd69ae504d39 is the first bad commit
>>>>>> commit cfa9667d4ac9da8b3ba2269f934ecd69ae504d39
>>>>>> Author: Tero Kristo <t-kristo@ti.com>
>>>>>> Date:   Tue Oct 22 11:53:02 2013 +0300
>>>>>>
>>>>>>        ARM: OMAP2+: io: use new clock init API
>>>>>>
>>>>>>        clk_init is now separated to a common function which gets called
>>>>>> for all
>>>>>>        SoC:s, which initializes the DT clocks and calls the SoC specific
>>>>>> clock init.
>>>>>>
>>>>>>        Signed-off-by: Tero Kristo <t-kristo@ti.com>
>>>>>>        Acked-by: Tony Lindgren <tony@atomide.com>
>>>>>>        Signed-off-by: Mike Turquette <mturquette@linaro.org>
>>>>>>
>>>>>> Kevin
>>>>>>
>>>>>
>>>>> Hi,
>>>>>
>>>>> I think this is because the tobi board is including wrong omap3-soc.dtsi
>>>>> file (omap34xx.dtsi) through omap3-overo.dtsi.
>>>>>
>>>>> The board should include omap36xx.dtsi at least based on the boot log:
>>>>>
>>>>> [    0.000000] OMAP3630 ES1.2 (l2cache iva sgx neon isp 192mhz_clk )
>>>>>
>>>>
>>>> The problem is that the Overo (processor card on the Tobi extension
>>>> board) can have a variety of processor depending on the exact model:
>>>>
>>>> - OMAP 35xx (1st generation: Air, Earth, Fire, Sand, Tide, Water, FE)
>>>> - OMAP 3730
>>>> - AM/DM 37xx
>>>>
>>>> omap3-overo.dtsi includes omap34xx.dtsi to be compatible with the first
>>>> generation.
>>>>
>>>>
>>>> omap34xx.dtsi
>>>>        |
>>>>        -> omap3-overo.dtsi (processor card)
>>>>                   |
>>>>                   -> omap3-tobi.dtsi (expansion board)
>>>>
>>>>
>>>> What is the fundamental incompatibility here? If we have to specifically
>>>> include omap36xx for newer Overo, it will become hard to maintain as it
>>>> will double the number of Overo / expansion boards possibilities.
>>>
>>> Well, you get different board declaration inside
>>> mach-omap2/board-generic.c for omap34xx vs omap36xx.
>>>
>>> The clock data issues can be fixed by adding cpu_is_omap34xx() vs.
>>> cpu_is_omap3630() checks within the mach-omap2/io.c file, but this is
>>> probably for Tony/Kevin to comment whether we can/should do that.
>>>
>>
>> I just tested next-20140123 with an OMAP3630 ES1.2 Overo/Tobi. Changing
>> the include to omap36xx.dtsi do not fix the issue. I still get the
>> external abort on non-linefetch (full log here [1]).
>>
>
> So the issue is clearly caused by the hwmod warning just before the
> panic I think:
>
> omap_hwmod: usb_tll_hs: enabled state can only be entered from
> initialized, idle, or disabled state
>
> usb_tll_hs is thus not enabled, and we get a panic when trying to read
> the revision register
>
>          ver =  usbtll_read(tll->base, OMAP_USBTLL_REVISION);
>
> at drivers/mfd/omap-usb-tll.c:237.
>
> I do not know enough about hwmod to efficiently debug why usb_tll_hs is
> not _HWMOD_STATE_INITIALIZED before trying to enable it. Are we missing
> some DT data?

The problem is the point before this one, uart4_fck lookup fails. This 
causes the hwmod code to bail out early and not init anything after it.

I guess you are still mapping wrong clock init as it fails with uart4. 
Give the attached patch a shot and see how it behaves.

-Tero

Comments

Florian Vaussard Jan. 23, 2014, 4:35 p.m. UTC | #1
On 01/23/2014 01:27 PM, Tero Kristo wrote:
> On 01/23/2014 11:41 AM, Florian Vaussard wrote:
>>
>>
>> On 01/23/2014 10:15 AM, Florian Vaussard wrote:
>>>
>>>
>>> On 01/23/2014 10:00 AM, Tero Kristo wrote:
>>>> On 01/23/2014 10:14 AM, Florian Vaussard wrote:
>>>>> Hello,
>>>>>
>>>>> On 01/23/2014 07:23 AM, Tero Kristo wrote:
>>>>>> On 01/23/2014 03:35 AM, Kevin Hilman wrote:
>>>>>>> On Wed, Jan 22, 2014 at 4:46 PM, Kevin's boot bot
>>>>>>> <khilman@linaro.org>
>>>>>>> wrote:
>>>>>>>> Automated DT boot report for various ARM defconfigs.
>>>>>>>>
>>>>>>>>
>>>>>>>> Tree/Branch: next
>>>>>>>> Git describe: next-20140122
>>>>>>>> Failed boot tests (console logs at the end)
>>>>>>>> ===========================================
>>>>>>>>            omap3-tobi,3730storm:     FAIL:    omap2plus_defconfig
>>>>>>> [...]
>>>>>>>>            omap3-tobi,3730storm:     FAIL:    multi_v7_defconfig
>>>>>>>
>>>>>>> These OMAP3 failures are new regressions.  Full failure boot log
>>>>>>> attached.
>>>>>>> Bisected down to:
>>>>>>>
>>>>>>> cfa9667d4ac9da8b3ba2269f934ecd69ae504d39 is the first bad commit
>>>>>>> commit cfa9667d4ac9da8b3ba2269f934ecd69ae504d39
>>>>>>> Author: Tero Kristo <t-kristo@ti.com>
>>>>>>> Date:   Tue Oct 22 11:53:02 2013 +0300
>>>>>>>
>>>>>>>        ARM: OMAP2+: io: use new clock init API
>>>>>>>
>>>>>>>        clk_init is now separated to a common function which gets
>>>>>>> called
>>>>>>> for all
>>>>>>>        SoC:s, which initializes the DT clocks and calls the SoC
>>>>>>> specific
>>>>>>> clock init.
>>>>>>>
>>>>>>>        Signed-off-by: Tero Kristo <t-kristo@ti.com>
>>>>>>>        Acked-by: Tony Lindgren <tony@atomide.com>
>>>>>>>        Signed-off-by: Mike Turquette <mturquette@linaro.org>
>>>>>>>
>>>>>>> Kevin
>>>>>>>
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I think this is because the tobi board is including wrong
>>>>>> omap3-soc.dtsi
>>>>>> file (omap34xx.dtsi) through omap3-overo.dtsi.
>>>>>>
>>>>>> The board should include omap36xx.dtsi at least based on the boot
>>>>>> log:
>>>>>>
>>>>>> [    0.000000] OMAP3630 ES1.2 (l2cache iva sgx neon isp 192mhz_clk )
>>>>>>
>>>>>
>>>>> The problem is that the Overo (processor card on the Tobi extension
>>>>> board) can have a variety of processor depending on the exact model:
>>>>>
>>>>> - OMAP 35xx (1st generation: Air, Earth, Fire, Sand, Tide, Water, FE)
>>>>> - OMAP 3730
>>>>> - AM/DM 37xx
>>>>>
>>>>> omap3-overo.dtsi includes omap34xx.dtsi to be compatible with the
>>>>> first
>>>>> generation.
>>>>>
>>>>>
>>>>> omap34xx.dtsi
>>>>>        |
>>>>>        -> omap3-overo.dtsi (processor card)
>>>>>                   |
>>>>>                   -> omap3-tobi.dtsi (expansion board)
>>>>>
>>>>>
>>>>> What is the fundamental incompatibility here? If we have to
>>>>> specifically
>>>>> include omap36xx for newer Overo, it will become hard to maintain
>>>>> as it
>>>>> will double the number of Overo / expansion boards possibilities.
>>>>
>>>> Well, you get different board declaration inside
>>>> mach-omap2/board-generic.c for omap34xx vs omap36xx.
>>>>
>>>> The clock data issues can be fixed by adding cpu_is_omap34xx() vs.
>>>> cpu_is_omap3630() checks within the mach-omap2/io.c file, but this is
>>>> probably for Tony/Kevin to comment whether we can/should do that.
>>>>
>>>
>>> I just tested next-20140123 with an OMAP3630 ES1.2 Overo/Tobi. Changing
>>> the include to omap36xx.dtsi do not fix the issue. I still get the
>>> external abort on non-linefetch (full log here [1]).
>>>
>>
>> So the issue is clearly caused by the hwmod warning just before the
>> panic I think:
>>
>> omap_hwmod: usb_tll_hs: enabled state can only be entered from
>> initialized, idle, or disabled state
>>
>> usb_tll_hs is thus not enabled, and we get a panic when trying to read
>> the revision register
>>
>>          ver =  usbtll_read(tll->base, OMAP_USBTLL_REVISION);
>>
>> at drivers/mfd/omap-usb-tll.c:237.
>>
>> I do not know enough about hwmod to efficiently debug why usb_tll_hs is
>> not _HWMOD_STATE_INITIALIZED before trying to enable it. Are we missing
>> some DT data?
> 
> The problem is the point before this one, uart4_fck lookup fails. This
> causes the hwmod code to bail out early and not init anything after it.
> 
> I guess you are still mapping wrong clock init as it fails with uart4.
> Give the attached patch a shot and see how it behaves.
> 

Ok, so with your patch and changing the include from omap34xx to
omap36xx, it works. Now I have to come up with a way to manage all the
versions without duplicating all the DT files :-(

Regards,

Florian

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Nishanth Menon Jan. 23, 2014, 5:33 p.m. UTC | #2
On 01/23/2014 10:35 AM, Florian Vaussard wrote:
> 

[..]
> 
> Ok, so with your patch and changing the include from omap34xx to
> omap36xx, it works. Now I have to come up with a way to manage all the
> versions without duplicating all the DT files :-(

you'd also want to be careful about the omap3_pmx_core2 Vs
omap3_pmx_core2 split for padconf.

options that come to mind are:
a) split omap3-overo.dtsi into omap3-overo-common.dtsi
omap3-overo-34xx.dtsi,omap3-overo-36xx.dtsi, corresponding tobi board
dts file include as needed
b) only have common stuff in omap3-overo.dtsi, include omap34xx.dtsi
or omap36xx.dtsi in corresponding tobi board dts.
Tony Lindgren Jan. 23, 2014, 5:35 p.m. UTC | #3
* Florian Vaussard <florian.vaussard@epfl.ch> [140123 08:37]:
> On 01/23/2014 01:27 PM, Tero Kristo wrote:
> >>>>>
> >>>>> The problem is that the Overo (processor card on the Tobi extension
> >>>>> board) can have a variety of processor depending on the exact model:
> >>>>>
> >>>>> - OMAP 35xx (1st generation: Air, Earth, Fire, Sand, Tide, Water, FE)
> >>>>> - OMAP 3730
> >>>>> - AM/DM 37xx

With the legacy booting, the real problem is that board-overo.c is
trying to boot all overos with just one machine ID. Tero's patch works
around that issue for legacy booting, but maybe it's best to do the SoC
detection in the board-*.c files in init_early as needed rather than
patch all the board-*.c files.

Sounds like we need to do the same for legacy booting for the original
beagle as well?

> Ok, so with your patch and changing the include from omap34xx to
> omap36xx, it works. Now I have to come up with a way to manage all the
> versions without duplicating all the DT files :-(

Yeah there's no quick fix here that's suitable in the long run. The
proper fix is to have minimal SoC specific .dts files for the
supported overo variants that include the common board specific
.dtsi file(s).

We did a similar thing recently for the compulab variants, see
commit 0f0cfc69547e (ARM: dts: Add support for sbc-3xxx with cm-t3730)
for example. Also take a look at the follo-up patches posted to
the mailing list.

With device tree based booting we don't want to build data into the
kernel for all the SoC variants for things like clocks, pinctrl and
hwmod. And we already need to define SoC specific things in the .dts
files for pinctrl with clocks and hwmod heading that way too, so
relying on the built-in kernel data won't work in the long run.

If we really wanted to, we could set some devices to disabled state
in the bootloader or in the kernel and rely on the SoC detection. But
then we're back to building all the data into the kernel. And we
won't be able to boot new SoC variants with just .dts changes in
the long run like device tree is supposed to do.

Regards,

Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Tony Lindgren Jan. 24, 2014, 6 p.m. UTC | #4
* Tony Lindgren <tony@atomide.com> [140123 09:37]:
> * Florian Vaussard <florian.vaussard@epfl.ch> [140123 08:37]:
> > On 01/23/2014 01:27 PM, Tero Kristo wrote:
> > >>>>>
> > >>>>> The problem is that the Overo (processor card on the Tobi extension
> > >>>>> board) can have a variety of processor depending on the exact model:
> > >>>>>
> > >>>>> - OMAP 35xx (1st generation: Air, Earth, Fire, Sand, Tide, Water, FE)
> > >>>>> - OMAP 3730
> > >>>>> - AM/DM 37xx
> 
> With the legacy booting, the real problem is that board-overo.c is
> trying to boot all overos with just one machine ID. Tero's patch works
> around that issue for legacy booting, but maybe it's best to do the SoC
> detection in the board-*.c files in init_early as needed rather than
> patch all the board-*.c files.
> 
> Sounds like we need to do the same for legacy booting for the original
> beagle as well?

Looks like the beagle boards are OK as for legacy booting we're
seeting omap_clk_soc_init = omap3xxx_clk_init. And for DT based booting
we have separate omap3-beagle.dts and omap3-beagle-xm.dts that include
omap34xx.dtsi and omap36xx.dtsi respectively.

So it seems that only the over .dts files need to be fixed.
 
> > Ok, so with your patch and changing the include from omap34xx to
> > omap36xx, it works. Now I have to come up with a way to manage all the
> > versions without duplicating all the DT files :-(
> 
> Yeah there's no quick fix here that's suitable in the long run. The
> proper fix is to have minimal SoC specific .dts files for the
> supported overo variants that include the common board specific
> .dtsi file(s).
> 
> We did a similar thing recently for the compulab variants, see
> commit 0f0cfc69547e (ARM: dts: Add support for sbc-3xxx with cm-t3730)
> for example. Also take a look at the follo-up patches posted to
> the mailing list.
> 
> With device tree based booting we don't want to build data into the
> kernel for all the SoC variants for things like clocks, pinctrl and
> hwmod. And we already need to define SoC specific things in the .dts
> files for pinctrl with clocks and hwmod heading that way too, so
> relying on the built-in kernel data won't work in the long run.
> 
> If we really wanted to, we could set some devices to disabled state
> in the bootloader or in the kernel and rely on the SoC detection. But
> then we're back to building all the data into the kernel. And we
> won't be able to boot new SoC variants with just .dts changes in
> the long run like device tree is supposed to do.
> 
> Regards,
> 
> Tony
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Florian Vaussard Jan. 24, 2014, 8:37 p.m. UTC | #5
Hi,

On 01/23/2014 06:33 PM, Nishanth Menon wrote:
> On 01/23/2014 10:35 AM, Florian Vaussard wrote:
>>
> 
> [..]
>>
>> Ok, so with your patch and changing the include from omap34xx to
>> omap36xx, it works. Now I have to come up with a way to manage all the
>> versions without duplicating all the DT files :-(
> 
> you'd also want to be careful about the omap3_pmx_core2 Vs
> omap3_pmx_core2 split for padconf.
> 

Yes, I know that this is another problematic point. I guess that I will
end up splitting all 34xx-specific and 36xx-specific parts into
dedicated files. Unless I can figure out a way to magically compute the
offset inside the pinctrl domain, but I doubt. I will try to contain the
omap3_pmx_core2 pins to omap3-overo, away from the expansion boards.

> options that come to mind are:
> a) split omap3-overo.dtsi into omap3-overo-common.dtsi
> omap3-overo-34xx.dtsi,omap3-overo-36xx.dtsi, corresponding tobi board
> dts file include as needed
> b) only have common stuff in omap3-overo.dtsi, include omap34xx.dtsi
> or omap36xx.dtsi in corresponding tobi board dts.
> 

Yes, both are an option. I don't know if b) can work, as
omap3-overo.dtsi maybe depends on features declared in omap3yxx.dtsi (to
be verified).

The main problem with both options is that Tobi is not the only
expansion board (the only mainlined for now). I sent patches for other
expansion boards a couple of days ago [1], so at the end we may have ~10
boards if you count only Gumstix's boards, not to mention the boards
from other people (like me). So finally, we will double the number of
dts files just to support both variants. I hope that Gumstix will not
produce a third version of the Overo.

Maybe I can use dt overlay for the expansion boards, like what is done
for capes with beaglebone. The expansion board's overlay could be
applied to the correct Overo dtb at runtime, like what is done from the
hardware's point of view.

I am not familiar with overlays, but from my rapid analysis, the main
difference is: cape's overlay is fused by the userspace when the kernel
has booted, whereas Overo's expansion boards must be fused early in the
boot process (or by the bootloader), as they provide some essential
services, like the primary NIC. I need more time to explore the
feasibility of this solution.

Regards,

Florian

[1] http://thread.gmane.org/gmane.linux.ports.arm.omap/109589
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Florian Vaussard Jan. 24, 2014, 8:51 p.m. UTC | #6
On 01/23/2014 06:35 PM, Tony Lindgren wrote:
> * Florian Vaussard <florian.vaussard@epfl.ch> [140123 08:37]:
>> On 01/23/2014 01:27 PM, Tero Kristo wrote:
>>>>>>>
>>>>>>> The problem is that the Overo (processor card on the Tobi extension
>>>>>>> board) can have a variety of processor depending on the exact model:
>>>>>>>
>>>>>>> - OMAP 35xx (1st generation: Air, Earth, Fire, Sand, Tide, Water, FE)
>>>>>>> - OMAP 3730
>>>>>>> - AM/DM 37xx
> 
> With the legacy booting, the real problem is that board-overo.c is
> trying to boot all overos with just one machine ID. Tero's patch works
> around that issue for legacy booting, but maybe it's best to do the SoC
> detection in the board-*.c files in init_early as needed rather than
> patch all the board-*.c files.
> 
> Sounds like we need to do the same for legacy booting for the original
> beagle as well?
> 
>> Ok, so with your patch and changing the include from omap34xx to
>> omap36xx, it works. Now I have to come up with a way to manage all the
>> versions without duplicating all the DT files :-(
> 
> Yeah there's no quick fix here that's suitable in the long run. The
> proper fix is to have minimal SoC specific .dts files for the
> supported overo variants that include the common board specific
> .dtsi file(s).
> 
> We did a similar thing recently for the compulab variants, see
> commit 0f0cfc69547e (ARM: dts: Add support for sbc-3xxx with cm-t3730)
> for example. Also take a look at the follo-up patches posted to
> the mailing list.
> 

I agree with your approach. But in my case, I have N x M combinations (N
Overo variants, M expansion boards). Currently we have something like 2
x 10, so having ~20 dts files (not counting all the common dtsi files)
will start to get really messy. And this will only get worst as time
goes by (more expansion boards, and maybe other pin-compatible Overo).

> With device tree based booting we don't want to build data into the
> kernel for all the SoC variants for things like clocks, pinctrl and
> hwmod. And we already need to define SoC specific things in the .dts
> files for pinctrl with clocks and hwmod heading that way too, so
> relying on the built-in kernel data won't work in the long run.
> 
> If we really wanted to, we could set some devices to disabled state
> in the bootloader or in the kernel and rely on the SoC detection. But
> then we're back to building all the data into the kernel. And we
> won't be able to boot new SoC variants with just .dts changes in
> the long run like device tree is supposed to do.
> 

Data must by in the dts file, but what is needed is a mechanism similar
to the hardware connector: the Overo's dts should be combined with the
expansion board's dts (at runtime, or offline). Overlays seem a good
candidate, but I have no experience with them. As I said to Nishanth in
the other thread, overlays are fused by the userspace in the case of
BeagleBone AFAIK. But I need them early in the boot process (otherwise,
no NIC, thus no NFS or similar goodies). I need to think more on this.

Regards,

Florian
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

From b42055fb5c1712348a757d766dbd7c09140cfe66 Mon Sep 17 00:00:00 2001
From: Tero Kristo <t-kristo@ti.com>
Date: Thu, 23 Jan 2014 14:24:57 +0200
Subject: [PATCH] ARM: OMAP3: change all omap3 boards to use common early_init

early_init now checks the cpu type for the corresponding clock init
function. Mainly needed by the overo board which can have almost
any OMAP3 subtype installed on it.

Signed-off-by: Tero Kristo <t-kristo@ti.com>
---
 arch/arm/mach-omap2/board-3430sdp.c        |    2 +-
 arch/arm/mach-omap2/board-am3517crane.c    |    2 +-
 arch/arm/mach-omap2/board-am3517evm.c      |    2 +-
 arch/arm/mach-omap2/board-cm-t35.c         |    4 ++--
 arch/arm/mach-omap2/board-cm-t3517.c       |    2 +-
 arch/arm/mach-omap2/board-devkit8000.c     |    2 +-
 arch/arm/mach-omap2/board-generic.c        |    8 +++----
 arch/arm/mach-omap2/board-ldp.c            |    2 +-
 arch/arm/mach-omap2/board-omap3logic.c     |    4 ++--
 arch/arm/mach-omap2/board-omap3pandora.c   |    2 +-
 arch/arm/mach-omap2/board-omap3stalker.c   |    2 +-
 arch/arm/mach-omap2/board-omap3touchbook.c |    2 +-
 arch/arm/mach-omap2/board-overo.c          |    2 +-
 arch/arm/mach-omap2/board-rx51.c           |    2 +-
 arch/arm/mach-omap2/io.c                   |   35 +++++++---------------------
 15 files changed, 27 insertions(+), 46 deletions(-)

diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
index d95d0ef..a1a5413 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -623,7 +623,7 @@  MACHINE_START(OMAP_3430SDP, "OMAP3430 3430SDP board")
 	.atag_offset	= 0x100,
 	.reserve	= omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= omap3430_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap_3430sdp_init,
diff --git a/arch/arm/mach-omap2/board-am3517crane.c b/arch/arm/mach-omap2/board-am3517crane.c
index 0d499a1..d44f029 100644
--- a/arch/arm/mach-omap2/board-am3517crane.c
+++ b/arch/arm/mach-omap2/board-am3517crane.c
@@ -140,7 +140,7 @@  MACHINE_START(CRANEBOARD, "AM3517/05 CRANEBOARD")
 	.atag_offset	= 0x100,
 	.reserve	= omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= am35xx_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= am3517_crane_init,
diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c
index 543d9a8..22ce07f 100644
--- a/arch/arm/mach-omap2/board-am3517evm.c
+++ b/arch/arm/mach-omap2/board-am3517evm.c
@@ -369,7 +369,7 @@  MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM")
 	.atag_offset	= 0x100,
 	.reserve	= omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= am35xx_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= am3517_evm_init,
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
index 8dd0ec8..5296dd0 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -748,7 +748,7 @@  MACHINE_START(CM_T35, "Compulab CM-T35")
 	.atag_offset	= 0x100,
 	.reserve	= omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= omap35xx_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= cm_t35_init,
@@ -761,7 +761,7 @@  MACHINE_START(CM_T3730, "Compulab CM-T3730")
 	.atag_offset	= 0x100,
 	.reserve	= omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= omap3630_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= cm_t3730_init,
diff --git a/arch/arm/mach-omap2/board-cm-t3517.c b/arch/arm/mach-omap2/board-cm-t3517.c
index 4eb5e6f..37d8577 100644
--- a/arch/arm/mach-omap2/board-cm-t3517.c
+++ b/arch/arm/mach-omap2/board-cm-t3517.c
@@ -327,7 +327,7 @@  MACHINE_START(CM_T3517, "Compulab CM-T3517")
 	.atag_offset	= 0x100,
 	.reserve        = omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= am35xx_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= cm_t3517_init,
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c
index cdc4fb9..4836c19 100644
--- a/arch/arm/mach-omap2/board-devkit8000.c
+++ b/arch/arm/mach-omap2/board-devkit8000.c
@@ -645,7 +645,7 @@  MACHINE_START(DEVKIT8000, "OMAP3 Devkit8000")
 	.atag_offset	= 0x100,
 	.reserve	= omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= omap35xx_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= devkit8000_init,
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
index 8d972ff1..d1d211f 100644
--- a/arch/arm/mach-omap2/board-generic.c
+++ b/arch/arm/mach-omap2/board-generic.c
@@ -85,7 +85,7 @@  static const char *omap3_boards_compat[] __initdata = {
 DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)")
 	.reserve	= omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= omap3430_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap_intc_of_init,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap_generic_init,
@@ -103,7 +103,7 @@  static const char *omap36xx_boards_compat[] __initdata = {
 DT_MACHINE_START(OMAP36XX_DT, "Generic OMAP36xx (Flattened Device Tree)")
 	.reserve	= omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= omap3630_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap_intc_of_init,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap_generic_init,
@@ -122,7 +122,7 @@  static const char *omap3_gp_boards_compat[] __initdata = {
 DT_MACHINE_START(OMAP3_GP_DT, "Generic OMAP3-GP (Flattened Device Tree)")
 	.reserve	= omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= omap3430_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap_intc_of_init,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap_generic_init,
@@ -140,7 +140,7 @@  static const char *am3517_boards_compat[] __initdata = {
 DT_MACHINE_START(AM3517_DT, "Generic AM3517 (Flattened Device Tree)")
 	.reserve	= omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= am35xx_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap_intc_of_init,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap_generic_init,
diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c
index 44a59c3..6534c4a 100644
--- a/arch/arm/mach-omap2/board-ldp.c
+++ b/arch/arm/mach-omap2/board-ldp.c
@@ -420,7 +420,7 @@  MACHINE_START(OMAP_LDP, "OMAP LDP board")
 	.atag_offset	= 0x100,
 	.reserve	= omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= omap3430_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap_ldp_init,
diff --git a/arch/arm/mach-omap2/board-omap3logic.c b/arch/arm/mach-omap2/board-omap3logic.c
index bab51e6..0b942c4 100644
--- a/arch/arm/mach-omap2/board-omap3logic.c
+++ b/arch/arm/mach-omap2/board-omap3logic.c
@@ -228,7 +228,7 @@  MACHINE_START(OMAP3_TORPEDO, "Logic OMAP3 Torpedo board")
 	.atag_offset	= 0x100,
 	.reserve	= omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= omap35xx_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap3logic_init,
@@ -241,7 +241,7 @@  MACHINE_START(OMAP3530_LV_SOM, "OMAP Logic 3530 LV SOM board")
 	.atag_offset	= 0x100,
 	.reserve	= omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= omap35xx_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap3logic_init,
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c
index de1bc6b..bf256ed 100644
--- a/arch/arm/mach-omap2/board-omap3pandora.c
+++ b/arch/arm/mach-omap2/board-omap3pandora.c
@@ -620,7 +620,7 @@  MACHINE_START(OMAP3_PANDORA, "Pandora Handheld Console")
 	.atag_offset	= 0x100,
 	.reserve	= omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= omap35xx_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap3pandora_init,
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c
index 119efaf..d7245e3 100644
--- a/arch/arm/mach-omap2/board-omap3stalker.c
+++ b/arch/arm/mach-omap2/board-omap3stalker.c
@@ -428,7 +428,7 @@  MACHINE_START(SBC3530, "OMAP3 STALKER")
 	/* Maintainer: Jason Lam -lzg@ema-tech.com */
 	.atag_offset		= 0x100,
 	.map_io			= omap3_map_io,
-	.init_early		= omap35xx_init_early,
+	.init_early		= omap3_init_early,
 	.init_irq		= omap3_init_irq,
 	.handle_irq		= omap3_intc_handle_irq,
 	.init_machine		= omap3_stalker_init,
diff --git a/arch/arm/mach-omap2/board-omap3touchbook.c b/arch/arm/mach-omap2/board-omap3touchbook.c
index 7da48bc..8385192 100644
--- a/arch/arm/mach-omap2/board-omap3touchbook.c
+++ b/arch/arm/mach-omap2/board-omap3touchbook.c
@@ -386,7 +386,7 @@  MACHINE_START(TOUCHBOOK, "OMAP3 touchbook Board")
 	.atag_offset	= 0x100,
 	.reserve	= omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= omap3430_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= omap3_touchbook_init,
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
index f6d3841..c3c2a7f 100644
--- a/arch/arm/mach-omap2/board-overo.c
+++ b/arch/arm/mach-omap2/board-overo.c
@@ -562,7 +562,7 @@  MACHINE_START(OVERO, "Gumstix Overo")
 	.atag_offset	= 0x100,
 	.reserve	= omap_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= omap35xx_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= overo_init,
diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c
index db168c9..0ca29b9 100644
--- a/arch/arm/mach-omap2/board-rx51.c
+++ b/arch/arm/mach-omap2/board-rx51.c
@@ -132,7 +132,7 @@  MACHINE_START(NOKIA_RX51, "Nokia RX-51 board")
 	.atag_offset	= 0x100,
 	.reserve	= rx51_reserve,
 	.map_io		= omap3_map_io,
-	.init_early	= omap3430_init_early,
+	.init_early	= omap3_init_early,
 	.init_irq	= omap3_init_irq,
 	.handle_irq	= omap3_intc_handle_irq,
 	.init_machine	= rx51_init,
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c
index b8097fe..fa9919d 100644
--- a/arch/arm/mach-omap2/io.c
+++ b/arch/arm/mach-omap2/io.c
@@ -483,34 +483,15 @@  void __init omap3_init_early(void)
 	omap3xxx_hwmod_init();
 	omap_hwmod_init_postsetup();
 	omap_clk_soc_init = omap3xxx_clk_init;
-}
-
-void __init omap3430_init_early(void)
-{
-	omap3_init_early();
-	if (of_have_populated_dt())
-		omap_clk_soc_init = omap3430_dt_clk_init;
-}
-
-void __init omap35xx_init_early(void)
-{
-	omap3_init_early();
-	if (of_have_populated_dt())
-		omap_clk_soc_init = omap3430_dt_clk_init;
-}
-
-void __init omap3630_init_early(void)
-{
-	omap3_init_early();
-	if (of_have_populated_dt())
-		omap_clk_soc_init = omap3630_dt_clk_init;
-}
 
-void __init am35xx_init_early(void)
-{
-	omap3_init_early();
-	if (of_have_populated_dt())
-		omap_clk_soc_init = am35xx_dt_clk_init;
+	if (of_have_populated_dt()) {
+		if (soc_is_am35xx())
+			omap_clk_soc_init = am35xx_dt_clk_init;
+		else if (cpu_is_omap3630())
+			omap_clk_soc_init = omap3630_dt_clk_init;
+		else if (cpu_is_omap34xx())
+			omap_clk_soc_init = omap3430_dt_clk_init;
+	}
 }
 
 void __init ti81xx_init_early(void)
-- 
1.7.9.5