Align chip specific boot projects with new prepare_boot() signature
This commit is contained in:
parent
e962fe794c
commit
a77ce1088d
@ -11,13 +11,12 @@ use embassy_nrf::wdt;
|
|||||||
use embedded_storage::nor_flash::{ErrorType, NorFlash, ReadNorFlash};
|
use embedded_storage::nor_flash::{ErrorType, NorFlash, ReadNorFlash};
|
||||||
|
|
||||||
/// A bootloader for nRF devices.
|
/// A bootloader for nRF devices.
|
||||||
pub struct BootLoader {
|
pub struct BootLoader<const BUFFER_SIZE: usize = PAGE_SIZE> {
|
||||||
boot: embassy_boot::BootLoader,
|
boot: embassy_boot::BootLoader,
|
||||||
magic: AlignedBuffer<4>,
|
aligned_buf: AlignedBuffer<BUFFER_SIZE>,
|
||||||
page: AlignedBuffer<PAGE_SIZE>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for BootLoader {
|
impl<const BUFFER_SIZE: usize> Default for BootLoader<BUFFER_SIZE> {
|
||||||
/// Create a new bootloader instance using parameters from linker script
|
/// Create a new bootloader instance using parameters from linker script
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -56,20 +55,19 @@ impl Default for BootLoader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BootLoader {
|
impl<const BUFFER_SIZE: usize> BootLoader<BUFFER_SIZE> {
|
||||||
/// Create a new bootloader instance using the supplied partitions for active, dfu and state.
|
/// Create a new bootloader instance using the supplied partitions for active, dfu and state.
|
||||||
pub fn new(active: Partition, dfu: Partition, state: Partition) -> Self {
|
pub fn new(active: Partition, dfu: Partition, state: Partition) -> Self {
|
||||||
Self {
|
Self {
|
||||||
boot: embassy_boot::BootLoader::new(active, dfu, state),
|
boot: embassy_boot::BootLoader::new(active, dfu, state),
|
||||||
magic: AlignedBuffer([0; 4]),
|
aligned_buf: AlignedBuffer([0; BUFFER_SIZE]),
|
||||||
page: AlignedBuffer([0; PAGE_SIZE]),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Inspect the bootloader state and perform actions required before booting, such as swapping
|
/// Inspect the bootloader state and perform actions required before booting, such as swapping
|
||||||
/// firmware.
|
/// firmware.
|
||||||
pub fn prepare<F: FlashConfig>(&mut self, flash: &mut F) -> usize {
|
pub fn prepare<F: FlashConfig>(&mut self, flash: &mut F) -> usize {
|
||||||
match self.boot.prepare_boot(flash, &mut self.magic.0, &mut self.page.0) {
|
match self.boot.prepare_boot(flash, &mut self.aligned_buf.0) {
|
||||||
Ok(_) => self.boot.boot_address(),
|
Ok(_) => self.boot.boot_address(),
|
||||||
Err(_) => panic!("boot prepare error!"),
|
Err(_) => panic!("boot prepare error!"),
|
||||||
}
|
}
|
||||||
|
@ -5,33 +5,31 @@
|
|||||||
mod fmt;
|
mod fmt;
|
||||||
|
|
||||||
pub use embassy_boot::{AlignedBuffer, BootFlash, FirmwareUpdater, FlashConfig, Partition, SingleFlashConfig, State};
|
pub use embassy_boot::{AlignedBuffer, BootFlash, FirmwareUpdater, FlashConfig, Partition, SingleFlashConfig, State};
|
||||||
use embassy_rp::flash::{Flash, ERASE_SIZE, WRITE_SIZE};
|
use embassy_rp::flash::{Flash, ERASE_SIZE};
|
||||||
use embassy_rp::peripherals::{FLASH, WATCHDOG};
|
use embassy_rp::peripherals::{FLASH, WATCHDOG};
|
||||||
use embassy_rp::watchdog::Watchdog;
|
use embassy_rp::watchdog::Watchdog;
|
||||||
use embassy_time::Duration;
|
use embassy_time::Duration;
|
||||||
use embedded_storage::nor_flash::{ErrorType, NorFlash, ReadNorFlash};
|
use embedded_storage::nor_flash::{ErrorType, NorFlash, ReadNorFlash};
|
||||||
|
|
||||||
/// A bootloader for RP2040 devices.
|
/// A bootloader for RP2040 devices.
|
||||||
pub struct BootLoader {
|
pub struct BootLoader<const BUFFER_SIZE: usize = ERASE_SIZE> {
|
||||||
boot: embassy_boot::BootLoader,
|
boot: embassy_boot::BootLoader,
|
||||||
magic: AlignedBuffer<WRITE_SIZE>,
|
aligned_buf: AlignedBuffer<BUFFER_SIZE>,
|
||||||
page: AlignedBuffer<ERASE_SIZE>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BootLoader {
|
impl<const BUFFER_SIZE: usize> BootLoader<BUFFER_SIZE> {
|
||||||
/// Create a new bootloader instance using the supplied partitions for active, dfu and state.
|
/// Create a new bootloader instance using the supplied partitions for active, dfu and state.
|
||||||
pub fn new(active: Partition, dfu: Partition, state: Partition) -> Self {
|
pub fn new(active: Partition, dfu: Partition, state: Partition) -> Self {
|
||||||
Self {
|
Self {
|
||||||
boot: embassy_boot::BootLoader::new(active, dfu, state),
|
boot: embassy_boot::BootLoader::new(active, dfu, state),
|
||||||
magic: AlignedBuffer([0; WRITE_SIZE]),
|
aligned_buf: AlignedBuffer([0; BUFFER_SIZE]),
|
||||||
page: AlignedBuffer([0; ERASE_SIZE]),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Inspect the bootloader state and perform actions required before booting, such as swapping
|
/// Inspect the bootloader state and perform actions required before booting, such as swapping
|
||||||
/// firmware.
|
/// firmware.
|
||||||
pub fn prepare<F: FlashConfig>(&mut self, flash: &mut F) -> usize {
|
pub fn prepare<F: FlashConfig>(&mut self, flash: &mut F) -> usize {
|
||||||
match self.boot.prepare_boot(flash, self.magic.as_mut(), self.page.as_mut()) {
|
match self.boot.prepare_boot(flash, self.aligned_buf.as_mut()) {
|
||||||
Ok(_) => embassy_rp::flash::FLASH_BASE + self.boot.boot_address(),
|
Ok(_) => embassy_rp::flash::FLASH_BASE + self.boot.boot_address(),
|
||||||
Err(_) => panic!("boot prepare error!"),
|
Err(_) => panic!("boot prepare error!"),
|
||||||
}
|
}
|
||||||
@ -54,7 +52,7 @@ impl BootLoader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for BootLoader {
|
impl<const BUFFER_SIZE: usize> Default for BootLoader<BUFFER_SIZE> {
|
||||||
/// Create a new bootloader instance using parameters from linker script
|
/// Create a new bootloader instance using parameters from linker script
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
@ -7,26 +7,24 @@ mod fmt;
|
|||||||
pub use embassy_boot::{AlignedBuffer, BootFlash, FirmwareUpdater, FlashConfig, Partition, SingleFlashConfig, State};
|
pub use embassy_boot::{AlignedBuffer, BootFlash, FirmwareUpdater, FlashConfig, Partition, SingleFlashConfig, State};
|
||||||
|
|
||||||
/// A bootloader for STM32 devices.
|
/// A bootloader for STM32 devices.
|
||||||
pub struct BootLoader<const PAGE_SIZE: usize, const WRITE_SIZE: usize> {
|
pub struct BootLoader<const BUFFER_SIZE: usize> {
|
||||||
boot: embassy_boot::BootLoader,
|
boot: embassy_boot::BootLoader,
|
||||||
magic: AlignedBuffer<WRITE_SIZE>,
|
aligned_buf: AlignedBuffer<BUFFER_SIZE>,
|
||||||
page: AlignedBuffer<PAGE_SIZE>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<const PAGE_SIZE: usize, const WRITE_SIZE: usize> BootLoader<PAGE_SIZE, WRITE_SIZE> {
|
impl<const BUFFER_SIZE: usize> BootLoader<BUFFER_SIZE> {
|
||||||
/// Create a new bootloader instance using the supplied partitions for active, dfu and state.
|
/// Create a new bootloader instance using the supplied partitions for active, dfu and state.
|
||||||
pub fn new(active: Partition, dfu: Partition, state: Partition) -> Self {
|
pub fn new(active: Partition, dfu: Partition, state: Partition) -> Self {
|
||||||
Self {
|
Self {
|
||||||
boot: embassy_boot::BootLoader::new(active, dfu, state),
|
boot: embassy_boot::BootLoader::new(active, dfu, state),
|
||||||
magic: AlignedBuffer([0; WRITE_SIZE]),
|
aligned_buf: AlignedBuffer([0; BUFFER_SIZE]),
|
||||||
page: AlignedBuffer([0; PAGE_SIZE]),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Inspect the bootloader state and perform actions required before booting, such as swapping
|
/// Inspect the bootloader state and perform actions required before booting, such as swapping
|
||||||
/// firmware.
|
/// firmware.
|
||||||
pub fn prepare<F: FlashConfig>(&mut self, flash: &mut F) -> usize {
|
pub fn prepare<F: FlashConfig>(&mut self, flash: &mut F) -> usize {
|
||||||
match self.boot.prepare_boot(flash, self.magic.as_mut(), self.page.as_mut()) {
|
match self.boot.prepare_boot(flash, self.aligned_buf.as_mut()) {
|
||||||
Ok(_) => embassy_stm32::flash::FLASH_BASE + self.boot.boot_address(),
|
Ok(_) => embassy_stm32::flash::FLASH_BASE + self.boot.boot_address(),
|
||||||
Err(_) => panic!("boot prepare error!"),
|
Err(_) => panic!("boot prepare error!"),
|
||||||
}
|
}
|
||||||
@ -49,7 +47,7 @@ impl<const PAGE_SIZE: usize, const WRITE_SIZE: usize> BootLoader<PAGE_SIZE, WRIT
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<const PAGE_SIZE: usize, const WRITE_SIZE: usize> Default for BootLoader<PAGE_SIZE, WRITE_SIZE> {
|
impl<const BUFFER_SIZE: usize> Default for BootLoader<BUFFER_SIZE> {
|
||||||
/// Create a new bootloader instance using parameters from linker script
|
/// Create a new bootloader instance using parameters from linker script
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
Loading…
Reference in New Issue
Block a user