Skip to content

Commit 2d457e2

Browse files
committed
add USER_LEGACY memory region to allow flashing at 0x00, which qingke-rt
currently produces.
1 parent bd546af commit 2d457e2

8 files changed

Lines changed: 41 additions & 17 deletions

File tree

algos/f1/src/bin/usr.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ impl FlashAlgorithm for Algo {
3333
}
3434

3535
fn erase_sector(&mut self, addr: u32) -> Result<(), ErrorCode> {
36-
fast_page_erase(addr, USR_PAGE_SIZE);
36+
fast_page_erase(addr | USR_BASE, USR_PAGE_SIZE);
3737
Ok(())
3838
}
3939

4040
fn program_page(&mut self, addr: u32, data: &[u8]) -> Result<(), ErrorCode> {
41-
fast_page_program(addr, data, USR_PAGE_SIZE, USR_LOAD);
41+
fast_page_program(addr | USR_BASE, data, USR_PAGE_SIZE, USR_LOAD);
4242
Ok(())
4343
}
4444
}

algos/l1/src/bin/usr.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ impl FlashAlgorithm for Algo {
3333
}
3434

3535
fn erase_sector(&mut self, addr: u32) -> Result<(), ErrorCode> {
36-
fast_page_erase(addr, USR_PAGE_SIZE);
36+
fast_page_erase(addr | USR_BASE, USR_PAGE_SIZE);
3737
Ok(())
3838
}
3939

4040
fn program_page(&mut self, addr: u32, data: &[u8]) -> Result<(), ErrorCode> {
41-
fast_page_program(addr, data, USR_PAGE_SIZE, USR_LOAD);
41+
fast_page_program(addr | USR_BASE, data, USR_PAGE_SIZE, USR_LOAD);
4242
Ok(())
4343
}
4444
}

algos/v0/src/bin/usr.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ impl FlashAlgorithm for Algo {
3333
}
3434

3535
fn erase_sector(&mut self, addr: u32) -> Result<(), ErrorCode> {
36-
fast_page_erase(addr, USR_PAGE_SIZE);
36+
fast_page_erase(addr | USR_BASE, USR_PAGE_SIZE);
3737
Ok(())
3838
}
3939

4040
fn program_page(&mut self, addr: u32, data: &[u8]) -> Result<(), ErrorCode> {
41-
fast_page_program(addr, data, USR_PAGE_SIZE, USR_LOAD);
41+
fast_page_program(addr | USR_BASE, data, USR_PAGE_SIZE, USR_LOAD);
4242
Ok(())
4343
}
4444
}

algos/v00x/src/bin/usr.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ impl FlashAlgorithm for Algo {
3333
}
3434

3535
fn erase_sector(&mut self, addr: u32) -> Result<(), ErrorCode> {
36-
fast_page_erase(addr, USR_PAGE_SIZE);
36+
fast_page_erase(addr | USR_BASE, USR_PAGE_SIZE);
3737
Ok(())
3838
}
3939

4040
fn program_page(&mut self, addr: u32, data: &[u8]) -> Result<(), ErrorCode> {
41-
fast_page_program(addr, data, USR_PAGE_SIZE, USR_LOAD);
41+
fast_page_program(addr | USR_BASE, data, USR_PAGE_SIZE, USR_LOAD);
4242
Ok(())
4343
}
4444
}

algos/v1/src/bin/usr.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ impl FlashAlgorithm for Algo {
3333
}
3434

3535
fn erase_sector(&mut self, addr: u32) -> Result<(), ErrorCode> {
36-
fast_page_erase(addr, USR_PAGE_SIZE);
36+
fast_page_erase(addr | USR_BASE, USR_PAGE_SIZE);
3737
Ok(())
3838
}
3939

4040
fn program_page(&mut self, addr: u32, data: &[u8]) -> Result<(), ErrorCode> {
41-
fast_page_program(addr, data, USR_PAGE_SIZE, USR_LOAD);
41+
fast_page_program(addr | USR_BASE, data, USR_PAGE_SIZE, USR_LOAD);
4242
Ok(())
4343
}
4444
}

