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