From: Siarhei Siamashka <[email protected]> The SCTLR bits are somewhat different because the V bit is set to 0 on A64 (Low exception vectors, base address 0x00000000) and the UNK bit (Reads of this bit return an UNKNOWN value) is also not the same as on the other SoCs. So the SCTLR check can be relaxed.
Tested using a custom built UART0 hello world bootable image. Signed-off-by: Siarhei Siamashka <[email protected]> Reviewed-by: Bernhard Nortmann <[email protected]> --- fel.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/fel.c b/fel.c index 5b3b9c3..7506cf4 100644 --- a/fel.c +++ b/fel.c @@ -258,6 +258,7 @@ void aw_fel_print_version(libusb_device_handle *usb) case 0x1633: soc_name="A31";break; case 0x1651: soc_name="A20";break; case 0x1650: soc_name="A23";break; + case 0x1689: soc_name="A64";break; case 0x1639: soc_name="A80";break; case 0x1667: soc_name="A33";break; case 0x1673: soc_name="A83T";break; @@ -500,6 +501,16 @@ sram_swap_buffers a31_sram_swap_buffers[] = { }; /* + * A64 has a large SRAM C at 0x18000, which we use as a backup storage + * for FEL stacks. As for A80, the SPL load address is 0x10000. + */ +sram_swap_buffers a64_sram_swap_buffers[] = { + { .buf1 = 0x11800, .buf2 = 0x18000, .size = 0x800 }, + { .buf1 = 0x15C00, .buf2 = 0x18800, .size = 0x8000 - 0x5C00 }, + { .size = 0 } /* End of the table */ +}; + +/* * Use the SRAM section at 0x44000 as the backup storage. This is the memory, * which is normally shared with the OpenRISC core (should we do an extra check * to ensure that this core is powered off and can't interfere?). @@ -565,6 +576,14 @@ soc_sram_info soc_sram_info_table[] = { .sid_addr = 0x01C23800, }, { + .soc_id = 0x1689, /* Allwinner A64 */ + .spl_addr = 0x10000, + .scratch_addr = 0x11000, + .thunk_addr = 0x1AE00, .thunk_size = 0x200, + .swap_buffers = a64_sram_swap_buffers, + .sid_addr = 0x01C14200, + }, + { .soc_id = 0x1673, /* Allwinner A83T */ .scratch_addr = 0x1000, .thunk_addr = 0x46E00, .thunk_size = 0x200, @@ -930,9 +949,9 @@ uint32_t *aw_backup_and_disable_mmu(libusb_device_handle *usb, * checks needs to be relaxed). */ - /* Basically, ignore M/Z/I/V bits and expect no TEX remap */ + /* Basically, ignore M/Z/I/V/UNK bits and expect no TEX remap */ sctlr = aw_get_sctlr(usb, sram_info); - if ((sctlr & ~((0x7 << 11) | 1)) != 0x00C50078) { + if ((sctlr & ~((0x7 << 11) | (1 << 6) | 1)) != 0x00C50038) { fprintf(stderr, "Unexpected SCTLR (%08X)\n", sctlr); exit(1); } -- 2.4.10 -- 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
