Commit graph

7,138 commits

Author SHA1 Message Date
Jiafei Pan
70493336f3 soc: imx93: add CPU idle PM support for A55 Core
Use PSCI CPU suspend to implement CPU idle for Cortex-A55 Core on i.MX 93.

Signed-off-by: Chenhui Zhao <chenhui.zhao@nxp.com>
Signed-off-by: Jiafei Pan <Jiafei.Pan@nxp.com>
2026-03-13 14:45:02 +01:00
Sylvio Alves
c64a74e711 espressif: adapt to hal_espressif IDF master sync
Adapt all Espressif SoC and driver code to the updated
hal_espressif module synced with IDF master branch.

Main changes:
- clock control: delegate peripheral clock gating to HAL
  layer using new clock/reset APIs
- SPI/GDMA: adapt to restructured DMA HAL with new channel
  allocation and configuration interfaces
- ethernet: add RMII clock configuration and PHY management
- GPIO: simplify using direct HAL function calls
- flash: adapt to updated SPI flash HAL interfaces
- linker scripts: update IRAM/DRAM mappings for new HAL
  object files
- DTS: fix ESP32-S2 PSRAM dcache1 address to match actual
  MMU mapping region (0x3f800000 DRAM1 instead of 0x3f500000
  DPORT which lacks 8-bit access capability)
- west.yml: update hal_espressif revision

Signed-off-by: Sylvio Alves <sylvio.alves@espressif.com>
2026-03-13 11:38:18 +01:00
Lucien Zhao
feec7d80ca soc: nxp: imxrt118x: Add ELE active timer ping support
The RT1180 platform requires periodic communication with the EdgeLock
Enclave (ELE) to prevent system reset. According to RT1180 SRM section
3.11 "ELE active timer", the ELE must be pinged at least once every
24 hours.

This commit implements ELE ping functionality using Zephyr's software
timer API (k_timer). The timer is configured to ping the ELE every
23 hours (instead of 24) to account for potential clock inaccuracies.

Signed-off-by: Lucien Zhao <lucien.zhao@nxp.com>
2026-03-13 07:09:59 +01:00
Scott Worley
e0e7d6c44d soc: microchip: mec: common: Remove I2C get lines and cleanup
We will standardize how the I2C driver supporting MEC172x/4x/5x
and onwards gets the states of the SCL and SDA lines. For MEC172x we
use the Zephyr GPIO driver to get the pin states. For MEC174x/5x and
future parts based on v3.8 I2C hardware we can use a new feature
of the bit-bang control register allowing live reading of the pin
states without switching the internal MUX. The SoC common code
for MEC172x to read GPIO's using direct register access is
removed by this commit.

Signed-off-by: Scott Worley <scott.worley@microchip.com>
2026-03-12 14:03:48 -05:00
Yassine El Aissaoui
9e89f75deb soc: mcxw: Fix SWD debug/flash issue on MCXW72 target
Resolved an issue where repeated flash/debug cycles
would fail, requiring the board to be placed in ISP
mode before it could be programmed again.

Signed-off-by: Yassine El Aissaoui <yassine.elaissaoui@nxp.com>
2026-03-12 14:02:50 -05:00
Amneesh Singh
e82959fba1 soc: ti/k3: am6x: add early init hook for a53 cores
Allow unlocking partitions as part of early_init_hook if the device tree
contains an unlock configuration as part of ti,control-module.

Signed-off-by: Amneesh Singh <amneesh@ti.com>
2026-03-12 12:08:25 -04:00
Amneesh Singh
e67ecb40b8 soc: ti/k3: am6x: use ti,control-module for partition unlocking
Currently we maintain addresses and values as static configurations using
static configurations and macros in ctrl_partitions.c. Instead use the
new ti,control-module binding to get these values from the device tree and
unlock the partitions during early init.

Only compile and call `k3_unlock_all_ctrl_partitions` if at least one node
with status okay and compatible "ti,control-module" is present.

Also make sure to map and unmap the regions in case MMU is present.

Signed-off-by: Amneesh Singh <amneesh@ti.com>
2026-03-12 12:08:25 -04:00
Pete Johanson
385f95431e soc: st: Initialize backup SRAM early for use with retained mem
Adjust the backup SRAM initialization to PRE_KERNEL_1 to ensure it's
initialized before any retained_mem instances placed into that area.

