[U-Boot] [PATCH V2] arm: timer and interrupt init rework
Wolfgang Denk
wd at denx.de
Sat May 2 14:50:19 CEST 2009
Dear Jean-Christophe PLAGNIOL-VILLARD,
In message <20090501232305.GI3291 at game.jcrosoft.org> you wrote:
>
> >> +COBJS += board.o
> >> +COBJS += clock.o
> >> +COBJS += mem.o
> >> +COBJS += syslib.o
> >> +COBJS += sys_info.o
> >> +COBJS += timer.o
> >
> > What do we win with this?
> simple to allow vertical patch to be applied instead of have merge problem
>
> so yes it's needed
But it must go in a separate patch.
> >> diff --git a/lib_arm/board.c b/lib_arm/board.c
> >> index 5d05d9b..b678a63 100644
> >> --- a/lib_arm/board.c
> >> +++ b/lib_arm/board.c
> >> @@ -265,8 +265,11 @@ init_fnc_t *init_sequence[] = {
> >> #if defined(CONFIG_ARCH_CPU_INIT)
> >> arch_cpu_init, /* basic arch cpu dependent setup */
> >> #endif
> >> - board_init, /* basic board dependent setup */
> >> +#if defined(CONFIG_USE_IRQ)
> >> interrupt_init, /* set up exceptions */
> >> +#endif
> >> + timer_init, /* initialize timer */
> >> + board_init, /* basic board dependent setup */
> >> env_init, /* initialize environment */
> >> init_baudrate, /* initialze baudrate settings */
> >> serial_init, /* serial communications setup */
> >
> > ... if you tested this on an OMAP3 board: I'm not sure, but it seems to
> > me that the initialization order might change by this?
> maybe read the commit message will answer your question
Argh. Instead of snippy remarks you should read Dirks message yourself
and answer his (very valid) questions:
| Is this correct? If yes, we have to check that there are no issues
| with dependencies?
|
| On which OMAP3 board have you tested this?
Can you please explain on which boards this has actually been tested,
and especially on which OMAP3 boards?
Also, I do not see why we need to implement such a critical change.
If I understand you corrctly, your argument goes that board_init()
needs delays (like udelay()), delays need timers, and timers need
interrupts, so we must initialize first interrupts, then timers, and
only then we can run board_init()? Is this your argument?
But the I ask why udelay() would need timers and interrupts? This
does not fit into the design philosophy of U-Boot, which attempts to
bring up a board at least to a state where we have serial console
output with as little as possible requirements. Your change breaks
this, because now we have to initialize timers and interrupts (which
are not exactly a trivial thing to set up or debug if they aren't
working correctly) BEFORE we have a console output. [I ignore the
case of CONFIG_USE_IRQ here, because only 4 boards actually use this
feature, and they could probably be changed to do without, too.]
So while I really appreciate your attempts to clean up the timer code
on ARM, the resulting consequences are expensive, and I am not yet
convincet the advantages of the new code are bigger than this
disadvantage, and especially I am not convinced thatthis is really
necessary and unavoidable.
Can we not do delays without interrupts? And do we need full-blown
timer services for delays? [Keep in mind that a delay is usually used
to implement a timeout in the error branch; that means, it does not
matter if it has not 10e-6 precision or better.]
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Thought for the day: What if there were no hypothetical situations?
More information about the U-Boot
mailing list