Prefix memory region names with bank

This commit is contained in:
Rasmus Melchior Jacobsen 2023-03-25 07:40:42 +01:00
parent ba962b3ca1
commit b9d1c2a2ab

View File

@ -987,12 +987,19 @@ fn process_chip(
let ram_total = chip.ram * 1024; let ram_total = chip.ram * 1024;
let mut memory_regions = Vec::new(); let mut memory_regions = Vec::new();
let mut found = HashSet::<&str>::new(); let mut found = HashSet::<&str>::new();
for each in ["FLASH", "FLASH_BANK1", "FLASH_BANK2", "D1_AXIFLASH", "D1_AXIICP"] { for each in [
if let Some(_address) = h.defines.get("all").unwrap().0.get(&format!("{each}_BASE")) { "FLASH_BANK1",
"FLASH_BANK2",
"FLASH",
"FLASH_OTP",
"D1_AXIFLASH",
"D1_AXIICP",
] {
if let Some(address) = h.defines.get("all").unwrap().0.get(&format!("{each}_BASE")) {
let key = match each { let key = match each {
"FLASH" => "BANK_1", "FLASH" => "BANK1",
"FLASH_BANK1" => "BANK_1", "FLASH_BANK1" => "BANK1",
"FLASH_BANK2" => "BANK_2", "FLASH_BANK2" => "BANK2",
each => each, each => each,
}; };
@ -1001,27 +1008,46 @@ fn process_chip(
} }
found.insert(key); found.insert(key);
for region in memories.determine_flash_regions(chip_name) { if key == "FLASH_OTP" {
let size = if key == "BANK_1" || key == "BANK_2" { if let Some(region) = memories
let size = region.bytes; .determine_flash_regions(chip_name)
std::cmp::min(size, flash_total) .iter()
.find(|x| x.bank == memory::FlashBank::Otp)
{
memory_regions.push(stm32_data_serde::chip::Memory {
name: region.name.clone(),
kind: stm32_data_serde::chip::memory::Kind::Otp,
address: u32::try_from(*address).unwrap(),
size: region.bytes,
settings: Some(region.settings.clone()),
})
}
} else {
let bank = if key == "BANK2" {
memory::FlashBank::Bank2
} else { } else {
0 memory::FlashBank::Bank1
}; };
let kind = match region.bank { for region in memories
memory::FlashBank::Bank1 => stm32_data_serde::chip::memory::Kind::Flash, .determine_flash_regions(chip_name)
memory::FlashBank::Bank2 => stm32_data_serde::chip::memory::Kind::Flash, .iter()
memory::FlashBank::Otp => stm32_data_serde::chip::memory::Kind::Otp, .filter(|x| x.bank == bank)
}; {
let size = if key == "BANK1" || key == "BANK2" {
std::cmp::min(region.bytes, flash_total)
} else {
0
};
memory_regions.push(stm32_data_serde::chip::Memory { memory_regions.push(stm32_data_serde::chip::Memory {
name: region.name.clone(), name: format!("{}_{}", key, region.name),
kind, kind: stm32_data_serde::chip::memory::Kind::Flash,
address: region.address, address: u32::try_from(*address).unwrap(),
size, size,
settings: Some(region.settings.clone()), settings: Some(region.settings.clone()),
}) })
}
} }
} }
} }