Signed-off-by: Pete Johanson <pete.johanson@analog.com>
2026-03-12 12:06:53 -04:00
Silesh C V
0141edf8ea soc: alif: ensemble: introduce E1C series
Add support for the Ensemble E1C series and the AE1C1F4051920PH0
SoC within this series. The E1C (E1 Compact) series contains a
single Cortex-M55 core configured as RTSS-HE (High Efficiency
Real Time Subsystem) with a maximum frequency of 160 MHz.

The E1C series uses SOC_FAMILY_ENSEMBLE_RTSS helper symbol
introduced earlier to share the CPU architecture configuration
with the E4, E6, and E8 series.

Link: https://alifsemi.com/ensemble-e1c-series/

Signed-off-by: Silesh C V <silesh@alifsemi.com>
2026-03-12 09:27:25 -05:00
Alessandro Manganaro
5d4da79872 soc: st: stm32wbax: Openthread config
Change OPEN_THREAD_WORKQUEUE_STACK_SIZE for stm32wbax

Signed-off-by: Alessandro Manganaro <alessandro.manganaro@st.com>
2026-03-12 09:22:39 -05:00
Flavio Ceolin
b92d516907 random: ctr-drbg: Use PSA crypto instead of MBED TLS
Change ctr_drb random implementation to use PSA Crypto API.
Since name convention is very different and PSA abstracts the
algorithm used to generate CSPRNG, file and Kconfig options were
changed. Current symbols were deprecated and just select the new
one.

Signed-off-by: Flavio Ceolin <flavio@hubblenetwork.com>
2026-03-12 11:32:15 +01:00
minyuan xue
a4053394ab soc: realtek: ameba: add clock control in soc kconfig
Select the clock control from soc Kconfig for ameba series.

Signed-off-by: minyuan xue <minyuan_xue@realsil.com.cn>
2026-03-12 09:04:02 +00:00
Jisheng Zhang
9842b062bb cpuidle: optimize out weak stub function call for !TRACING
For !TRACING, most arch_cpu_idle and arch_cpu_atomic_idle implementation
relies on the fact that there's weak stub implementations in
subsys/tracing/tracing_none.c, this works, but the arch_cpu_idle sits in
hot code path, so we'd better to make it as efficient as possible.

Take the riscv implementation for example,
Before the patch:

80000a66 <arch_cpu_idle>:
80000a66:	1141                	addi	sp,sp,-16
80000a68:	c606                	sw	ra,12(sp)
80000a6a:	37c5                	jal	80000a4a <sys_trace_idle>
80000a6c:	10500073          	wfi
80000a70:	3ff1                	jal	80000a4c <sys_trace_idle_exit>
80000a72:	47a1                	li	a5,8
80000a74:	3007a073          	csrs	mstatus,a5
80000a78:	40b2                	lw	ra,12(sp)
80000a7a:	0141                	addi	sp,sp,16
80000a7c:	8082                	ret

NOTE: the sys_trace_idle and sys_trace_idle_exit are just stubs when
!TRACING

after the patch:
80000a62 <arch_cpu_idle>:
80000a62:	10500073          	wfi
80000a66:	47a1                	li	a5,8
80000a68:	3007a073          	csrs	mstatus,a5
80000a6c:	8082                	ret

Signed-off-by: Jisheng Zhang <jszhang@kernel.org>
2026-03-11 23:17:29 -04:00
Peter Marheine
2221500305 arch: riscv: correct signature of __soc_handle_irq
When __soc_handle_irq is called inside _isr_wrapper, it actually expects
the function to return an IRQ number but the declaration of
__soc_handle_irq in the header has it returning `void` instead. Fix the
declaration to reflect that it actually returns an XLEN-length integer.

All existing implementations of __soc_handle_irq already follow this
behavior by either not modifying the a0 register or setting it to the
correct IRQ number, and follow the calling convention in all other
respects:

 * soc/ite/ec/common/soc_irq.S: trampoline to
   `uint8_t get_irq(void* unused)`
 * soc/adi/max32/soc_irq_rv32.S: internally calls
   `uint32_t max32_rv32_intc_get_next_source(void)` and doesn't modify
   a0 afterwards
 * soc/openisa/rv32m1/soc_irq.S: does not modify a0, and obliquely
   refers to this issue in a comment explaining why the function isn't
   implemented in C
 * soc/common/riscv-privileged/soc_irq.S: does not modify a0
 * all others: stub (just `ret`), which is a valid implementation of the
   integer identity function

