canbus: use "try_request_canboot" method
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
parent
8b1e3c3fb2
commit
129091d811
|
@ -95,10 +95,6 @@ console_sendf(const struct command_encoder *ce, va_list args)
|
||||||
#define CANBUS_CMD_REQUEST_BOOTLOADER 0x02
|
#define CANBUS_CMD_REQUEST_BOOTLOADER 0x02
|
||||||
#define CANBUS_RESP_NEED_NODEID 0x20
|
#define CANBUS_RESP_NEED_NODEID 0x20
|
||||||
|
|
||||||
// CanBoot definitions
|
|
||||||
#define CANBOOT_SIGNATURE 0x21746f6f426e6143
|
|
||||||
#define CANBOOT_REQUEST 0x5984E3FA6CA1589B
|
|
||||||
|
|
||||||
// Helper to verify a UUID in a command matches this chip's UUID
|
// Helper to verify a UUID in a command matches this chip's UUID
|
||||||
static int
|
static int
|
||||||
can_check_uuid(uint32_t id, uint32_t len, uint8_t *data)
|
can_check_uuid(uint32_t id, uint32_t len, uint8_t *data)
|
||||||
|
@ -166,17 +162,7 @@ can_process_request_bootloader(uint32_t id, uint32_t len, uint8_t *data)
|
||||||
{
|
{
|
||||||
if (!can_check_uuid(id, len, data))
|
if (!can_check_uuid(id, len, data))
|
||||||
return;
|
return;
|
||||||
uint32_t *bl_vectors = (uint32_t *)(CONFIG_FLASH_START & 0xFF000000);
|
try_request_canboot();
|
||||||
uint64_t *boot_sig = (uint64_t *)(bl_vectors[1] - 9);
|
|
||||||
uint64_t *req_sig = (uint64_t *)bl_vectors[0];
|
|
||||||
if (boot_sig == (void *)ALIGN((size_t)boot_sig, 8) &&
|
|
||||||
*boot_sig == CANBOOT_SIGNATURE &&
|
|
||||||
req_sig == (void *)ALIGN((size_t)req_sig, 8))
|
|
||||||
{
|
|
||||||
irq_disable();
|
|
||||||
*req_sig = CANBOOT_REQUEST;
|
|
||||||
NVIC_SystemReset();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle an "admin" command
|
// Handle an "admin" command
|
||||||
|
|
|
@ -42,4 +42,7 @@ struct cline lookup_clock_line(uint32_t periph_base);
|
||||||
uint32_t get_pclock_frequency(uint32_t periph_base);
|
uint32_t get_pclock_frequency(uint32_t periph_base);
|
||||||
void gpio_clock_enable(GPIO_TypeDef *regs);
|
void gpio_clock_enable(GPIO_TypeDef *regs);
|
||||||
|
|
||||||
|
// armcm_timer.c
|
||||||
|
void try_request_canboot(void);
|
||||||
|
|
||||||
#endif // internal.h
|
#endif // internal.h
|
||||||
|
|
Loading…
Reference in New Issue