Merge pull request #450 from taunusflieger/feature/HSEM

Add support for HSEM
This commit is contained in:
Dario Nieuwenhuis 2024-04-08 12:10:36 +00:00 committed by GitHub
commit 2480982cc5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 592 additions and 1 deletions

4
.gitignore vendored
View File

@ -3,7 +3,9 @@
/sources
/tmp
.idea/
.DS_Store
# transform*.yaml
__pycache__
target/
target/
venv/

144
data/registers/hsem_v1.yaml Normal file
View File

@ -0,0 +1,144 @@
block/HSEM:
description: Hardware semaphore (HSEM).
items:
- name: R
description: HSEM register HSEM_R%s HSEM_R31.
array:
len: 32
stride: 4
byte_offset: 0
fieldset: R
- name: RLR
description: HSEM Read lock register.
array:
len: 32
stride: 4
byte_offset: 128
access: Read
fieldset: RLR
- name: IER
description: HSEM Interrupt enable register.
byte_offset: 256
fieldset: IER
array:
len: 2
stride: 16
- name: ICR
description: HSEM Interrupt clear register.
byte_offset: 260
fieldset: ICR
array:
len: 2
stride: 16
- name: ISR
description: HSEM Interrupt status register.
byte_offset: 264
access: Read
fieldset: ISR
array:
len: 2
stride: 16
- name: MISR
description: HSEM Masked interrupt status register.
byte_offset: 268
access: Read
fieldset: MISR
array:
len: 2
stride: 16
- name: CR
description: HSEM Clear register.
byte_offset: 320
fieldset: CR
- name: KEYR
description: HSEM Interrupt clear register.
byte_offset: 324
fieldset: KEYR
fieldset/CR:
description: HSEM Clear register.
fields:
- name: COREID
description: COREID of semaphores to be cleared.
bit_offset: 8
bit_size: 4
- name: KEY
description: Semaphore clear Key.
bit_offset: 16
bit_size: 16
fieldset/KEYR:
description: HSEM Interrupt clear register.
fields:
- name: KEY
description: Semaphore Clear Key.
bit_offset: 16
bit_size: 16
fieldset/R:
description: HSEM register HSEM_R%s HSEM_R31.
fields:
- name: PROCID
description: Semaphore ProcessID.
bit_offset: 0
bit_size: 8
- name: COREID
description: Semaphore COREID.
bit_offset: 8
bit_size: 4
- name: LOCK
description: Lock indication.
bit_offset: 31
bit_size: 1
fieldset/RLR:
description: HSEM Read lock register.
fields:
- name: PROCID
description: Semaphore ProcessID.
bit_offset: 0
bit_size: 8
- name: COREID
description: Semaphore COREID.
bit_offset: 8
bit_size: 4
- name: LOCK
description: Lock indication.
bit_offset: 31
bit_size: 1
fieldset/IER:
description: HSEM Interrupt enable register.
fields:
- name: ISE
description: Interrupt semaphore x enable bit.
bit_offset: 0
bit_size: 1
array:
len: 32
stride: 1
fieldset/ICR:
description: HSEM Interrupt clear register.
fields:
- name: ISC
description: Interrupt semaphore x clear bit.
bit_offset: 0
bit_size: 1
array:
len: 32
stride: 1
fieldset/ISR:
description: HSEM Interrupt status register.
fields:
- name: ISF
description: Interrupt semaphore x status bit before enable (mask).
bit_offset: 0
bit_size: 1
array:
len: 32
stride: 1
fieldset/MISR:
description: HSEM Masked interrupt status register.
fields:
- name: MISF
description: masked interrupt semaphore x status bit after enable (mask).
bit_offset: 0
bit_size: 1
array:
len: 32
stride: 1

145
data/registers/hsem_v2.yaml Normal file
View File

@ -0,0 +1,145 @@
block/HSEM:
description: HSEM.
items:
- name: R
description: HSEM register HSEM_R%s HSEM_R31.
array:
len: 32
stride: 4
byte_offset: 0
fieldset: R
- name: RLR
description: HSEM Read lock register.
array:
len: 32
stride: 4
byte_offset: 128
access: Read
fieldset: RLR
- name: IER
description: HSEM Interrupt enable register.
byte_offset: 256
fieldset: IER
array:
len: 1
stride: 16
- name: ICR
description: HSEM Interrupt clear register.
byte_offset: 260
access: Read
fieldset: ICR
array:
len: 1
stride: 16
- name: ISR
description: HSEM Interrupt status register.
byte_offset: 264
access: Read
fieldset: ISR
array:
len: 1
stride: 16
- name: MISR
description: HSEM Masked interrupt status register.
byte_offset: 268
access: Read
fieldset: MISR
array:
len: 1
stride: 16
- name: CR
description: HSEM Clear register.
byte_offset: 320
fieldset: CR
- name: KEYR
description: HSEM Interrupt clear register.
byte_offset: 324
fieldset: KEYR
fieldset/CR:
description: HSEM Clear register.
fields:
- name: COREID
description: COREID of semaphores to be cleared.
bit_offset: 8
bit_size: 4
- name: KEY
description: Semaphore clear Key.
bit_offset: 16
bit_size: 16
fieldset/KEYR:
description: HSEM Interrupt clear register.
fields:
- name: KEY
description: Semaphore Clear Key.
bit_offset: 16
bit_size: 16
fieldset/R:
description: HSEM register HSEM_R%s HSEM_R31.
fields:
- name: PROCID
description: Semaphore ProcessID.
bit_offset: 0
bit_size: 8
- name: COREID
description: Semaphore COREID.
bit_offset: 8
bit_size: 4
- name: LOCK
description: Lock indication.
bit_offset: 31
bit_size: 1
fieldset/RLR:
description: HSEM Read lock register.
fields:
- name: PROCID
description: Semaphore ProcessID.
bit_offset: 0
bit_size: 8
- name: COREID
description: Semaphore COREID.
bit_offset: 8
bit_size: 4
- name: LOCK
description: Lock indication.
bit_offset: 31
bit_size: 1
fieldset/IER:
description: HSEM Interrupt enable register.
fields:
- name: ISE
description: Interrupt semaphore x enable bit.
bit_offset: 0
bit_size: 1
array:
len: 32
stride: 1
fieldset/ICR:
description: HSEM Interrupt clear register.
fields:
- name: ISC
description: Interrupt semaphore x clear bit.
bit_offset: 0
bit_size: 1
array:
len: 32
stride: 1
fieldset/ISR:
description: HSEM Interrupt status register.
fields:
- name: ISF
description: Interrupt semaphore x status bit before enable (mask).
bit_offset: 0
bit_size: 1
array:
len: 32
stride: 1
fieldset/MISR:
description: HSEM Masked interrupt status register.
fields:
- name: MISF
description: masked interrupt semaphore x status bit after enable (mask).
bit_offset: 0
bit_size: 1
array:
len: 32
stride: 1

145
data/registers/hsem_v3.yaml Normal file
View File

@ -0,0 +1,145 @@
block/HSEM:
description: Hardware semaphore.
items:
- name: R
description: HSEM register HSEM_R%s HSEM_R31.
array:
len: 16
stride: 4
byte_offset: 0
fieldset: R
- name: RLR
description: HSEM Read lock register.
array:
len: 16
stride: 4
byte_offset: 128
access: Read
fieldset: RLR
- name: IER
description: HSEM Interrupt enable register.
byte_offset: 256
fieldset: IER
array:
len: 2
stride: 16
- name: ICR
description: HSEM Interrupt clear register.
byte_offset: 260
fieldset: ICR
array:
len: 2
stride: 16
- name: ISR
description: HSEM Interrupt status register.
byte_offset: 264
access: Read
fieldset: ISR
array:
len: 2
stride: 16
- name: MISR
description: HSEM Masked interrupt status register.
byte_offset: 268
access: Read
fieldset: MISR
array:
len: 2
stride: 16
- name: CR
description: HSEM Clear register.
byte_offset: 320
access: Write
fieldset: CR
- name: KEYR
description: HSEM Interrupt clear register.
byte_offset: 324
fieldset: KEYR
fieldset/CR:
description: HSEM Clear register.
fields:
- name: COREID
description: COREID.
bit_offset: 8
bit_size: 4
- name: KEY
description: Semaphore clear Key.
bit_offset: 16
bit_size: 16
fieldset/KEYR:
description: HSEM Interrupt clear register.
fields:
- name: KEY
description: Semaphore Clear Key.
bit_offset: 16
bit_size: 16
fieldset/R:
description: HSEM register HSEM_R%s HSEM_R31.
fields:
- name: PROCID
description: Semaphore ProcessID.
bit_offset: 0
bit_size: 8
- name: COREID
description: COREID.
bit_offset: 8
bit_size: 4
- name: LOCK
description: Lock indication.
bit_offset: 31
bit_size: 1
fieldset/RLR:
description: HSEM Read lock register.
fields:
- name: PROCID
description: Semaphore ProcessID.
bit_offset: 0
bit_size: 8
- name: COREID
description: COREID.
bit_offset: 8
bit_size: 4
- name: LOCK
description: Lock indication.
bit_offset: 31
bit_size: 1
fieldset/IER:
description: HSEM Interrupt enable register.
fields:
- name: ISE
description: Interrupt semaphore x enable bit.
bit_offset: 0
bit_size: 1
array:
len: 16
stride: 1
fieldset/ICR:
description: HSEM Interrupt clear register.
fields:
- name: ISC
description: Interrupt semaphore x clear bit.
bit_offset: 0
bit_size: 1
array:
len: 16
stride: 1
fieldset/ISR:
description: HSEM Interrupt status register.
fields:
- name: ISF
description: Interrupt semaphore x status bit before enable (mask).
bit_offset: 0
bit_size: 1
array:
len: 16
stride: 1
fieldset/MISR:
description: HSEM Masked interrupt status register.
fields:
- name: MISF
description: masked interrupt semaphore x status bit after enable (mask).
bit_offset: 0
bit_size: 1
array:
len: 16
stride: 1

145
data/registers/hsem_v4.yaml Normal file
View File

@ -0,0 +1,145 @@
block/HSEM:
description: Hardware semaphore.
items:
- name: R
description: HSEM register HSEM_R%s HSEM_R31.
array:
len: 16
stride: 4
byte_offset: 0
fieldset: R
- name: RLR
description: HSEM Read lock register.
array:
len: 16
stride: 4
byte_offset: 128
access: Read
fieldset: RLR
- name: IER
description: HSEM Interrupt enable register.
byte_offset: 256
fieldset: IER
array:
len: 1
stride: 16
- name: ICR
description: HSEM Interrupt clear register.
byte_offset: 260
fieldset: ICR
array:
len: 1
stride: 16
- name: ISR
description: HSEM Interrupt status register.
byte_offset: 264
access: Read
fieldset: ISR
array:
len: 1
stride: 16
- name: MISR
description: HSEM Masked interrupt status register.
byte_offset: 268
access: Read
fieldset: MISR
array:
len: 1
stride: 16
- name: CR
description: HSEM Clear register.
byte_offset: 320
access: Write
fieldset: CR
- name: KEYR
description: HSEM Interrupt clear register.
byte_offset: 324
fieldset: KEYR
fieldset/ICR:
description: HSEM Interrupt clear register.
fields:
- name: ISC
description: Interrupt(N) semaphore n clear bit.
bit_offset: 0
bit_size: 1
array:
len: 16
stride: 1
fieldset/IER:
description: HSEM Interrupt enable register.
fields:
- name: ISE
description: Interrupt semaphore n enable bit.
bit_offset: 0
bit_size: 1
array:
len: 16
stride: 1
fieldset/ISR:
description: HSEM Interrupt status register.
fields:
- name: ISF
description: Interrupt(N) semaphore n status bit before enable (mask).
bit_offset: 0
bit_size: 1
array:
len: 16
stride: 1
fieldset/MISR:
description: HSEM Masked interrupt status register.
fields:
- name: MISF
description: masked interrupt(N) semaphore n status bit after enable (mask).
bit_offset: 0
bit_size: 1
array:
len: 16
stride: 1
fieldset/CR:
description: HSEM Clear register.
fields:
- name: COREID
description: COREID.
bit_offset: 8
bit_size: 4
- name: KEY
description: Semaphore clear Key.
bit_offset: 16
bit_size: 16
fieldset/KEYR:
description: HSEM Interrupt clear register.
fields:
- name: KEY
description: Semaphore Clear Key.
bit_offset: 16
bit_size: 16
fieldset/R:
description: HSEM register HSEM_R%s HSEM_R31.
fields:
- name: PROCID
description: Semaphore ProcessID.
bit_offset: 0
bit_size: 8
- name: COREID
description: Semaphore COREID.
bit_offset: 8
bit_size: 4
- name: LOCK
description: Lock indication.
bit_offset: 31
bit_size: 1
fieldset/RLR:
description: HSEM Read lock register.
fields:
- name: PROCID
description: Semaphore ProcessID.
bit_offset: 0
bit_size: 8
- name: COREID
description: Semaphore COREID.
bit_offset: 8
bit_size: 4
- name: LOCK
description: Lock indication.
bit_offset: 31
bit_size: 1

View File

@ -535,6 +535,14 @@ impl PeriMatcher {
("STM32F1.*:GPIO.*", ("gpio", "v1", "GPIO")),
(".*:GPIO.*", ("gpio", "v2", "GPIO")),
(".*:IPCC:v1_0", ("ipcc", "v1", "IPCC")),
("STM32H7(4|5)(5|7).*:HSEM:.*", ("hsem", "v1", "HSEM")),
("STM32WB55.*:HSEM:.*", ("hsem", "v1", "HSEM")),
("STM32H735.*:HSEM:.*", ("hsem", "v2", "HSEM")),
("STM32H7B3.*:HSEM:.*", ("hsem", "v2", "HSEM")),
("STM32H753.*:HSEM:.*", ("hsem", "v2", "HSEM")),
("STM32H743.*:HSEM:.*", ("hsem", "v2", "HSEM")),
("STM32WL5.*:HSEM:.*", ("hsem", "v3", "HSEM")),
("STM32WLE.*:HSEM:.*", ("hsem", "v4", "HSEM")),
(".*:DMAMUX.*", ("dmamux", "v1", "DMAMUX")),
(r".*:GPDMA\d?:.*", ("gpdma", "v1", "GPDMA")),
(r".*:BDMA\d?:.*", ("bdma", "v1", "DMA")),
@ -912,6 +920,7 @@ fn process_group(
let chip_af = &group.ips.values().find(|x| x.name == "GPIO").unwrap().version;
let chip_af = chip_af.strip_suffix("_gpio_v1_0").unwrap();
let chip_af = af.0.get(chip_af);
let cores: Vec<_> = group
.xml
.cores
@ -1047,6 +1056,7 @@ fn process_core(
"USBRAM",
"VREFINTCAL",
"UID",
"HSEM",
];
for pname in GHOST_PERIS {
if let Entry::Vacant(entry) = peri_kinds.entry(pname.to_string()) {