
Hi,
On 30 January 2015 at 10:53, Siarhei Siamashka siarhei.siamashka@gmail.com wrote:
On Mon, 29 Dec 2014 09:15:36 -0700 Simon Glass sjg@chromium.org wrote:
Hi Ian,
On 28 December 2014 at 02:19, Ian Campbell ijc@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:
- The SPL code is uploaded from the linux PC to the device SRAM via a FEL command (using the 'fel' program from sunxi-tools).
- 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?
- 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.
- 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