bios: add romboot
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Tue, 14 Jul 2015 15:33:24 +0000 (17:33 +0200)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Tue, 14 Jul 2015 16:01:44 +0000 (18:01 +0200)
When firmware is small enough, it can be interesting to run code from an embedded blockram memory (faster and not impacted by memory controller activity).
It can also be a fallback option in case boot from flash failed.
To use this, define ROM_BOOT_ADDRESS and initialize the blockram with the firmware data.

software/bios/boot.c
software/bios/boot.h
software/bios/main.c

index b40e659834a7eff791000393158467cb3ef3b35d..54b7789945a1e6fa72a501878b5813a5eaa34e0b 100644 (file)
@@ -269,3 +269,14 @@ void flashboot(void)
        boot(0, 0, 0, MAIN_RAM_BASE);
 }
 #endif
+
+#ifdef ROM_BOOT_ADDRESS
+/* When firmware is small enough, it can be interesting to run code from an
+   embedded blockram memory (faster and not impacted by memory controller
+   activity). Define ROM_BOOT_ADDRESS for that and initialize the blockram
+   with the firmware data. */
+void romboot(void)
+{
+       boot(0, 0, 0, ROM_BOOT_ADDRESS);
+}
+#endif
index 97a30e52d1b5020180aaa603454068b1dc81adad..aa9cd88ad2757fc73846590932e2e606fe3feeff 100644 (file)
@@ -4,5 +4,6 @@
 void serialboot(void);
 void netboot(void);
 void flashboot(void);
+void romboot(void);
 
 #endif /* __BOOT_H */
index 938ebe3e95d85d478b756ff894a9ce6c8384ac11..2a9aaa98655d091a625573cf92daab77340e54f2 100644 (file)
@@ -325,6 +325,9 @@ static void help(void)
        puts("serialboot - boot via SFL");
 #ifdef FLASH_BOOT_ADDRESS
        puts("flashboot  - boot from flash");
+#endif
+#ifdef ROM_BOOT_ADDRESS
+       puts("romboot    - boot from embedded rom");
 #endif
        puts("revision   - display revision");
 #ifdef CSR_SDRAM_BASE
@@ -365,6 +368,9 @@ static void do_command(char *c)
 
 #ifdef FLASH_BOOT_ADDRESS
        else if(strcmp(token, "flashboot") == 0) flashboot();
+#endif
+#ifdef ROM_BOOT_ADDRESS
+       else if(strcmp(token, "romboot") == 0) romboot();
 #endif
        else if(strcmp(token, "serialboot") == 0) serialboot();
 #ifdef CSR_ETHMAC_BASE
@@ -506,6 +512,9 @@ static void boot_sequence(void)
        if(test_user_abort()) {
 #ifdef FLASH_BOOT_ADDRESS
                flashboot();
+#endif
+#ifdef ROM_BOOT_ADDRESS
+               romboot();
 #endif
                serialboot();
 #ifdef CSR_ETHMAC_BASE