[U-Boot] Latest u-boot release on BeagleBone Black for FreeBSD
Ian Lepore
ian at FreeBSD.org
Wed May 7 16:15:20 CEST 2014
On Wed, 2014-05-07 at 10:09 +0800, Xuebing Wang wrote:
> On 05/04/2014 07:33 PM, Jeroen Hofstee wrote:
> > Hello Xuebing, (freebsd-arm added on cc),
> >
> > On di, 2014-04-08 at 16:52 +0800, Xuebing Wang wrote:
> >> Hi u-boot community,
> >>
> >> I am trying to port u-boot (release u-boot-2014.04-rc3.tar.bz2) to
> >> FreeBSD on BeagleBone Black.
> >>
> >> In FreeBSD, there is a u-boot loader (named ubldr), which can call
> >> u-boot API to get fdt (Flat Device Tree) data.
> >>
> >> I have to comment out below 3 lines, in order to get correct fdt data in
> >> FreeBSD ubldr from u-boot. Would you please advice what is the best way
> >> to fix this?
> >>
> >> In file common/env_common.c:
> >> const uchar *env_get_addr(int index)
> >> {
> >> // if (gd->env_valid)
> >> // return (uchar *)(gd->env_addr + index);
> >> // else
> >> return &default_environment[index];
> >> }
> >>
> > Assuming that you checked that your environment is valid you might be
> > facing the fact that the gd pointer is corrupted. gd is a pointer to the
> > "global data" and used for storing globals which are available before
> > and after relocation. On (32bit) ARM this value used to be stored in
> > register r8 but moved to r9 (llvm cannot reserve an arbitrary register,
> > but can reserve r9 for platform specific usage). If ubldr uses r9 you
> > end up with a invalid gd pointer when calling back into u-boot. ubldr
> > now reserves r8 and r9 so a recent version should work fine on an older
> > U-boot as well as current master.
> >
> > Can you check the latest ubldr?
>
> Hi Jeroen,
>
> Thanks for your response.
>
> 1) Today, I tested ubldr in the snapshot build
> FreeBSD-11.0-CURRENT-arm-armv6-BEAGLEBONE-20140428-r265054.img.bz2
> without commenting out those 3 lines, I still can not get "fdt ls" in
> ubldr command line.
>
> After commenting out those 3 lines and rebuild u-boot, I can get "fdt
> ls" in ubldr command line.
>
> Note: All my previous test was based on
> FreeBSD-11.0-CURRENT-arm-armv6-BEAGLEBONE-20140323-r263665.img.bz2
>
> 2) Would you please point to me which revision that reserves both r8 and r9?
>
>
> Thanks.
>
>
> > Regards,
> > Jeroen
> >
> >
> >
>
I think you should be debugging this from the ubldr side. If 'fdt ls'
fails to load the dtb when the u-boot global env is present, then what
we need to know is what result is being returned when ubldr looks up the
fdtaddr and/or fdt_addr variables. Does it get an address for the dtb
at all? Is the address invalid? Is it valid but it points to something
that doesn't look like a valid dtb header?
-- Ian
More information about the U-Boot
mailing list