STM32 DT for v6.15, round 1

Highlights:
 ----------
 
 - MPU:
   - STM32MP13:
     - Add thermal support.
     - Add Priva E-Measuringbox board support based on sTM32MP133C SoC.
       It embeds Ethernet RMII with TI phy, SDCard, eMMC and some
       sensors.
     - Add support for DHCOR SoM and DHSBC rev.200 board:
       TPM interrupts and gpio reset + LDO2/LDO5 support.
 
   - STMP32MP15:
     - Add new Octavo support: LXA FairyTux 2 based on OSD32MP153C SiP.
       It contains eMMC for storage, a gigabit Ethernet, a CAN bus and
       a RS485 transceiver.
     - Add Plymovent AQM board based on STM32MP151 SoC. It embeds:
       ETH RMII, WLAN, BT, Sensors (CO2, PM, pressure), Audio (I2S),
       Storage (SDCard, eMMC).
 
   - STM32MP25:
     - Add STM32MP257F Discovery board: It embeds a STM32MP257FAL SoC,
       with 4GB of LPDDR4, 2*USB typeA, 1*USB3 typeC, 1*ETH,
       wifi/BT combo, DSI HDMI, LVDS connector ...
 
     - Introduce STM32MP23 SoC and add STM32MP235F Discovery board:
       It embeds a STM32MP235FAK SoC, with 4GB of LPDDR4, 2*USB typeA,
       1*USB3 typeC, 1*ETH, wifi/BT combo, DSI HDMI, LVDS connector ...
 
     - Introduce STM32MP21 SoC and STM32MP215F discovery board:
       It embeds a STM32MP235FAN SoC, with 2GB of LPDDR4,
       1*USB2 peripheral bus powered typeC, 1*ETH, wifi/BT combo,
       LCD 18bit connector, CSI camera connector, ...
 -----BEGIN PGP SIGNATURE-----
 
 iQJRBAABCgA7FiEEctl9+nxzUSUqdELdf5rJavIecIUFAmfRrqodHGFsZXhhbmRy
 ZS50b3JndWVAZm9zcy5zdC5jb20ACgkQf5rJavIecIX6Jw/+M+2cLmsaxiRI8My9
 tJMOQqAAURUXxqmHDhD5PSYpMNvkVspJfBKZEWujgkSXHB3MVxwkpat3oirLuS8u
 uyqcwE+wybHHRqDjIy1/jSkldET2xwkY9oVRJ3LKPNlvh/eSX+OgAXWFHQ6X2VZ/
 SAHjXTmJmCTDzzCPh8R/WSSDThdq1Ce0T83BVkbnhq4S20tcYoyWC1RhYSUvFx/R
 rGY9jkXZt//6aaY3Bgifevcf1DAKFguFNL5R16mAg/tJa5CTv4Xyau09fnCZYsUj
 4ldNmGn4o8cku7svtSYwPwygadGOoVbUTjGFQo0CQuhbCM1MocYhcCPFEVTNnzDw
 UaNZ5i1ipq6h5cTz801QOecJEBQdNcrKrB8FcQQm2spA5E5vKZwCSmR4ajtGAr5E
 AhE9BXY8qWDIDPD7Gy5LHGS94juPWGqX3hOYYfBNLVGhEBif39I1Qg8Gbp1H33nX
 eQ3cDaj1QtYSKCv3Da/zXJkreEUzsJRFcVBWPGyuw1yjgMFPzOf74qPESc38fjWP
 nZfqSJVwb5dVpdUgdnouVaBcutyMSobWFh6tFdyycINs9TOGE4YROyq4+74m03D8
 ErUS4cm0bTssXZvA5eDVa8taeKo2U730WNktpRTQNaJ9JQMGDyNmdm/3Tun4C4wU
 8+UllZywmTUM/rwfBrN6Fq9FN1M=
 =C3kj
 -----END PGP SIGNATURE-----

Merge tag 'stm32-dt-for-v6.15-1' of https://git.kernel.org/pub/scm/linux/kernel/git/atorgue/stm32 into soc/dt

STM32 DT for v6.15, round 1

Highlights:
----------

- MPU:
  - STM32MP13:
    - Add thermal support.
    - Add Priva E-Measuringbox board support based on sTM32MP133C SoC.
      It embeds Ethernet RMII with TI phy, SDCard, eMMC and some
      sensors.
    - Add support for DHCOR SoM and DHSBC rev.200 board:
      TPM interrupts and gpio reset + LDO2/LDO5 support.

  - STMP32MP15:
    - Add new Octavo support: LXA FairyTux 2 based on OSD32MP153C SiP.
      It contains eMMC for storage, a gigabit Ethernet, a CAN bus and
      a RS485 transceiver.
    - Add Plymovent AQM board based on STM32MP151 SoC. It embeds:
      ETH RMII, WLAN, BT, Sensors (CO2, PM, pressure), Audio (I2S),
      Storage (SDCard, eMMC).

  - STM32MP25:
    - Add STM32MP257F Discovery board: It embeds a STM32MP257FAL SoC,
      with 4GB of LPDDR4, 2*USB typeA, 1*USB3 typeC, 1*ETH,
      wifi/BT combo, DSI HDMI, LVDS connector ...

    - Introduce STM32MP23 SoC and add STM32MP235F Discovery board:
      It embeds a STM32MP235FAK SoC, with 4GB of LPDDR4, 2*USB typeA,
      1*USB3 typeC, 1*ETH, wifi/BT combo, DSI HDMI, LVDS connector ...

    - Introduce STM32MP21 SoC and STM32MP215F discovery board:
      It embeds a STM32MP235FAN SoC, with 2GB of LPDDR4,
      1*USB2 peripheral bus powered typeC, 1*ETH, wifi/BT combo,
      LCD 18bit connector, CSI camera connector, ...

* tag 'stm32-dt-for-v6.15-1' of https://git.kernel.org/pub/scm/linux/kernel/git/atorgue/stm32: (26 commits)
  arm64: dts: st: add stm32mp215f-dk board support
  dt-bindings: stm32: document stm32mp215f-dk board
  arm64: dts: st: introduce stm32mp21 SoCs family
  arm64: dts: st: add stm32mp235f-dk board support
  dt-bindings: stm32: document stm32mp235f-dk board
  arm64: dts: st: introduce stm32mp23 SoCs family
  dt-bindings: stm32: add STM32MP21 and STM32MP23 compatibles for syscon
  arm64: Kconfig: expand STM32 Armv8 SoC with STM32MP21/STM32MP23 SoCs family
  arm64: dts: st: add stm32mp257f-dk board support
  dt-bindings: stm32: document stm32mp257f-dk board
  ARM: dts: stm32: Add Plymovent AQM devicetree
  ARM: dts: stm32: Add pinmux groups for Plymovent AQM board
  dt-bindings: arm: stm32: Add Plymovent AQM board
  dt-bindings: sound: convert ICS-43432 binding to YAML
  ARM: dts: stm32: Add support for STM32MP13xx DHCOR SoM and DHSBC rev.200 board
  ARM: dts: stm32: use IRQ_TYPE_EDGE_FALLING on stm32mp157c-dk2
  ARM: dts: stm32: add usr3 LED node to stm32f769-disco
  ARM: dts: stm32: rename LEDs nodes for stm32f769-disco
  ARM: dts: stm32: add push button to stm32f746 Discovery board
  ARM: dts: stm32: add led to stm32f746 Discovery board
  ...

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
Arnd Bergmann 2025-03-19 21:42:19 +01:00
commit fc7136e149
32 changed files with 3765 additions and 25 deletions

View File

@ -21,6 +21,8 @@ properties:
- st,stm32f4-gcan
- st,stm32mp151-pwr-mcu
- st,stm32mp157-syscfg
- st,stm32mp21-syscfg
- st,stm32mp23-syscfg
- st,stm32mp25-syscfg
- const: syscon
- items:

View File

@ -51,9 +51,16 @@ properties:
- st,stm32mp135f-dk
- const: st,stm32mp135
- description: ST STM32MP133 based Boards
items:
- enum:
- pri,prihmb # Priva E-Measuringbox board
- const: st,stm32mp133
- description: ST STM32MP151 based Boards
items:
- enum:
- ply,plyaqm # Plymovent AQM board
- prt,mecio1r0 # Protonic MECIO1r0
- prt,mect1s # Protonic MECT1S
- prt,prtt1a # Protonic PRTT1A
@ -94,6 +101,8 @@ properties:
- description: Octavo OSD32MP153 System-in-Package based boards
items:
- enum:
- lxa,stm32mp153c-fairytux2-gen1 # Linux Automation FairyTux 2 (Generation 1)
- lxa,stm32mp153c-fairytux2-gen2 # Linux Automation FairyTux 2 (Generation 2)
- lxa,stm32mp153c-tac-gen3 # Linux Automation TAC (Generation 3)
- const: oct,stm32mp153x-osd32
- const: st,stm32mp153
@ -178,9 +187,22 @@ properties:
- description: ST STM32MP257 based Boards
items:
- enum:
- st,stm32mp257f-dk
- st,stm32mp257f-ev1
- const: st,stm32mp257
- description: ST STM32MP235 based Boards
items:
- enum:
- st,stm32mp235f-dk
- const: st,stm32mp235
- description: ST STM32MP215 based Boards
items:
- enum:
- st,stm32mp215f-dk
- const: st,stm32mp215
additionalProperties: true
...

View File

@ -1,19 +0,0 @@
Invensense ICS-43432-compatible MEMS microphone with I2S output.
There are no software configuration options for this device, indeed, the only
host connection is the I2S interface. Apart from requirements on clock
frequency (460 kHz to 3.379 MHz according to the data sheet) there must be
64 clock cycles in each stereo output frame; 24 of the 32 available bits
contain audio data. A hardware pin determines if the device outputs data
on the left or right channel of the I2S frame.
Required properties:
- compatible: should be one of the following.
"invensense,ics43432": For the Invensense ICS43432
"cui,cmm-4030d-261": For the CUI CMM-4030D-261-I2S-TR
Example:
ics43432: ics43432 {
compatible = "invensense,ics43432";
};

View File

@ -0,0 +1,51 @@
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/invensense,ics43432.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Invensense ICS-43432-compatible MEMS Microphone with I2S Output
maintainers:
- Oleksij Rempel <o.rempel@pengutronix.de>
description:
The ICS-43432 and compatible MEMS microphones output audio over an I2S
interface and require no software configuration. The only host connection
is the I2S bus. The microphone requires an I2S clock frequency between
460 kHz and 3.379 MHz and 64 clock cycles per stereo frame. Each frame
contains 32-bit slots per channel, with 24 bits carrying audio data.
A hardware pin determines whether the microphone outputs audio on the
left or right channel of the I2S frame.
allOf:
- $ref: dai-common.yaml#
properties:
compatible:
enum:
- invensense,ics43432
- cui,cmm-4030d-261
port:
$ref: audio-graph-port.yaml#
unevaluatedProperties: false
required:
- compatible
unevaluatedProperties: false
examples:
- |
ics43432: ics43432 {
compatible = "invensense,ics43432";
port {
endpoint {
remote-endpoint = <&i2s1_endpoint>;
dai-format = "i2s";
};
};
};

