blob: b3ab6e94508a8a02d61010e230635539251a5191 [file] [log] [blame]
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
* Copyright (C) 2024 Marek Vasut <marex@denx.de>
*
* DHCOM iMX8MP variant:
* DHCM-iMX8ML8-C160-R204-F1638-SPI16-E2-CAN2-RTC-I-01D2
* DHCOM PCB number: 660-100 or newer
* DRC02 PCB number: 568-100 or newer
*/
/dts-v1/;
#include <dt-bindings/leds/common.h>
#include <dt-bindings/phy/phy-imx8-pcie.h>
#include "imx8mp-dhcom-som.dtsi"
/ {
model = "DH electronics i.MX8M Plus DHCOM on DRC02";
compatible = "dh,imx8mp-dhcom-drc02", "dh,imx8mp-dhcom-som",
"fsl,imx8mp";
chosen {
stdout-path = &uart1;
};
};
&eqos { /* First ethernet */
pinctrl-0 = <&pinctrl_eqos_rmii>;
phy-handle = <&ethphy0f>;
phy-mode = "rmii";
assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_266M>,
<&clk IMX8MP_SYS_PLL2_100M>,
<&clk IMX8MP_SYS_PLL2_50M>;
assigned-clock-rates = <0>, <100000000>, <50000000>;
};
&ethphy0g { /* Micrel KSZ9131RNXI */
status = "disabled";
};
&ethphy0f { /* SMSC LAN8740Ai */
status = "okay";
};
&fec { /* Second ethernet */
pinctrl-0 = <&pinctrl_fec_rmii>;
phy-handle = <&ethphy1f>;
phy-mode = "rmii";
status = "okay";
assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_266M>,
<&clk IMX8MP_SYS_PLL2_100M>,
<&clk IMX8MP_SYS_PLL2_50M>,
<&clk IMX8MP_SYS_PLL2_50M>;
assigned-clock-rates = <0>, <100000000>, <50000000>, <0>;
};
&ethphy1f { /* SMSC LAN8740Ai */
status = "okay";
};
&flexcan1 {
status = "okay";
};
&flexcan2 {
status = "okay";
};
&gpio1 {
gpio-line-names =
"DRC02-In1", "", "", "", "", "DHCOM-I", "DRC02-HW2", "DRC02-HW0",
"DHCOM-B", "DHCOM-A", "", "DHCOM-H", "", "", "", "",
"", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "";
/*
* NOTE: On DRC02, the RS485_RX_En is controlled by a separate
* GPIO line, however the i.MX8 UART driver assumes RX happens
* during TX anyway and that it only controls drive enable DE
* line. Hence, the RX is always enabled here.
*/
rs485-rx-en-hog {
gpio-hog;
gpios = <13 0>; /* GPIO Q */
line-name = "rs485-rx-en";
output-low;
};
};
&gpio2 {
gpio-line-names =
"", "", "", "", "", "", "", "",
"DHCOM-O", "DHCOM-N", "", "SOM-HW1", "", "", "", "",
"", "", "", "", "DRC02-In2", "", "", "",
"", "", "", "", "", "", "", "";
};
&gpio3 {
gpio-line-names =
"", "", "", "", "", "", "", "",
"", "", "", "", "", "", "SOM-HW0", "",
"", "", "", "", "", "", "SOM-MEM0", "SOM-MEM1",
"SOM-MEM2", "SOM-HW2", "", "", "", "", "", "";
};
&gpio4 {
gpio-line-names =
"", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "",
"", "", "", "SOM-HW1", "", "", "", "",
"", "", "", "DRC02-Out2", "", "", "", "";
};
&gpio5 {
gpio-line-names =
"", "", "DHCOM-C", "", "", "", "", "",
"", "", "", "", "", "", "", "",
"", "", "", "", "", "", "DHCOM-E", "DRC02-Out1",
"", "", "", "", "", "", "", "";
};
&i2c3 {
/* Resistive touch controller not populated on this one SoM variant. */
touchscreen@49 {
status = "disabled";
};
};
&pcie_phy {
status = "disabled";
};
&pcie {
status = "disabled";
};
/* Console UART */
&pinctrl_uart1 {
fsl,pins = <
/* No pull-ups on DRC02, enable in-SoC pull-ups */
MX8MP_IOMUXC_SAI2_RXC__UART1_DCE_RX 0x149
MX8MP_IOMUXC_SAI2_RXFS__UART1_DCE_TX 0x149
>;
};
&pinctrl_uart3 {
fsl,pins = <
/* No pull-ups on DRC02, enable in-SoC pull-ups */
MX8MP_IOMUXC_ECSPI1_SCLK__UART3_DCE_RX 0x149
MX8MP_IOMUXC_ECSPI1_MOSI__UART3_DCE_TX 0x149
>;
};
&uart1 {
/*
* Due to the use of CAN2 the signals for CAN2 Tx and Rx are routed to
* DHCOM UART1 RTS/CTS pins. Therefore this UART have to use DHCOM GPIOs
* for RTS/CTS. So configure DHCOM GPIO I as RTS and GPIO M as CTS.
*/
/delete-property/ uart-has-rtscts;
cts-gpios = <&gpio5 5 GPIO_ACTIVE_HIGH>; /* GPIO M */
pinctrl-0 = <&pinctrl_uart1 &pinctrl_dhcom_i &pinctrl_dhcom_m>;
pinctrl-names = "default";
rts-gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>; /* GPIO I */
};
&uart3 {
/*
* On DRC02 this UART is used as RS485 interface and RS485_TX_En is
* controlled by DHCOM GPIO P. So remove RTS/CTS pins and the property
* uart-has-rtscts from this UART and add the DHCOM GPIO P pin via
* rts-gpios. The RS485_RX_En is controlled by DHCOM GPIO Q, see gpio1
* node above.
*/
/delete-property/ uart-has-rtscts;
linux,rs485-enabled-at-boot-time;
pinctrl-0 = <&pinctrl_uart3 &pinctrl_dhcom_p &pinctrl_dhcom_q>;
pinctrl-names = "default";
rts-gpios = <&gpio2 10 GPIO_ACTIVE_HIGH>; /* GPIO P */
};
/* No WiFi/BT chipset on this SoM variant. */
&uart2 {
bluetooth {
status = "disabled";
};
};
/* USB_OTG port is not routed out on DRC02. */
&usb3_0 {
status = "disabled";
};
&usb_dwc3_0 {
status = "disabled";
};
/* USB_HOST port has USB Hub connected to it, PWR/OC pins are unused */
&usb3_1 {
fsl,disable-port-power-control;
fsl,permanently-attached;
};
&usb_dwc3_1 {
dr_mode = "host";
maximum-speed = "high-speed";
};
/* No WiFi/BT chipset on this SoM variant. */
&usdhc1 {
status = "disabled";
};
&iomuxc {
/*
* GPIO I is connected to UART1_RTS
* GPIO M is connected to UART1_CTS
* GPIO P is connected to RS485_TX_En
* GPIO Q is connected to RS485_RX_En
*/
pinctrl-0 = <&pinctrl_hog_base
&pinctrl_dhcom_a &pinctrl_dhcom_b &pinctrl_dhcom_c
&pinctrl_dhcom_d &pinctrl_dhcom_e &pinctrl_dhcom_f
&pinctrl_dhcom_g &pinctrl_dhcom_h &pinctrl_dhcom_j
&pinctrl_dhcom_k &pinctrl_dhcom_l &pinctrl_dhcom_n
&pinctrl_dhcom_o &pinctrl_dhcom_r &pinctrl_dhcom_s
&pinctrl_dhcom_int>;
};