Signed-off-by: Peter Marheine <pmarheine@chromium.org>
2026-03-11 23:17:21 -04:00
Laura Carlesso
165f2e1c84 soc: infineon: edge: pse84: Remove dependency on edgeprotecttools
For adding metadata and verifying images on Infineon Edge devices
switch to using the mcuboot tool imgtool rather than depending on
the Infineon specific edgeprotecttools. For the purposes required
in the Zephyr environment this is more than enough.

Signed-off-by: Laura Carlesso <laura.carlesso@infineon.com>
2026-03-11 17:55:47 +00:00
Tom Burdick
bdcade6646 gpio: infineon: Add shared gpio ports
Infineon PSOC4 parts share many ports with a single IRQ line. Using the
SHARED_INTERRUPT handler feature of Zephyr results in a very large IRQ
vector table. Instead structure in DT the idea that the ports are
sharing an interrupt with a sort of pseudo interrupt controller.

This also rectifies the need to ifdef on CAT1C/M0+. I added a note
making it clear that in those cases we likely need to rework the way
interrupts are done anyways as there's secondary interrupt
muxes/controllers involved.

Signed-off-by: Tom Burdick <thomas.burdick@infineon.com>
2026-03-10 17:58:42 -07:00
Axel Le Bourhis
b164aec540 soc: nxp: mcxw70: fix build issue due to wrong selection of HAS_PM
PR #103203 introduced a regression for mcxw70 builds by incorrectly
moving `HAS_PM` from MCXW72 to MCXW70.
This fix restores the correct configuration.

Signed-off-by: Axel Le Bourhis <axel.lebourhis@nxp.com>
2026-03-10 14:22:08 -05:00
Krzysztof Chruściński
54b3185440 soc: nordic: nrf54h: Add support for new nrfx_gppi API
Add support for dynamic allocation and freeing of DPPI connections
on nrf54h20. It is not longer required to use devicetree to allocate
specific channels that will be used by the application. nrfx_gppi on
nrf54h20 cpuapp behaves in almost the same way as on other targets.
The main difference is that allocating PPI connection requires
communication with Ironside through IPC.

It means that:
- allocation and freeing can only be done from the thread context
- allocation and freeing is slower

Currently, there is no support for controlling PPI connections in
global domain on other cores. It is expected that cpuapp will
setup PPI for VPR (ppr, flpr) as such approach reduces the need for
nrfx_gppi driver being present on ppr/flpr and those cores are
memory constrained.

Regarding cpurad, it is expected that PPI connections are static so
they can be setup manually, using DT and HAL. During initialization
nrfx_gppi on cpuapp gets the information about all PPI resources that
are statically allocated (using the devicetree) and they are excluded
from the pool of available channels.

Signed-off-by: Krzysztof Chruściński <krzysztof.chruscinski@nordicsemi.no>
2026-03-10 14:18:00 -05:00
Krzysztof Chruściński
b9e0e4970b soc: nordic: nrf54h: Add support for local cpurad GPPI
Add support for handling connections within the radio domain
using the new GPPI helper.

Signed-off-by: Krzysztof Chruściński <krzysztof.chruscinski@nordicsemi.no>
2026-03-10 14:18:00 -05:00
Duy Dang
b69d3e1222 soc: renesas: rcar: Support V4H SoC
Add initial support for Renesas R-Car V4H SoC.
Support Zephyr RTOS on Cortex R52, 1.4GHz core.
For more information and documentation, please visit the product page:
https://www.renesas.com/en/products/r-car-v4h

Signed-off-by: Duy Dang <duy.dang.yw@renesas.com>
2026-03-10 14:15:49 -05:00
Tim Pambor
b78d3c346c soc: stm32: stm32_iocell: add support for STM32H5 series
For STM32H5 series, only the cell compensation can be configured,
as the HSLV configuration is controlled on a per pin basis and
not on a per domain basis as for other STM32 series.

Signed-off-by: Tim Pambor <tim.pambor@codewrights.de>
2026-03-10 17:24:44 +01:00
Sudan Landge
efa14d4edb soc/nxp: Update SOC-specific vector tables for PendSV removal
The z_arm_pendsv vector doesn't exist on USE_SWITCH=y builds