View File

@ -1204,6 +1204,8 @@ patternProperties:
description: Primux Trading, S.L.
"^probox2,.*":
description: PROBOX2 (by W2COMP Co., Ltd.)
"^pri,.*":
description: Priva
"^prt,.*":
description: Protonic Holland
"^pulsedlight,.*":

View File

@ -29,6 +29,7 @@ dtb-$(CONFIG_ARCH_STM32) += \
stm32h743i-eval.dtb \
stm32h743i-disco.dtb \
stm32h750i-art-pi.dtb \
stm32mp133c-prihmb.dtb \
stm32mp135f-dhcor-dhsbc.dtb \
stm32mp135f-dk.dtb \
stm32mp151a-prtt1a.dtb \
@ -37,8 +38,11 @@ dtb-$(CONFIG_ARCH_STM32) += \
stm32mp151a-dhcor-testbench.dtb \
stm32mp151c-mecio1r0.dtb \
stm32mp151c-mect1s.dtb \
stm32mp151c-plyaqm.dtb \
stm32mp153c-dhcom-drc02.dtb \
stm32mp153c-dhcor-drc-compact.dtb \
stm32mp153c-lxa-fairytux2-gen1.dtb \
stm32mp153c-lxa-fairytux2-gen2.dtb \
stm32mp153c-lxa-tac-gen3.dtb \
stm32mp153c-mecio1r1.dtb \
stm32mp157a-avenger96.dtb \

View File

