// 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 Leonard Göhrs, Pengutronix */ #include "stm32mp15xc.dtsi" #include "stm32mp15xx-osd32.dtsi" #include "stm32mp15xxac-pinctrl.dtsi" #include #include #include #include / { aliases { ethernet0 = ðernet0; ethernet1 = &port_uplink; ethernet2 = &port_dut; mmc1 = &sdmmc2; serial0 = &uart4; serial1 = &usart3; }; chosen { stdout-path = &uart4; }; led-controller-0 { compatible = "gpio-leds"; led-0 { label = "tac:green:user1"; gpios = <&gpiof 10 GPIO_ACTIVE_HIGH>; linux,default-trigger = "heartbeat"; }; led-1 { label = "tac:green:user2"; gpios = <&gpiog 7 GPIO_ACTIVE_HIGH>; }; led-2 { label = "tac:green:statusdut"; gpios = <&gpioa 13 GPIO_ACTIVE_LOW>; }; /* led-3 and led-4 are internally connected antiparallel to one * another inside the ethernet jack like this: * GPIOA14 ---+---|led-3|>--+--- GPIOD15 * +--<|led-4|---+ * 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-3 { label = "tac:green:statuslab"; gpios = <&gpioa 14 GPIO_ACTIVE_HIGH>; }; led-4 { label = "tac:orange:statuslab"; gpios = <&gpiod 15 GPIO_ACTIVE_HIGH>; }; }; gpio-keys { compatible = "gpio-keys"; button-lower { label = "USER_BTN2"; linux,code = ; gpios = <&gpioe 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; }; button-upper { label = "USER_BTN"; linux,code = ; gpios = <&gpioi 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; }; }; /* supplied by either barrel connector or PoE */ reg_12v: regulator-12v { compatible = "regulator-fixed"; regulator-name = "12V"; regulator-min-microvolt = <12000000>; regulator-max-microvolt = <12000000>; regulator-always-on; }; reg_5v: regulator-5v { compatible = "regulator-fixed"; regulator-name = "5V"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; regulator-always-on; vin-supply = <®_12v>; }; reg_1v2: regulator-1v2 { compatible = "regulator-fixed"; regulator-name = "1V2"; regulator-min-microvolt = <1200000>; regulator-max-microvolt = <1200000>; regulator-always-on; vin-supply = <®_5v>; }; reg_pb_5v: regulator-pb-5v { compatible = "regulator-fixed"; regulator-name = "5V_POWERBOARD"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; regulator-always-on; vin-supply = <®_5v>; }; reg_pb_3v3: regulator-pb-3v3 { compatible = "regulator-fixed"; regulator-name = "3V3_POWERBOARD"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-always-on; vin-supply = <®_pb_5v>; }; output-iobus-12v { compatible = "regulator-output"; vout-supply = <®_iobus_12v>; }; output-vuart { compatible = "regulator-output"; vout-supply = <&v3v3_hdmi>; }; }; baseboard_eeprom: &sip_eeprom { }; &adc { pinctrl-names = "default"; pinctrl-0 = <&adc1_ain_pins_a>; vdd-supply = <&vdd>; vdda-supply = <&vdda>; vref-supply = <&vrefbuf>; status = "okay"; adc1: adc@0 { st,adc-channels = <0 1 2 5 9 10 13 15>; st,min-sample-time-nsecs = <5000>; #address-cells = <1>; #size-cells = <0>; status = "okay"; channel@0 { reg = <0>; label = "HOST_2_CURR_FB"; }; channel@1 { reg = <1>; label = "HOST_3_CURR_FB"; }; channel@2 { reg = <2>; label = "OUT_0_FB"; }; channel@5 { reg = <5>; label = "IOBUS_CURR_FB"; }; channel@9 { reg = <9>; label = "IOBUS_VOLT_FB"; }; channel@10 { reg = <10>; label = "OUT_1_FB"; }; channel@13 { reg = <13>; label = "HOST_CURR_FB"; }; channel@15 { reg = <15>; label = "HOST_1_CURR_FB"; }; }; adc2: adc@100 { st,adc-channels = <12>; st,min-sample-time-nsecs = <500000>; #address-cells = <1>; #size-cells = <0>; status = "okay"; channel@12 { reg = <12>; label = "TEMP_INTERNAL"; }; }; }; &crc1 { status = "okay"; }; &cryp1 { status = "okay"; }; &dts { status = "okay"; }; ðernet0 { 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 = <ðernet0_rgmii_pins_e>; pinctrl-1 = <ðernet0_rgmii_sleep_pins_e>; st,eth-clk-sel; phy-mode = "rgmii-id"; status = "okay"; fixed-link { speed = <1000>; full-duplex; }; }; ðernet0_rgmii_pins_e { pins1 { /* Reduce EMI emission by reducing RGMII drive strength */ slew-rate = <1>; }; }; &gpiob { gpio-line-names = "", "", "", "", "", /* 0 */ "", "USB_RESET", "", "", "", /* 5 */ "", "", "", "", "", /* 10 */ ""; /* 15 */ }; &gpiod { gpio-line-names = "", "", "", "", "TP38", /* 0 */ "TP39", "", "", "TP41", "TP42", /* 5 */ "OLED_DC", "", "", "ETH_CS", "", /* 10 */ "ETH_LAB_LEDRN"; /* 15 */ }; &gpioe { gpio-line-names = "TP35", "", "", "", "CAN_1_120R", /* 0 */ "", "", "USER_BTN2", "TP48", "UART_TX_EN", /* 5 */ "UART_RX_EN", "TP24", "", "TP25", "TP26", /* 10 */ "TP27"; /* 15 */ }; &gpiof { gpio-line-names = "TP36", "TP37", "", "", "OLED_CS", /* 0 */ "", "", "", "", "", /* 5 */ "USER_LED1", "", "STACK_CS0", "", "", /* 10 */ ""; /* 15 */ }; &gpiog { gpio-line-names = "ETH_RESET", "", "", "", "", /* 0 */ "IOBUS_FLT_FB", "", "USER_LED2", "ETH1_PPS_A", "CAN_0_120R", /* 5 */ "TP49", "", "", "", "", /* 10 */ ""; /* 15 */ }; &gpioh { gpio-line-names = "", "", "OUT_1", "OUT_0", "OLED_RESET", /* 0 */ "", "", "", "", "", /* 5 */ "ETH1_PPS_B", "ETH_GPIO2", "", "IOBUS_PWR_EN", "", /* 10 */ "TP33"; /* 15 */ }; &gpioi { gpio-line-names = "TIM_RTS", "", "", "", "DEVICE_DATA_EN", /* 0 */ "", "", "", "ETH_WOL", "TP43", /* 5 */ "", "USER_BTN"; /* 10 */ }; &gpioz { gpio-line-names = "HWID0", "HWID1", "HWID2", "HWID3", "", /* 0 */ "", "HWID4", "HWID5"; /* 5 */ }; &hash1 { status = "okay"; }; &i2c1 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&i2c1_pins_b>; pinctrl-1 = <&i2c1_sleep_pins_b>; status = "okay"; powerboard_eeprom: eeprom@50 { compatible = "atmel,24c02"; reg = <0x50>; vcc-supply = <&v3v3>; }; temperature-sensor@48 { compatible = "national,lm75a"; reg = <0x48>; status = "disabled"; }; }; &i2c5 { /delete-property/dmas; /delete-property/dma-names; pinctrl-names = "default", "sleep"; pinctrl-0 = <&i2c5_pins_b>; pinctrl-1 = <&i2c5_sleep_pins_b>; status = "okay"; usbhub: usbhub@2c { compatible ="microchip,usb2514b"; reg = <0x2c>; vdd-supply = <&v3v3>; reset-gpios = <&gpiob 6 GPIO_ACTIVE_LOW>; }; }; &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"; }; &m_can2 { pinctrl-names = "default", "sleep"; pinctrl-0 = <&m_can2_pins_a>; pinctrl-1 = <&m_can2_sleep_pins_a>; status = "okay"; }; &pmic { regulators { buck1-supply = <®_5v>; /* VIN */ buck2-supply = <®_5v>; /* VIN */ buck3-supply = <®_5v>; /* VIN */ buck4-supply = <®_5v>; /* VIN */ ldo2-supply = <®_5v>; /* PMIC_LDO25IN */ ldo4-supply = <®_5v>; /* VIN */ ldo5-supply = <®_5v>; /* PMIC_LDO25IN */ vref_ddr-supply = <®_5v>; /* VIN */ boost-supply = <®_5v>; /* PMIC_BSTIN */ pwr_sw2-supply = <&bst_out>; /* PMIC_SWIN */ }; }; &pwr_regulators { vdd-supply = <&vdd>; vdd_3v3_usbfs-supply = <&vdd_usb>; }; &rtc { status = "okay"; }; &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"; }; &spi2 { pinctrl-names = "default"; pinctrl-0 = <&spi2_pins_c>; cs-gpios = <&gpiof 12 GPIO_ACTIVE_LOW>; status = "okay"; }; &spi4 { pinctrl-names = "default"; pinctrl-0 = <&spi4_pins_a>; cs-gpios = <&gpiof 4 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>; }; }; }; &spi5 { pinctrl-names = "default"; pinctrl-0 = <&spi5_pins_a>; /* spare dmas for other usage */ /delete-property/dmas; /delete-property/dma-names; cs-gpios = <&gpiod 13 GPIO_ACTIVE_LOW>; status = "okay"; switch: switch@0 { compatible = "microchip,ksz9563"; reg = <0>; reset-gpios = <&gpiog 0 GPIO_ACTIVE_LOW>; spi-max-frequency = <44000000>; interrupt-parent = <&gpioa>; interrupts = <6 IRQ_TYPE_EDGE_RISING>; ports { #address-cells = <1>; #size-cells = <0>; port_dut: port@0 { reg = <0>; label = "dut"; }; port_uplink: port@1 { reg = <1>; label = "uplink"; }; port_cpu: port@2 { reg = <2>; label = "cpu"; ethernet = <ðernet0>; phy-mode = "rgmii-id"; rx-internal-delay-ps = <2000>; tx-internal-delay-ps = <2000>; fixed-link { speed = <1000>; full-duplex; }; }; }; }; }; &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"; }; }; &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 = "dut"; uart-has-rtscts; pinctrl-names = "default"; pinctrl-0 = <&usart3_pins_f>; /* spare dmas for other usage */ /delete-property/dmas; /delete-property/dma-names; status = "okay"; }; &usbh_ehci { status = "okay"; }; &usbotg_hs { phys = <&usbphyc_port1 0>; phy-names = "usb2-phy"; vusb_d-supply = <&vdd_usb>; vusb_a-supply = <®18>; dr_mode = "peripheral"; status = "okay"; }; &usbphyc { status = "okay"; }; &usbphyc_port0 { phy-supply = <&vdd_usb>; }; &usbphyc_port1 { phy-supply = <&vdd_usb>; }; &vrefbuf { regulator-min-microvolt = <2500000>; regulator-max-microvolt = <2500000>; vdda-supply = <&vdda>; status = "okay"; };