[U-Boot] OMAP (4) boot_params
Albert ARIBAUD
albert.u.boot at aribaud.net
Wed Apr 3 17:34:18 CEST 2013
Hi Michael,
On Wed, 3 Apr 2013 10:59:23 -0400, Michael Cashwell
<mboards at prograde.net> wrote:
> >>>> ...Making that:
> >>>>
> >>>> u32 *boot_params_ptr __attribute__ ((section(".data")));
> >>
> >> Yes, that was my thinking too. Surely clearing data after code has set
> >> it can't be right.
> >
> > With all due respect, the documentation can with greater legitimately
> > turn your admonition around and ask that you please refrain from
> > setting BSS or data variables when the C runtime environment has not
> > been set. :)
> >
> > IOW, what is wrong here is writing to a BSS variable before you're
> > allowed to as per the rules under which your code is running.
>
> I think we're in agreement, but it's not my code doing it. The code,
> as it exists in mainline is writing early to space in bss. My change
> avoids that by moving the variable from the default bss to data:
... except, as I said above, at this point your code should not write at
all, be int in BSS or data, until the C environment is set up. So...
> diff --git a/common/spl/spl.c b/common/spl/spl.c
> index 6715e0d..1d84535
> --- a/common/spl/spl.c
> +++ b/common/spl/spl.c
> @@ -42,7 +42,7 @@ DECLARE_GLOBAL_DATA_PTR;
> #define CONFIG_SYS_MONITOR_LEN (200 * 1024)
> #endif
>
> -u32 *boot_params_ptr = NULL;
> +u32 *boot_params_ptr __attribute__ ((section(".data")));
> struct spl_image_info spl_image;
... NAK. Place this in a fixed section that you'll map somewhere else
then in BSS or data.
Also: in the future, avoid pasting a diff directly in a mail to the
u-boot list if it is not a real patch submission, as our patchwork
instance at (http://patchwork.ozlabs.org/project/uboot/list/) will get
confused and record your mail as a legitimate patch.
> /* Define board data structure */
>
> >> OK, here we have an unfortunate name overloading. The boot_params here
> >> is specifically an OMAP handoff from the CPU's internal boot ROM to SPL
> >> and then from SPL to u-boot. (The same code paths are involved.) It's
> >> totally unrelated to the the boot_params passed to the Linux kernel.
> >>
> >> Since it's confusing maybe a renaming is called for as well.
> >
> > Indeed. Plus, if it is shared data, it should definitely be mapped at a
> > fixed memory location or copied from stage to stage (the latter only if
> > the former is impossible)
>
> Yes, I'm exploring that now. The differences between SPL and U-boot are
> subtle.
Actually not that subtle once you get the hang of it: SPL and U-Boot
are built on the same code base; SPL is the minimal, non-interactive,
early boot stage which can be loaded and run by ROM code, while U-Boot
is the full-featured, interactive, too big to boot directly, stage,
which SPL can chain into.
> Best regards,
> -Mike
Amicalement,
--
Albert.
More information about the U-Boot
mailing list