@ -78,6 +78,24 @@
serial0 = &usart1;
};
leds {
compatible = "gpio-leds";
led-usr {
gpios = <&gpioi 1 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "heartbeat";
};
};
gpio-keys {
compatible = "gpio-keys";
autorepeat;
button-0 {
label = "User";
linux,code = <KEY_HOME>;
gpios = <&gpioi 11 GPIO_ACTIVE_HIGH>;
};
};
usbotg_hs_phy: usb-phy {
#phy-cells = <0>;
compatible = "usb-nop-xceiv";

View File

@ -79,13 +79,16 @@
leds {
compatible = "gpio-leds";
led-green {
led-usr2 {
gpios = <&gpioj 5 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "heartbeat";
};
led-red {
led-usr1 {
gpios = <&gpioj 13 GPIO_ACTIVE_HIGH>;
};
led-usr3 {
gpios = <&gpioa 12 GPIO_ACTIVE_HIGH>;
};
};
gpio-keys {

View File

@ -100,6 +100,31 @@
always-on;
};
thermal-zones {
cpu_thermal: cpu-thermal {
polling-delay-passive = <0>;
polling-delay = <0>;
thermal-sensors = <&dts>;
trips {
cpu_alert1: cpu-alert1 {
temperature = <85000>;
hysteresis = <0>;
type = "passive";
};
cpu-crit {
temperature = <120000>;
hysteresis = <0>;
type = "critical";
};
};
cooling-maps {
};
};
};
soc {
compatible = "simple-bus";
#address-cells = <1>;
@ -919,6 +944,16 @@
};
};
dts: thermal@50028000 {
compatible = "st,stm32-thermal";
reg = <0x50028000 0x100>;
interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&rcc DTS>;
clock-names = "pclk";
#thermal-sensor-cells = <0>;
status = "disabled";
};
mdma: dma-controller@58000000 {
compatible = "st,stm32h7-mdma";
reg = <0x58000000 0x1000>;

View File

@ -0,0 +1,496 @@
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
#include <dt-bindings/regulator/st,stm32mp13-regulator.h>
#include "stm32mp133.dtsi"
#include "stm32mp13xc.dtsi"
#include "stm32mp13-pinctrl.dtsi"
/ {
model = "Priva E-Measuringbox board";
compatible = "pri,prihmb", "st,stm32mp133";
aliases {
ethernet0 = &ethernet1;
mdio-gpio0 = &mdio0;
mmc0 = &sdmmc1;
mmc1 = &sdmmc2;
serial0 = &uart4;
serial1 = &usart6;
serial2 = &uart7;
};
chosen {
stdout-path = "serial0:115200n8";
};
counter-0 {
compatible = "interrupt-counter";
gpios = <&gpioa 11 GPIO_ACTIVE_HIGH>;
};
gpio-keys {
compatible = "gpio-keys";
autorepeat;
button-reset {
label = "reset-button";
linux,code = <BTN_1>;
gpios = <&gpioi 7 GPIO_ACTIVE_LOW>;
};
};
leds {
compatible = "gpio-leds";
led-blue {
function = LED_FUNCTION_HEARTBEAT;
color = <LED_COLOR_ID_BLUE>;
gpios = <&gpioa 14 GPIO_ACTIVE_LOW>;
linux,default-trigger = "heartbeat";
default-state = "off";
};
};
led-controller-0 {
compatible = "pwm-leds-multicolor";
multi-led {
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_STATUS;
max-brightness = <255>;
led-red {
active-low;
color = <LED_COLOR_ID_RED>;
pwms = <&pwm2 2 1000000 1>;
};
led-green {
active-low;
color = <LED_COLOR_ID_GREEN>;
pwms = <&pwm1 1 1000000 1>;
};
led-blue {
active-low;
color = <LED_COLOR_ID_BLUE>;
pwms = <&pwm1 2 1000000 1>;
};
};
};
led-controller-1 {
compatible = "pwm-leds-multicolor";
multi-led {
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_STATUS;
max-brightness = <255>;
led-red {
active-low;
color = <LED_COLOR_ID_RED>;
pwms = <&pwm1 0 1000000 1>;
};
led-green {
active-low;
color = <LED_COLOR_ID_GREEN>;
pwms = <&pwm2 0 1000000 1>;
};
led-blue {
active-low;
color = <LED_COLOR_ID_BLUE>;
pwms = <&pwm2 1 1000000 1>;
};
};
};
/* DP83TD510E PHYs have max MDC rate of 1.75MHz. Since we can't reduce
* stmmac MDC clock without reducing system bus rate, we need to use
* gpio based MDIO bus.
*/
mdio0: mdio {
compatible = "virtual,mdio-gpio";
#address-cells = <1>;
#size-cells = <0>;
gpios = <&gpiog 2 GPIO_ACTIVE_HIGH
&gpioa 2 GPIO_ACTIVE_HIGH>;
/* TI DP83TD510E */
phy0: ethernet-phy@0 {
compatible = "ethernet-phy-id2000.0181";
reg = <0>;
interrupts-extended = <&gpioa 4 IRQ_TYPE_LEVEL_LOW>;
reset-gpios = <&gpioa 3 GPIO_ACTIVE_LOW>;
reset-assert-us = <10>;
reset-deassert-us = <35>;
};
};
memory@c0000000 {
device_type = "memory";
reg = <0xc0000000 0x10000000>;
};
reg_3v3: regulator-3v3 {
compatible = "regulator-fixed";
regulator-name = "3v3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};
reserved-memory {
#address-cells = <1>;
#size-cells = <1>;
ranges;
optee@ce000000 {
reg = <0xce000000 0x02000000>;
no-map;
};
};
};
&adc_1 {
pinctrl-names = "default";
pinctrl-0 = <&adc_1_pins_a>;
vdda-supply = <&reg_3v3>;
vref-supply = <&reg_3v3>;
status = "okay";
};
&adc1 {
status = "okay";
channel@0 { /* Fan current PC0*/
reg = <0>;
st,min-sample-time-ns = <10000>; /* 10µs sampling time */
};
channel@11 { /* Fan voltage */
reg = <11>;
st,min-sample-time-ns = <10000>; /* 10µs sampling time */
};
channel@15 { /* Supply voltage */
reg = <15>;
st,min-sample-time-ns = <10000>; /* 10µs sampling time */
};
};
&dts {
status = "okay";
};
&ethernet1 {
status = "okay";
pinctrl-0 = <&ethernet1_rmii_pins_a>;
pinctrl-1 = <&ethernet1_rmii_sleep_pins_a>;
pinctrl-names = "default", "sleep";
phy-mode = "rmii";
phy-handle = <&phy0>;
};
&i2c1 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&i2c1_pins_a>;
pinctrl-1 = <&i2c1_sleep_pins_a>;
clock-frequency = <100000>;
/delete-property/dmas;
/delete-property/dma-names;
status = "okay";
board-sensor@48 {
compatible = "ti,tmp1075";
reg = <0x48>;
vs-supply = <&reg_3v3>;
};
};
&{i2c1_pins_a/pins} {
pinmux = <STM32_PINMUX('D', 3, AF5)>, /* I2C1_SCL */
<STM32_PINMUX('B', 8, AF4)>; /* I2C1_SDA */
bias-disable;
drive-open-drain;
slew-rate = <0>;
};
&{i2c1_sleep_pins_a/pins} {
pinmux = <STM32_PINMUX('D', 3, ANALOG)>, /* I2C1_SCL */
<STM32_PINMUX('B', 8, ANALOG)>; /* I2C1_SDA */
};
&iwdg2 {
timeout-sec = <32>;
status = "okay";
};
/* SD card without Card-detect */
&sdmmc1 {
pinctrl-names = "default", "opendrain", "sleep";
pinctrl-0 = <&sdmmc1_b4_pins_a &sdmmc1_clk_pins_a>;
pinctrl-1 = <&sdmmc1_b4_od_pins_a &sdmmc1_clk_pins_a>;
pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>;
broken-cd;
no-sdio;
no-1-8-v;
st,neg-edge;
bus-width = <4>;
vmmc-supply = <&reg_3v3>;
status = "okay";
};
/* EMMC */
&sdmmc2 {
pinctrl-names = "default", "opendrain", "sleep";
pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_d47_pins_a &sdmmc2_clk_pins_a>;
pinctrl-1 = <&sdmmc2_b4_od_pins_a &sdmmc2_d47_pins_a &sdmmc2_clk_pins_a>;
pinctrl-2 = <&sdmmc2_b4_sleep_pins_a &sdmmc2_d47_sleep_pins_a>;
non-removable;
no-sd;
no-sdio;
no-1-8-v;
st,neg-edge;
mmc-ddr-3_3v;
bus-width = <8>;
vmmc-supply = <&reg_3v3>;
status = "okay";
};
&timers1 {
status = "okay";
/delete-property/dmas;
/delete-property/dma-names;
pwm1: pwm {
pinctrl-0 = <&pwm1_pins_a>;
pinctrl-1 = <&pwm1_sleep_pins_a>;
pinctrl-names = "default", "sleep";
status = "okay";
};
};
&timers4 {
status = "okay";
/delete-property/dmas;
/delete-property/dma-names;
pwm2: pwm {
pinctrl-0 = <&pwm4_pins_a>;
pinctrl-1 = <&pwm4_sleep_pins_a>;
pinctrl-names = "default", "sleep";
status = "okay";
};
};
/* Fan PWM */
&timers5 {
status = "okay";
pwm3: pwm {
pinctrl-0 = <&pwm5_pins_a>;
pinctrl-1 = <&pwm5_sleep_pins_a>;
pinctrl-names = "default", "sleep";
status = "okay";
};
};
&timers2 {
status = "okay";
timer@1 {
status = "okay";
};
};
&uart4 {
pinctrl-names = "default", "sleep", "idle";
pinctrl-0 = <&uart4_pins_a>;
pinctrl-1 = <&uart4_sleep_pins_a>;
pinctrl-2 = <&uart4_idle_pins_a>;
/delete-property/dmas;
/delete-property/dma-names;
status = "okay";
};
&uart7 {
pinctrl-names = "default", "sleep", "idle";
pinctrl-0 = <&uart7_pins_a>;
pinctrl-1 = <&uart7_sleep_pins_a>;
pinctrl-2 = <&uart7_idle_pins_a>;
/delete-property/dmas;
/delete-property/dma-names;
status = "okay";
};
&usart6 {
pinctrl-names = "default", "sleep", "idle";
pinctrl-0 = <&usart6_pins_a>;
pinctrl-1 = <&usart6_sleep_pins_a>;
pinctrl-2 = <&usart6_idle_pins_a>;
linux,rs485-enabled-at-boot-time;
/delete-property/dmas;
/delete-property/dma-names;
status = "okay";
};
&pinctrl {
adc_1_pins_a: adc1-0 {
pins {
pinmux = <STM32_PINMUX('C', 0, ANALOG)>, /* ADC1 in0 */
<STM32_PINMUX('C', 2, ANALOG)>, /* ADC1 in15 */
<STM32_PINMUX('F', 13, ANALOG)>; /* ADC1 in11 */
};
};
ethernet1_rmii_pins_a: rmii-0 {
pins1 {
pinmux = <STM32_PINMUX('G', 13, AF11)>, /* ETH1_RMII_TXD0 */
<STM32_PINMUX('G', 14, AF11)>, /* ETH1_RMII_TXD1 */
<STM32_PINMUX('B', 11, AF11)>, /* ETH1_RMII_TX_EN */
<STM32_PINMUX('A', 1, AF11)>; /* ETH1_RMII_REF_CLK */
bias-disable;
drive-push-pull;
slew-rate = <2>;
};
pins2 {
pinmux = <STM32_PINMUX('C', 4, AF11)>, /* ETH1_RMII_RXD0 */
<STM32_PINMUX('C', 5, AF11)>, /* ETH1_RMII_RXD1 */
<STM32_PINMUX('A', 7, AF11)>; /* ETH1_RMII_CRS_DV */
bias-disable;
};
};
ethernet1_rmii_sleep_pins_a: rmii-sleep-0 {
pins1 {
pinmux = <STM32_PINMUX('G', 13, ANALOG)>, /* ETH1_RMII_TXD0 */
<STM32_PINMUX('G', 14, ANALOG)>, /* ETH1_RMII_TXD1 */
<STM32_PINMUX('B', 11, ANALOG)>, /* ETH1_RMII_TX_EN */
<STM32_PINMUX('C', 4, ANALOG)>, /* ETH1_RMII_RXD0 */
<STM32_PINMUX('C', 5, ANALOG)>, /* ETH1_RMII_RXD1 */
<STM32_PINMUX('A', 1, ANALOG)>, /* ETH1_RMII_REF_CLK */
<STM32_PINMUX('A', 7, ANALOG)>; /* ETH1_RMII_CRS_DV */
};
};
pwm1_pins_a: pwm1-0 {
pins {
pinmux = <STM32_PINMUX('E', 9, AF1)>, /* TIM1_CH1 */
<STM32_PINMUX('E', 11, AF1)>, /* TIM1_CH2 */
<STM32_PINMUX('E', 13, AF1)>; /* TIM1_CH3 */
bias-pull-down;
drive-push-pull;
slew-rate = <0>;
};
};
pwm1_sleep_pins_a: pwm1-sleep-0 {
pins {
pinmux = <STM32_PINMUX('E', 9, ANALOG)>, /* TIM1_CH1 */
<STM32_PINMUX('E', 11, ANALOG)>, /* TIM1_CH2 */
<STM32_PINMUX('E', 13, ANALOG)>; /* TIM1_CH3 */
};
};
pwm4_pins_a: pwm4-0 {
pins {
pinmux = <STM32_PINMUX('D', 12, AF2)>, /* TIM4_CH1 */
<STM32_PINMUX('B', 7, AF2)>, /* TIM4_CH2 */
<STM32_PINMUX('D', 14, AF2)>; /* TIM4_CH3 */
bias-pull-down;
drive-push-pull;
slew-rate = <0>;
};
};
pwm4_sleep_pins_a: pwm4-sleep-0 {
pins {
pinmux = <STM32_PINMUX('D', 12, ANALOG)>, /* TIM4_CH1 */
<STM32_PINMUX('B', 7, ANALOG)>, /* TIM4_CH2 */
<STM32_PINMUX('D', 14, ANALOG)>; /* TIM4_CH3 */
};
};
pwm5_pins_a: pwm5-0 {
pins {
pinmux = <STM32_PINMUX('A', 0, AF2)>; /* TIM5_CH1 */
};
};
pwm5_sleep_pins_a: pwm5-sleep-0 {
pins {
pinmux = <STM32_PINMUX('A', 0, ANALOG)>; /* TIM5_CH1 */
};
};
uart7_pins_a: uart7-0 {
pins1 {
pinmux = <STM32_PINMUX('E', 8, AF7)>; /* UART_TX */
bias-disable;
drive-push-pull;
slew-rate = <0>;
};
pins2 {
pinmux = <STM32_PINMUX('E', 10, AF7)>; /* UART7_RX */
bias-pull-up;
};
};
uart7_idle_pins_a: uart7-idle-0 {
pins1 {
pinmux = <STM32_PINMUX('E', 8, ANALOG)>; /* UART7_TX */
};
pins2 {
pinmux = <STM32_PINMUX('E', 10, AF7)>; /* UART7_RX */
bias-pull-up;
};
};
uart7_sleep_pins_a: uart7-sleep-0 {
pins {
pinmux = <STM32_PINMUX('E', 8, ANALOG)>, /* UART7_TX */
<STM32_PINMUX('E', 10, ANALOG)>; /* UART7_RX */
};
};
usart6_pins_a: usart6-0 {
pins1 {
pinmux = <STM32_PINMUX('F', 8, AF7)>, /* USART6_TX */
<STM32_PINMUX('F', 10, AF7)>; /* USART6_DE */
bias-disable;
drive-push-pull;
slew-rate = <0>;
};
pins2 {
pinmux = <STM32_PINMUX('H', 11, AF7)>; /* USART6_RX */
bias-disable;
};
};
usart6_idle_pins_a: usart6-idle-0 {
pins1 {
pinmux = <STM32_PINMUX('F', 8, ANALOG)>; /* USART6_TX */
};
pins2 {
pinmux = <STM32_PINMUX('F', 10, AF7)>; /* USART6_DE */
bias-disable;
drive-push-pull;
slew-rate = <0>;
};
pins3 {
pinmux = <STM32_PINMUX('H', 11, AF7)>; /* USART6_RX */
bias-disable;
};
};
usart6_sleep_pins_a: usart6-sleep-0 {
pins {
pinmux = <STM32_PINMUX('F', 8, ANALOG)>, /* USART6_TX */
<STM32_PINMUX('F', 10, ANALOG)>, /* USART6_DE */
<STM32_PINMUX('H', 11, ANALOG)>; /* USART6_RX */
};
};
};

View File

@ -176,7 +176,7 @@
gpio-line-names = "", "", "", "",
"", "DHSBC_USB_PWR_CC1", "", "",
"", "", "", "DHSBC_nETH1_RST",
"", "DHCOR_HW-CODING_0", "", "";
"", "DHCOR_HW-CODING_0", "", "DHSBC_HW-CODE_2";
};
&gpiob {
@ -197,7 +197,7 @@
gpio-line-names = "", "", "", "",
"", "DHCOR_RAM-CODING_0", "", "",
"", "DHCOR_RAM-CODING_1", "", "",
"", "", "", "";
"", "DHSBC_HW-CODE_1", "", "";
};
&gpioe {
@ -221,6 +221,13 @@
"DHSBC_ETH1_INTB", "", "", "DHSBC_ETH2_INTB";
};
&gpioh {
gpio-line-names = "", "", "", "DHSBC_HW-CODE_0",
"", "", "", "",
"", "", "", "",
"", "", "", "";
};
&gpioi {
gpio-line-names = "DHCOR_RTC_nINT", "DHCOR_HW-CODING_1",
"DHCOR_BT_REG_ON", "DHCOR_PMIC_nINT",
@ -296,6 +303,9 @@
st33htph: tpm@0 {
compatible = "st,st33htpm-spi", "tcg,tpm_tis-spi";
reg = <0>;
interrupt-parent = <&gpioe>;
interrupts = <9 IRQ_TYPE_LEVEL_LOW>;
reset-gpios = <&gpioe 12 GPIO_ACTIVE_LOW>;
spi-max-frequency = <24000000>;
};
};
@ -419,3 +429,19 @@
type = "micro";
};
};
/* LDO2 is expansion connector 3V3 supply on STM32MP13xx DHCOR DHSBC rev.200 */
&vdd_ldo2 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};
/* LDO5 is carrier board 3V3 supply on STM32MP13xx DHCOR DHSBC rev.200 */
&vdd_sd {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};

View File

