|
|
@@ -18,7 +18,7 @@ extern "C" {
|
|
|
#include <hardware/flash.h>
|
|
|
#include "rp2040_flash_do_cmd.h"
|
|
|
|
|
|
-const char *g_azplatform_name = PLATFORM_NAME;
|
|
|
+const char *g_platform_name = PLATFORM_NAME;
|
|
|
static bool g_scsi_initiator = false;
|
|
|
static uint32_t g_flash_chip_size = 0;
|
|
|
static bool g_uart_initialized = false;
|
|
|
@@ -43,7 +43,7 @@ static void gpio_conf(uint gpio, enum gpio_function fn, bool pullup, bool pulldo
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void azplatform_init()
|
|
|
+void platform_init()
|
|
|
{
|
|
|
// Make sure second core is stopped
|
|
|
multicore_reset_core1();
|
|
|
@@ -66,19 +66,19 @@ void azplatform_init()
|
|
|
g_uart_initialized = true;
|
|
|
mbed_set_error_hook(mbed_error_hook);
|
|
|
|
|
|
- azlog("Platform: ", g_azplatform_name);
|
|
|
- azlog("FW Version: ", g_azlog_firmwareversion);
|
|
|
+ log("Platform: ", g_platform_name);
|
|
|
+ log("FW Version: ", g_log_firmwareversion);
|
|
|
|
|
|
- g_azlog_debug = false;
|
|
|
+ g_log_debug = false;
|
|
|
|
|
|
- azlog("SCSI termination is handled by a hardware jumper");
|
|
|
+ log("SCSI termination is handled by a hardware jumper");
|
|
|
|
|
|
// Get flash chip size
|
|
|
uint8_t cmd_read_jedec_id[4] = {0x9f, 0, 0, 0};
|
|
|
uint8_t response_jedec[4] = {0};
|
|
|
flash_do_cmd(cmd_read_jedec_id, response_jedec, 4);
|
|
|
g_flash_chip_size = (1 << response_jedec[3]);
|
|
|
- azlog("Flash chip size: ", (int)(g_flash_chip_size / 1024), " kB");
|
|
|
+ log("Flash chip size: ", (int)(g_flash_chip_size / 1024), " kB");
|
|
|
|
|
|
// SD card pins
|
|
|
// Card is used in SDIO mode for main program, and in SPI mode for crash handler & bootloader.
|
|
|
@@ -96,11 +96,11 @@ void azplatform_init()
|
|
|
}
|
|
|
|
|
|
// late_init() only runs in main application, SCSI not needed in bootloader
|
|
|
-void azplatform_late_init()
|
|
|
+void platform_late_init()
|
|
|
{
|
|
|
|
|
|
g_scsi_initiator = false;
|
|
|
- azlog("SCSI target/disk mode, acting as a SCSI disk");
|
|
|
+ log("SCSI target/disk mode, acting as a SCSI disk");
|
|
|
|
|
|
/* Initialize SCSI pins to required modes.
|
|
|
* SCSI pins should be inactive / input at this point.
|
|
|
@@ -150,16 +150,16 @@ void azplatform_late_init()
|
|
|
gpio_conf(SCSI_IN_RST, GPIO_FUNC_SIO, true, false, false, true, false);
|
|
|
}
|
|
|
|
|
|
-bool azplatform_is_initiator_mode_enabled()
|
|
|
+bool platform_is_initiator_mode_enabled()
|
|
|
{
|
|
|
return g_scsi_initiator;
|
|
|
}
|
|
|
|
|
|
-void azplatform_disable_led(void)
|
|
|
+void platform_disable_led(void)
|
|
|
{
|
|
|
// pin function pup pdown out state fast
|
|
|
gpio_conf(LED_PIN, GPIO_FUNC_SIO, false,false, false, false, false);
|
|
|
- azlog("Disabling status LED");
|
|
|
+ log("Disabling status LED");
|
|
|
}
|
|
|
|
|
|
/*****************************************/
|
|
|
@@ -169,9 +169,9 @@ void azplatform_disable_led(void)
|
|
|
extern SdFs SD;
|
|
|
extern uint32_t __StackTop;
|
|
|
|
|
|
-void azplatform_emergency_log_save()
|
|
|
+void platform_emergency_log_save()
|
|
|
{
|
|
|
- azplatform_set_sd_callback(NULL, NULL);
|
|
|
+ platform_set_sd_callback(NULL, NULL);
|
|
|
|
|
|
SD.begin(SD_CONFIG_CRASH);
|
|
|
FsFile crashfile = SD.open(CRASHFILE, O_WRONLY | O_CREAT | O_TRUNC);
|
|
|
@@ -186,32 +186,32 @@ void azplatform_emergency_log_save()
|
|
|
}
|
|
|
|
|
|
uint32_t startpos = 0;
|
|
|
- crashfile.write(azlog_get_buffer(&startpos));
|
|
|
- crashfile.write(azlog_get_buffer(&startpos));
|
|
|
+ crashfile.write(log_get_buffer(&startpos));
|
|
|
+ crashfile.write(log_get_buffer(&startpos));
|
|
|
crashfile.flush();
|
|
|
crashfile.close();
|
|
|
}
|
|
|
|
|
|
void mbed_error_hook(const mbed_error_ctx * error_context)
|
|
|
{
|
|
|
- azlog("--------------");
|
|
|
- azlog("CRASH!");
|
|
|
- azlog("Platform: ", g_azplatform_name);
|
|
|
- azlog("FW Version: ", g_azlog_firmwareversion);
|
|
|
- azlog("error_status: ", (uint32_t)error_context->error_status);
|
|
|
- azlog("error_address: ", error_context->error_address);
|
|
|
- azlog("error_value: ", error_context->error_value);
|
|
|
+ log("--------------");
|
|
|
+ log("CRASH!");
|
|
|
+ log("Platform: ", g_platform_name);
|
|
|
+ log("FW Version: ", g_log_firmwareversion);
|
|
|
+ log("error_status: ", (uint32_t)error_context->error_status);
|
|
|
+ log("error_address: ", error_context->error_address);
|
|
|
+ log("error_value: ", error_context->error_value);
|
|
|
|
|
|
uint32_t *p = (uint32_t*)((uint32_t)error_context->thread_current_sp & ~3);
|
|
|
for (int i = 0; i < 8; i++)
|
|
|
{
|
|
|
if (p == &__StackTop) break; // End of stack
|
|
|
|
|
|
- azlog("STACK ", (uint32_t)p, ": ", p[0], " ", p[1], " ", p[2], " ", p[3]);
|
|
|
+ log("STACK ", (uint32_t)p, ": ", p[0], " ", p[1], " ", p[2], " ", p[3]);
|
|
|
p += 4;
|
|
|
}
|
|
|
|
|
|
- azplatform_emergency_log_save();
|
|
|
+ platform_emergency_log_save();
|
|
|
|
|
|
while (1)
|
|
|
{
|
|
|
@@ -238,7 +238,7 @@ void mbed_error_hook(const mbed_error_ctx * error_context)
|
|
|
/*****************************************/
|
|
|
|
|
|
// This function is called for every log message.
|
|
|
-void azplatform_log(const char *s)
|
|
|
+voidplatform_log(const char *s)
|
|
|
{
|
|
|
if (g_uart_initialized)
|
|
|
{
|
|
|
@@ -257,16 +257,16 @@ static void watchdog_callback(unsigned alarm_num)
|
|
|
{
|
|
|
if (!scsiDev.resetFlag)
|
|
|
{
|
|
|
- azlog("--------------");
|
|
|
- azlog("WATCHDOG TIMEOUT, attempting bus reset");
|
|
|
- azlog("GPIO states: out ", sio_hw->gpio_out, " oe ", sio_hw->gpio_oe, " in ", sio_hw->gpio_in);
|
|
|
+ log("--------------");
|
|
|
+ log("WATCHDOG TIMEOUT, attempting bus reset");
|
|
|
+ log("GPIO states: out ", sio_hw->gpio_out, " oe ", sio_hw->gpio_oe, " in ", sio_hw->gpio_in);
|
|
|
|
|
|
uint32_t *p = (uint32_t*)__get_PSP();
|
|
|
for (int i = 0; i < 8; i++)
|
|
|
{
|
|
|
if (p == &__StackTop) break; // End of stack
|
|
|
|
|
|
- azlog("STACK ", (uint32_t)p, ": ", p[0], " ", p[1], " ", p[2], " ", p[3]);
|
|
|
+ log("STACK ", (uint32_t)p, ": ", p[0], " ", p[1], " ", p[2], " ", p[3]);
|
|
|
p += 4;
|
|
|
}
|
|
|
|
|
|
@@ -275,24 +275,24 @@ static void watchdog_callback(unsigned alarm_num)
|
|
|
|
|
|
if (g_watchdog_timeout <= 0)
|
|
|
{
|
|
|
- azlog("--------------");
|
|
|
- azlog("WATCHDOG TIMEOUT!");
|
|
|
- azlog("Platform: ", g_azplatform_name);
|
|
|
- azlog("FW Version: ", g_azlog_firmwareversion);
|
|
|
- azlog("GPIO states: out ", sio_hw->gpio_out, " oe ", sio_hw->gpio_oe, " in ", sio_hw->gpio_in);
|
|
|
+ log("--------------");
|
|
|
+ log("WATCHDOG TIMEOUT!");
|
|
|
+ log("Platform: ", g_platform_name);
|
|
|
+ log("FW Version: ", g_log_firmwareversion);
|
|
|
+ log("GPIO states: out ", sio_hw->gpio_out, " oe ", sio_hw->gpio_oe, " in ", sio_hw->gpio_in);
|
|
|
|
|
|
uint32_t *p = (uint32_t*)__get_PSP();
|
|
|
for (int i = 0; i < 8; i++)
|
|
|
{
|
|
|
if (p == &__StackTop) break; // End of stack
|
|
|
|
|
|
- azlog("STACK ", (uint32_t)p, ": ", p[0], " ", p[1], " ", p[2], " ", p[3]);
|
|
|
+ log("STACK ", (uint32_t)p, ": ", p[0], " ", p[1], " ", p[2], " ", p[3]);
|
|
|
p += 4;
|
|
|
}
|
|
|
|
|
|
- azplatform_emergency_log_save();
|
|
|
+ platform_emergency_log_save();
|
|
|
|
|
|
- azplatform_boot_to_main_firmware();
|
|
|
+ platform_boot_to_main_firmware();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -301,7 +301,7 @@ static void watchdog_callback(unsigned alarm_num)
|
|
|
|
|
|
// This function can be used to periodically reset watchdog timer for crash handling.
|
|
|
// It can also be left empty if the platform does not use a watchdog timer.
|
|
|
-void azplatform_reset_watchdog()
|
|
|
+void platform_reset_watchdog()
|
|
|
{
|
|
|
g_watchdog_timeout = WATCHDOG_CRASH_TIMEOUT;
|
|
|
|
|
|
@@ -318,26 +318,26 @@ void azplatform_reset_watchdog()
|
|
|
/* Flash reprogramming from bootloader */
|
|
|
/*****************************************/
|
|
|
|
|
|
-#ifdef AZPLATFORM_BOOTLOADER_SIZE
|
|
|
+#ifdef PLATFORM_BOOTLOADER_SIZE
|
|
|
|
|
|
extern uint32_t __real_vectors_start;
|
|
|
extern uint32_t __StackTop;
|
|
|
static volatile void *g_bootloader_exit_req;
|
|
|
|
|
|
-bool azplatform_rewrite_flash_page(uint32_t offset, uint8_t buffer[AZPLATFORM_FLASH_PAGE_SIZE])
|
|
|
+bool platform_rewrite_flash_page(uint32_t offset, uint8_t buffer[PLATFORM_FLASH_PAGE_SIZE])
|
|
|
{
|
|
|
- if (offset == AZPLATFORM_BOOTLOADER_SIZE)
|
|
|
+ if (offset == PLATFORM_BOOTLOADER_SIZE)
|
|
|
{
|
|
|
if (buffer[3] != 0x20 || buffer[7] != 0x10)
|
|
|
{
|
|
|
- azlog("Invalid firmware file, starts with: ", bytearray(buffer, 16));
|
|
|
+ log("Invalid firmware file, starts with: ", bytearray(buffer, 16));
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- azdbg("Writing flash at offset ", offset, " data ", bytearray(buffer, 4));
|
|
|
- assert(offset % AZPLATFORM_FLASH_PAGE_SIZE == 0);
|
|
|
- assert(offset >= AZPLATFORM_BOOTLOADER_SIZE);
|
|
|
+ dbg("Writing flash at offset ", offset, " data ", bytearray(buffer, 4));
|
|
|
+ assert(offset % PLATFORM_FLASH_PAGE_SIZE == 0);
|
|
|
+ assert(offset >= PLATFORM_BOOTLOADER_SIZE);
|
|
|
|
|
|
// Avoid any mbed timer interrupts triggering during the flashing.
|
|
|
__disable_irq();
|
|
|
@@ -350,11 +350,11 @@ bool azplatform_rewrite_flash_page(uint32_t offset, uint8_t buffer[AZPLATFORM_FL
|
|
|
// flashing, and again after reset to main firmware.
|
|
|
xip_ctrl_hw->ctrl = 0;
|
|
|
|
|
|
- flash_range_erase(offset, AZPLATFORM_FLASH_PAGE_SIZE);
|
|
|
- flash_range_program(offset, buffer, AZPLATFORM_FLASH_PAGE_SIZE);
|
|
|
+ flash_range_erase(offset, PLATFORM_FLASH_PAGE_SIZE);
|
|
|
+ flash_range_program(offset, buffer, PLATFORM_FLASH_PAGE_SIZE);
|
|
|
|
|
|
uint32_t *buf32 = (uint32_t*)buffer;
|
|
|
- uint32_t num_words = AZPLATFORM_FLASH_PAGE_SIZE / 4;
|
|
|
+ uint32_t num_words = PLATFORM_FLASH_PAGE_SIZE / 4;
|
|
|
for (int i = 0; i < num_words; i++)
|
|
|
{
|
|
|
uint32_t expected = buf32[i];
|
|
|
@@ -362,7 +362,7 @@ bool azplatform_rewrite_flash_page(uint32_t offset, uint8_t buffer[AZPLATFORM_FL
|
|
|
|
|
|
if (actual != expected)
|
|
|
{
|
|
|
- azlog("Flash verify failed at offset ", offset + i * 4, " got ", actual, " expected ", expected);
|
|
|
+ log("Flash verify failed at offset ", offset + i * 4, " got ", actual, " expected ", expected);
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
@@ -372,7 +372,7 @@ bool azplatform_rewrite_flash_page(uint32_t offset, uint8_t buffer[AZPLATFORM_FL
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-void azplatform_boot_to_main_firmware()
|
|
|
+void platform_boot_to_main_firmware()
|
|
|
{
|
|
|
// To ensure that the system state is reset properly, we perform
|
|
|
// a SYSRESETREQ and jump straight from the reset vector to main application.
|
|
|
@@ -387,7 +387,7 @@ void btldr_reset_handler()
|
|
|
if (g_bootloader_exit_req == &g_bootloader_exit_req)
|
|
|
{
|
|
|
// Boot to main application
|
|
|
- application_base = (uint32_t*)(XIP_BASE + AZPLATFORM_BOOTLOADER_SIZE);
|
|
|
+ application_base = (uint32_t*)(XIP_BASE + PLATFORM_BOOTLOADER_SIZE);
|
|
|
}
|
|
|
|
|
|
SCB->VTOR = (uint32_t)application_base;
|
|
|
@@ -413,7 +413,7 @@ const void * btldr_vectors[2] = {&__StackTop, (void*)&btldr_reset_handler};
|
|
|
// Reserve up to 352 kB for firmware.
|
|
|
#define ROMDRIVE_OFFSET (352 * 1024)
|
|
|
|
|
|
-uint32_t azplatform_get_romdrive_maxsize()
|
|
|
+uint32_t platform_get_romdrive_maxsize()
|
|
|
{
|
|
|
if (g_flash_chip_size >= ROMDRIVE_OFFSET)
|
|
|
{
|
|
|
@@ -426,7 +426,7 @@ uint32_t azplatform_get_romdrive_maxsize()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-bool azplatform_read_romdrive(uint8_t *dest, uint32_t start, uint32_t count)
|
|
|
+bool platform_read_romdrive(uint8_t *dest, uint32_t start, uint32_t count)
|
|
|
{
|
|
|
xip_ctrl_hw->stream_ctr = 0;
|
|
|
|
|
|
@@ -439,7 +439,7 @@ bool azplatform_read_romdrive(uint8_t *dest, uint32_t start, uint32_t count)
|
|
|
xip_ctrl_hw->stream_ctr = count / 4;
|
|
|
|
|
|
// Transfer happens in multiples of 4 bytes
|
|
|
- assert(start < azplatform_get_romdrive_maxsize());
|
|
|
+ assert(start < platform_get_romdrive_maxsize());
|
|
|
assert((count & 3) == 0);
|
|
|
assert((((uint32_t)dest) & 3) == 0);
|
|
|
|
|
|
@@ -457,10 +457,10 @@ bool azplatform_read_romdrive(uint8_t *dest, uint32_t start, uint32_t count)
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-bool azplatform_write_romdrive(const uint8_t *data, uint32_t start, uint32_t count)
|
|
|
+bool platform_write_romdrive(const uint8_t *data, uint32_t start, uint32_t count)
|
|
|
{
|
|
|
- assert(start < azplatform_get_romdrive_maxsize());
|
|
|
- assert((count % AZPLATFORM_ROMDRIVE_PAGE_SIZE) == 0);
|
|
|
+ assert(start < platform_get_romdrive_maxsize());
|
|
|
+ assert((count % PLATFORM_ROMDRIVE_PAGE_SIZE) == 0);
|
|
|
|
|
|
__disable_irq();
|
|
|
flash_range_erase(start + ROMDRIVE_OFFSET, count);
|
|
|
@@ -577,7 +577,7 @@ public:
|
|
|
for (int i = 0; i < size; i++)
|
|
|
{
|
|
|
char buf[2] = {((const char*)buffer)[i], 0};
|
|
|
- azlog_raw(buf);
|
|
|
+ log_raw(buf);
|
|
|
}
|
|
|
return size;
|
|
|
}
|