Signed-off-by: Sudan Landge <sudan.landge@arm.com>
2026-03-10 17:24:10 +01:00
Andy Ross
e3acbec5cf soc/nxp: Update SOC-specific vector tables for PendSV removal
The z_arm_pendsv vector doesn't exist on USE_SWITCH=y builds

Signed-off-by: Andy Ross <andyross@google.com>
2026-03-10 17:24:10 +01:00
Alexander Roodt
d4c84cd07b soc: infineon: enable DWT unit for PSOC6 devices with Cortex-M4 core
Add missing Kconfig selection to enable the Data Watch and Trace unit for
the PSOC6 family of devices using a Cortex-M4 core.

Signed-off-by: Alexander Roodt <alexander.roodt@deepgate.ai>
2026-03-10 15:11:20 +01:00
Raffael Rostagno
d6c4ed90f4 pm: soc: esp32: Fix PM interface
Fix implementation so that sleep start routine is called at
pm_state_set() (entry) instead of pm_state_exit_post_ops().
Add RTC timer wakeup management, as well as code for deep
sleep.

Signed-off-by: Raffael Rostagno <raffael.rostagno@espressif.com>
2026-03-10 15:09:30 +01:00
Raffael Rostagno
9cc3028b39 soc: espressif: pm: CCOUNT compensation, ticks rounding
Add defconfig setting to enable CCOUNT compensation for low power mode
(light sleep). Enable ceil rounding for exit latency ticks calculation
for RISC-V chips.

Signed-off-by: Raffael Rostagno <raffael.rostagno@espressif.com>
2026-03-10 15:09:30 +01:00
Nhut Nguyen
3f80b8c75a drivers: pinctrl: Add support for Renesas RZ/N2H
Add more ports and update function field to 8 bits to support Renesas
RZ/N2H

Signed-off-by: Nhut Nguyen <nhut.nguyen.kc@renesas.com>
2026-03-10 09:33:25 +01:00
Nhut Nguyen
21cc27e488 soc: renesas: Add support for Renesas RZ/N2H
Add support for Renesas RZ/N2H

Signed-off-by: Nhut Nguyen <nhut.nguyen.kc@renesas.com>
2026-03-10 09:33:25 +01:00
Tony Han
28e83dd714 soc: microchip: sam: update MMU for sama7g5 AES
When AES is activated in the DT, configure it's register region with
strong ordered, read and write access.

Signed-off-by: Tony Han <tony.han@microchip.com>
2026-03-10 09:30:02 +01:00
Yuzhuo Liu
e5c0f9698f drivers: pinctrl: add rtl8752h pinctrl driver
Add rtl8752h series in bee pinctrl driver.

Signed-off-by: Yuzhuo Liu <yuzhuo_liu@realsil.com.cn>
2026-03-09 15:03:48 -05:00
Zophai Liu
e0d0c9ad70 soc: realtek: bee: Add support for rtl8752h SoC
Add SoC files for realtek rtl8752h.

Signed-off-by: Zophai Liu <zophai_liu@realsil.com.cn>
2026-03-09 15:03:48 -05:00
Fin Maaß
01eaddba1c soc: litex: remove imply XIP
The litex bootloader doesn't support XIP by default,
so remove it. In the board it was already deactivated.

Signed-off-by: Fin Maaß <f.maass@vogl-electronic.com>
2026-03-09 11:12:02 -05:00
Aksel Skauge Mellbye
a30340fcf6 drivers: bluetooth: hci: silabs: Migrate to RAIL 3.0 API
Use RAIL 3.0 API to configure sleep in EFR32 HCI driver.

Signed-off-by: Aksel Skauge Mellbye <aksel.mellbye@silabs.com>
2026-03-09 11:08:52 +01:00
Tomasz Chyrowicz
94699ca137 nrf54h20: Add MCUboot to supported configurations
The MCUboot is supported on nRF54H20 platform.

Signed-off-by: Tomasz Chyrowicz <tomasz.chyrowicz@nordicsemi.no>
2026-03-06 21:37:21 +01:00
Yassine El Aissaoui
0e7643c010 soc: nxp: mcxw2xx: Improve low power precision using dual-timer approach
Switch from OS timer-only approach to dual-timer strategy for improved
low power timing precision, especially for connectivity applications.