@ -25,6 +25,13 @@
};
};
/omit-if-no-ref/
adc1_in10_pins_a: adc1-in10-0 {
pins {
pinmux = <STM32_PINMUX('C', 0, ANALOG)>;
};
};
/omit-if-no-ref/
adc12_ain_pins_a: adc12-ain-0 {
pins {
@ -584,6 +591,43 @@
};
};
/omit-if-no-ref/
ethernet0_rmii_pins_d: rmii-3 {
pins1 {
pinmux = <STM32_PINMUX('B', 12, AF11)>, /* ETH1_RMII_TXD0 */
<STM32_PINMUX('B', 13, AF11)>, /* ETH1_RMII_TXD1 */
<STM32_PINMUX('B', 11, AF11)>, /* ETH1_RMII_TX_EN */
<STM32_PINMUX('A', 1, AF11)>, /* ETH1_RMII_REF_CLK */
<STM32_PINMUX('A', 2, AF11)>, /* ETH1_MDIO */
<STM32_PINMUX('C', 1, AF11)>; /* ETH1_MDC */
bias-disable;
drive-push-pull;
slew-rate = <2>;
};
pins2 {
pinmux = <STM32_PINMUX('C', 4, AF11)>, /* ETH1_RMII_RXD0 */
<STM32_PINMUX('C', 5, AF11)>, /* ETH1_RMII_RXD1 */
<STM32_PINMUX('A', 7, AF11)>; /* ETH1_RMII_CRS_DV */
bias-disable;
};
};
/omit-if-no-ref/
ethernet0_rmii_sleep_pins_d: rmii-sleep-3 {
pins1 {
pinmux = <STM32_PINMUX('B', 12, ANALOG)>, /* ETH1_RMII_TXD0 */
<STM32_PINMUX('B', 13, ANALOG)>, /* ETH1_RMII_TXD1 */
<STM32_PINMUX('B', 11, ANALOG)>, /* ETH1_RMII_TX_EN */
<STM32_PINMUX('A', 2, ANALOG)>, /* ETH1_MDIO */
<STM32_PINMUX('C', 1, ANALOG)>, /* ETH1_MDC */
<STM32_PINMUX('C', 4, ANALOG)>, /* ETH1_RMII_RXD0 */
<STM32_PINMUX('C', 5, ANALOG)>, /* ETH1_RMII_RXD1 */
<STM32_PINMUX('A', 1, ANALOG)>, /* ETH1_RMII_REF_CLK */
<STM32_PINMUX('A', 7, ANALOG)>; /* ETH1_RMII_CRS_DV */
};
};
/omit-if-no-ref/
fmc_pins_a: fmc-0 {
pins1 {
@ -725,6 +769,25 @@
};
};
/omit-if-no-ref/
i2c1_pins_c: i2c1-2 {
pins {
pinmux = <STM32_PINMUX('D', 12, AF5)>, /* I2C1_SCL */
<STM32_PINMUX('D', 13, AF5)>; /* I2C1_SDA */
bias-disable;
drive-open-drain;
slew-rate = <0>;
};
};
/omit-if-no-ref/
i2c1_sleep_pins_c: i2c1-sleep-2 {
pins {
pinmux = <STM32_PINMUX('D', 12, ANALOG)>, /* I2C1_SCL */
<STM32_PINMUX('D', 13, ANALOG)>; /* I2C1_SDA */
};
};
/omit-if-no-ref/
i2c2_pins_a: i2c2-0 {
pins {
@ -819,6 +882,27 @@
};
};
/omit-if-no-ref/
i2s1_pins_a: i2s1-0 {
pins {
pinmux = <STM32_PINMUX('A', 6, AF5)>, /* I2S2_SDI */
<STM32_PINMUX('A', 4, AF5)>, /* I2S2_WS */
<STM32_PINMUX('A', 5, AF5)>; /* I2S2_CK */
slew-rate = <0>;
drive-push-pull;
bias-disable;
};
};
/omit-if-no-ref/
i2s1_sleep_pins_a: i2s1-sleep-0 {
pins {
pinmux = <STM32_PINMUX('A', 6, ANALOG)>, /* I2S2_SDI */
<STM32_PINMUX('A', 4, ANALOG)>, /* I2S2_WS */
<STM32_PINMUX('A', 5, ANALOG)>; /* I2S2_CK */
};
};
/omit-if-no-ref/
i2s2_pins_a: i2s2-0 {
pins {
@ -1418,6 +1502,23 @@
};
};
/omit-if-no-ref/
pwm1_pins_d: pwm1-3 {
pins {
pinmux = <STM32_PINMUX('A', 0, AF2)>; /* TIM5_CH1 */
bias-pull-down;
drive-push-pull;
slew-rate = <0>;
};
};
/omit-if-no-ref/
pwm1_sleep_pins_d: pwm1-sleep-3 {
pins {
pinmux = <STM32_PINMUX('A', 0, ANALOG)>;
};
};
/omit-if-no-ref/
pwm2_pins_a: pwm2-0 {
pins {
@ -2160,6 +2261,66 @@
};
};
/omit-if-no-ref/
sdmmc2_b4_pins_c: sdmmc2-b4-2 {
pins1 {
pinmux = <STM32_PINMUX('B', 14, AF9)>, /* SDMMC2_D0 */
<STM32_PINMUX('B', 7, AF10)>, /* SDMMC2_D1 */
<STM32_PINMUX('B', 3, AF9)>, /* SDMMC2_D2 */
<STM32_PINMUX('B', 4, AF9)>, /* SDMMC2_D3 */
<STM32_PINMUX('G', 6, AF10)>; /* SDMMC2_CMD */
slew-rate = <1>;
drive-push-pull;
bias-pull-up;
};
pins2 {
pinmux = <STM32_PINMUX('E', 3, AF9)>; /* SDMMC2_CK */
slew-rate = <2>;
drive-push-pull;
bias-pull-up;
};
};
/omit-if-no-ref/
sdmmc2_b4_od_pins_c: sdmmc2-b4-od-2 {
pins1 {
pinmux = <STM32_PINMUX('B', 14, AF9)>, /* SDMMC2_D0 */
<STM32_PINMUX('B', 7, AF10)>, /* SDMMC2_D1 */
<STM32_PINMUX('B', 3, AF9)>, /* SDMMC2_D2 */
<STM32_PINMUX('B', 4, AF9)>; /* SDMMC2_D3 */
slew-rate = <1>;
drive-push-pull;
bias-pull-up;
};
pins2 {
pinmux = <STM32_PINMUX('E', 3, AF9)>; /* SDMMC2_CK */
slew-rate = <2>;
drive-push-pull;
bias-pull-up;
};
pins3 {
pinmux = <STM32_PINMUX('G', 6, AF10)>; /* SDMMC2_CMD */
slew-rate = <1>;
drive-open-drain;
bias-pull-up;
};
};
/omit-if-no-ref/
sdmmc2_b4_sleep_pins_c: sdmmc2-b4-sleep-2 {
pins {
pinmux = <STM32_PINMUX('B', 14, ANALOG)>, /* SDMMC2_D0 */
<STM32_PINMUX('B', 7, ANALOG)>, /* SDMMC2_D1 */
<STM32_PINMUX('B', 3, ANALOG)>, /* SDMMC2_D2 */
<STM32_PINMUX('B', 4, ANALOG)>, /* SDMMC2_D3 */
<STM32_PINMUX('E', 3, ANALOG)>, /* SDMMC2_CK */
<STM32_PINMUX('G', 6, ANALOG)>; /* SDMMC2_CMD */
};
};
/omit-if-no-ref/
sdmmc2_d47_pins_a: sdmmc2-d47-0 {
pins {
@ -2389,6 +2550,66 @@
};
};
/omit-if-no-ref/
sdmmc3_b4_pins_c: sdmmc3-b4-2 {
pins1 {
pinmux = <STM32_PINMUX('D', 1, AF10)>, /* SDMMC3_D0 */
<STM32_PINMUX('D', 4, AF10)>, /* SDMMC3_D1 */
<STM32_PINMUX('D', 5, AF10)>, /* SDMMC3_D2 */
<STM32_PINMUX('D', 7, AF10)>, /* SDMMC3_D3 */
<STM32_PINMUX('D', 0, AF10)>; /* SDMMC3_CMD */
slew-rate = <1>;
drive-push-pull;
bias-pull-up;
};
pins2 {
pinmux = <STM32_PINMUX('G', 15, AF10)>; /* SDMMC3_CK */
slew-rate = <2>;
drive-push-pull;
bias-pull-up;
};
};
/omit-if-no-ref/
sdmmc3_b4_od_pins_c: sdmmc3-b4-od-2 {
pins1 {
pinmux = <STM32_PINMUX('D', 1, AF10)>, /* SDMMC3_D0 */
<STM32_PINMUX('D', 4, AF10)>, /* SDMMC3_D1 */
<STM32_PINMUX('D', 5, AF10)>, /* SDMMC3_D2 */
<STM32_PINMUX('D', 7, AF10)>; /* SDMMC3_D3 */
slew-rate = <1>;
drive-push-pull;
bias-pull-up;
};
pins2 {
pinmux = <STM32_PINMUX('G', 15, AF10)>; /* SDMMC3_CK */
slew-rate = <2>;
drive-push-pull;
bias-pull-up;
};
pins3 {
pinmux = <STM32_PINMUX('D', 0, AF10)>; /* SDMMC3_CMD */
slew-rate = <1>;
drive-open-drain;
bias-pull-up;
};
};
/omit-if-no-ref/
sdmmc3_b4_sleep_pins_c: sdmmc3-b4-sleep-2 {
pins {
pinmux = <STM32_PINMUX('D', 1, ANALOG)>, /* SDMMC3_D0 */
<STM32_PINMUX('D', 4, ANALOG)>, /* SDMMC3_D1 */
<STM32_PINMUX('D', 5, ANALOG)>, /* SDMMC3_D2 */
<STM32_PINMUX('D', 7, ANALOG)>, /* SDMMC3_D3 */
<STM32_PINMUX('G', 15, ANALOG)>, /* SDMMC3_CK */
<STM32_PINMUX('D', 0, ANALOG)>; /* SDMMC3_CMD */
};
};
/omit-if-no-ref/
spdifrx_pins_a: spdifrx-0 {
pins {
@ -2600,6 +2821,41 @@
};
};
/omit-if-no-ref/
uart4_pins_e: uart4-4 {
pins1 {
pinmux = <STM32_PINMUX('G', 11, AF6)>; /* UART4_TX */
bias-disable;
drive-push-pull;
slew-rate = <0>;
};
pins2 {
pinmux = <STM32_PINMUX('B', 8, AF8)>; /* UART4_RX */
bias-disable;
};
};
/omit-if-no-ref/
uart4_idle_pins_e: uart4-idle-4 {
pins1 {
pinmux = <STM32_PINMUX('G', 11, ANALOG)>; /* UART4_TX */
};
pins2 {
pinmux = <STM32_PINMUX('B', 8, AF8)>; /* UART4_RX */
bias-disable;
};
};
/omit-if-no-ref/
uart4_sleep_pins_e: uart4-sleep-4 {
pins {
pinmux = <STM32_PINMUX('G', 11, ANALOG)>, /* UART4_TX */
<STM32_PINMUX('B', 8, ANALOG)>; /* UART4_RX */
};
};
/omit-if-no-ref/
uart5_pins_a: uart5-0 {
pins1 {
@ -2677,6 +2933,23 @@
};
};
/omit-if-no-ref/
uart7_pins_d: uart7-3 {
pins1 {
pinmux = <STM32_PINMUX('F', 7, AF7)>, /* UART7_TX */
<STM32_PINMUX('F', 8, AF7)>; /* UART7_RTS */
bias-disable;
drive-push-pull;
slew-rate = <0>;
};
pins2 {
pinmux = <STM32_PINMUX('E', 7, AF7)>, /* UART7_RX */
<STM32_PINMUX('F', 9, AF7)>; /* UART7_CTS */
bias-disable;
};
};
/omit-if-no-ref/
uart8_pins_a: uart8-0 {
pins1 {
@ -3118,6 +3391,25 @@
};
};
/omit-if-no-ref/
i2c6_pins_b: i2c6-1 {
pins {
pinmux = <STM32_PINMUX('A', 11, AF2)>, /* I2C6_SCL */
<STM32_PINMUX('A', 12, AF2)>; /* I2C6_SDA */
bias-disable;
drive-open-drain;
slew-rate = <0>;
};
};
/omit-if-no-ref/
i2c6_sleep_pins_b: i2c6-sleep-1 {
pins {
pinmux = <STM32_PINMUX('A', 11, ANALOG)>, /* I2C6_SCL */
<STM32_PINMUX('A', 12, ANALOG)>; /* I2C6_SDA */
};
};
/omit-if-no-ref/
spi1_pins_a: spi1-0 {
pins1 {

View File

@ -0,0 +1,376 @@
// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
/dts-v1/;
#include <arm/st/stm32mp151.dtsi>
#include <arm/st/stm32mp15xc.dtsi>
#include <arm/st/stm32mp15-pinctrl.dtsi>
#include <arm/st/stm32mp15xxad-pinctrl.dtsi>
#include <arm/st/stm32mp15-scmi.dtsi>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/leds/common.h>
/ {
model = "Plymovent AQM board";
compatible = "ply,plyaqm", "st,stm32mp151";
aliases {
ethernet0 = &ethernet0;
serial0 = &uart4;
serial1 = &uart7;
};
codec {
compatible = "invensense,ics43432";
port {
codec_endpoint: endpoint {
remote-endpoint = <&i2s1_endpoint>;
dai-format = "i2s";
};
};
};
firmware {
optee {
compatible = "linaro,optee-tz";
method = "smc";
};
};
leds {
compatible = "gpio-leds";
led-0 {
gpios = <&gpioa 3 GPIO_ACTIVE_HIGH>; /* WHITE_EN */
color = <LED_COLOR_ID_WHITE>;
default-state = "on";
};
};
v3v3: fixed-regulator-v3v3 {
compatible = "regulator-fixed";
regulator-name = "v3v3";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};
v5v_sw: fixed-regulator-v5sw {
compatible = "regulator-fixed";
regulator-name = "5v-switched";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
gpio = <&gpioe 10 GPIO_ACTIVE_HIGH>; /* 5V_SWITCHED_EN */
startup-delay-us = <100000>;
enable-active-high;
regulator-boot-on;
};
reserved-memory {
#address-cells = <1>;
#size-cells = <1>;
ranges;
optee@cfd00000 {
reg = <0xcfd00000 0x300000>;
no-map;
};
};
sound {
compatible = "audio-graph-card";
label = "STM32MP15";
dais = <&i2s1_port>;
};
wifi_pwrseq: wifi-pwrseq {
compatible = "mmc-pwrseq-simple";
reset-gpios = <&gpioe 12 GPIO_ACTIVE_LOW>; /* WLAN_REG_ON */
};
};
&adc {
pinctrl-names = "default";
pinctrl-0 = <&adc1_in10_pins_a>;
vdda-supply = <&v3v3>;
vref-supply = <&v3v3>;
status = "okay";
adc@0 {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
channel@10 { /* NTC */
reg = <10>;
st,min-sample-time-ns = <10000>; /* 10µs sampling time */
};
};
};
&cpu0 {
clocks = <&scmi_clk CK_SCMI_MPU>;
};
&cryp1 {
clocks = <&scmi_clk CK_SCMI_CRYP1>;
resets = <&scmi_reset RST_SCMI_CRYP1>;
status = "okay";
};
&ethernet0 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&ethernet0_rmii_pins_d>;
pinctrl-1 = <&ethernet0_rmii_sleep_pins_d>;
phy-mode = "rmii";
max-speed = <100>;
phy-handle = <&ethphy0>;
status = "okay";
mdio {
#address-cells = <1>;
#size-cells = <0>;
compatible = "snps,dwmac-mdio";
/* KSZ8081RNA PHY */
ethphy0: ethernet-phy@0 {
reg = <0>;
interrupts-extended = <&gpiob 0 IRQ_TYPE_LEVEL_LOW>;
reset-gpios = <&gpiob 1 GPIO_ACTIVE_LOW>;
reset-assert-us = <10000>;
reset-deassert-us = <300>;
};
};
};
&gpioa {
gpio-line-names =
"", "", "", "", "", "", "", "",
"", "", "", "", "", "HWID_PL_N", "HWID_CP", "";
};
&gpiob {
gpio-line-names =
"", "", "", "", "", "", "LED_LATCH", "",
"", "RELAY1_EN", "", "", "", "", "", "";
};
&gpioc {
gpio-line-names =
"", "", "", "", "", "", "", "",
"", "", "", "", "", "HWID_Q7", "", "";
};
&gpioe {
gpio-line-names =
"", "", "", "", "RELAY2_EN", "", "", "",
"", "", "", "", "", "", "", "";
};
&gpiog {
gpio-line-names =
"", "", "", "", "", "", "", "SW1",
"", "", "", "", "", "", "", "";
};
&gpioz {
clocks = <&scmi_clk CK_SCMI_GPIOZ>;
};
&hash1 {
clocks = <&scmi_clk CK_SCMI_HASH1>;
resets = <&scmi_reset RST_SCMI_HASH1>;
};
&i2c1 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&i2c1_pins_c>;
pinctrl-1 = <&i2c1_sleep_pins_c>;
i2c-scl-rising-time-ns = <185>;
i2c-scl-falling-time-ns = <20>;
status = "okay";
/delete-property/dmas;
/delete-property/dma-names;
};
&i2c4 {
clocks = <&scmi_clk CK_SCMI_I2C4>;
resets = <&scmi_reset RST_SCMI_I2C4>;
};
&i2c6 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&i2c6_pins_b>;
pinctrl-1 = <&i2c6_sleep_pins_b>;
i2c-scl-rising-time-ns = <185>;
i2c-scl-falling-time-ns = <20>;
clocks = <&scmi_clk CK_SCMI_I2C6>;
resets = <&scmi_reset RST_SCMI_I2C6>;
status = "okay";
/delete-property/dmas;
/delete-property/dma-names;
pressure-sensor@47 {
compatible = "bosch,bmp580";
reg = <0x47>;
vdda-supply = <&v5v_sw>;
vddd-supply = <&v5v_sw>;
};
co2-sensor@62 {
compatible = "sensirion,scd41";
reg = <0x62>;
vdd-supply = <&v5v_sw>;
};
pm-sensor@69 {
compatible = "sensirion,sps30";
reg = <0x69>;
};
};
&i2s1 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&i2s1_pins_a>;
pinctrl-1 = <&i2s1_sleep_pins_a>;
clocks = <&rcc SPI1>, <&rcc SPI1_K>, <&rcc PLL3_Q>, <&rcc PLL3_R>;
clock-names = "pclk", "i2sclk", "x8k", "x11k";
#clock-cells = <0>; /* Set I2S2 as master clock provider */
status = "okay";
i2s1_port: port {
i2s1_endpoint: endpoint {
format = "i2s";
mclk-fs = <256>;
remote-endpoint = <&codec_endpoint>;
};
};
};
&iwdg2 {
clocks = <&rcc IWDG2>, <&scmi_clk CK_SCMI_LSI>;
status = "okay";
};
&m4_rproc {
/delete-property/ st,syscfg-holdboot;
resets = <&scmi_reset RST_SCMI_MCU>,
<&scmi_reset RST_SCMI_MCU_HOLD_BOOT>;
reset-names = "mcu_rst", "hold_boot";
};
&mdma1 {
resets = <&scmi_reset RST_SCMI_MDMA>;
};
&rcc {
compatible = "st,stm32mp1-rcc-secure", "syscon";
clock-names = "hse", "hsi", "csi", "lse", "lsi";
clocks = <&scmi_clk CK_SCMI_HSE>,
<&scmi_clk CK_SCMI_HSI>,
<&scmi_clk CK_SCMI_CSI>,
<&scmi_clk CK_SCMI_LSE>,
<&scmi_clk CK_SCMI_LSI>;
};
&rng1 {
clocks = <&scmi_clk CK_SCMI_RNG1>;
resets = <&scmi_reset RST_SCMI_RNG1>;
status = "okay";
};
&rtc {
clocks = <&scmi_clk CK_SCMI_RTCAPB>, <&scmi_clk CK_SCMI_RTC>;
};
/* SD card without Card-detect */
&sdmmc1 {
pinctrl-names = "default", "opendrain", "sleep";
pinctrl-0 = <&sdmmc1_b4_pins_a>;
pinctrl-1 = <&sdmmc1_b4_od_pins_a>;
pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>;
broken-cd;
no-sdio;
no-1-8-v;
st,neg-edge;
bus-width = <4>;
vmmc-supply = <&v3v3>;
status = "okay";
};
/* EMMC */
&sdmmc2 {
pinctrl-names = "default", "opendrain", "sleep";
pinctrl-0 = <&sdmmc2_b4_pins_c &sdmmc2_d47_pins_b>;
pinctrl-1 = <&sdmmc2_b4_od_pins_c &sdmmc2_d47_pins_b>;
pinctrl-2 = <&sdmmc2_b4_sleep_pins_c &sdmmc2_d47_sleep_pins_b>;
non-removable;
no-sd;
no-sdio;
no-1-8-v;
st,neg-edge;
bus-width = <8>;
vmmc-supply = <&v3v3>;
status = "okay";
};
/* Wifi */
&sdmmc3 {
pinctrl-names = "default", "opendrain", "sleep";
pinctrl-0 = <&sdmmc3_b4_pins_c>;
pinctrl-1 = <&sdmmc3_b4_od_pins_c>;
pinctrl-2 = <&sdmmc3_b4_sleep_pins_c>;
non-removable;
st,neg-edge;
bus-width = <4>;
vmmc-supply = <&v3v3>;
mmc-pwrseq = <&wifi_pwrseq>;
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
wifi@1 {
reg = <1>;
compatible = "brcm,bcm4329-fmac";
};
};
&timers5 {
status = "okay";
/delete-property/dmas;
/delete-property/dma-names;
pwm {
pinctrl-0 = <&pwm1_pins_d>;
pinctrl-1 = <&pwm1_sleep_pins_d>;
pinctrl-names = "default", "sleep";
status = "okay";
};
};
&uart4 {
pinctrl-names = "default", "sleep", "idle";
pinctrl-0 = <&uart4_pins_e>;
pinctrl-1 = <&uart4_idle_pins_e>;
pinctrl-2 = <&uart4_sleep_pins_e>;
/delete-property/dmas;
/delete-property/dma-names;
status = "okay";
};
&uart7 {
pinctrl-names = "default";
pinctrl-0 = <&uart7_pins_d>;
uart-has-rtscts;
status = "okay";
bluetooth {
compatible = "brcm,bcm43438-bt";
shutdown-gpios = <&gpioe 11 GPIO_ACTIVE_HIGH>; /* BT_REG_ON */
max-speed = <4000000>;
vbat-supply = <&v3v3>;
vddio-supply = <&v3v3>;
interrupt-parent = <&gpiog>;
interrupts = <12 IRQ_TYPE_EDGE_RISING>; /* BT_HOST_WAKE */
interrupt-names = "host-wakeup";
};
};

