We only had rudimentary STM32MP13 support, because proper control of the clocks and resets required communicating with OP-TEE as the RCC peripheral was restricted to the secure world on that SoC. Back when STM32MP13 support was added, this limitation was worked around by defining placeholder fixed clocks and skipping resets for the MMC and other hardware that was known to be initialized by previous boot stages. When the upstream kernel device tree dropped the fixed clocks in favor of describing the actual setup with SCMI-over-OPTEE providing access to the root clocks, barebox support for the STM32MP13 was broken. This series restores barebox compatibility with the Linux device tree, so barebox can once again startup and Linux can be booted. Notably missing is Ethernet support, which doesn't yet exist in the mainline kernel. USB on the DK also uses a STM32 MCU as Type C controller and I haven't investigated how much of this barebox needs to know about to get OTG working. USB host works fine however. Once enabled, it's possible to use the same barebox binary for both STM32MP13 and STM32MP15 and only changing the BL32 device tree in the FIP. STM32MP13 support is not yet enabled in the device tree as setting CONFIG_OPTEE_SIZE to 48M as expected by the STM32MP13-DK firmware will take away 48M of memory from Linux, even on the STM32MP15 board. We'll want to fix that before enabling it in the defconfig, but this shouldn't keep us from fixing STM32MP13 support in general. This series depends on enabling use of OP-TEE as SCMI transport, added in <20231127064034.2206788-2-a.fatoum@xxxxxxxxxxxxxx> Ahmad Fatoum (13): clk: stm32mp1: build only when STM32MP15 support is enabled clk: factor out clk_hw_get_parent_index include: add initial <linux/clk-provider.h> clk: divider: implement CLK_DIVIDER_ALLOW_ZERO clk: divider: implement divider_[ro_]round_rate_parent clk: implement clk clk_hw_get_parent_by_index clk: add struct clk_init_data::parent_hws clk: implement clk_hw_reparent clk: add STM32MP13 clock and reset drivers pinctrl: stm32: match st,stm32mp135-pinctrl DT compatible aiodev: stm32: add STM32MP13x support ARM: stm32mp: 135-DK: enable environment, bbu handler and deep probe ARM: stm32mp: remove STM32MP13 .stm32 image arch/arm/boards/stm32mp13xx-dk/Makefile | 2 +- arch/arm/boards/stm32mp13xx-dk/board.c | 25 + arch/arm/boards/stm32mp13xx-dk/lowlevel.c | 19 - arch/arm/dts/stm32mp135f-dk.dts | 9 + drivers/aiodev/stm32-adc.c | 14 + drivers/clk/Kconfig | 10 + drivers/clk/Makefile | 3 +- drivers/clk/clk-divider.c | 41 +- drivers/clk/clk.c | 139 +- drivers/clk/stm32/Makefile | 1 + drivers/clk/stm32/clk-stm32-core.c | 680 ++++++++ drivers/clk/stm32/clk-stm32-core.h | 188 +++ drivers/clk/stm32/clk-stm32mp13.c | 1611 +++++++++++++++++++ drivers/clk/stm32/reset-stm32.c | 122 ++ drivers/clk/stm32/reset-stm32.h | 8 + drivers/clk/stm32/stm32mp13_rcc.h | 1748 +++++++++++++++++++++ drivers/pinctrl/pinctrl-stm32.c | 1 + images/Makefile.stm32mp | 1 - include/linux/clk-provider.h | 185 +++ include/linux/clk.h | 21 + 20 files changed, 4776 insertions(+), 52 deletions(-) create mode 100644 arch/arm/boards/stm32mp13xx-dk/board.c delete mode 100644 arch/arm/boards/stm32mp13xx-dk/lowlevel.c create mode 100644 drivers/clk/stm32/Makefile create mode 100644 drivers/clk/stm32/clk-stm32-core.c create mode 100644 drivers/clk/stm32/clk-stm32-core.h create mode 100644 drivers/clk/stm32/clk-stm32mp13.c create mode 100644 drivers/clk/stm32/reset-stm32.c create mode 100644 drivers/clk/stm32/reset-stm32.h create mode 100644 drivers/clk/stm32/stm32mp13_rcc.h create mode 100644 include/linux/clk-provider.h -- 2.39.2