The previous approach used OS timer for both system ticks and low power
wakeup. With low tick rates, sleep time calculations lacked
precision, causing premature wakeups before BLE events, increasing power
consumption.
This rework uses high-precision SYSTICK during operation and switches
to OS timer for low power wakeup and coordination with link layer
event scheduling.

Signed-off-by: Yassine El Aissaoui <yassine.elaissaoui@nxp.com>
2026-03-06 21:37:01 +01:00
Pasi Liimatainen
e8fd6730b8 soc: nordic: pm support for nrf92 series
Add PM support for nrf92 series products
by making power management implementation common
to all Haltium platform

Signed-off-by: Pasi Liimatainen <pasi.liimatainen@nordicsemi.no>
2026-03-06 21:36:25 +01:00
Zhiyuan Tang
c8c36d32b7 soc: realtek: select GEN_ISR_TABLES for rtl87x2g
The function `z_isr_install()` is used during the rtl87x2g SoC init,
necessitating `GEN_ISR_TABLES`.

Enabling this config also correctly causes the `arch.arm.irq_vector_table`
testcase to be filtered out (skipped). This is expected behavior as that
test is intended for configurations without `GEN_ISR_TABLES`.

Signed-off-by: Zhiyuan Tang <zhiyuan_tang@realsil.com.cn>
2026-03-06 11:33:46 +00:00
Jonathan Nilsen
d6d7e7dd82 modules: hal_nordic: ironside: integrate minimal IronSide call driver
Integrate support for a minimal driver for IronSide SE IPC which is
thread-unsafe, uses busy waiting, and assumes that the IPC region
is uncached. The driver is included in the IronSide interface code
itself, and is enabled by defining IRONSIDE_SE_CALL_MINIMAL.
This is primarily intended to be used by MCUboot but can be used by
e.g. resource constrained single-threaded firmware.

Signed-off-by: Jonathan Nilsen <jonathan.nilsen@nordicsemi.no>
2026-03-06 10:05:29 +01:00
Jonathan Nilsen
d96d69b8fc soc: nordic: uicr: add support for new UICR features
Add support to the UICR generator image for the new features
in the IronSide support package:

Split blob generation options like GEN_UICR_PERIPHCONF
into GEN_UICR_PERIPHCONF and GEN_UICR_GENERATE_PERIPHCONF to
allow configuring the blob address independently from generating
the blob itself.

Add support for generating a UICR MPCCONF blob by extracting a table of
entries from an image ELF file. The mechanism works mostly the same
as the UICR PERIPHCONF blob generation. When the UICR generator image
finds another image that has CONFIG_NRF_MPCCONF_SECTION=y, it will
extract the data from the section named 'mpcconf_entry' and include it
in build/uicr/zephyr.hex and either build/uicr/mpcconf.hex
or build/uicr/secondary_mpcconf.hex.

Add support to the UICR generator image for setting the
POLICY_MPCCONFSTAGE field via Kconfig. Setting this to INIT is
required to make use of the new ironside_se_mpcconf_write() API
added with IronSide SE v23.4.0+27, which is used to configure
global domain MPCs.

Signed-off-by: Jonathan Nilsen <jonathan.nilsen@nordicsemi.no>
2026-03-06 10:05:29 +01:00
Mathieu Choplain
85a2aee476 soc: st: stm32n6: initialize NPU at device priority
Use the more appropriate KERNEL_DEVICE priority as default for the NPU
instead of KERNEL_DEFAULT. While at it, also clean up the NPU-specific
Kconfig file by using an `if` block to gate symbols.

Signed-off-by: Mathieu Choplain <mathieu.choplain-ext@st.com>
2026-03-06 10:00:12 +01:00
Appana Durga Kedareswara rao
bfb36af6d6 soc: xlnx: versal*: add cache line size defaults for APU
Set DCACHE_LINE_SIZE and ICACHE_LINE_SIZE configdefaults to 64 bytes
for the APU (Cortex-A) configurations on Versal, Versal2, and
Versalnet SoCs.

Signed-off-by: Appana Durga Kedareswara rao <appana.durga.kedareswara.rao@amd.com>
2026-03-05 16:07:56 +01:00
Appana Durga Kedareswara rao
562e96e8fc soc: xlnx: versal2: enable cache management by default
Enable CACHE_MANAGEMENT for both RPU and APU configurations
on AMD Versal2 SoC.