View File

@ -0,0 +1,103 @@
// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-3-Clause)
/*
* Copyright (C) 2024 Leonard Göhrs, Pengutronix
*/
/dts-v1/;
#include "stm32mp153c-lxa-fairytux2.dtsi"
/ {
model = "Linux Automation GmbH FairyTux 2 Gen 1";
compatible = "lxa,stm32mp153c-fairytux2-gen1", "oct,stm32mp153x-osd32", "st,stm32mp153";
gpio-keys {
compatible = "gpio-keys";
button-left {
label = "USER_BTN1";
linux,code = <KEY_ESC>;
gpios = <&gpioi 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
};
button-right {
label = "USER_BTN2";
linux,code = <KEY_HOME>;
gpios = <&gpioe 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
};
};
};
&gpiof {
gpio-line-names = "GPIO1", "GPIO2", "", "", "", /* 0 */
"", "", "", "", "", /* 5 */
"", "", "", "", "", /* 10 */
""; /* 15 */
};
&gpioh {
gpio-line-names = "", "", "", "", "LCD_RESET", /* 0 */
"", "", "", "", "", /* 5 */
"", "", "", "GPIO3", "", /* 10 */
""; /* 15 */
};
&gpioi {
gpio-line-names = "", "", "", "", "", /* 0 */
"", "", "", "ETH_", "", /* 5 */
"", "USER_BTN1"; /* 10 */
};
&i2c1 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&i2c1_pins_b>;
pinctrl-1 = <&i2c1_sleep_pins_b>;
status = "okay";
io_board_gpio: gpio@20 {
compatible = "ti,tca6408";
reg = <0x20>;
gpio-controller;
#gpio-cells = <2>;
vcc-supply = <&v3v3_hdmi>;
gpio-line-names = "LED1_GA_YK", "LED2_GA_YK", "LED1_GK_YA", "LED2_GK_YA",
"RS485_EN", "RS485_120R", "", "CAN_120R";
};
};
&led_controller_io {
/*
* led-2 and led-3 are internally connected antiparallel to one
* another inside the ethernet jack like this:
* GPIO1 ---+---|led-2|>--+--- GPIO3
* +--<|led-3|---+
* E.g. only one of the LEDs can be illuminated at a time while
* the other output must be driven low.
* This should likely be implemented using a multi color LED
* driver for antiparallel LEDs.
*/
led-2 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_ACTIVITY;
gpios = <&io_board_gpio 1 GPIO_ACTIVE_HIGH>;
};
led-3 {
color = <LED_COLOR_ID_ORANGE>;
function = LED_FUNCTION_ACTIVITY;
gpios = <&io_board_gpio 3 GPIO_ACTIVE_HIGH>;
};
};
&usart3 {
/*
* On Gen 1 FairyTux 2 only RTS can be used and not CTS as well,
* Because pins PD11 (CTS) and PI11 (USER_BTN1) share the same
* interrupt and only one of them can be used at a time.
*/
rts-gpios = <&gpiod 12 GPIO_ACTIVE_LOW>;
};
&usbotg_hs {
dr_mode = "peripheral";
};

