forked from M-Labs/artiq
runtime: fix some final flash storage issues.
This commit is contained in:
parent
188764693e
commit
71eca5ad61
@ -8,6 +8,7 @@ mod imp {
|
||||
mod lock {
|
||||
use core::slice;
|
||||
use core::sync::atomic::{AtomicUsize, Ordering, ATOMIC_USIZE_INIT};
|
||||
use board;
|
||||
|
||||
static LOCKED: AtomicUsize = ATOMIC_USIZE_INIT;
|
||||
|
||||
@ -24,14 +25,20 @@ mod imp {
|
||||
|
||||
pub fn data(&self) -> &'static [u8] {
|
||||
extern {
|
||||
static _ftext: u8;
|
||||
static _fstorage: u8;
|
||||
static _estorage: u8;
|
||||
}
|
||||
|
||||
unsafe {
|
||||
let begin = &_fstorage as *const u8;
|
||||
let end = &_estorage as *const u8;
|
||||
slice::from_raw_parts(begin, end as usize - begin as usize)
|
||||
let base = &_ftext as *const _ as usize;
|
||||
let begin = &_fstorage as *const _ as usize;
|
||||
let end = &_estorage as *const _ as usize;
|
||||
|
||||
let ptr = board::mem::FLASH_BOOT_ADDRESS + (begin - base);
|
||||
let len = end - begin;
|
||||
|
||||
slice::from_raw_parts(ptr as *const u8, len)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -71,7 +78,7 @@ mod imp {
|
||||
if record_size == !0 /* all ones; erased flash */ {
|
||||
return None
|
||||
} else if record_size < 4 || record_size > data.len() {
|
||||
error!("offset {}: invalid record size", self.offset);
|
||||
error!("offset {}: invalid record size {}", self.offset, record_size);
|
||||
return Some(Err(()))
|
||||
}
|
||||
|
||||
|
@ -69,8 +69,8 @@ SECTIONS
|
||||
.storage :
|
||||
{
|
||||
/* Keep in sync with artiq_flash.py */
|
||||
_fstorage = .;
|
||||
. = _ftext + 0x100000;
|
||||
_fstorage = .;
|
||||
. += /*SPIFLASH_SECTOR_SIZE*/ 0x10000;
|
||||
_estorage = .;
|
||||
} > runtime
|
||||
|
Loading…
Reference in New Issue
Block a user