[U-Boot] [PATCH 2/9] sunxi: Move SPL s_init() code to board_init_f()

Simon Glass sjg at chromium.org
Sun Feb 1 17:29:53 CET 2015


Hi,

On 30 January 2015 at 10:53, Siarhei Siamashka
<siarhei.siamashka at gmail.com> wrote:
> On Mon, 29 Dec 2014 09:15:36 -0700
> Simon Glass <sjg at chromium.org> wrote:
>
>> Hi Ian,
>>
>> On 28 December 2014 at 02:19, Ian Campbell <ijc at hellion.org.uk> wrote:
>> > On Tue, 2014-12-23 at 12:04 -0700, Simon Glass wrote:
>> >
>> >> +void board_init_f(ulong dummy)
>> >> +{
>> > [...]
>> >> +     /* Clear the BSS. */
>> >> +     memset(__bss_start, 0, __bss_end - __bss_start);
>> >> +
>> >> +     board_init_r(NULL, 0);
>> >
>> > The previous (__weak) version of board_init_f also sets gd, which you've
>> > also removed from s_init here and not added back anywhere (indeed, this
>> > is the point...). But where is gd initialised now?
>>
>> It's still in start.S, I've just removed this duplicate.
>>
>> >
>> > The patch generally looks good, two quick questions: has it been tested
>> > in both FEL and regular mode, and has it been tested with a "legacy" as
>> > well as a driver model system? (I might be able to find time in a day or
>> > two to answer these myself, but for now I'll just ask).
>>
>> I haven't tried FEL, I only just heard of it in your email. I'll see
>> if I can figure out how to test that.
>
> Just like Ian suspected, this patch has messed up the FEL boot mode
> support.
>
> In a nutshell, FEL is a special USB protocol (accessible on a USB OTG
> connector), which is implemented by the boot ROM and activated by
> holding a special hardware button pressed and rebooting the device.
> FEL supports commands to read/write device RAM and execute code on
> the device. It is designed for device unbricking and firmware recovery.

If I understand it correctly, this is the same function that is
available on Exynos5, Tegra, MX6 and probably others.

>
> In particular, the FEL boot mode support is very useful for debugging
> u-boot and kernel problems on tablets (the SD card slot can be used
> for the UART console, while the system is booted over a micro-USB cable
> with the help of FEL):
>     http://linux-sunxi.org/File:MSI_Primo81_and_MicroSD_breakout.jpg
>
> In u-boot it is used in the following way:
>  1. The SPL code is uploaded from the linux PC to the device SRAM via
>     a FEL command (using the 'fel' program from sunxi-tools).
>  2. The SPL code is executed via a FEL command and expected to
>     initialize the DRAM controller. The code is executed as a
>     normal C or assembly function, which needs to return control
>     back to the BROM code when it is done. Right now this
>     function is s_init().

Isn't this just another way of loading SPL then? What is so special /
different about FEL?

>  3. As the DRAM is initialized and available now, the main u-boot
>     binary is now uploaded to DRAM via FEL. Together with boot.scr,
>     the kernel, the dtb file and optionally initramfs as needed.
>  4. The main u-boot binary is executed via a FEL command, but never
>     returns back to BROM anymore.
>
> More details are available in the linux-sunxi wiki:
>     http://linux-sunxi.org/FEL
>     http://linux-sunxi.org/FEL/Protocol
>     http://linux-sunxi.org/FEL/USBBoot
>
> I have submitted a patch to fix this regression:
>     https://patchwork.ozlabs.org/patch/434826/
>
> If you encounter problems and/or need help when testing FEL, please
> let me know.

OK I commented on that patch.

Regards,
Simon


More information about the U-Boot mailing list