Signed-off-by: Appana Durga Kedareswara rao <appana.durga.kedareswara.rao@amd.com>
2026-03-05 16:07:56 +01:00
Appana Durga Kedareswara rao
5825da5d5f soc: xlnx: versalnet: fix Kconfig syntax for APU cache management
The Kconfig.defconfig file was using incorrect syntax for setting
default configuration values. Lines like "CONFIG_CACHE_MANAGEMENT=y"
are .config/prj.conf fragment syntax, not valid Kconfig language.

This caused the Kconfig parser to silently ignore these lines,
resulting in CACHE_MANAGEMENT not being enabled by default for
VersalNet APU builds.

Fix by using proper Kconfig syntax with "config" block and
"default y" statement. Also remove the duplicate CONFIG_CACHE_MANAGEMENT
line and the redundant ARM_ARCH_TIMER setting which is already enabled
by the top-level Kconfig.

Signed-off-by: Appana Durga Kedareswara rao <appana.durga.kedareswara.rao@amd.com>
2026-03-05 16:07:56 +01:00
Dag Erik Gjørvad
cbaf1e5a13 soc: nordic: nrf54l: fix I-cache init when built with TF-M
sys_cache_instr_enable() calls into the Zephyr cache driver
(cache_nrf.c), which is not compiled as part of the TF-M platform
build. When CONFIG_CACHE_MANAGEMENT and CONFIG_ICACHE are both
enabled, this produces an undefined reference at link time.

Use nrf_cache_enable() directly via the nrfx HAL for TF-M builds,
which is already available in the TF-M platform. Zephyr builds are
unaffected and continue to use the driver abstraction.

Signed-off-by: Dag Erik Gjørvad <dag.erik.gjorvad@nordicsemi.no>
2026-03-05 11:15:53 +00:00
Waqar Tahir
987f31dc8e soc: mcxa577: disable SystemInit when TFM is ON
Avoid initialization as this is already been taken care from TF-M
secure part

Signed-off-by: Waqar Tahir <waqar.tahir@nxp.com>
2026-03-05 10:04:11 +01:00
Sylvio Alves
1f672c777a soc: esp32c6: lp core gpio driver fixes and improvements
- Fix lp_gpio Kconfig dependency to use proper
  DT_HAS_ESPRESSIF_ESP32_LPGPIO_ENABLED symbol instead of
  SOC_ESP32C6_LPCORE, and separate GPIO_ESP32 from LPGPIO_ESP32

- fix lp_gpio compatible string to espressif,esp32-lpgpio to
  match the corrected Kconfig dependency

- enable global LP core interrupts at startup via
  ulp_lp_core_intr_enable() in lp_core_startup(); the LP core
  has no interrupt allocator so this must be done once for any
  peripheral using the single interrupt vector

- enable lp_gpio in gpio_wakeup sample overlay

- fix ESP_CONSOLE_UART_NUM default for LP HP UART console

Signed-off-by: Sylvio Alves <sylvio.alves@espressif.com>
2026-03-05 04:51:18 +01:00
Lucien Zhao
be886e5600 boards: nxp: add cpu frequency property for rt1180 boards
- add zephyr,cpu node
- get cycles value from cpu frequency property

Signed-off-by: Lucien Zhao <lucien.zhao@nxp.com>
2026-03-05 04:50:33 +01:00
Duy Nguyen
e2dd203072 soc: renesas: ra: Select ARM MPU as default for RA8x2
Make ARM MPU configuration default for RA8x2 family to support
CPU caching

Signed-off-by: Duy Nguyen <duy.nguyen.xa@renesas.com>
2026-03-05 04:38:09 +01:00
Amneesh Singh
014b2db1f7 soc: ti_k3: am6x: enable cache for R5 cores
Enable cache during soc early init for Cortex-R5F cores in the TI AM6x
series.

Signed-off-by: Amneesh Singh <amneesh@ti.com>
2026-03-04 16:44:38 +00:00
Alexander Wachter
1b6f1c102b soc: gd32vf103: add soc.h
Add soc.h file that includes the hal soc headers.

Signed-off-by: Alexander Wachter <alexander@wachter.cloud>
2026-03-04 16:44:03 +00:00