algos/v3/src/bin/usr.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ impl FlashAlgorithm for Algo {
3333
}
3434

3535
fn erase_sector(&mut self, addr: u32) -> Result<(), ErrorCode> {
36-
fast_page_erase(addr, USR_PAGE_SIZE);
36+
fast_page_erase(addr | USR_BASE, USR_PAGE_SIZE);
3737
Ok(())
3838
}
3939

4040
fn program_page(&mut self, addr: u32, data: &[u8]) -> Result<(), ErrorCode> {
41-
fast_page_program(addr, data, USR_PAGE_SIZE, USR_LOAD);
41+
fast_page_program(addr | USR_BASE, data, USR_PAGE_SIZE, USR_LOAD);
4242
Ok(())
4343
}
4444
}

algos/x0/src/bin/usr.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ impl FlashAlgorithm for Algo {
3333
}
3434

3535
fn erase_sector(&mut self, addr: u32) -> Result<(), ErrorCode> {
36-
fast_page_erase(addr, USR_PAGE_SIZE);
36+
fast_page_erase(addr | USR_BASE, USR_PAGE_SIZE);
3737
Ok(())
3838
}
3939

4040
fn program_page(&mut self, addr: u32, data: &[u8]) -> Result<(), ErrorCode> {
41-
fast_page_program(addr, data, USR_PAGE_SIZE, USR_LOAD);
41+
fast_page_program(addr | USR_BASE, data, USR_PAGE_SIZE, USR_LOAD);
4242
Ok(())
4343
}
4444
}

xtask/src/render.rs

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,9 @@ fn build_family(
217217
.ok_or_else(|| anyhow!("missing kind for algo {}", algo_name))?;
218218
let start = ranges.iter().map(|r| r.start).min().unwrap();
219219
let end = ranges.iter().map(|r| r.end).max().unwrap();
220+
let blob_kind = if kind == "usr-legacy" { "usr" } else { kind };
220221
// Prefer Fast over Standard (v0/v1 OB only has Standard).
221-
let template_region = find_template_region(chips, kind)?;
222+
let template_region = find_template_region(chips, blob_kind)?;
222223
let (page_size, _) = template_region
223224
.modes
224225
.iter()
@@ -233,7 +234,7 @@ fn build_family(
233234

234235
let blob = algos
235236
.iter()
236-
.find(|a| a.silicon == silicon && a.arch == arch && a.region_kind == *kind)
237+
.find(|a| a.silicon == silicon && a.arch == arch && a.region_kind == blob_kind)
237238
.ok_or_else(|| {
238239
anyhow!(
239240
"no algo blob for silicon {} arch {} kind {}",
@@ -332,8 +333,31 @@ fn build_variant(
332333
if !variant_algos.contains(&algo_name) {
333334
variant_algos.push(algo_name.clone());
334335
}
335-
algo_uses.entry(algo_name.clone()).or_default().push(range);
336+
algo_uses
337+
.entry(algo_name.clone())
338+
.or_default()
339+
.push(range.clone());
336340
algo_kind.insert(algo_name, kind.to_string());
341+
342+
if kind == "usr" {
343+
let alias_range = 0u64..(range.end - range.start);
344+
memory_map.push(PrMemoryRegion::Nvm(NvmRegion {
345+
name: Some("USR_LEGACY".to_string()),
346+
range: alias_range.clone(),
347+
cores: vec![core_name.to_string()],
348+
is_alias: true,
349+
access: Some(access),
350+
}));
351+
let legacy_name = format!("ch32-{}-usr-legacy", silicon);
352+
if !variant_algos.contains(&legacy_name) {
353+
variant_algos.push(legacy_name.clone());
354+
}
355+
algo_uses
356+
.entry(legacy_name.clone())
357+
.or_default()
358+
.push(alias_range);
359+
algo_kind.insert(legacy_name, "usr-legacy".to_string());
360+
}
337361
}
338362
}
339363
_ => {}

0 commit comments

Comments
 (0)