public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 1/3] ARmv7: Add a soc_init hook to start.S
Date: Mon, 26 Jan 2015 20:32:41 +0100	[thread overview]
Message-ID: <54C69659.3060500@redhat.com> (raw)
In-Reply-To: <20150126151802.GB10826@bill-the-cat>

Hi,

On 26-01-15 16:18, Tom Rini wrote:
> On Fri, Jan 23, 2015 at 09:54:12AM +0100, Hans de Goede wrote:
>> Hi,
>>
>> On 22-01-15 22:03, Tom Rini wrote:
>>> On Thu, Jan 22, 2015 at 08:10:06PM +0100, Hans de Goede wrote:
>>>> Hi,
>>>>
>>>> On 22-01-15 17:20, Tom Rini wrote:
>>>>> On Wed, Jan 21, 2015 at 09:03:25PM +0100, Hans de Goede wrote:
>>>>>
>>>>>> On some SoCs / ARMv7 CPU cores we need to do some setup before enabling the
>>>>>> icache, etc. Add a soc_init hook with a weak default which just calls
>>>>>> cpu_init_cp15.
>>>>>>
>>>>>> This way different implementations can be provided to do some extra work
>>>>>> before or after cpu_init_cp15, or completely replacing cpu_init_cp15.
>>>>>>
>>>>>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>>>>>> ---
>>>>>>   arch/arm/cpu/armv7/start.S | 18 +++++++++++++++++-
>>>>>>   1 file changed, 17 insertions(+), 1 deletion(-)
>>>>>>
>>>>>> diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S
>>>>>> index fdc05b9..9882b20 100644
>>>>>> --- a/arch/arm/cpu/armv7/start.S
>>>>>> +++ b/arch/arm/cpu/armv7/start.S
>>>>>> @@ -64,7 +64,7 @@ reset:
>>>>>>
>>>>>>   	/* the mask ROM code should have PLL and others stable */
>>>>>>   #ifndef CONFIG_SKIP_LOWLEVEL_INIT
>>>>>> -	bl	cpu_init_cp15
>>>>>> +	bl	soc_init
>>>>>>   	bl	cpu_init_crit
>>>>>>   #endif
>>>>>
>>>>> I like the direction here.  And I want to make sure I get the sunxi
>>>>> direction right here too (as I agree with the need / desire for boot0 +
>>>>> U-Boot to be a valid combination).  I think we can take this a step
>>>>> farther.  cpu_init_crit (on armv7) is basically a call to s_init().
>>>>>
>>>>> For am33xx (and I bet but need to do and test omap3+) we can, with
>>>>> Simon's patch to let us move stack to DDR a tiny bit later, in the SPL
>>>>> case make s_init empty, which just leaves us with (with your patch)
>>>>> soc_init.  Is there some way we can put all of this together in a
>>>>> function?
>>>>
>>>> You mean essentially call s_init here and have s_init call cpu_init_cp15
>>>> I guess we could do that, but it would require auditing all existing armv7
>>>> users of s_init. This may require me to rethink how / when I do timer &
>>>> gpio init etc. for u-boot.bin on sunxi, but that should not be a (big)
>>>> problem.
>>>
>>> Basically.  From my first pass audit of s_init, it's either empty
>>> (Kona), sunxi, or omap/etc so I get to deal with it.  And the default
>>> soc_init would just be the call to cpu_init_cp15 as you have it and we
>>> drop the lowlevel_init hurdles.
>>
>> Ok, so what you're suggesting is a patch which:
>>
>> 1) Changes:
>>
>> #ifndef CONFIG_SKIP_LOWLEVEL_INIT
>> 	bl	cpu_init_cp15
>>     	bl	cpu_init_crit
>> #endif
>>
>> Into:
>>
>> #ifndef CONFIG_SKIP_LOWLEVEL_INIT
>> 	bl	lowlevel_init
>> #endif
>>
>> Which will setup the stack and then call the s_init C function
>>
>> 2) Adds a weak default s_init which calls cpu_init_cp15
>>
>> 3) Patch all existing s_init functions to call cpu_init_cp15
>> before doing anything else.
>
> Pretty close.  Simon's SPL DM series and related clean-ups got me
> thinking that yes, seemingly too much got shoved into "s_init" that
> really could have been done using an existing hook done slightly later.
>
>> And then in follow up patches we can:
>>
>> 4) Drop cpu_init_crit
>>
>> 5) Cleanup some s_init functions (this will be left to the individual
>> SoC maintainers)
>>
>> I think that is a good idea, Albert what do you think about this ?
>
> So I'd like to see 5 done "soon" afterwards as it's me (omap*) and
> sunxi.  I think we can simplfy the call sequence too, to roughly:
> #ifndef CONFIG_SKIP_LOWLEVEL_INIT
>      ... Set up stack for C, it's just a few instrs
>      bl lowlevel_init
> #endif
>      bl _main
>
> __weak asm
> lowlevel_init:
>    bl cpu_init_cp15
>    return to caller
>
> And comment that anything called via lowlevel_init must be C-callable.
> I hope that once #5 is done no one actually has a lowlevel_init that's
> done in C but we've kept the door open should it be needed down the
> road (as I _think_ we can shuffle both the omap* and sunxi stuff to do
> their inits as needed in both SPL and full U-Boot from an early hook in
> board_init_r, top of my head is board_init calls some_other_func() in
> full U-Boot to ensure GPIOs, etc, on sunxi and spl_board_init() calls
> same func in SPL, and we can consolidate again further down the road as
> we get SPL and full U-Boot more in sync on the call chain).

