diff --git a/.gitignore b/.gitignore index b7337d0..980f11a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,9 @@ /sources /tmp .idea/ +.DS_Store # transform*.yaml __pycache__ -target/ \ No newline at end of file +target/ +venv/ \ No newline at end of file diff --git a/data/registers/hsem_v1.yaml b/data/registers/hsem_v1.yaml new file mode 100644 index 0000000..0089381 --- /dev/null +++ b/data/registers/hsem_v1.yaml @@ -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 diff --git a/data/registers/hsem_v2.yaml b/data/registers/hsem_v2.yaml new file mode 100644 index 0000000..3ec588e --- /dev/null +++ b/data/registers/hsem_v2.yaml @@ -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 diff --git a/data/registers/hsem_v3.yaml b/data/registers/hsem_v3.yaml new file mode 100644 index 0000000..f754a68 --- /dev/null +++ b/data/registers/hsem_v3.yaml @@ -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 diff --git a/data/registers/hsem_v4.yaml b/data/registers/hsem_v4.yaml new file mode 100644 index 0000000..1c0794a --- /dev/null +++ b/data/registers/hsem_v4.yaml @@ -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 diff --git a/stm32-data-gen/src/chips.rs b/stm32-data-gen/src/chips.rs index a64ec43..6e16c2b 100644 --- a/stm32-data-gen/src/chips.rs +++ b/stm32-data-gen/src/chips.rs @@ -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()) {