From aaf25bbac31891fba3a8a8a89cb1161de5e3b312 Mon Sep 17 00:00:00 2001
From: Dario Nieuwenhuis <dirbaio@dirbaio.net>
Date: Mon, 7 Feb 2022 20:40:35 +0100
Subject: [PATCH] Update stm32-data

---
 stm32-data                    |  2 +-
 stm32-metapac-gen/src/data.rs | 20 +++++++++++---------
 stm32-metapac-gen/src/lib.rs  | 23 ++++-------------------
 3 files changed, 16 insertions(+), 29 deletions(-)

diff --git a/stm32-data b/stm32-data
index 69ac5bce2..fe221f484 160000
--- a/stm32-data
+++ b/stm32-data
@@ -1 +1 @@
-Subproject commit 69ac5bce28972de33b57497454421c6ac862b0ed
+Subproject commit fe221f48442d4b6eef6dcfd04d9d4deec4402cce
diff --git a/stm32-metapac-gen/src/data.rs b/stm32-metapac-gen/src/data.rs
index 2fa4c4b04..56a121ffb 100644
--- a/stm32-metapac-gen/src/data.rs
+++ b/stm32-metapac-gen/src/data.rs
@@ -1,5 +1,4 @@
 use serde::Deserialize;
-use std::collections::HashMap;
 
 #[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
 pub struct Chip {
@@ -7,21 +6,24 @@ pub struct Chip {
     pub family: String,
     pub line: String,
     pub cores: Vec<Core>,
-    pub flash: Memory,
-    pub ram: Memory,
+    pub memory: Vec<MemoryRegion>,
     pub packages: Vec<Package>,
 }
 
 #[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
-pub struct Memory {
-    pub bytes: u32,
-    pub regions: HashMap<String, MemoryRegion>,
+pub struct MemoryRegion {
+    pub name: String,
+    pub kind: MemoryRegionKind,
+    pub address: u32,
+    pub size: u32,
 }
 
 #[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
-pub struct MemoryRegion {
-    pub base: u32,
-    pub bytes: Option<u32>,
+pub enum MemoryRegionKind {
+    #[serde(rename = "flash")]
+    Flash,
+    #[serde(rename = "ram")]
+    Ram,
 }
 
 #[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
diff --git a/stm32-metapac-gen/src/lib.rs b/stm32-metapac-gen/src/lib.rs
index a4d4de5f5..07de4f1e2 100644
--- a/stm32-metapac-gen/src/lib.rs
+++ b/stm32-metapac-gen/src/lib.rs
@@ -587,35 +587,20 @@ fn bytes_find(haystack: &[u8], needle: &[u8]) -> Option<usize> {
 fn gen_memory_x(out_dir: &PathBuf, chip: &Chip) {
     let mut memory_x = String::new();
 
-    let flash_bytes = chip
-        .flash
-        .regions
-        .get("BANK_1")
-        .unwrap()
-        .bytes
-        .unwrap_or(chip.flash.bytes);
-    let flash_origin = chip.flash.regions.get("BANK_1").unwrap().base;
-
-    let ram_bytes = chip
-        .ram
-        .regions
-        .get("SRAM")
-        .unwrap()
-        .bytes
-        .unwrap_or(chip.ram.bytes);
-    let ram_origin = chip.ram.regions.get("SRAM").unwrap().base;
+    let flash = chip.memory.iter().find(|r| r.name == "BANK_1").unwrap();
+    let ram = chip.memory.iter().find(|r| r.name == "SRAM").unwrap();
 
     write!(memory_x, "MEMORY\n{{\n").unwrap();
     write!(
         memory_x,
         "    FLASH : ORIGIN = 0x{:x}, LENGTH = {}\n",
-        flash_origin, flash_bytes
+        flash.address, flash.size,
     )
     .unwrap();
     write!(
         memory_x,
         "    RAM : ORIGIN = 0x{:x}, LENGTH = {}\n",
-        ram_origin, ram_bytes
+        ram.address, ram.size,
     )
     .unwrap();
     write!(memory_x, "}}").unwrap();