Sounds good to me, and I'm fine with working the sunxi side of things.

Since you seem to have this all in your head can you do a patch for this
replacing my patchset ?

Regards,

Hans

  reply	other threads:[~2015-01-26 19:32 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-21 20:03 [U-Boot] [PATCH 1/3] ARmv7: Add a soc_init hook to start.S Hans de Goede
2015-01-21 20:03 ` [U-Boot] [PATCH 2/3] ARMv7: Add a cpu_init_cortex_a7 helper function Hans de Goede
2015-01-21 20:03 ` [U-Boot] [PATCH 3/3] sunxi: Switch to using soc_init hook for setting the ACTLR.SMP bit Hans de Goede
2015-02-08  5:42   ` Ian Campbell
2015-01-21 21:59 ` [U-Boot] [PATCH 1/3] ARmv7: Add a soc_init hook to start.S Bill Pringlemeir
2015-01-22 13:29   ` Hans de Goede
2015-01-22 15:48     ` Bill Pringlemeir
2015-01-22 16:20 ` Tom Rini
2015-01-22 19:10   ` Hans de Goede
2015-01-22 21:03     ` Tom Rini
2015-01-23  8:54       ` Hans de Goede
2015-01-26 15:18         ` Tom Rini
2015-01-26 19:32           ` Hans de Goede [this message]
2015-01-27 14:23             ` Tom Rini
2015-01-31 21:25               ` Albert ARIBAUD
2015-01-31 21:49                 ` Tom Rini
2015-01-31 22:14                   ` Simon Glass
2015-02-02 18:56                     ` Tom Rini
2015-02-02 19:26                       ` Simon Glass
2015-02-04  8:48                       ` Albert ARIBAUD
2015-02-05  3:00                         ` Simon Glass
2015-02-05  8:27                           ` Hans de Goede
2015-02-05 15:14                           ` Albert ARIBAUD
2015-02-05 15:34                             ` Simon Glass
2015-02-05 18:02                               ` Albert ARIBAUD
2015-02-05 19:13                                 ` Simon Glass
2015-02-10 22:07                         ` Tom Rini
2015-02-10 23:27                           ` Simon Glass
2015-01-26  8:09   ` Albert ARIBAUD
2015-01-26 10:50     ` Hans de Goede

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=54C69659.3060500@redhat.com \
    --to=hdegoede@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox