I didn't just place code at 2000h. It wouldn't work. I had also to modify 
U-Boot SPL to make it load U-Boot Proper from specific address:

CONFIG_SYS_NAND_U_BOOT_OFFS=0x802000
CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND=0x802000

These lines in .config are crucial (as rebuilding U-Boot SPL with them).
On Tuesday, 5 April 2022 at 00:21:44 UTC+3 ku...@szczodrzynski.pl wrote:

>
> I can confirm that this works (the method for running SPL as Boot0).
>
> I've researched this a bit further and I know the reason for why that 
> modification helps. When flashing with LiveSuit, the updater binaries 
> (update_boot0.axf and update_boot1.axf) first grab the images to RAM, then 
> parse their headers, check the checksum. Then, a part of the header called 
> "storage data" is populated with data received from some other part of the 
> updating process (possibly another .axf file, maybe related to 
> configuration of the sys_config.fex). Boot0 and Boot1 have that part at 
> 0x1C8 and 0x81D0 offset, respectively. Considering that U-Boot SPL doesn't 
> have the entire eGON header and it starts at 0x60, the updater is 
> overwriting part of SPL code - thus resulting in a corrupted firmware. As 
> for U-Boot as Boot1, it overwrites code at 0x81D0. You have placed the code 
> at 0x2000, so my guess is that you still have some part in the firmware 
> overwritten. Maybe it just works by accident.
>
> Anyways, I'm currently working on a binary-patched updater image, that 
> will allow to flash Boot1 without any 0-byte padding, straight from U-Boot 
> mainline. It won't even need an eGON header and will ignore the checksum. 
> After that, I'll probably also patch the Boot0 updater not to overwrite 
> anything, making it possible to just grab the SPL and flash it.
>
> poniedziałek, 4 kwietnia 2022 o 11:42:07 UTC+2 Daft Soft napisał(a):
>
>> Hi, all!
>> So, I have the complete solution to make A20 boot from NAND (SPL, U-Boot) 
>> + 
>> SATA (DTB, Kernel, RootFS). This is to exclude SD-Card from boot process.
>>
>> First part is a20_nand branch from U-Boot from 
>> https://gitlab.com/m.motyl83/u-boot.git <http://U-Boot>
>>
>> NB!
>> a20_nand branch is crucial
>>
>> This will make appropriate SPL (spl/sunxi-spl.bin), which can be loaded 
>> to 
>> NAND via FEX and will boot.
>>
>> At this moment we have one problem: we have no U-Boot proper prepared for 
>> flashing via FEX (u-boot-dtb.bin will be rejected as file with wrong 
>> signature).
>> U-Boot does not build U-Boot proper with SUNXI eGON.BT1 signature at all. 
>>
>> So I've modified original mksunxi hosttool from U-Boot (source file 
>> included).
>> It places correct signature to header of image followed by U-Boot proper 
>> code.
>>
>> eGON.BT signatures start from ARM "B" instruction (4 bytes - instruction 
>> opcode 
>> and address to branch to).
>> Original mksunxi calculates this "branch" instruction (address) to jump 
>> over 
>> eGON header. For Boot0 it works perfectly (because it is standard offset 
>> which 
>> is used in any Boot0 image by BROM - be it proprietary Boot0 or U-Boot 
>> SPL). 
>> But not for Boot1...
>>
>> I don't know where IP (instruction pointer) points to when SPL loads 
>> U-Boot 
>> proper and tries to "jump" (speaking in terms of x86) to it. So, I didn't 
>> know how to calculate address of this instruction.
>> But we know that U-Boot proper code works when SPL jumps right to it 
>> (this is proved by inspecting u-boot-sunxi-with-spl.bin and playing with 
>> loading images via USB-FEL).
>>
>> Thus I've modified generation of Boot1 image - it places U-Boot proper 
>> code with some constant offset (2000h, filled with zeroes).
>> (Also we need to make more space in SUN4I_SRAM_SIZE, because it is Boot1 
>> - 
>> it is larger than Boot0).
>>
>> Next step is to modify config. We need to tell SPL to load U-Boot proper 
>> from specific offset (avoiding BROM signature and "B" instruction - it 
>> will 
>> not read it from NAND at all).
>> This lines are:
>>
>> CONFIG_SYS_NAND_U_BOOT_OFFS=0x802000
>> CONFIG_SYS_NAND_U_BOOT_OFFS_REDUND=0x802000
>>
>> (These lines are for SPL, so you need to rebuild it to work with U-Boot 
>> proper 
>> which is generated by modified mksunxi).
>>
>> After all this we can use modified mksunxi (I call it mksunxi-bt1) to 
>> build 
>> Boot1 image which contains signature, correctly placed U-Boot proper 
>> code, 
>> can be flashed via FEX and started by SPL (with modified "U-Boot Offs").
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
To view this discussion on the web, visit 
https://groups.google.com/d/msgid/linux-sunxi/44fe1465-7d30-4b45-bbe2-a4a2b36526dbn%40googlegroups.com.

Reply via email to