View File

@ -0,0 +1,147 @@
// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-3-Clause)
/*
* Copyright (C) 2024 Leonard Göhrs, Pengutronix
*/
/dts-v1/;
#include "stm32mp153c-lxa-fairytux2.dtsi"
/ {
model = "Linux Automation GmbH FairyTux 2 Gen 2";
compatible = "lxa,stm32mp153c-fairytux2-gen2", "oct,stm32mp153x-osd32", "st,stm32mp153";
gpio-keys {
compatible = "gpio-keys";
button-left {
label = "USER_BTN1";
linux,code = <KEY_ESC>;
gpios = <&gpioi 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
};
button-right {
label = "USER_BTN2";
linux,code = <KEY_HOME>;
gpios = <&gpioe 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
};
};
};
&gpiof {
gpio-line-names = "", "", "", "", "", /* 0 */
"", "", "", "", "", /* 5 */
"", "", "", "", "", /* 10 */
""; /* 15 */
};
&gpioh {
gpio-line-names = "", "", "", "", "LCD_RESET", /* 0 */
"", "", "", "", "", /* 5 */
"", "", "GPIO1", "GPIO_INT", "", /* 10 */
""; /* 15 */
};
&gpioi {
gpio-line-names = "GPIO2", "", "", "", "", /* 0 */
"", "", "", "ETH_", "", /* 5 */
"", "USER_BTN1"; /* 10 */
};
&i2c1 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&i2c1_pins_b>;
pinctrl-1 = <&i2c1_sleep_pins_b>;
status = "okay";
io_board_gpio: gpio@20 {
compatible = "ti,tca6408";
reg = <0x20>;
gpio-controller;
#gpio-cells = <2>;
interrupt-parent = <&gpioh>;
interrupts = <13 IRQ_TYPE_LEVEL_LOW>;
interrupt-controller;
pinctrl-names = "default";
pinctrl-0 = <&board_tca6408_pins>;
#interrupt-cells = <2>;
vcc-supply = <&v3v3_hdmi>;
gpio-line-names = "LED1_GA_YK", "LED2_GA_YK", "LED1_GK_YA", "USB_CC_ALERT",
"RS485_EN", "RS485_120R", "USB_CC_RESET", "CAN_120R";
};
usb_c: typec@28 {
compatible = "st,stusb1600";
reg = <0x28>;
interrupt-parent = <&io_board_gpio>;
interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
vdd-supply = <&reg_5v>;
vsys-supply = <&v3v3_hdmi>;
connector {
compatible = "usb-c-connector";
label = "USB-C";
power-role = "dual";
typec-power-opmode = "default";
port {
con_usbotg_hs_ep: endpoint {
remote-endpoint = <&usbotg_hs_ep>;
};
};
};
};
temperature-sensor@48 {
compatible = "national,lm75a";
reg = <0x48>;
/*
* The sensor itself is powered by a voltage divider from the
* always-on 5V supply.
* The required pull-up resistors however are on v3v3_hdmi.
*/
vs-supply = <&v3v3_hdmi>;
};
io_board_eeprom: eeprom@56 {
compatible = "atmel,24c04";
reg = <0x56>;
vcc-supply = <&v3v3_hdmi>;
};
};
&rtc {
status = "okay";
};
&led_controller_io {
led-2 {
color = <LED_COLOR_ID_ORANGE>;
function = LED_FUNCTION_ACTIVITY;
gpios = <&io_board_gpio 1 GPIO_ACTIVE_LOW>;
};
};
&usart3 {
rts-gpios = <&gpiod 12 GPIO_ACTIVE_LOW>;
cts-gpios = <&gpiod 11 GPIO_ACTIVE_LOW>;
};
&usbotg_hs {
usb-role-switch;
port {
usbotg_hs_ep: endpoint {
remote-endpoint = <&con_usbotg_hs_ep>;
};
};
};
&pinctrl {
board_tca6408_pins: stusb1600-0 {
pins {
pinmux = <STM32_PINMUX('H', 13, GPIO)>;
bias-pull-up;
};
};
};

View File

