[U-Boot] [PATCH 5/5] ls2080ardb: Convert to distro boot

Bhupesh Sharma bhupesh.sharma at nxp.com
Sat May 14 23:21:45 CEST 2016


Note that UEFI firmware support is already available on LS2080A-RDB and allows
Booting distributions like CentOS on the same.

Regards,
Bhupesh

> -----Original Message-----
> From: U-Boot [mailto:u-boot-bounces at lists.denx.de] On Behalf Of York
> Sun
> Sent: Saturday, May 14, 2016 1:23 AM
> To: Alexander Graf <agraf at suse.de>
> Cc: u-boot at lists.denx.de; Peter Newton <peter.newton at nxp.com>
> Subject: Re: [U-Boot] [PATCH 5/5] ls2080ardb: Convert to distro boot
> 
> On 05/13/2016 12:36 PM, Alexander Graf wrote:
> >
> >
> > On 13.05.16 19:05, York Sun wrote:
> >> On 05/13/2016 10:03 AM, Alexander Graf wrote:
> >>>
> >>>
> >>>> Am 13.05.2016 um 18:21 schrieb York Sun <york.sun at nxp.com>:
> >>>>
> >>>>> On 05/13/2016 07:32 AM, Alexander Graf wrote:
> >>>>>
> >>>>>> Am 13.05.2016 um 16:26 schrieb Stuart Yoder
> <stuart.yoder at nxp.com>:
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>> -----Original Message-----
> >>>>>>> From: Alexander Graf [mailto:agraf at suse.de]
> >>>>>>> Sent: Friday, May 13, 2016 7:22 AM
> >>>>>>> To: u-boot at lists.denx.de
> >>>>>>> Cc: Stuart Yoder <stuart.yoder at nxp.com>; york sun
> >>>>>>> <york.sun at nxp.com>
> >>>>>>> Subject: [PATCH 5/5] ls2080ardb: Convert to distro boot
> >>>>>>>
> >>>>>>> Most new systems in U-Boot these days make use of the generic
> "distro"
> >>>>>>> framework which allows a user to have U-Boot scan for a
> bootable
> >>>>>>> OS on all available media types.
> >>>>>>>
> >>>>>>> This patch converts the LS2080ARDB board to use that framework
> >>>>>>> instead of booting from a hard coded flash offset.
> >>>>>>>
> >>>>>>> Signed-off-by: Alexander Graf <agraf at suse.de>
> >>>>>>>
> >>>>>>> ---
> >>>>>>>
> >>>>>>> This obviously means that we can no longer boot from said
> >>>>>>> offset. Is that a reasonable thing to do or should I put the
> >>>>>>> bootm back into the default boot command and only do distro
> boot if it fails?
> >>>>>>
> >>>>>> To date all armv8 FSL/NXP sdk releases, field engineers, etc
> have
> >>>>>> been using bootm.  I'm a little concerned about changing the
> >>>>>> default boot command right now...as I assume things will
> >>>>>> unexpectedly appear to just stop working.  Or, is booting from
> >>>>>> the NOR flash one of the distro boot "media" types?
> >>>>>
> >>>>> The problem with boot from NOR is that we have no source of
> information on what lies where. So distro boot can't have it in its
> target list, as you have to know magical offsets.
> >>>>>
> >>>>> We could put the magical bootm after tge distro list, but that
> would mean that field engineers get pxe boot with long timeouts first
> and then their NOR bootm booted.
> >>>>>
> >>>>> So the only option left that I can see is to always try magical
> offset NOR bootm and do distro boot if it fails. Then just tell people
> to write zeros to the NOR kernel offset and they get distro boot
> automatically.
> >>>>
> >>>> Alex,
> >>>>
> >>>> I suggest to attempt current boot method before moving on to other
> >>>> sources. I presume booting from NOR would check the image header
> >>>> first. If the image is valid, go ahead to boot it. Otherwise, move
> on.
> >>>
> >>> Ok, will do.
> >>>
> >>>>
> >>>> Beside, it would be helpful to define a list and order of boot
> source.
> >>>
> >>> That's what the patch does, no? See the BOOT_TARGET_DEVICES define.
> It's probably incomplete, but describes the boot order and boot
> sources.
> >>>
> >>
> >> Yes I saw it. Would it be possible to use environmental variable for
> >> this purpose, so users can specify the list and order? If it is too
> >> complicated, we can live with the macro and recompile as needed.
> >
> > With the patches applied as is, the environment looks like this:
> >
> > => printenv
> > arch=arm
> > baudrate=115200
> > board=ls2080ardb
> > board_name=ls2080ardb
> > boot_a_script=load ${devtype} ${devnum}:${distro_bootpart}
> > ${scriptaddr} ${prefix}${script}; source ${scriptaddr}
> > boot_efi_binary=load ${devtype} ${devnum}:${distro_bootpart}
> > ${kernel_addr_r} efi/boot/bootaa64.efi; if fdt addr ${fdt_addr_r};
> > then bootefi ${kernel_addr_r} ${fdt_addr_r};elsebootefi
> > ${kernel_addr_r} ${fdtcontroladdr};fi boot_extlinux=sysboot
> ${devtype}
> > ${devnum}:${distro_bootpart} any ${scriptaddr}
> > ${prefix}extlinux/extlinux.conf boot_net_usb_start=usb start
> > boot_prefixes=/ /boot/ boot_script_dhcp=boot.scr.uimg
> > boot_scripts=boot.scr.uimg boot.scr
> > boot_targets=mmc0 scsi0 dhcp
> > bootargs=console=ttyS1,115200 root=/dev/ram0
> > earlycon=uart8250,mmio,0x21c0600 ramdisk_size=0x2000000
> > default_hugepagesz=2m hugepagesz=2m hugepages=256 bootcmd=run
> > mcinitcmd && fsl_mc lazyapply dpl 0x580700000 && setenv ethact
> > DPMAC5 at xgmii && run distro_bootcmd bootcmd_dhcp=run
> > boot_net_usb_start; if dhcp ${scriptaddr} ${boot_script_dhcp}; then
> > source ${scriptaddr}; fi;setenv efi_fdtfile ${fdtfile}; setenv
> > efi_old_vci ${bootp_vci};setenv efi_old_arch ${bootp_arch};setenv
> > bootp_vci PXEClient:Arch:00011:UNDI:003000;setenv
> > bootp_arch 0xb;if dhcp ${kernel_addr_r}; then tftpboot ${fdt_addr_r}
> > dtb/${efi_fdtfile};if fdt addr ${fdt_addr_r}; then bootefi
> > ${kernel_addr_r} ${fdt_addr_r}; else bootefi ${kernel_addr_r}
> > ${fdtcontroladdr};fi;fi;setenv bootp_vci ${efi_old_vci};setenv
> > bootp_arch ${efi_old_arch};setenv efi_fdtfile;setenv
> > efi_old_arch;setenv efi_old_vci; bootcmd_mmc0=setenv devnum 0; run
> > mmc_boot bootcmd_scsi0=setenv devnum 0; run scsi_boot
> > bootdelay=2
> > cpu=armv8
> > distro_bootcmd=setenv scsi_need_init; for target in ${boot_targets};
> > do run bootcmd_${target}; done efi_dtb_prefixes=/ /dtb/ /dtb/current/
> > ethact=DPMAC1 at xgmii
> > ethprime=DPNI1
> > fdt_addr_r=0x88000000
> > fdt_high=0xa0000000
> > fdtcontroladdr=ffcfd498
> > fdtfile=fsl-ls2080a-rdb.dtb
> > hwconfig=fsl_ddr:bank_intlv=auto
> > initrd_high=0xffffffffffffffff
> > kernel_addr=0x100000
> > kernel_addr_r=0x81000000
> > kernel_load=0xa0000000
> > kernel_size=0x2800000
> > kernel_start=0x581100000
> > load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart}
> > ${fdt_addr_r} ${prefix}${efi_fdtfile}
> > loadaddr=0x80100000
> > mcinitcmd=fsl_mc start mc 0x580300000 0x580800000 mmc_boot=if mmc dev
> > ${devnum}; then setenv devtype mmc; run scan_dev_for_boot_part; fi
> > pxefile_addr_r=0x81000000
> > ramdisk_addr=0x800000
> > ramdisk_addr_r=0x89000000
> > ramdisk_size=0x2000000
> > scan_dev_for_boot=echo Scanning ${devtype}
> > ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do
> > run scan_dev_for_extlinux; run scan_dev_for_scripts; done;run
> > scan_dev_for_efi; scan_dev_for_boot_part=part list ${devtype}
> > ${devnum} -bootable devplist; env exists devplist || setenv devplist
> > 1; for distro_bootpart in ${devplist}; do if fstype ${devtype}
> > ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_boot;
> > fi; done scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; for prefix
> in
> > ${efi_dtb_prefixes}; do if test -e ${devtype}
> > ${devnum}:${distro_bootpart} ${prefix}${efi_fdtfile}; then run
> > load_efi_dtb; fi;done;if test -e ${devtype}
> > ${devnum}:${distro_bootpart} efi/boot/bootaa64.efi; then echo Found
> > EFI removable media binary efi/boot/bootaa64.efi; run
> boot_efi_binary; echo EFI LOAD FAILED:
> > continuing...; fi; setenv efi_fdtfile
> > scan_dev_for_extlinux=if test -e ${devtype}
> > ${devnum}:${distro_bootpart} ${prefix}extlinux/extlinux.conf; then
> > echo Found ${prefix}extlinux/extlinux.conf; run boot_extlinux; echo
> SCRIPT FAILED:
> > continuing...; fi
> > scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e
> > ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo
> > Found U-Boot script ${prefix}${script}; run boot_a_script; echo
> SCRIPT
> > FAILED: continuing...; fi; done
> > scriptaddr=0x80800000
> > scsi_boot=run scsi_init; if scsi dev ${devnum}; then setenv devtype
> > scsi; run scan_dev_for_boot_part; fi scsi_init=if ${scsi_need_init};
> > then setenv scsi_need_init false; scsi scan; fi
> > scsidevs=0
> > soc=fsl-layerscape
> > stderr=serial
> > stdin=serial
> > stdout=serial
> > usb_boot=usb start; if usb dev ${devnum}; then setenv devtype usb;
> run
> > scan_dev_for_boot_part; fi vendor=freescale
> >
> > #################
> >
> > In there you can see a variable called "boot_targets" which contains
> > the values "mmc0 scsi0 dhcp".
> >
> 
> Ah, thanks. I didn't realize the macro ends up in the boot_targets.
> 
> York
> 
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot


More information about the U-Boot mailing list