Skip to content

Commit df572e2

Browse files
authored
peripheral: add fifo size field for the relevant peripherals (#9)
- The field name is 'sys_fentries' (it's borrowed from sysconfig) - The field value is different across chips and peripherals. - The field is relevant for I2C, SPI, UART peripherals, for the rest it has 'None' value - The filed type is usize
1 parent 2340a8e commit df572e2

File tree

4 files changed

+39
-0
lines changed

4 files changed

+39
-0
lines changed

mspm0-data-gen/src/generate.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ fn generate_peripherals2(
244244
let (ty, version) = get_peripheral_type_version(chip_name, &name);
245245
let address = get_peripheral_addresses(chip_name, &name, header, sysconfig)?;
246246
let power_domain = get_power_domain(peripheral, ty, chip_name)?;
247+
let sys_fentries = get_sys_fentries(peripheral, chip_name)?;
247248

248249
let mut peri = Peripheral {
249250
name: name.clone(),
@@ -252,6 +253,7 @@ fn generate_peripherals2(
252253
address,
253254
power_domain,
254255
pins: vec![],
256+
sys_fentries,
255257
};
256258

257259
// Lookup the pins
@@ -345,6 +347,31 @@ fn generate_peripherals2(
345347
Ok(peripherals)
346348
}
347349

350+
fn get_sys_fentries(
351+
peripheral: &sysconfig::Peripheral,
352+
chip_name: &str,
353+
) -> anyhow::Result<Option<usize>> {
354+
if !(peripheral.name.starts_with("SPI")
355+
|| peripheral.name.starts_with("UART")
356+
|| peripheral.name.starts_with("I2C"))
357+
{
358+
return Ok(None);
359+
}
360+
361+
let Some(sys_fentries) = peripheral.attributes.get("SYS_FENTRIES") else {
362+
bail!("{chip_name}: {} has no SYS_FENTRIES field", peripheral.name)
363+
};
364+
365+
let Some(sys_fentries) = sys_fentries.as_str() else {
366+
bail!(
367+
"{chip_name}: {} SYS_FENTRIES field is not a string value",
368+
peripheral.name
369+
)
370+
};
371+
372+
Ok(Some(sys_fentries.parse::<usize>().unwrap()))
373+
}
374+
348375
fn get_power_domain(
349376
peripheral: &sysconfig::Peripheral,
350377
ty: PeripheralType,
@@ -458,6 +485,7 @@ fn generate_missing(
458485
// DMA always lives in PD1
459486
power_domain: PowerDomain::Pd1,
460487
pins: vec![],
488+
sys_fentries: None,
461489
},
462490
);
463491

@@ -485,6 +513,7 @@ fn generate_missing(
485513
// GPIO always lives in PD0
486514
power_domain: PowerDomain::Pd0,
487515
pins: vec![],
516+
sys_fentries: None,
488517
});
489518

490519
let pin = device_pin

mspm0-data-types/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,9 @@ pub struct Peripheral {
228228
pub power_domain: PowerDomain,
229229

230230
pub pins: Vec<PeripheralPin>,
231+
232+
#[serde(skip_serializing_if = "Option::is_none")]
233+
pub sys_fentries: Option<usize>,
231234
}
232235

233236
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]

mspm0-metapac-gen/res/metadata.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ pub struct Peripheral {
2020
pub version: Option<&'static str>,
2121
pub pins: &'static [PeripheralPin],
2222
pub power_domain: PowerDomain,
23+
pub sys_fentries: Option<usize>,
2324
}
2425

2526
#[derive(Debug, Eq, PartialEq, Clone)]

mspm0-metapac-gen/src/metadata.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,13 +189,19 @@ fn generate_peripheral(
189189
PowerDomain::Backup => quote! { PowerDomain::Backup },
190190
};
191191

192+
let sys_fentries = match peripheral.sys_fentries {
193+
Some(sys_fentries) => quote! { Some(#sys_fentries) },
194+
None => quote! { None },
195+
};
196+
192197
Some(quote! {
193198
Peripheral {
194199
name: #name,
195200
kind: #kind,
196201
version: #version,
197202
pins: &[#(#pins),*],
198203
power_domain: #power_domain,
204+
sys_fentries: #sys_fentries,
199205
}
200206
})
201207
}

0 commit comments

Comments
 (0)