From mboxrd@z Thu Jan 1 00:00:00 1970 From: Siarhei Siamashka Date: Fri, 30 Jan 2015 19:53:18 +0200 Subject: [U-Boot] [PATCH 2/9] sunxi: Move SPL s_init() code to board_init_f() In-Reply-To: References: <1419361499-31967-1-git-send-email-sjg@chromium.org> <1419361499-31967-3-git-send-email-sjg@chromium.org> <1419758342.13595.28.camel@hellion.org.uk> Message-ID: <20150130195318.410e9dd6@i7> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Mon, 29 Dec 2014 09:15:36 -0700 Simon Glass wrote: > Hi Ian, > > On 28 December 2014 at 02:19, Ian Campbell 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. 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(). 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. -- Best regards, Siarhei Siamashka