@ -0,0 +1,397 @@
// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-3-Clause)
/*
* Copyright (C) 2020 STMicroelectronics - All Rights Reserved
* Copyright (C) 2021 Rouven Czerwinski, Pengutronix
* Copyright (C) 2023, 2024 Leonard Göhrs, Pengutronix
*/
#include "stm32mp153.dtsi"
#include "stm32mp15xc.dtsi"
#include "stm32mp15xx-osd32.dtsi"
#include "stm32mp15xxac-pinctrl.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
#include <dt-bindings/pwm/pwm.h>
/ {
aliases {
can0 = &m_can1;
ethernet0 = &ethernet0;
i2c0 = &i2c1;
i2c1 = &i2c4;
mmc1 = &sdmmc2;
serial0 = &uart4;
serial1 = &usart3;
spi0 = &spi4;
};
chosen {
stdout-path = &uart4;
};
backlight: backlight {
compatible = "pwm-backlight";
power-supply = <&v3v3>;
brightness-levels = <0 31 63 95 127 159 191 223 255>;
default-brightness-level = <7>;
pwms = <&led_pwm 3 1000000 0>;
};
led-controller-cpu {
compatible = "gpio-leds";
led-0 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_HEARTBEAT;
gpios = <&gpioa 13 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "heartbeat";
};
};
led_controller_io: led-controller-io {
compatible = "gpio-leds";
/*
* led-0 and led-1 are internally connected antiparallel to one
* another inside the ethernet jack like this:
* GPIO0 ---+---|led-0|>--+--- GPIO2
* +--<|led-1|---+
* E.g. only one of the LEDs can be illuminated at a time while
* the other output must be driven low.
* This should likely be implemented using a multi color LED
* driver for antiparallel LEDs.
*/
led-0 {
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
gpios = <&io_board_gpio 0 GPIO_ACTIVE_HIGH>;
};
led-1 {
color = <LED_COLOR_ID_ORANGE>;
function = LED_FUNCTION_LAN;
gpios = <&io_board_gpio 2 GPIO_ACTIVE_HIGH>;
};
};
reg_5v: regulator-5v {
compatible = "regulator-fixed";
regulator-name = "5V";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
};
reg_1v2: regulator-1v2 {
compatible = "regulator-fixed";
regulator-name = "1V2";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
regulator-always-on;
vin-supply = <&reg_5v>;
};
};
baseboard_eeprom: &sip_eeprom {
};
&crc1 {
status = "okay";
};
&cryp1 {
status = "okay";
};
&dts {
status = "okay";
};
&ethernet0 {
assigned-clocks = <&rcc ETHCK_K>, <&rcc PLL4_P>;
assigned-clock-parents = <&rcc PLL4_P>;
assigned-clock-rates = <125000000>; /* Clock PLL4 to 750Mhz in ATF */
pinctrl-names = "default", "sleep";
pinctrl-0 = <&ethernet0_rgmii_pins_b>;
pinctrl-1 = <&ethernet0_rgmii_sleep_pins_b>;
st,eth-clk-sel;
phy-mode = "rgmii-id";
phy-handle = <&ethphy>;
status = "okay";
mdio {
compatible = "snps,dwmac-mdio";
#address-cells = <1>;
#size-cells = <0>;
ethphy: ethernet-phy@3 { /* KSZ9031RN */
reg = <3>;
reset-gpios = <&gpioe 11 GPIO_ACTIVE_LOW>; /* ETH_RST# */
interrupt-parent = <&gpioa>;
interrupts = <6 IRQ_TYPE_EDGE_FALLING>; /* ETH_MDINT# */
reset-assert-us = <10000>;
reset-deassert-us = <300>;
micrel,force-master;
};
};
};
&gpioa {
gpio-line-names = "", "", "", "", "", /* 0 */
"", "ETH_INT", "", "", "", /* 5 */
"", "", "", "BOOTROM_LED", "", /* 10 */
""; /* 15 */
};
&gpiob {
gpio-line-names = "", "", "", "", "", /* 0 */
"", "", "", "", "", /* 5 */
"", "", "", "", "", /* 10 */
""; /* 15 */
};
&gpioc {
gpio-line-names = "", "", "", "", "", /* 0 */
"", "", "", "", "", /* 5 */
"", ""; /* 10 */
};
&gpiod {
gpio-line-names = "", "", "", "", "", /* 0 */
"", "", "LCD_TE", "", "", /* 5 */
"LCD_DC", "", "", "", "", /* 10 */
""; /* 15 */
};
&gpioe {
gpio-line-names = "LCD_CS", "", "", "", "", /* 0 */
"", "", "", "", "", /* 5 */
"", "", "", "", "", /* 10 */
""; /* 15 */
};
&gpiof {
gpio-line-names = "GPIO1", "GPIO2", "", "", "", /* 0 */
"", "", "", "", "", /* 5 */
"", "", "", "", "", /* 10 */
""; /* 15 */
};
&gpiog {
gpio-line-names = "", "", "", "", "", /* 0 */
"", "", "", "", "", /* 5 */
"", "", "", "", "", /* 10 */
""; /* 15 */
};
&gpioz {
gpio-line-names = "HWID0", "HWID1", "HWID2", "HWID3", "", /* 0 */
"", "HWID4", "HWID5"; /* 5 */
};
&hash1 {
status = "okay";
};
&iwdg2 {
timeout-sec = <8>;
status = "okay";
};
&m_can1 {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&m_can1_pins_b>;
pinctrl-1 = <&m_can1_sleep_pins_b>;
status = "okay";
termination-gpios = <&io_board_gpio 7 GPIO_ACTIVE_HIGH>;
termination-ohms = <120>;
};
&pmic {
regulators {
buck1-supply = <&reg_5v>; /* VIN */
buck2-supply = <&reg_5v>; /* VIN */
buck3-supply = <&reg_5v>; /* VIN */
buck4-supply = <&reg_5v>; /* VIN */
ldo2-supply = <&reg_5v>; /* PMIC_LDO25IN */
ldo4-supply = <&reg_5v>; /* VIN */
ldo5-supply = <&reg_5v>; /* PMIC_LDO25IN */
vref_ddr-supply = <&reg_5v>; /* VIN */
boost-supply = <&reg_5v>; /* PMIC_BSTIN */
pwr_sw2-supply = <&bst_out>; /* PMIC_SWIN */
};
};
&pwr_regulators {
vdd-supply = <&vdd>;
vdd_3v3_usbfs-supply = <&vdd_usb>;
};
&sdmmc2 {
pinctrl-names = "default", "opendrain", "sleep";
pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_d47_pins_b>;
pinctrl-1 = <&sdmmc2_b4_od_pins_a &sdmmc2_d47_pins_b>;
pinctrl-2 = <&sdmmc2_b4_sleep_pins_a &sdmmc2_d47_sleep_pins_b>;
vmmc-supply = <&v3v3>;
bus-width = <8>;
mmc-ddr-3_3v;
no-1-8-v;
non-removable;
no-sd;
no-sdio;
st,neg-edge;
status = "okay";
};
&spi4 {
pinctrl-names = "default";
pinctrl-0 = <&spi4_pins_a>;
cs-gpios = <&gpioe 0 GPIO_ACTIVE_LOW>;
status = "okay";
lcd: display@0 {
compatible = "shineworld,lh133k", "panel-mipi-dbi-spi";
reg = <0>;
power-supply = <&v3v3>;
io-supply = <&v3v3>;
backlight = <&backlight>;
dc-gpios = <&gpiod 10 GPIO_ACTIVE_HIGH>;
reset-gpios = <&gpioh 4 GPIO_ACTIVE_HIGH>;
spi-3wire;
spi-max-frequency = <32000000>;
width-mm = <23>;
height-mm = <23>;
rotation = <180>;
panel-timing {
hactive = <240>;
vactive = <240>;
hback-porch = <0>;
vback-porch = <0>;
clock-frequency = <0>;
hfront-porch = <0>;
hsync-len = <0>;
vfront-porch = <0>;
vsync-len = <0>;
};
};
};
&timers2 {
/* spare dmas for other usage */
/delete-property/dmas;
/delete-property/dma-names;
status = "okay";
timer@1 {
status = "okay";
};
};
&timers3 {
/* spare dmas for other usage */
/delete-property/dmas;
/delete-property/dma-names;
status = "okay";
timer@2 {
status = "okay";
};
};
&timers4 {
/* spare dmas for other usage */
/delete-property/dmas;
/delete-property/dma-names;
status = "okay";
timer@3 {
status = "okay";
};
};
&timers8 {
/* spare dmas for other usage */
/delete-property/dmas;
/delete-property/dma-names;
status = "okay";
led_pwm: pwm {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&pwm8_pins_b>;
pinctrl-1 = <&pwm8_sleep_pins_b>;
status = "okay";
};
};
&uart4 {
label = "debug";
pinctrl-names = "default";
pinctrl-0 = <&uart4_pins_a>;
/* spare dmas for other usage */
/delete-property/dmas;
/delete-property/dma-names;
status = "okay";
};
&usart3 {
label = "external";
pinctrl-names = "default";
pinctrl-0 = <&usart3_pins_a>;
/* spare dmas for other usage */
/delete-property/dmas;
/delete-property/dma-names;
status = "okay";
};
&usbh_ehci {
phys = <&usbphyc_port0>;
phy-names = "usb";
status = "okay";
};
&usbotg_hs {
phys = <&usbphyc_port1 0>;
phy-names = "usb2-phy";
vusb_d-supply = <&vdd_usb>;
vusb_a-supply = <&reg18>;
status = "okay";
};
&usbphyc {
status = "okay";
};
&usbphyc_port0 {
phy-supply = <&vdd_usb>;
};
&usbphyc_port1 {
phy-supply = <&vdd_usb>;
};
&v3v3_hdmi {
regulator-enable-ramp-delay = <1000>;
};

View File

@ -67,7 +67,7 @@
touchscreen@38 {
compatible = "focaltech,ft6236";
reg = <0x38>;
interrupts = <2 2>;
interrupts = <2 IRQ_TYPE_EDGE_FALLING>;
interrupt-parent = <&gpiof>;
touchscreen-size-x = <480>;
touchscreen-size-y = <800>;

View File

@ -321,6 +321,10 @@ config ARCH_STM32
help
This enables support for ARMv8 based STMicroelectronics
STM32 family, including:
- STM32MP21:
- STM32MP211, STM32MP213, STM32MP215.
- STM32MP23:
- STM32MP231, STM32MP233, STM32MP235.
- STM32MP25:
- STM32MP251, STM32MP253, STM32MP255 and STM32MP257.

View File

@ -1,2 +1,6 @@
# SPDX-License-Identifier: GPL-2.0-only
dtb-$(CONFIG_ARCH_STM32) += stm32mp257f-ev1.dtb
dtb-$(CONFIG_ARCH_STM32) += \
stm32mp215f-dk.dtb \
stm32mp235f-dk.dtb \
stm32mp257f-dk.dtb \
stm32mp257f-ev1.dtb

View File

@ -0,0 +1,128 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
/*
* Copyright (C) STMicroelectronics 2025 - All Rights Reserved
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
*/
#include <dt-bindings/interrupt-controller/arm-gic.h>
/ {
#address-cells = <2>;
#size-cells = <2>;
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu0: cpu@0 {
compatible = "arm,cortex-a35";
reg = <0>;
device_type = "cpu";
enable-method = "psci";
};
};
arm-pmu {
compatible = "arm,cortex-a35-pmu";
interrupts = <GIC_SPI 368 IRQ_TYPE_LEVEL_HIGH>;
interrupt-affinity = <&cpu0>;
interrupt-parent = <&intc>;
};
arm_wdt: watchdog {
compatible = "arm,smc-wdt";
arm,smc-id = <0xbc000000>;
status = "disabled";
};
ck_flexgen_08: clock-64000000 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <64000000>;
};
ck_flexgen_51: clock-200000000 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <200000000>;
};
firmware {
optee {
compatible = "linaro,optee-tz";
method = "smc";
};
scmi: scmi {
compatible = "linaro,scmi-optee";
#address-cells = <1>;
#size-cells = <0>;
linaro,optee-channel-id = <0>;
scmi_clk: protocol@14 {
reg = <0x14>;
#clock-cells = <1>;
};
scmi_reset: protocol@16 {
reg = <0x16>;
#reset-cells = <1>;
};
};
};
psci {
compatible = "arm,psci-1.0";
method = "smc";
};
timer {
compatible = "arm,armv8-timer";
interrupt-parent = <&intc>;
interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_LOW)>,
<GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_LOW)>,
<GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_LOW)>,
<GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(1) | IRQ_TYPE_LEVEL_LOW)>;
arm,no-tick-in-suspend;
};
soc@0 {
compatible = "simple-bus";
ranges = <0x0 0x0 0x0 0x0 0x80000000>;
dma-ranges = <0x0 0x0 0x80000000 0x1 0x0>;
interrupt-parent = <&intc>;
#address-cells = <1>;
#size-cells = <2>;
rifsc: bus@42080000 {
compatible = "simple-bus";
reg = <0x42080000 0x0 0x1000>;
ranges;
dma-ranges;
#address-cells = <1>;
#size-cells = <2>;
usart2: serial@400e0000 {
compatible = "st,stm32h7-uart";
reg = <0x400e0000 0x0 0x400>;
interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ck_flexgen_08>;
status = "disabled";
};
};
syscfg: syscon@44230000 {
compatible = "st,stm32mp21-syscfg", "syscon";
reg = <0x44230000 0x0 0x10000>;
};
intc: interrupt-controller@4ac10000 {
compatible = "arm,cortex-a7-gic";
reg = <0x4ac10000 0x0 0x1000>,
<0x4ac20000 0x0 0x2000>,
<0x4ac40000 0x0 0x2000>,
<0x4ac60000 0x0 0x2000>;
#interrupt-cells = <3>;
interrupt-controller;
};
};
};

