Skip to content

Commit 77f3135

Browse files
committed
use per-range algos for split flash regions to avoid overlap conflict
1 parent 9cfcf01 commit 77f3135

1 file changed

Lines changed: 8 additions & 4 deletions

File tree

xtask/src/render.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,7 @@ fn build_variant(
294294
) -> (Vec<PrMemoryRegion>, Vec<String>) {
295295
let mut memory_map = Vec::new();
296296
let mut variant_algos = Vec::new();
297+
let mut legacy_emitted = false;
297298
let regions = merge_regions(&variant.memory);
298299
for region in &regions {
299300
let access = MemoryAccess {
@@ -329,13 +330,15 @@ fn build_variant(
329330
.iter()
330331
.any(|a| a.silicon == silicon && a.arch == arch && a.region_kind == kind)
331332
{
332-
// Name by kind so split-SYS chips (v1: SYS_1 +
333-
// SYS_2) share one entry instead of two copies.
334333
let suffix = match kind {
335334
"ob" => "opt",
336335
other => other,
337336
};
338-
let algo_name = format!("ch32-{}-{}", silicon, suffix);
337+
let region_idx = split_name(&region.name)
338+
.1
339+
.map(|n| format!("-{}", n))
340+
.unwrap_or_default();
341+
let algo_name = format!("ch32-{}-{}{}", silicon, suffix, region_idx);
339342
if !variant_algos.contains(&algo_name) {
340343
variant_algos.push(algo_name.clone());
341344
}
@@ -345,7 +348,8 @@ fn build_variant(
345348
.push(range.clone());
346349
algo_kind.insert(algo_name, kind.to_string());
347350

348-
if kind == "usr" {
351+
if kind == "usr" && !legacy_emitted {
352+
legacy_emitted = true;
349353
let alias_range = 0u64..(range.end - range.start);
350354
memory_map.push(PrMemoryRegion::Nvm(NvmRegion {
351355
name: Some("USR_LEGACY".to_string()),

0 commit comments

Comments
 (0)