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

Simon Glass sjg at chromium.org
Wed Feb 4 01:55:52 CET 2015


Hi,

On 2 February 2015 at 22:29, Simon Glass <sjg at chromium.org> wrote:
> Hi,
>
> On 2 February 2015 at 01:07, Hans de Goede <hdegoede at redhat.com> wrote:
>> Hi Simon, Siarhei,
>>
>> On 01-02-15 21:59, Simon Glass wrote:
>>>
>>> Hi Siarhei,
>>>
>>> On 1 February 2015 at 11:37, Siarhei Siamashka
>>> <siarhei.siamashka at gmail.com>
>>
>>
>> <snip>
>>
>>>> A comprehensive FEL usage guide is supposed to be in the linux-sunxi
>>>> wiki. But it might be not very up to date with the mainline u-boot
>>>> usage.
>>>>
>>>> Anyway, first just clone the https://github.com/linux-sunxi/sunxi-tools
>>>> repository and build it. This will provide you with the x86 binary of
>>>> the 'fel' tool, which is used on your desktop PC to talk with the
>>>> device.
>>>>
>>>> Then connect the device to your PC using a "USB A to USB mini/micro B"
>>>> cable. And reset the board while keeping the "FEL" button pressed. The
>>>> button might be labelled as "UPGRADE" on your pcduino3 board:
>>>> http://linux-sunxi.org/LinkSprite_pcDuino_V3#FEL_mode
>>>>
>>>> Then just run "fel ver" command:
>>>> http://linux-sunxi.org/FEL#Running_the_fel_tool
>>>>
>>>> If everything is fine, it should respond with something like this:
>>>> AWUSBFEX soc=00162500(A13) 00000001 ver=0001 44 08 scratchpad=00007e00
>>>> 00000000 00000000
>>>>
>>>> Now you can use "write" commands to upload data to SRAM. And "exe"
>>>> command to execute functions on the device (works as some kind of RPC):
>>>> http://linux-sunxi.org/FEL/USBBoot#Manual_loading
>>>>
>>>> As a simple test, you can upload just a single "bx lr" instruction
>>>> (compiled in ARM mode) to the address 0x2000 and try to execute it.
>>>> In the case if your code screws up something and does not return
>>>> control to the BROM correctly, then the "fel" tool can't communicate
>>>> over USB anymore and just timeouts. Regarding the address space, you
>>>> can use SRAM addresses starting from 0x2000 up to something like 0x5E00
>>>> (that's where the stack pointer is set). This was a description of a
>>>> "bare metal" FEL usage.
>>>>
>>>> Now as for the u-boot support. You can compile and run u-boot in the FEL
>>>> mode configuration on pcduino3 in the following way:
>>>>
>>>> make CROSS_COMPILE=arm-none-gnueabi- Linksprite_pcDuino3_felconfig
>>>> make CROSS_COMPILE=arm-none-gnueabi- -j2
>>>>
>>>> fel write 0x2000 spl/u-boot-spl.bin
>>>> fel exe 0x2000
>>>>
>>>> sleep 1 # Wait for DRAM initialization to complete
>>>
>>>
>>> i.e. wait for U-Boot SPL to return to the BROM?
>>>
>>>>
>>>> fel write 0x4a000000 u-boot.bin
>>>> fel exe 0x4a000000
>>>>
>>>> Please note the use of '*_felconfig' instead of '*_defconfig'.
>>>> And also right now the FEL mode support is broken. That's why the
>>>> http://lists.denx.de/pipermail/u-boot/2015-January/203282.html
>>>> patchset tried to address this problem.
>>>>
>>>
>>> OK that looks like an excellent guide, thank you. I will make some time to
>>> take a more detailed look at this as soon as I can, but definitely in the
>>> next few days.
>>
>>
>> I've been reading all threads on this, thank you both for looking into this,
>> since you're on it I'm going to leave this be (and not review / apply
>> Siarhei's patches for this), and we can revisit this later, with hopefully a
>> better fix.
>
> Thanks to Siarhei's instructions I have a working setup with pcduino3.
> One less board where I have to swap SD cards. Can I suggest that it
> would be really nice to have a README.sunxi that covers all of this?
>
> Anyway I will fiddle around and see what I can come up with.

The problem seems to be the start.S code 'Setup vector' and
cpu_init_cp15. If I remove these then FEL boots OK without all the
gdata/r9 stuff and with the rest of the boot flow normal.

I would quite like FEL to be an option you enable, but we can detect
whether it is actually being used (as with Tegra and Exynos). Perhaps
checking the value of lr will allow this to work.

I'm not sure of the best way to skip the vector/cp15 setup. For now I
can do an #ifdef but I'm wondering if we should allow
save_boot_params() to return some flags indicating what should be
skipped?

Regards,
Simon


More information about the U-Boot mailing list