View File

@ -0,0 +1,9 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
/*
* Copyright (C) STMicroelectronics 2025 - All Rights Reserved
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
*/
#include "stm32mp211.dtsi"
/ {
};

View File

@ -0,0 +1,9 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
/*
* Copyright (C) STMicroelectronics 2025 - All Rights Reserved
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
*/
#include "stm32mp213.dtsi"
/ {
};

View File

@ -0,0 +1,49 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
/*
* Copyright (C) STMicroelectronics 2025 - All Rights Reserved
* Author: Amelie Delaunay <amelie.delaunay@foss.st.com> for STMicroelectronics.
*/
/dts-v1/;
#include "stm32mp215.dtsi"
#include "stm32mp21xf.dtsi"
/ {
model = "STMicroelectronics STM32MP215F-DK Discovery Board";
compatible = "st,stm32mp215f-dk", "st,stm32mp215";
aliases {
serial0 = &usart2;
};
chosen {
stdout-path = "serial0:115200n8";
};
memory@80000000 {
device_type = "memory";
reg = <0x0 0x80000000 0x0 0x80000000>;
};
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
fw@80000000 {
compatible = "shared-dma-pool";
reg = <0x0 0x80000000 0x0 0x4000000>;
no-map;
};
};
};
&arm_wdt {
timeout-sec = <32>;
status = "okay";
};
&usart2 {
status = "okay";
};

View File

@ -0,0 +1,8 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
/*
* Copyright (C) STMicroelectronics 2025 - All Rights Reserved
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
*/
/ {
};

View File

@ -0,0 +1,8 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
/*
* Copyright (C) STMicroelectronics 2025 - All Rights Reserved
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
*/
/ {
};

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,94 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
/*
* Copyright (C) STMicroelectronics 2025 - All Rights Reserved
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
*/
#include "stm32mp231.dtsi"
/ {
cpus {
cpu1: cpu@1 {
compatible = "arm,cortex-a35";
reg = <1>;
device_type = "cpu";
enable-method = "psci";
power-domains = <&cpu1_pd>;
power-domain-names = "psci";
};
};
arm-pmu {
interrupts = <GIC_SPI 368 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 369 IRQ_TYPE_LEVEL_HIGH>;
interrupt-affinity = <&cpu0>, <&cpu1>;
};
psci {
cpu1_pd: power-domain-cpu1 {
#power-domain-cells = <0>;
power-domains = <&cluster_pd>;
};
};
timer {
interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
<GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
<GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
<GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>;
};
};
&optee {
interrupts = <GIC_PPI 15 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>;
};
&rifsc {
ethernet2: ethernet@482d0000 {
compatible = "st,stm32mp25-dwmac", "snps,dwmac-5.20";
reg = <0x482d0000 0x4000>;
reg-names = "stmmaceth";
interrupts-extended = <&intc GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "macirq";
clock-names = "stmmaceth",
"mac-clk-tx",
"mac-clk-rx",
"ptp_ref",
"ethstp",
"eth-ck";
clocks = <&rcc CK_ETH2_MAC>,
<&rcc CK_ETH2_TX>,
<&rcc CK_ETH2_RX>,
<&rcc CK_KER_ETH2PTP>,
<&rcc CK_ETH2_STP>,
<&rcc CK_KER_ETH2>;
snps,axi-config = <&stmmac_axi_config_2>;
snps,mixed-burst;
snps,mtl-rx-config = <&mtl_rx_setup_2>;
snps,mtl-tx-config = <&mtl_tx_setup_2>;
snps,pbl = <2>;
snps,tso;
st,syscon = <&syscfg 0x3400>;
access-controllers = <&rifsc 61>;
status = "disabled";
mtl_rx_setup_2: rx-queues-config {
snps,rx-queues-to-use = <2>;
queue0 {};
queue1 {};
};
mtl_tx_setup_2: tx-queues-config {
snps,tx-queues-to-use = <4>;
queue0 {};
queue1 {};
queue2 {};
queue3 {};
};
stmmac_axi_config_2: stmmac-axi-config {
snps,blen = <0 0 0 0 16 8 4>;
snps,rd_osr_lmt = <0x7>;
snps,wr_osr_lmt = <0x7>;
};
};
};

View File

@ -0,0 +1,16 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
/*
* Copyright (C) STMicroelectronics 2025 - All Rights Reserved
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
*/
#include "stm32mp233.dtsi"
&rifsc {
vdec: vdec@480d0000 {
compatible = "st,stm32mp25-vdec";
reg = <0x480d0000 0x3c8>;
interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&rcc CK_BUS_VDEC>;
access-controllers = <&rifsc 89>;
};
};

View File

@ -0,0 +1,113 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
/*
* Copyright (C) STMicroelectronics 2025 - All Rights Reserved
* Author: Amelie Delaunay <amelie.delaunay@foss.st.com> for STMicroelectronics.
*/
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
#include "stm32mp235.dtsi"
#include "stm32mp23xf.dtsi"
#include "stm32mp25-pinctrl.dtsi"
#include "stm32mp25xxak-pinctrl.dtsi"
/ {
model = "STMicroelectronics STM32MP235F-DK Discovery Board";
compatible = "st,stm32mp235f-dk", "st,stm32mp235";
aliases {
serial0 = &usart2;
};
chosen {
stdout-path = "serial0:115200n8";
};
gpio-keys {
compatible = "gpio-keys";
button-user-1 {
label = "User-1";
linux,code = <BTN_1>;
gpios = <&gpioc 5 GPIO_ACTIVE_HIGH>;
};
button-user-2 {
label = "User-2";
linux,code = <BTN_2>;
gpios = <&gpioc 11 GPIO_ACTIVE_HIGH>;
};
};
gpio-leds {
compatible = "gpio-leds";
led-blue {
function = LED_FUNCTION_HEARTBEAT;
color = <LED_COLOR_ID_BLUE>;
gpios = <&gpioh 7 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "heartbeat";
default-state = "off";
};
};
memory@80000000 {
device_type = "memory";
reg = <0x0 0x80000000 0x1 0x0>;
};
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
fw@80000000 {
compatible = "shared-dma-pool";
reg = <0x0 0x80000000 0x0 0x4000000>;
no-map;
};
};
};
&arm_wdt {
timeout-sec = <32>;
status = "okay";
};
&scmi_regu {
scmi_vddio1: regulator@0 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
};
scmi_vdd_sdcard: regulator@23 {
reg = <VOLTD_SCMI_STPMIC2_LDO7>;
regulator-name = "vdd_sdcard";
};
};
&sdmmc1 {
pinctrl-names = "default", "opendrain", "sleep";
pinctrl-0 = <&sdmmc1_b4_pins_a>;
pinctrl-1 = <&sdmmc1_b4_od_pins_a>;
pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>;
cd-gpios = <&gpiod 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
disable-wp;
st,neg-edge;
bus-width = <4>;
vmmc-supply = <&scmi_vdd_sdcard>;
vqmmc-supply = <&scmi_vddio1>;
status = "okay";
};
&usart2 {
pinctrl-names = "default", "idle", "sleep";
pinctrl-0 = <&usart2_pins_a>;
pinctrl-1 = <&usart2_idle_pins_a>;
pinctrl-2 = <&usart2_sleep_pins_a>;
/delete-property/dmas;
/delete-property/dma-names;
status = "okay";
};

View File

@ -0,0 +1,8 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
/*
* Copyright (C) STMicroelectronics 2025 - All Rights Reserved
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
*/
/ {
};

View File

@ -0,0 +1,8 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
/*
* Copyright (C) STMicroelectronics 2025 - All Rights Reserved
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
*/
/ {
};

View File

@ -0,0 +1,113 @@
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
/*
* Copyright (C) STMicroelectronics 2025 - All Rights Reserved
* Author: Alexandre Torgue <alexandre.torgue@foss.st.com> for STMicroelectronics.
*/
/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
#include "stm32mp257.dtsi"
#include "stm32mp25xf.dtsi"
#include "stm32mp25-pinctrl.dtsi"
#include "stm32mp25xxak-pinctrl.dtsi"
/ {
model = "STMicroelectronics STM32MP257F-DK Discovery Board";
compatible = "st,stm32mp257f-dk", "st,stm32mp257";
aliases {
serial0 = &usart2;
};
chosen {
stdout-path = "serial0:115200n8";
};
gpio-keys {
compatible = "gpio-keys";
button-user-1 {
label = "User-1";
linux,code = <BTN_1>;
gpios = <&gpioc 5 GPIO_ACTIVE_HIGH>;
};
button-user-2 {
label = "User-2";
linux,code = <BTN_2>;
gpios = <&gpioc 11 GPIO_ACTIVE_HIGH>;
};
};
gpio-leds {
compatible = "gpio-leds";
led-blue {
function = LED_FUNCTION_HEARTBEAT;
color = <LED_COLOR_ID_BLUE>;
gpios = <&gpioh 7 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "heartbeat";
default-state = "off";
};
};
memory@80000000 {
device_type = "memory";
reg = <0x0 0x80000000 0x1 0x0>;
};
reserved-memory {
#address-cells = <2>;
#size-cells = <2>;
ranges;
fw@80000000 {
compatible = "shared-dma-pool";
reg = <0x0 0x80000000 0x0 0x4000000>;
no-map;
};
};
};
&arm_wdt {
timeout-sec = <32>;
status = "okay";
};
&scmi_regu {
scmi_vddio1: regulator@0 {
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
};
scmi_vdd_sdcard: regulator@23 {
reg = <VOLTD_SCMI_STPMIC2_LDO7>;
regulator-name = "vdd_sdcard";
};
};
&sdmmc1 {
pinctrl-names = "default", "opendrain", "sleep";
pinctrl-0 = <&sdmmc1_b4_pins_a>;
pinctrl-1 = <&sdmmc1_b4_od_pins_a>;
pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>;
cd-gpios = <&gpiod 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
disable-wp;
st,neg-edge;
bus-width = <4>;
vmmc-supply = <&scmi_vdd_sdcard>;
vqmmc-supply = <&scmi_vddio1>;
status = "okay";
};
&usart2 {
pinctrl-names = "default", "idle", "sleep";
pinctrl-0 = <&usart2_pins_a>;
pinctrl-1 = <&usart2_idle_pins_a>;
pinctrl-2 = <&usart2_sleep_pins_a>;
/delete-property/dmas;
/delete-property/dma-names;
status = "okay";
};