diff --git a/arch/arm64/boot/dts/ti/Makefile b/arch/arm64/boot/dts/ti/Makefile index afa6d5ca712d..edc03fcf9b8c 100644 --- a/arch/arm64/boot/dts/ti/Makefile +++ b/arch/arm64/boot/dts/ti/Makefile @@ -24,7 +24,8 @@ dtb-$(CONFIG_ARCH_K3) += k3-am62-lp-sk.dtb dtb-$(CONFIG_ARCH_K3) += k3-am625-sk-hdmi-audio.dtb dtb-$(CONFIG_ARCH_K3) += k3-am62-lp-sk-hdmi-audio.dtb dtb-$(CONFIG_ARCH_K3) += k3-am623-pfc-750-8302.dtb -dtb-$(CONFIG_ARCH_K3) += k3-am623-pfc-ems.dtb +dtb-$(CONFIG_ARCH_K3) += k3-am623-pfc-750-830x-ems.dtb +dtb-$(CONFIG_ARCH_K3) += k3-am623-pfc-750-8400.dtb # Boards with AM62Ax SoC dtb-$(CONFIG_ARCH_K3) += k3-am62a7-sk.dtb diff --git a/arch/arm64/boot/dts/ti/k3-am623-pfc-750-8302.dts b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-8302.dts index 5f1aad80ada0..a5fa2c9ac51a 100644 --- a/arch/arm64/boot/dts/ti/k3-am623-pfc-750-8302.dts +++ b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-8302.dts @@ -6,12 +6,22 @@ * Copyright (C) 2024 WAGO GmbH & Co. KG - https://www.wago.com/ */ -#include "k3-am62x-pfc.dtsi" +#include "k3-am623-pfc-750-8xxx-common.dtsi" +#include "k3-am623-pfc-750-830x-common.dtsi" +#include "k3-am623-pfc-kbus.dtsi" +#include "k3-am623-pfc-rs485.dtsi" +#include "k3-am623-pfc-tpm.dtsi" +#include "k3-am623-pfc-rtc.dtsi" / { model = "WAGO PFC300 750-8302"; compatible = "ti,am623-pfc", "ti,am625"; + aliases { + ethernet0 = &cpsw_port1; + ethernet1 = &cpsw_port2; + }; + cpus { cpu-map { cluster0 { @@ -31,10 +41,197 @@ /delete-node/ cpu@2; /delete-node/ cpu@3; }; + + memory@80000000 { + device_type = "memory"; + /* 2G RAM */ + reg = <0x00000000 0x80000000 0x00000000 0x80000000>; + + }; + + /* this name of the gpio-keys device is a + * historical heritage from 3.6.11 kernel. + * the device-name is checked in omsd. So we + * need to adapt this configuration + */ + oms: PAC-Operating-Mode-Switch { + compatible = "gpio-keys"; + pinctrl-names = "default"; + pinctrl-0 = <&oms_pins_default>; + #address-cells = <1>; + #size-cells = <0>; + autorepeat; + + oms_run: run { + label = "RUN"; + gpios = <&main_gpio0 65 GPIO_ACTIVE_LOW>; + linux,code = <1>; + linux,input-type = <5>; + debounce-interval = <1>; + }; + + oms_stop: stop { + label = "STOP"; + gpios = <&main_gpio1 10 GPIO_ACTIVE_LOW>; + linux,code = <2>; + linux,input-type = <5>; + debounce-interval = <1>; + }; + + oms_reset: reset { + label = "RESET"; + gpios = <&main_gpio1 12 GPIO_ACTIVE_LOW>; + linux,code = <3>; + linux,input-type = <1>; + debounce-interval = <1>; + }; + + oms_reset_all: reset_all { + label = "RESET_ALL"; + gpios = <&main_gpio1 11 GPIO_ACTIVE_HIGH>; + linux,code = <4>; + linux,input-type = <1>; + debounce-interval = <1>; + }; + }; + + uio_nvram: nvram@51000000 { + compatible = "uio_pdrv_genirq"; + linux,uio-name = "UIO_NVRAM"; + reg = <0 0x51000000 0 0x00020000>; /* 128k 16bit NVRAM */ + }; + + vdd_mmc1: regulator-3 { + compatible = "regulator-fixed"; + pinctrl-names = "default"; + pinctrl-0 = <&vdd_sd_dv_pins_default>; + regulator-name = "vdd_mmc1"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-boot-on; + vin-supply = <&vcc_3v3_sys>; + gpio = <&main_gpio0 31 GPIO_ACTIVE_LOW>; + enable-active-high; + startup-delay-us = <5000>; + }; +}; + +&main_pmx0 { + gpmc_data_pins_default: gpmc-data-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x00bc, PIN_OUTPUT, 1) /* (V24) VOUT0_DATA1.GPMC0_A1 */ + AM62X_IOPAD(0x00c0, PIN_OUTPUT, 1) /* (W25) VOUT0_DATA2.GPMC0_A2 */ + AM62X_IOPAD(0x00c4, PIN_OUTPUT, 1) /* (W24) VOUT0_DATA3.GPMC0_A3 */ + AM62X_IOPAD(0x00c8, PIN_OUTPUT, 1) /* (Y25) VOUT0_DATA4.GPMC0_A4 */ + AM62X_IOPAD(0x00cc, PIN_OUTPUT, 1) /* (Y24) VOUT0_DATA5.GPMC0_A5 */ + AM62X_IOPAD(0x00d0, PIN_OUTPUT, 1) /* (Y23) VOUT0_DATA6.GPMC0_A6 */ + AM62X_IOPAD(0x00d4, PIN_OUTPUT, 1) /* (AA25) VOUT0_DATA7.GPMC0_A7 */ + AM62X_IOPAD(0x00d8, PIN_OUTPUT, 1) /* (V21) VOUT0_DATA8.GPMC0_A8 */ + AM62X_IOPAD(0x00dc, PIN_OUTPUT, 1) /* (W21) VOUT0_DATA9.GPMC0_A9 */ + AM62X_IOPAD(0x00e0, PIN_OUTPUT, 1) /* (V20) VOUT0_DATA10.GPMC0_A10 */ + AM62X_IOPAD(0x00e4, PIN_OUTPUT, 1) /* (AA23) VOUT0_DATA11.GPMC0_A11 */ + AM62X_IOPAD(0x00e8, PIN_OUTPUT, 1) /* (AB25) VOUT0_DATA12.GPMC0_A12 */ + AM62X_IOPAD(0x00ec, PIN_OUTPUT, 1) /* (AA24) VOUT0_DATA13.GPMC0_A13 */ + AM62X_IOPAD(0x00f0, PIN_OUTPUT, 1) /* (Y22) VOUT0_DATA14.GPMC0_A14 */ + AM62X_IOPAD(0x00f4, PIN_OUTPUT, 1) /* (AA21) VOUT0_DATA15.GPMC0_A15 */ + AM62X_IOPAD(0x00f8, PIN_OUTPUT, 1) /* (AB24) VOUT0_HSYNC.GPMC0_A16 */ + >; + }; + + gpmc_addr_pins_default: gpmc-addr-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x003c, PIN_INPUT, 0) /* (M25) GPMC0_AD0 */ + AM62X_IOPAD(0x0040, PIN_INPUT, 0) /* (N23) GPMC0_AD1 */ + AM62X_IOPAD(0x0044, PIN_INPUT, 0) /* (N24) GPMC0_AD2 */ + AM62X_IOPAD(0x0048, PIN_INPUT, 0) /* (N25) GPMC0_AD3 */ + AM62X_IOPAD(0x004c, PIN_INPUT, 0) /* (P24) GPMC0_AD4 */ + AM62X_IOPAD(0x0050, PIN_INPUT, 0) /* (P22) GPMC0_AD5 */ + AM62X_IOPAD(0x0054, PIN_INPUT, 0) /* (P21) GPMC0_AD6 */ + AM62X_IOPAD(0x0058, PIN_INPUT, 0) /* (R23) GPMC0_AD7 */ + AM62X_IOPAD(0x005c, PIN_INPUT, 0) /* (R24) GPMC0_AD8 */ + AM62X_IOPAD(0x0060, PIN_INPUT, 0) /* (R25) GPMC0_AD9 */ + AM62X_IOPAD(0x0064, PIN_INPUT, 0) /* (T25) GPMC0_AD10 */ + AM62X_IOPAD(0x0068, PIN_INPUT, 0) /* (R21) GPMC0_AD11 */ + AM62X_IOPAD(0x006c, PIN_INPUT, 0) /* (T22) GPMC0_AD12 */ + AM62X_IOPAD(0x0070, PIN_INPUT, 0) /* (T24) GPMC0_AD13 */ + AM62X_IOPAD(0x0074, PIN_INPUT, 0) /* (U25) GPMC0_AD14 */ + AM62X_IOPAD(0x0078, PIN_INPUT, 0) /* (U24) GPMC0_AD15 */ + >; + }; + + gpmc_ctrl_pins_default: gpmc-ctrl-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x0094, PIN_OUTPUT, 0) /* (N20) GPMC0_BE1n */ + AM62X_IOPAD(0x00a8, PIN_OUTPUT, 0) /* (M21) GPMC0_CSn0 */ + AM62X_IOPAD(0x0088, PIN_OUTPUT, 0) /* (L24) GPMC0_OEn_REn */ + AM62X_IOPAD(0x008c, PIN_OUTPUT, 0) /* (L25) GPMC0_WEn */ + AM62X_IOPAD(0x0090, PIN_OUTPUT, 0) /* (M24) GPMC0_BE0n_CLE */ + >; + }; + + main_mdio1_pins_default: main-mdio1-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x160, PIN_OUTPUT, 0) /* (AD24) MDIO0_MDC */ + AM62X_IOPAD(0x15c, PIN_INPUT_PULLUP, 0) /* (AB22) MDIO0_MDIO */ + AM62X_IOPAD(0x019c, PIN_OUTPUT, 7) /* (B18) MCASP0_AXR1.GPIO1_9 */ + >; + }; + + main_rgmii1_pins_default: main-rgmii1-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x14c, PIN_INPUT, 0) /* (AB17) RGMII1_RD0 */ + AM62X_IOPAD(0x150, PIN_INPUT, 0) /* (AC17) RGMII1_RD1 */ + AM62X_IOPAD(0x154, PIN_INPUT, 0) /* (AB16) RGMII1_RD2 */ + AM62X_IOPAD(0x158, PIN_INPUT, 0) /* (AA15) RGMII1_RD3 */ + AM62X_IOPAD(0x148, PIN_INPUT, 0) /* (AD17) RGMII1_RXC */ + AM62X_IOPAD(0x144, PIN_INPUT, 0) /* (AE17) RGMII1_RX_CTL */ + AM62X_IOPAD(0x134, PIN_OUTPUT, 0) /* (AE20) RGMII1_TD0 */ + AM62X_IOPAD(0x138, PIN_OUTPUT, 0) /* (AD20) RGMII1_TD1 */ + AM62X_IOPAD(0x13c, PIN_OUTPUT, 0) /* (AE18) RGMII1_TD2 */ + AM62X_IOPAD(0x140, PIN_OUTPUT, 0) /* (AD18) RGMII1_TD3 */ + AM62X_IOPAD(0x130, PIN_OUTPUT, 0) /* (AE19) RGMII1_TXC */ + AM62X_IOPAD(0x12c, PIN_OUTPUT, 0) /* (AD19) RGMII1_TX_CTL */ + AM62X_IOPAD(0x0030, PIN_INPUT, 7) /* (G21) OSPI0_CSn1.GPIO0_12 nINT-RGMII1 */ + >; + }; + + main_rgmii2_pins_default: main-rgmii2-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x184, PIN_INPUT, 0) /* (AE23) RGMII2_RD0 */ + AM62X_IOPAD(0x188, PIN_INPUT, 0) /* (AB20) RGMII2_RD1 */ + AM62X_IOPAD(0x18c, PIN_INPUT, 0) /* (AC21) RGMII2_RD2 */ + AM62X_IOPAD(0x190, PIN_INPUT, 0) /* (AE22) RGMII2_RD3 */ + AM62X_IOPAD(0x180, PIN_INPUT, 0) /* (AD23) RGMII2_RXC */ + AM62X_IOPAD(0x17c, PIN_INPUT, 0) /* (AD22) RGMII2_RX_CTL */ + AM62X_IOPAD(0x16c, PIN_OUTPUT, 0) /* (Y18) RGMII2_TD0 */ + AM62X_IOPAD(0x170, PIN_OUTPUT, 0) /* (AA18) RGMII2_TD1 */ + AM62X_IOPAD(0x174, PIN_OUTPUT, 0) /* (AD21) RGMII2_TD2 */ + AM62X_IOPAD(0x178, PIN_OUTPUT, 0) /* (AC20) RGMII2_TD3 */ + AM62X_IOPAD(0x168, PIN_OUTPUT, 0) /* (AE21) RGMII2_TXC */ + AM62X_IOPAD(0x164, PIN_OUTPUT, 0) /* (AA19) RGMII2_TX_CTL */ + AM62X_IOPAD(0x0034, PIN_INPUT, 7) /* (H21) OSPI0_CSn2.GPIO0_13 */ + >; + }; + + vdd_sd_dv_pins_default: vdd-sd-dv-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x07c, PIN_OUTPUT, 7) /* (P25) GPMC0_CLK.GPIO0_31 */ + >; + }; + + oms_pins_default: oms-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x0108, PIN_INPUT, 7) /* (D24) MMC2_DAT3.GPIO0_65 */ + AM62X_IOPAD(0x01a0, PIN_INPUT, 7) /* (E18) MCASP0_AXR0.GPIO1_10 */ + AM62X_IOPAD(0x01a8, PIN_INPUT, 7) /* (D20) MCASP0_AFSX.GPIO1_12 */ + AM62X_IOPAD(0x01a4, PIN_INPUT, 7) /* (B20) MCASP0_ACLKX.GPIO1_11 */ + >; + }; }; &wsysinit { status = "okay"; + board,variant = "pfc300"; }; &oms { @@ -51,6 +248,42 @@ &gpmc0 { status = "okay"; + + pinctrl-names = "default"; + pinctrl-0 = <&gpmc_data_pins_default>, <&gpmc_addr_pins_default>, <&gpmc_ctrl_pins_default>; + + num-cs = <4>; + num-waitpins = <4>; + ranges = < + 0 0 0x00 0x51000000 0x01000000 /* CS0: NVRAM, 16M */ + >; + + nvram: nor@0,0 { /* NVRAM Device 128k */ + reg = <0 0 0x01000000>; + bank-width = <2>; /* 1: 8bit, 2: 16bit */ + gpmc,sync-clk-ps = <0>; + gpmc,cs-on-ns = <0>; + gpmc,cs-rd-off-ns = <50>; + gpmc,cs-wr-off-ns = <30>; + gpmc,adv-on-ns = <0>; + gpmc,adv-rd-off-ns = <0>; + gpmc,adv-wr-off-ns = <0>; + gpmc,oe-on-ns = <0>; + gpmc,oe-off-ns = <50>; + gpmc,we-on-ns = <0>; + gpmc,we-off-ns = <30>; + gpmc,rd-cycle-ns = <50>; + gpmc,wr-cycle-ns = <30>; + gpmc,access-ns = <40>; + gpmc,wr-access-ns = <10>; + gpmc,wr-data-mux-bus-ns = <0>; + gpmc,cycle2cycle-delay-ns = <10>; + gpmc,cycle2cycle-samecsen; + gpmc,cycle2cycle-diffcsen; + + #address-cells = <1>; + #size-cells = <1>; + }; }; &main_uart0 { @@ -87,22 +320,56 @@ &sdhci1 { /* SD */ status = "okay"; + + vmmc-supply = <&vdd_mmc1>; + + cap-sd-highspeed; + no-1-8-v; }; &cpsw3g { status = "okay"; + + pinctrl-names = "default"; + pinctrl-0 = <&main_mdio1_pins_default + &main_rgmii1_pins_default + &main_rgmii2_pins_default>; }; &cpsw_port1 { status = "okay"; + phy-mode = "rgmii-rxid"; + phy-handle = <&cpsw3g_phy0>; }; &cpsw_port2 { status = "okay"; + phy-mode = "rgmii-rxid"; + phy-handle = <&cpsw3g_phy1>; }; &cpsw3g_mdio { status = "okay"; + + reset-gpios = <&main_gpio1 9 GPIO_ACTIVE_LOW>; + reset-delay-us = <10>; + reset-post-delay-us = <10000>; + + cpsw3g_phy0: ethernet-phy@0 { + // ADIN1300 + compatible = "ethernet-phy-id0283.bc30"; + + reg = <0>; + adi,rx-internal-delay-ps = <2000>; + }; + + cpsw3g_phy1: ethernet-phy@1 { + // ADIN1300 + compatible = "ethernet-phy-id0283.bc30"; + + reg = <1>; + adi,rx-internal-delay-ps = <2000>; + }; }; &usbss0 { diff --git a/arch/arm64/boot/dts/ti/k3-am623-pfc-750-830x-common.dtsi b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-830x-common.dtsi new file mode 100644 index 000000000000..3482ac8e6a1f --- /dev/null +++ b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-830x-common.dtsi @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: GPL-2.0 + +&main_i2c0 { + + #include "k3-am623-pfc-750-830x-leds.dtsi" + + tps65219_30: pmic@30 { + compatible = "ti,tps65219"; + reg = <0x30>; + system-power-controller; + + buck1-supply = <&vcc_5v0>; + buck2-supply = <&vcc_5v0>; + buck3-supply = <&vcc_5v0>; + ldo1-supply = <&vcc_3v3_sys>; + ldo2-supply = <&vcc_3v3_sys>; + ldo3-supply = <&vcc_5v0>; + ldo4-supply = <&vcc_5v0>; + + pinctrl-names = "default"; + pinctrl-0 = <&pmic_irq_pins_default>; + + interrupt-parent = <&main_gpio0>; + interrupts = <68 IRQ_TYPE_EDGE_FALLING>; + + regulators { + buck1_30_reg: buck1 { + regulator-name = "VDD_CORE"; + regulator-min-microvolt = <750000>; + regulator-max-microvolt = <850000>; + regulator-boot-on; + regulator-always-on; + }; + + buck2_30_reg: buck2 { + regulator-name = "VCC1V8_SYS"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-boot-on; + regulator-always-on; + }; + + buck3_30_reg: buck3 { + regulator-name = "VCC3V3_SYS"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-boot-on; + regulator-always-on; + }; + + ldo1_30_reg: ldo1 { + regulator-name = "VCC3V3_SDC"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + ldo2_30_reg: ldo2 { + regulator-name = "VDDA_1V8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-boot-on; + regulator-always-on; + }; + }; + }; +}; + + diff --git a/arch/arm64/boot/dts/ti/k3-am623-pfc-ems.dts b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-830x-ems.dts similarity index 99% rename from arch/arm64/boot/dts/ti/k3-am623-pfc-ems.dts rename to arch/arm64/boot/dts/ti/k3-am623-pfc-750-830x-ems.dts index 81cd601799cc..566326692fba 100644 --- a/arch/arm64/boot/dts/ti/k3-am623-pfc-ems.dts +++ b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-830x-ems.dts @@ -6,7 +6,8 @@ * Copyright (C) 2024 WAGO GmbH & Co. KG - https://www.wago.com/ */ -#include "k3-am62x-pfc.dtsi" +#include "k3-am623-pfc-750-8xxx-common.dtsi" +#include "k3-am623-pfc-750-830x-common.dtsi" / { model = "WAGO AM623 PFC EMS"; @@ -460,14 +461,6 @@ status = "okay"; }; -&oms { - status = "disabled"; -}; - -&nvram { - status = "okay"; -}; - &watchdog_ext { status = "okay"; }; @@ -509,9 +502,6 @@ status = "disabled"; }; -/delete-node/ &vdd_mmc1; -/delete-node/ &vdd_sd_dv_pins_default; - &cpsw3g { status = "disabled"; }; diff --git a/arch/arm64/boot/dts/ti/k3-am623-pfc-750-830x-leds.dtsi b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-830x-leds.dtsi new file mode 100644 index 000000000000..1ecbfb37ebde --- /dev/null +++ b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-830x-leds.dtsi @@ -0,0 +1,143 @@ +// SPDX-License-Identifier: GPL-2.0 + +led_bar60: pca9552@60 { + compatible = "nxp,pca9552"; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x60>; + + lb60_0: sys-red@0 { + label = "sys-red"; + reg = <0>; + linux,default-trigger = "timer"; + }; + + lb60_1: sys-green@1 { + label = "sys-green"; + reg = <1>; + linux,default-trigger = "timer"; + }; + + lb60_2: run-red@2 { + label = "run-red"; + reg = <2>; + }; + + lb60_3: run-green@3 { + label = "run-green"; + reg = <3>; + }; + + lb60_4: io-red@4 { + label = "io-red"; + reg = <4>; + }; + + lb60_5: io-green@5 { + label = "io-green"; + reg = <5>; + }; + + lb60_6: ms-red@6 { + label = "ms-red"; + reg = <6>; + }; + + lb60_7: ms-green@7 { + label = "ms-green"; + reg = <7>; + }; + + lb60_8: ns-red@8 { + label = "ns-red"; + reg = <8>; + }; + + lb60_9: ns-green@9 { + label = "ns-green"; + reg = <9>; + }; + + lb60_10: usr_r@10 { + label = "trm-red"; + reg = <10>; + }; + + lb60_11: usr_g@11 { + label = "trm-green"; + reg = <11>; + }; + + lb60_15: sys-over-red@15 { + label = "sys-over-red"; + reg = <15>; + linux,default-trigger = "default-on"; + }; +}; + +led_bar61: pca9552@61 { + compatible = "nxp,pca9552"; + #address-cells = <1>; + #size-cells = <0>; + reg = <0x61>; + + lb61_0: u6-red@0 { + label = "u6-red"; + reg = <0>; + }; + + lb61_1: u6-green@1 { + label = "u6-green"; + reg = <1>; + }; + + lb61_2: u5-red@2 { + label = "u5-red"; + reg = <2>; + }; + + lb61_3: u5-green@3 { + label = "u5-green"; + reg = <3>; + }; + + lb61_4: u4-red@4 { + label = "u4-red"; + reg = <4>; + }; + + lb61_5: u4-green@5 { + label = "u4-green"; + reg = <5>; + }; + + lb61_6: u3-red@6 { + label = "u3-red"; + reg = <6>; + }; + + lb61_7: u3-green@7 { + label = "u3-green"; + reg = <7>; + }; + + lb61_8: u2-red@8 { + label = "u2-red"; + reg = <8>; + }; + + lb61_9: u2-green@9 { + label = "u2-green"; + reg = <9>; + }; + + lb61_10: u1-red@10 { + label = "u1-red"; + reg = <10>; + }; + + lb61_11: u1-green@11 { + label = "u1-green"; + reg = <11>; + }; +}; diff --git a/arch/arm64/boot/dts/ti/k3-am623-pfc-750-8400.dts b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-8400.dts new file mode 100644 index 000000000000..102a7c1bced6 --- /dev/null +++ b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-8400.dts @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * PFC400 - AM62x based WAGO device + * + * Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/ + * Copyright (C) 2025 WAGO GmbH & Co. KG - https://www.wago.com/ + */ + +#include "k3-am623-pfc-750-84xx-wosm.dtsi" +#include "k3-am623-pfc-750-84xx-baseboard.dtsi" +#include "k3-am623-pfc-750-84xx-kbus.dtsi" +#include "k3-am623-pfc-750-84xx-interaction.dtsi" + +&wsysinit { + status = "okay"; + board,variant = "pfc400"; +}; diff --git a/arch/arm64/boot/dts/ti/k3-am623-pfc-750-84xx-baseboard.dtsi b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-84xx-baseboard.dtsi new file mode 100644 index 000000000000..cb35d78b5219 --- /dev/null +++ b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-84xx-baseboard.dtsi @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* +* PFC400 baseboard dtsi for AM62x based WAGO devices +* +* Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/ +* Copyright (C) 2025 WAGO GmbH & Co. KG - https://www.wago.com/ +*/ + +&main_pmx0 { + main_ksz9477_pins: main-ksz9477-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x01a0, PIN_OUTPUT, 7) /* (E18) MCASP0_AXR0.GPIO1_10 nRST-RGMII2 / nRST-ETHSW (BB) */ + AM62X_IOPAD(0x0034, PIN_INPUT, 7) /* (H21) OSPI0_CSn2.GPIO0_13 nINT-RGMII2 / nINT-ETHSW(BB) */ + >; + }; +}; + +&mcu_spi0 { + ksz9477@0 { + compatible = "microchip,ksz9477"; + pinctrl-names = "default"; + pinctrl-0 = <&main_ksz9477_pins>; + reg = <0>; + spi-max-frequency = <1000000>; + + reset-gpios = <&main_gpio1 10 GPIO_ACTIVE_LOW>; + + dsa,member = <0 0>; + + interrupt-parent = <&main_gpio0>; + interrupts = <13 IRQ_TYPE_EDGE_FALLING>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + label = "ethX3"; + phy-mode = "internal"; + }; + + port@1 { + reg = <1>; + label = "ethX2"; + phy-mode = "internal"; + }; + + port@2 { + reg = <2>; + label = "ethX1"; + phy-mode = "internal"; + }; + + port@3 { + reg = <3>; + label = "ethEM"; + phy-mode = "internal"; + }; + + port@4 { + reg = <4>; + label = "ethX4"; + phy-mode = "internal"; + }; + + port@5 { + reg = <5>; + label = "cpu"; + ethernet = <&cpsw3g>; /* ð0 */ + phy-mode = "rgmii-txid"; + tx-internal-delay-ps = <2000>; + + fixed-link { + speed = <1000>; + full-duplex; + }; + }; + }; + }; +}; + +&main_i2c1 { + eeprom_hw_id_bb: at24c02@54 { + status = "disabled"; + compatible = "atmel,24c02"; + reg = <0x51>; + pagesize = <16>; + }; +}; diff --git a/arch/arm64/boot/dts/ti/k3-am623-pfc-750-84xx-interaction.dtsi b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-84xx-interaction.dtsi new file mode 100644 index 000000000000..8f836b9a3ead --- /dev/null +++ b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-84xx-interaction.dtsi @@ -0,0 +1,140 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * PFC400 interaction board dtsi for AM62x based WAGO devices + * + * Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/ + * Copyright (C) 2025 WAGO GmbH & Co. KG - https://www.wago.com/ + */ + +#include "k3-am623-pfc-rs485.dtsi" +#include "k3-am623-pfc-rtc.dtsi" + +&mcu_pmx0 { + led_reset_pins_default: led-reset-pins-default { + pinctrl-single,pins = < + AM62X_MCU_IOPAD(0x050, PIN_OUTPUT | INPUT_EN, 7) /* (A9) WKUP_I2C0_SDA.GPIO0_20 nRST-LED-DISP */ + >; + }; +}; + +&main_i2c1 { + status = "okay"; + + eeprom_hw_id_ib: at24c02@54 { + status = "disabled"; + compatible = "atmel,24c02"; + reg = <0x54>; + pagesize = <16>; + }; + + /* + * NXP PCA9552BS + * 16-Bit I²C-Bus LED Driver + */ + led_bar60: pca9552@60 { + compatible = "nxp,pca9552"; + pinctrl-names = "default"; + pinctrl-0 = <&led_reset_pins_default>; + + #address-cells = <1>; + #size-cells = <0>; + reg = <0x60>; + + lb60_0: sys-red@0 { + label = "sys-red"; + reg = <0>; + linux,default-trigger = "timer"; + }; + + lb60_1: sys-green@1 { + label = "sys-green"; + reg = <1>; + linux,default-trigger = "timer"; + }; + + lb60_2: sys-blue@2 { + label = "sys-blue"; + reg = <2>; + }; + + lb60_3: run-red@3 { + label = "run-red"; + reg = <3>; + }; + + lb60_4: run-green@4 { + label = "run-green"; + reg = <4>; + }; + + lb60_5: run-blue@5 { + label = "run-blue"; + reg = <5>; + }; + + lb60_6: io-red@6 { + label = "io-red"; + reg = <6>; + }; + + lb60_7: io-green@7 { + label = "io-green"; + reg = <7>; + }; + + lb60_8: io-blue@8 { + label = "io-blue"; + reg = <8>; + }; + + lb60_9: ms-red@9 { + label = "ms-red"; + reg = <9>; + }; + + lb60_10: ms-green@10 { + label = "ms-green"; + reg = <10>; + }; + + lb60_11: ms-blue@11 { + label = "ms-blue"; + reg = <11>; + }; + + lb60_12: usr_r@12 { + label = "trm-red"; + reg = <12>; + }; + + lb60_13: usr_g@13 { + label = "trm-green"; + reg = <13>; + }; + + lb60_14: usr_b@14 { + label = "trm-blue"; + reg = <14>; + }; + + lb60_15: sys-over-red@15 { + label = "sys-over-red"; + reg = <15>; + linux,default-trigger = "default-on"; + }; + }; + + /* + * Dynamic NFC/RFID tag IC with 4-Kbit EEPROM + * + * This driver is not yet upstream but there is a kernel driver available at: + * + * https://github.com/2pecshy/eeprom-ST25DV-linux-driver/tree/master + * + */ + st25dv04k: st25dv04k@53 { + status = "okay"; + compatible = "st25dv,st25dv04k"; + reg = <0x53>; + }; +}; diff --git a/arch/arm64/boot/dts/ti/k3-am623-pfc-750-84xx-kbus.dtsi b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-84xx-kbus.dtsi new file mode 100644 index 000000000000..1346d8cab87a --- /dev/null +++ b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-84xx-kbus.dtsi @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Common dtsi for AM62x WAGO based devices + * + * Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/ + * Copyright (C) 2025 WAGO GmbH & Co. KG - https://www.wago.com/ + */ + +#include "k3-am623-pfc-kbus.dtsi" + +/ { + /* this name of the gpio-keys device is a + * historical heritage from 3.6.11 kernel. + * the device-name is checked in omsd. So we + * need to adapt this configuration + */ + oms: PAC-Operating-Mode-Switch { + status = "okay"; + compatible = "gpio-keys"; + pinctrl-names = "default"; + pinctrl-0 = <&oms_pins_default>; + #address-cells = <1>; + #size-cells = <0>; + autorepeat; + + oms_stop_run: stop_run { + label = "RUN"; + gpios = <&main_gpio0 65 GPIO_ACTIVE_LOW>; + linux,code = <1>; + linux,input-type = <5>; + debounce-interval = <1>; + }; + + oms_reset_all: reset_all { + label = "RESET_ALL"; + gpios = <&main_gpio1 11 GPIO_ACTIVE_HIGH>; + linux,code = <4>; + linux,input-type = <1>; + debounce-interval = <1>; + }; + }; + + leds { + compatible = "gpio-leds"; + pinctrl-0 = <&sd_activity_led_pin>; + pinctrl-names = "default"; + + led-0 { + function = LED_FUNCTION_SD; + color = ; + gpios = <&main_gpio0 31 GPIO_ACTIVE_LOW>; + linux,default-trigger = "mmc0"; + default-state = "on"; + }; + }; +}; + +&main_pmx0 { + oms_pins_default: oms-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x0108, PIN_INPUT, 7) /* (D24) MMC2_DAT3.GPIO0_65 nSTOP-RUN */ + AM62X_IOPAD(0x01a4, PIN_INPUT, 7) /* (B20) MCASP0_ACLKX.GPIO1_11 IO-RAB */ + >; + }; + + sd_activity_led_pin: sd-activity-led-pin { + pinctrl-single,pins = < + AM62X_IOPAD(0x07c, PIN_OUTPUT, 7) /* (P25) GPMC0_CLK.GPIO0_31 (MMC1.PWR / SDC.LED) */ + >; + }; +}; + +&main_i2c1 { + eeprom_hw_id_kbus: at24c02@50 { + status = "disabled"; + compatible = "atmel,24c02"; + reg = <0x50>; + pagesize = <16>; + }; +}; diff --git a/arch/arm64/boot/dts/ti/k3-am623-pfc-750-84xx-wosm.dtsi b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-84xx-wosm.dtsi new file mode 100644 index 000000000000..de8a9fc7a245 --- /dev/null +++ b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-84xx-wosm.dtsi @@ -0,0 +1,327 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * PFC400 WOSM dtsi for AM62x based WAGO devices + * + * Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/ + * Copyright (C) 2025 WAGO GmbH & Co. KG - https://www.wago.com/ + */ + +#include "k3-am623-pfc-750-8xxx-common.dtsi" +#include "k3-am623-pfc-tpm.dtsi" + +/ { + model = "WAGO PFC400 750-8400"; + compatible = "ti,am623-pfc", "ti,am625"; + + aliases { + usb1 = &usb1; + ethernet0 = &cpsw_port2; + }; + + cpus { + cpu@0 { + cpu-supply = <&buck1_30_reg>; + }; + + cpu@1 { + cpu-supply = <&buck1_30_reg>; + }; + + cpu@2 { + cpu-supply = <&buck1_30_reg>; + }; + + cpu@3 { + cpu-supply = <&buck1_30_reg>; + }; + }; + + memory@80000000 { + device_type = "memory"; + + /* 4 GiB RAM */ + reg = <0x00000000 0x80000000 0x00000000 0x80000000>, + <0x00000008 0x80000000 0x00000000 0x80000000>; + }; + + vcc_1v8_sys: regulator-4 { + compatible = "regulator-fixed"; + regulator-name = "vcc_1v8_sys"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + vin-supply = <&vmain_pd>; + regulator-always-on; + regulator-boot-on; + }; +}; + +&mcu_pmx0 { + mcu_spi0_pins: mcu-spi0-pins { + pinctrl-single,pins = < + AM64X_MCU_IOPAD(0x008, PIN_OUTPUT, 0) /* (A7) MCU_SPI0_CLK SCLK */ + AM64X_MCU_IOPAD(0x000, PIN_OUTPUT, 0) /* (E8) MCU_SPI0_CS0 nCS0 */ + AM64X_MCU_IOPAD(0x00c, PIN_INPUT, 0) /* (D9) MCU_SPI0_D0 MISO */ + AM64X_MCU_IOPAD(0x010, PIN_OUTPUT, 0) /* (C9) MCU_SPI0_D1 MOSI */ + >; + }; +}; + +&main_pmx0 { + main_mdio1_pins_default: main-mdio1-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x160, PIN_OUTPUT, 0) /* (AD24) MDIO0_MDC not used, just for testing */ + AM62X_IOPAD(0x15c, PIN_INPUT_PULLUP, 0) /* (AB22) MDIO0_MDIO not used, just for testing */ + >; + }; + + main_rgmii2_pins_default: main-rgmii2-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x184, PIN_INPUT, 0) /* (AE23) RGMII2_RD0 */ + AM62X_IOPAD(0x188, PIN_INPUT, 0) /* (AB20) RGMII2_RD1 */ + AM62X_IOPAD(0x18c, PIN_INPUT, 0) /* (AC21) RGMII2_RD2 */ + AM62X_IOPAD(0x190, PIN_INPUT, 0) /* (AE22) RGMII2_RD3 */ + AM62X_IOPAD(0x180, PIN_INPUT, 0) /* (AD23) RGMII2_RXC */ + AM62X_IOPAD(0x17c, PIN_INPUT, 0) /* (AD22) RGMII2_RX_CTL */ + AM62X_IOPAD(0x16c, PIN_OUTPUT, 0) /* (Y18) RGMII2_TD0 */ + AM62X_IOPAD(0x170, PIN_OUTPUT, 0) /* (AA18) RGMII2_TD1 */ + AM62X_IOPAD(0x174, PIN_OUTPUT, 0) /* (AD21) RGMII2_TD2 */ + AM62X_IOPAD(0x178, PIN_OUTPUT, 0) /* (AC20) RGMII2_TD3 */ + AM62X_IOPAD(0x168, PIN_OUTPUT, 0) /* (AE21) RGMII2_TXC */ + AM62X_IOPAD(0x164, PIN_OUTPUT, 0) /* (AA19) RGMII2_TX_CTL */ + >; + }; + + usb1_pins_default: usb1-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x0258, PIN_INPUT, 0) /* (F18) USB1_DRVVBUS */ + >; + }; + + mram_irq_pins_default: mram-irq-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x0038, PIN_INPUT, 7) /* (E24) OSPI0_CSn3.GPIO0_14 (nINT-nVMEM) */ + >; + }; + + ospi0_pins_default: ospi0-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x000, PIN_OUTPUT, 0) /* (H24) OSPI0_CLK */ + AM62X_IOPAD(0x02c, PIN_OUTPUT, 0) /* (F23) OSPI0_CSn0 */ + AM62X_IOPAD(0x00c, PIN_INPUT, 0) /* (E25) OSPI0_D0 */ + AM62X_IOPAD(0x010, PIN_INPUT, 0) /* (G24) OSPI0_D1 */ + AM62X_IOPAD(0x014, PIN_INPUT, 0) /* (F25) OSPI0_D2 */ + AM62X_IOPAD(0x018, PIN_INPUT, 0) /* (F24) OSPI0_D3 */ + AM62X_IOPAD(0x01c, PIN_INPUT, 0) /* (J23) OSPI0_D4 */ + AM62X_IOPAD(0x020, PIN_INPUT, 0) /* (J25) OSPI0_D5 */ + AM62X_IOPAD(0x024, PIN_INPUT, 0) /* (H25) OSPI0_D6 */ + AM62X_IOPAD(0x028, PIN_INPUT, 0) /* (J22) OSPI0_D7 */ + AM62X_IOPAD(0x008, PIN_INPUT, 0) /* (J24) OSPI0_DQS */ + >; + }; +}; + +&watchdog_ext { + status = "okay"; +}; + +&gpmc0 { + status = "disabled"; +}; + +&mcu_spi0 { + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&mcu_spi0_pins>; +}; + +&main_spi0 { + status = "okay"; +}; + +&main_spi2 { + status = "okay"; +}; + +&ospi0 { + pinctrl-names = "default"; + pinctrl-0 = <&ospi0_pins_default>; + status = "okay"; + + /* Everspin Tech. EM008LXO + * Order-No EM008LXOAB320IS1R + */ + mram: mram@0 { + pinctrl-names = "default"; + pinctrl-0 = <&mram_irq_pins_default>; + + interrupt-parent = <&main_gpio0>; + interrupts = <14 IRQ_TYPE_EDGE_FALLING>; + + compatible = "jedec,spi-nor"; + reg = <0x0>; + spi-tx-bus-width = <8>; + spi-rx-bus-width = <8>; + spi-max-frequency = <200000000>; + m25p,fast-read; + + cdns,tshsl-ns = <60>; + cdns,tsd2d-ns = <60>; + cdns,tchsh-ns = <60>; + cdns,tslch-ns = <60>; + cdns,read-delay = <0>; + }; +}; + +&main_i2c0 { + status = "okay"; + + eeprom_hw_id_wosm: at24c02@50 { + status = "disabled"; + compatible = "atmel,24c02"; + reg = <0x50>; + pagesize = <16>; + }; + + tps65219: pmic@30 { + compatible = "ti,tps65219"; + reg = <0x30>; + system-power-controller; + + buck1-supply = <&vcc_5v0>; + buck2-supply = <&vcc_5v0>; + buck3-supply = <&vcc_5v0>; + ldo1-supply = <&vcc_3v3_sys>; + ldo2-supply = <&vcc_1v8_sys>; + ldo3-supply = <&vcc_3v3_sys>; + ldo4-supply = <&vcc_3v3_sys>; + + pinctrl-names = "default"; + pinctrl-0 = <&pmic_irq_pins_default>; + + interrupt-parent = <&main_gpio0>; + interrupts = <68 IRQ_TYPE_EDGE_FALLING>; + + /* NOTICE: + * + * We could use "tps65219-gpio" here with GPO1 (EN-DCDC-1V8) + * and GPO2 (CARRIER_PWR_EN for SD-Card and I2C1 devices) enabled, + * but will skip it for now and trust the bootloader or TPS-NVM for the + * correct settings correctly. + * + * For now we declare vcc_1v8_sys as being fixed. + * + */ + regulators { + buck1_30_reg: buck1 { + regulator-name = "VDD_CORE"; + regulator-min-microvolt = <750000>; + regulator-max-microvolt = <750000>; + regulator-boot-on; + regulator-always-on; + }; + + buck2_30_reg: buck2 { + regulator-name = "VCC3V3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-boot-on; + regulator-always-on; + }; + + buck3_30_reg: buck3 { + regulator-name = "VDD_LPDDR4"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-boot-on; + regulator-always-on; + }; + + ldo1_30_sd_1v8_reg: ldo1 { + regulator-name = "VDDSHV_SD_1V8_IO_PMIC"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + + ldo2_30_reg: ldo2 { + regulator-name = "VDDAR_CORE"; + regulator-min-microvolt = <850000>; + regulator-max-microvolt = <850000>; + regulator-boot-on; + regulator-always-on; + }; + + ldo3_30_reg: ldo3 { + regulator-name = "VDDA_1V8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-boot-on; + regulator-always-on; + }; + + ldo4_30_reg: ldo4 { + regulator-name = "VDDA_2V5"; + regulator-min-microvolt = <2500000>; + regulator-max-microvolt = <2500000>; + regulator-boot-on; + regulator-always-on; + }; + }; + }; +}; + +&main_i2c1 { + status = "okay"; +}; + +&sdhci0 { /* eMMC */ + status = "okay"; +}; + +&sdhci1 { /* SD */ + status = "okay"; + + vmmc-supply = <&vcc_3v3_sys>; + vqmmc-supply = <&ldo1_30_sd_1v8_reg>; +}; + +&cpsw3g { + status = "okay"; + + pinctrl-names = "default"; + pinctrl-0 = <&main_mdio1_pins_default + &main_rgmii2_pins_default>; +}; + +&cpsw_port1 { + status = "disabled"; +}; + +/* + * Use a fixed phy for emac2. + * that's rgmii2 + */ +&cpsw_port2 { + status = "okay"; + phy-mode = "rgmii-rxid"; + + fixed-link { + speed = <1000>; + full-duplex; + }; +}; + +&cpsw3g_mdio { + status = "disabled"; +}; + +&usbss1 { + status = "okay"; + ti,vbus-divider; +}; + +&usb1 { + status = "okay"; + dr_mode = "host"; + pinctrl-names = "default"; + pinctrl-0 = <&usb1_pins_default>; +}; diff --git a/arch/arm64/boot/dts/ti/k3-am623-pfc-750-8xxx-common.dtsi b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-8xxx-common.dtsi new file mode 100644 index 000000000000..f5be8b9b84ae --- /dev/null +++ b/arch/arm64/boot/dts/ti/k3-am623-pfc-750-8xxx-common.dtsi @@ -0,0 +1,367 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Common dtsi for AM62x based WAGO devices + * + * Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/ + * + * Copyright (C) 2025 WAGO GmbH & Co. KG + */ + +#include +#include +#include +#include "k3-am625.dtsi" + +/ { + aliases { + serial2 = &main_uart0; + serial1 = &main_uart2; + serial4 = &main_uart4; + mmc0 = &sdhci1; + mmc1 = &sdhci0; + ethernet0 = &cpsw_port1; + ethernet1 = &cpsw_port2; + usb0 = &usb0; + watchdog0 = &main_rti0; + watchdog1 = &watchdog_ext; + watchdog2 = &main_rti1; + eeprom_typelabel = &eeprom_type_label; + }; + + opp-table { + opp-200000000 { + opp-microvolt = <750000>; + }; + + opp-400000000 { + opp-microvolt = <750000>; + }; + + opp-600000000 { + opp-microvolt = <750000>; + }; + + opp-800000000 { + opp-microvolt = <750000>; + }; + + opp-1000000000 { + opp-microvolt = <750000>; + }; + + opp-1250000000 { + opp-microvolt = <750000>; + }; + + opp-1400000000 { + opp-hz = /bits/ 64 <1400000000>; + opp-microvolt = <850000>; + opp-supported-hw = <0x01 0x0004>; + clock-latency-ns = <6000000>; + }; + }; + + chosen { + stdout-path = "serial2:115200n8"; + }; + + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + + ramoops@9ca00000 { + compatible = "ramoops"; + reg = <0x00 0x9ca00000 0x00 0x00100000>; + record-size = <0x8000>; + console-size = <0x8000>; + ftrace-size = <0x00>; + pmsg-size = <0x8000>; + }; + + secure_tfa_ddr: tfa@9e780000 { + reg = <0x00 0x9e780000 0x00 0x80000>; + alignment = <0x1000>; + no-map; + }; + + secure_ddr: optee@9e800000 { + reg = <0x00 0x9e800000 0x00 0x01800000>; /* for OP-TEE */ + alignment = <0x1000>; + no-map; + }; + + wkup_r5fss0_core0_dma_memory_region: r5f-dma-memory@9db00000 { + compatible = "shared-dma-pool"; + reg = <0x00 0x9db00000 0x00 0xc00000>; + no-map; + }; + }; + + vmain_pd: regulator-0 { + /* TPS6522005 Dual PMIC */ + compatible = "regulator-fixed"; + regulator-name = "vmain_pd"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + regulator-always-on; + regulator-boot-on; + }; + + vcc_5v0: regulator-1 { + compatible = "regulator-fixed"; + regulator-name = "vcc_5v0"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + vin-supply = <&vmain_pd>; + regulator-always-on; + regulator-boot-on; + }; + + vcc_3v3_sys: regulator-2 { + compatible = "regulator-fixed"; + regulator-name = "vcc_3v3_sys"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + vin-supply = <&vmain_pd>; + regulator-always-on; + regulator-boot-on; + }; + + watchdog_ext: watchdog { + compatible = "linux,wdt-gpio"; + pinctrl-names = "default"; + pinctrl-0 = <&wdg_ext_pins_default>; + hw_algo = "toggle"; + hw_margin_ms = <1120>; /* STWD100xY: min. 1120, typ. 1600 */ + en-gpios = <&main_gpio0 42 GPIO_ACTIVE_LOW>; + gpios = <&main_gpio1 30 GPIO_ACTIVE_LOW>; + }; + + wsysinit: wsysinit_init { + compatible = "wago,sysinit"; + + tty,rs232-485 = "ttyS0"; + }; +}; + +&main_pmx0 { + main_uart0_pins_default: main-uart0-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x1c8, PIN_INPUT, 0) /* (D14) UART0_RXD */ + AM62X_IOPAD(0x1cc, PIN_OUTPUT, 0) /* (E14) UART0_TXD */ + >; + }; + + main_uart2_pins_default: main-uart2-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x01d0, PIN_INPUT, 3) /* (A15) UART0_CTSn.UART2_RXD */ + AM62X_IOPAD(0x01d4, PIN_OUTPUT, 3) /* (B15) UART0_RTSn.UART2_TXD */ + >; + }; + + main_uart4_pins_default: main-uart4-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x0b0, PIN_INPUT, 3) /* (K22) UART4_RXD */ + AM62X_IOPAD(0x0b4, PIN_OUTPUT, 3) /* (K24) UART4_TXD */ + AM62X_IOPAD(0x09c, PIN_OUTPUT_PULLDOWN, 7) /* (V25) GPIO0_38 (RS-DE) */ + >; + }; + + main_i2c0_pins_default: main-i2c0-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x1e0, PIN_INPUT_PULLUP, 0) /* (B16) I2C0_SCL */ + AM62X_IOPAD(0x1e4, PIN_INPUT_PULLUP, 0) /* (A16) I2C0_SDA */ + >; + }; + + main_i2c1_pins_default: main-i2c1-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x1e8, PIN_INPUT_PULLUP, 0) /* (B17) I2C1_SCL */ + AM62X_IOPAD(0x1ec, PIN_INPUT_PULLUP, 0) /* (A17) I2C1_SDA */ + >; + }; + + main_mmc0_pins_default: main-mmc0-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x220, PIN_INPUT, 0) /* (Y3) MMC0_CMD */ + AM62X_IOPAD(0x218, PIN_OUTPUT, 0) /* (AB1) MMC0_CLK */ + AM62X_IOPAD(0x214, PIN_INPUT, 0) /* (AA2) MMC0_DAT0 */ + AM62X_IOPAD(0x210, PIN_INPUT, 0) /* (AA1) MMC0_DAT1 */ + AM62X_IOPAD(0x20c, PIN_INPUT, 0) /* (AA3) MMC0_DAT2 */ + AM62X_IOPAD(0x208, PIN_INPUT, 0) /* (Y4) MMC0_DAT3 */ + AM62X_IOPAD(0x204, PIN_INPUT, 0) /* (AB2) MMC0_DAT4 */ + AM62X_IOPAD(0x200, PIN_INPUT, 0) /* (AC1) MMC0_DAT5 */ + AM62X_IOPAD(0x1fc, PIN_INPUT, 0) /* (AD2) MMC0_DAT6 */ + AM62X_IOPAD(0x1f8, PIN_INPUT, 0) /* (AC2) MMC0_DAT7 */ + >; + }; + + main_mmc1_pins_default: main-mmc1-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x23c, PIN_INPUT, 0) /* (A21) MMC1_CMD */ + AM62X_IOPAD(0x234, PIN_OUTPUT, 0) /* (B22) MMC1_CLK */ + AM62X_IOPAD(0x230, PIN_INPUT, 0) /* (A22) MMC1_DAT0 */ + AM62X_IOPAD(0x22c, PIN_INPUT, 0) /* (B21) MMC1_DAT1 */ + AM62X_IOPAD(0x228, PIN_INPUT, 0) /* (C21) MMC1_DAT2 */ + AM62X_IOPAD(0x224, PIN_INPUT, 0) /* (D22) MMC1_DAT3 */ + AM62X_IOPAD(0x240, PIN_INPUT_PULLUP, 0) /* (D17) MMC1_SDCD */ + AM62X_IOPAD(0x244, PIN_INPUT_PULLUP, 0) /* (C17) MMC1_SDWP */ + >; + }; + + main_spi0_pins_default: main-spi0-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x01bc, PIN_OUTPUT, 0) /* (A14) SPI0_CLK */ + AM62X_IOPAD(0x01c0, PIN_INPUT, 0) /* (B13) SPI0_D0 */ + AM62X_IOPAD(0x01c4, PIN_OUTPUT, 0) /* (B14) SPI0_D1 */ + AM62X_IOPAD(0x01b4, PIN_OUTPUT, 0) /* (A13) SPI0_CS0 */ + >; + + }; + + main_spi2_pins_default: main-spi2-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x01b0, PIN_OUTPUT, 1) /* (A20) MCASP0_ACLKR.SPI2_CLK */ + AM62X_IOPAD(0x0194, PIN_INPUT, 1) /* (B19) MCASP0_AXR3.SPI2_D0 */ + AM62X_IOPAD(0x0198, PIN_INPUT, 1) /* (A19) MCASP0_AXR2.SPI2_D1 */ + AM62X_IOPAD(0x01ac, PIN_OUTPUT, 1) /* (E19) MCASP0_AFSR.SPI2_CS0 */ + >; + }; + + wdg_ext_pins_default: wdg-ext-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x00ac, PIN_OUTPUT_PULLUP | INPUT_EN, 7) /* (L21) GPMC0_CSn1.GPIO0_42 */ + AM62X_IOPAD(0x01f0, PIN_OUTPUT, 7) /* (A18) EXT_REFCLK1.GPIO1_30 */ + >; + }; + + pmic_irq_pins_default: pmic-irq-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x0114, PIN_INPUT, 7) /* (B24) MMC2_DAT0.GPIO0_68 */ + >; + }; +}; + +&main_uart0 { /* DGB UART */ + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&main_uart0_pins_default>; +}; + +&main_uart2 { /* KBUS Firmware download */ + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&main_uart2_pins_default>; +}; + +&main_uart4 { /* RS485 */ + status = "okay"; + pinctrl-names = "default"; + pinctrl-0 = <&main_uart4_pins_default>; +}; + +&main_i2c0 { /* type label */ + pinctrl-names = "default"; + pinctrl-0 = <&main_i2c0_pins_default>; + clock-frequency = <400000>; + + eeprom_type_label: at24c512@54 { + compatible = "atmel,24c512"; + reg = <0x54>; + pagesize = <128>; + }; +}; + +&main_spi0 { + pinctrl-names = "default"; + pinctrl-0 = <&main_spi0_pins_default>; + + dmas = <&main_pktdma 0xc300 0>, <&main_pktdma 0x4300 0>; + dma-names = "tx0", "rx0"; + + /* + * When this option is set, the McSPI EOW Interrupt will be used + * to signal when a DMA Transfer is done. This is needed for this + * platform to prevent unpredictable delays resulting from TX/RX + * completions within the UDMA driver. + */ + use-eow-interrupt; +}; + +&main_spi2 { + pinctrl-names = "default"; + pinctrl-0 = <&main_spi2_pins_default>; +}; + +&main_i2c1 { + pinctrl-names = "default"; + pinctrl-0 = <&main_i2c1_pins_default>; + clock-frequency = <400000>; + + rtc@52 { + compatible = "microcrystal,rv3028"; + reg = <0x52>; + // The backup goldcap is supplied with a higher voltage (+5V) + // then the RTC (+3,3) itself. It requires a special setup + // to avoid hardware failure. + use-goldcap-with-higher-voltage; + }; +}; + +&sdhci0 { + /* eMMC */ + pinctrl-names = "default"; + pinctrl-0 = <&main_mmc0_pins_default>; + ti,driver-strength-ohm = <33>; + disable-wp; +}; + +&sdhci1 { + /* SD */ + pinctrl-names = "default"; + pinctrl-0 = <&main_mmc1_pins_default>; + ti,driver-strength-ohm = <33>; + disable-wp; +}; + +&mailbox0_cluster0 { + mbox_m4_0: mbox-m4-0 { + ti,mbox-rx = <0 0 0>; + ti,mbox-tx = <1 0 0>; + }; +}; + +/* + * This system watchdog is reserved for internal use and is not user-configurable. + * It must not be modified or deleted to ensure consistent behavior! + */ +&main_rti1 { // watchdog@e010000 + timeout-sec = <120>; +}; + +/* + * AM6232 does not have main_rti2, main_rti3, and main_rti15 + * https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1218039/am623-stuck-in-sd-card-after-boot-up + */ +&main_rti2 { // watchdog@e020000 + status = "disabled"; +}; + +&main_rti3 { // watchdog@e030000 + status = "disabled"; +}; + +&main_rti15 { // watchdog@e0f0000 + status = "disabled"; +}; + +&usbss0 { + status = "okay"; + ti,vbus-divider; +}; + +&usb0 { + status = "okay"; + dr_mode = "peripheral"; +}; diff --git a/arch/arm64/boot/dts/ti/k3-am623-pfc-kbus.dtsi b/arch/arm64/boot/dts/ti/k3-am623-pfc-kbus.dtsi new file mode 100644 index 000000000000..61cab828cc26 --- /dev/null +++ b/arch/arm64/boot/dts/ti/k3-am623-pfc-kbus.dtsi @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: GPL-2.0 +/* +* Common dtsi for AM62x WAGO based devices +* +* Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/ +* Copyright (C) 2025 WAGO GmbH & Co. KG - https://www.wago.com/ +*/ + +&main_pmx0 { + kbus_pins_default: kbus-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x0100, PIN_INPUT_PULLUP, 7) /* (AC25) VOUT0_VSYNC.GPIO0_63 (kbus,nsync) */ + AM62X_IOPAD(0x0128, PIN_OUTPUT_PULLDOWN, 7) /* (B23) MMC2_SDWP.GPIO0_72 (kbus,nrst) */ + AM62X_IOPAD(0x0118, PIN_OUTPUT_PULLUP, 7) /* (D25) MMC2_CLK.GPIO0_69 (kbus,cmdsel) */ + AM62X_IOPAD(0x0104, PIN_OUTPUT_PULLUP, 7) /* (AC24) VOUT0_PCLK.GPIO0_64 (kbus,nirq) */ + AM62X_IOPAD(0x0120, PIN_INPUT_PULLUP, 7) /* (C24) MMC2_CMD.GPIO0_70 (kbus,nerr) */ + AM62X_IOPAD(0x0124, PIN_INPUT_PULLUP, 7) /* (A23) MMC2_SDCD.GPIO0_71 (kbus,nrdy) */ + >; + }; +}; + +&main_spi0 { + spi-rt; + spi-rt-prio = <81>; + + kbus@0 { + pinctrl-names = "default"; + pinctrl-0 = <&kbus_pins_default>; + compatible = "wago,spi-kbus"; + reg = <0>; + spi-max-frequency = <25000000>; + + kbus,reset-on-boot; + kbus,renesas; + + /* + * kbus,cmdsel-gpio is used to signal the need for an update + * while the KBUS slave cpu is being reset. Its low level + * forces an update. + */ + kbus,force-update-detection; + + /* + * announce used tty-device in /sys/class/wago/system. + * is needed to link this device to /dev/ttyKbus + */ + /* TODO: check serial device name in user-space */ + kbus,tty-device = "ttyS1"; /* corresponds to &uart2*/ + + /* some should be active low, keep all to high for compatibility reasons */ + kbus,nrst-gpio = <&main_gpio0 72 GPIO_ACTIVE_LOW>; + kbus,nsync-gpio = <&main_gpio0 63 GPIO_ACTIVE_HIGH>; + kbus,cmdsel-gpio = <&main_gpio0 69 GPIO_ACTIVE_HIGH>; + kbus,nirq-gpio = <&main_gpio0 64 GPIO_ACTIVE_HIGH>; + kbus,nerr-gpio = <&main_gpio0 70 GPIO_ACTIVE_HIGH>; + kbus,nrdy-gpio = <&main_gpio0 71 GPIO_ACTIVE_HIGH>; + }; +}; diff --git a/arch/arm64/boot/dts/ti/k3-am623-pfc-rs485.dtsi b/arch/arm64/boot/dts/ti/k3-am623-pfc-rs485.dtsi new file mode 100644 index 000000000000..f6db62c560a5 --- /dev/null +++ b/arch/arm64/boot/dts/ti/k3-am623-pfc-rs485.dtsi @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Common dtsi for AM62x WAGO based devices + * + * Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/ + * Copyright (C) 2025 WAGO GmbH & Co. KG - https://www.wago.com/ + */ + +&main_i2c1 { + /* + * PCA9538, 8-Bit I/O Expander + */ + io_exp_8bit: io-exp-8bit@71 { + compatible = "nxp,pca9538"; + reg = <0x71>; + gpio-controller; + #gpio-cells = <2>; + gpio-line-names = "RS.TERM-EN", "RS.SLR", + "+5V0-FB-ENA", "IO3", + "BIAS.EN", "BIAS.HIR", + "IO6", "IO7"; + + rs485-5v { /* +5V0-FB-ENA */ + gpio-hog; + gpios = <2 GPIO_ACTIVE_HIGH>; + output-high; + }; + }; +}; + +&main_uart4 { /* RS485 Interface */ + rts-gpios = <&main_gpio0 38 GPIO_ACTIVE_HIGH>; + rs485-term-gpios = <&io_exp_8bit 0 GPIO_ACTIVE_HIGH>; + rs485-rts-active-high; + linux,rs485-enabled-at-boot-time; +}; diff --git a/arch/arm64/boot/dts/ti/k3-am623-pfc-rtc.dtsi b/arch/arm64/boot/dts/ti/k3-am623-pfc-rtc.dtsi new file mode 100644 index 000000000000..959d243f151d --- /dev/null +++ b/arch/arm64/boot/dts/ti/k3-am623-pfc-rtc.dtsi @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Common Real-Time-Clock dtsi for AM62x WAGO based devices + * + * Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/ + * Copyright (C) 2025 WAGO GmbH & Co. KG - https://www.wago.com/ + */ + +&main_i2c1 { + rtc@52 { + compatible = "microcrystal,rv3028"; + reg = <0x52>; + + /* + * The backup goldcap is supplied with a higher voltage (+5V) + * then the RTC (+3,3) itself. It requires a special setup + * to avoid hardware failure. + */ + use-goldcap-with-higher-voltage; + }; +}; diff --git a/arch/arm64/boot/dts/ti/k3-am623-pfc-tpm.dtsi b/arch/arm64/boot/dts/ti/k3-am623-pfc-tpm.dtsi new file mode 100644 index 000000000000..eb8a9b8f6ee4 --- /dev/null +++ b/arch/arm64/boot/dts/ti/k3-am623-pfc-tpm.dtsi @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Common Trusted Platform Module dtsi for AM62x based WAGO devices + * + * Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/ + * Copyright (C) 2025 WAGO GmbH & Co. KG - https://www.wago.com/ + */ + +&main_pmx0 { + tpm_pins_default: tpm-pins-default-pins { + pinctrl-single,pins = < + AM62X_IOPAD(0x010c, PIN_INPUT, 7) /* (E23) MMC2_DAT2.GPIO0_66 */ + >; + }; +}; + +&main_spi2 { + SLB9670: SLB9670@0 { + compatible = "infineon,slb9670", "tis,tpm2-spi", "tcg,tpm_tis-spi"; + reg = <0>; + #gpio-cells = <2>; + #interrupt-cells = <2>; + pinctrl-names = "default"; + pinctrl-0 = <&tpm_pins_default>; + + interrupt-parent = <&main_gpio0>; + interrupts = <66 IRQ_TYPE_EDGE_FALLING>; + #address-cells = <1>; + #size-cells = <0>; + spi-max-frequency = <43000000>; + }; +}; diff --git a/arch/arm64/boot/dts/ti/k3-am62x-pfc.dtsi b/arch/arm64/boot/dts/ti/k3-am62x-pfc.dtsi deleted file mode 100644 index a0a54762f32d..000000000000 --- a/arch/arm64/boot/dts/ti/k3-am62x-pfc.dtsi +++ /dev/null @@ -1,919 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Common dtsi for AM62x WAGO based devices - * - * Copyright (C) 2021-2022 Texas Instruments Incorporated - https://www.ti.com/ - * - * Copyright (C) 2024 WAGO GmbH & Co. KG - * Oleg Karfich - * Andrej Unrau - */ - -#include -#include -#include -#include "k3-am625.dtsi" - -/ { - aliases { - serial2 = &main_uart0; - serial1 = &main_uart2; - serial4 = &main_uart4; - mmc0 = &sdhci1; - mmc1 = &sdhci0; - ethernet0 = &cpsw_port1; - ethernet1 = &cpsw_port2; - usb0 = &usb0; - watchdog0 = &main_rti0; - watchdog1 = &watchdog_ext; - watchdog2 = &main_rti1; - }; - - opp-table { - opp-200000000 { - opp-microvolt = <750000>; - }; - - opp-400000000 { - opp-microvolt = <750000>; - }; - - opp-600000000 { - opp-microvolt = <750000>; - }; - - opp-800000000 { - opp-microvolt = <750000>; - }; - - opp-1000000000 { - opp-microvolt = <750000>; - }; - - opp-1250000000 { - opp-microvolt = <750000>; - }; - - opp-1400000000 { - opp-hz = /bits/ 64 <1400000000>; - opp-microvolt = <850000>; - opp-supported-hw = <0x01 0x0004>; - clock-latency-ns = <6000000>; - }; - }; - - chosen { - stdout-path = "serial2:115200n8"; - }; - - memory@80000000 { - device_type = "memory"; - /* 2G RAM */ - reg = <0x00000000 0x80000000 0x00000000 0x80000000>; - - }; - - reserved-memory { - #address-cells = <2>; - #size-cells = <2>; - ranges; - - ramoops@9ca00000 { - compatible = "ramoops"; - reg = <0x00 0x9ca00000 0x00 0x00100000>; - record-size = <0x8000>; - console-size = <0x8000>; - ftrace-size = <0x00>; - pmsg-size = <0x8000>; - }; - - secure_tfa_ddr: tfa@9e780000 { - reg = <0x00 0x9e780000 0x00 0x80000>; - alignment = <0x1000>; - no-map; - }; - - secure_ddr: optee@9e800000 { - reg = <0x00 0x9e800000 0x00 0x01800000>; /* for OP-TEE */ - alignment = <0x1000>; - no-map; - }; - - wkup_r5fss0_core0_dma_memory_region: r5f-dma-memory@9db00000 { - compatible = "shared-dma-pool"; - reg = <0x00 0x9db00000 0x00 0xc00000>; - no-map; - }; - }; - - wsysinit: wsysinit_init { - compatible = "wago,sysinit"; - - tty,rs232-485 = "ttyS0"; - board,variant = "pfc300"; - }; - - /* this name of the gpio-keys device is a - * historical heritage from 3.6.11 kernel. - * the device-name is checked in omsd. So we - * need to adapt this configuration - */ - oms: PAC-Operating-Mode-Switch { - compatible = "gpio-keys"; - pinctrl-names = "default"; - pinctrl-0 = <&oms_pins_default>; - #address-cells = <1>; - #size-cells = <0>; - autorepeat; - - oms_run: run { - label = "RUN"; - gpios = <&main_gpio0 65 GPIO_ACTIVE_LOW>; - linux,code = <1>; - linux,input-type = <5>; - debounce-interval = <1>; - }; - - oms_stop: stop { - label = "STOP"; - gpios = <&main_gpio1 10 GPIO_ACTIVE_LOW>; - linux,code = <2>; - linux,input-type = <5>; - debounce-interval = <1>; - }; - - oms_reset: reset { - label = "RESET"; - gpios = <&main_gpio1 12 GPIO_ACTIVE_LOW>; - linux,code = <3>; - linux,input-type = <1>; - debounce-interval = <1>; - }; - - oms_reset_all: reset_all { - label = "RESET_ALL"; - gpios = <&main_gpio1 11 GPIO_ACTIVE_HIGH>; - linux,code = <4>; - linux,input-type = <1>; - debounce-interval = <1>; - }; - }; - - uio_nvram: nvram@51000000 { - compatible = "uio_pdrv_genirq"; - linux,uio-name = "UIO_NVRAM"; - reg = <0 0x51000000 0 0x00020000>; /* 128k 16bit NVRAM */ - }; - - vmain_pd: regulator-0 { - /* TPS6522005 Dual PMIC */ - compatible = "regulator-fixed"; - regulator-name = "vmain_pd"; - regulator-min-microvolt = <5000000>; - regulator-max-microvolt = <5000000>; - regulator-always-on; - regulator-boot-on; - }; - - vcc_5v0: regulator-1 { - compatible = "regulator-fixed"; - regulator-name = "vcc_5v0"; - regulator-min-microvolt = <5000000>; - regulator-max-microvolt = <5000000>; - vin-supply = <&vmain_pd>; - regulator-always-on; - regulator-boot-on; - }; - - vcc_3v3_sys: regulator-2 { - compatible = "regulator-fixed"; - regulator-name = "vcc_3v3_sys"; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - vin-supply = <&vmain_pd>; - regulator-always-on; - regulator-boot-on; - }; - - vdd_mmc1: regulator-3 { - compatible = "regulator-fixed"; - pinctrl-names = "default"; - pinctrl-0 = <&vdd_sd_dv_pins_default>; - regulator-name = "vdd_mmc1"; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-boot-on; - vin-supply = <&vcc_3v3_sys>; - gpio = <&main_gpio0 31 GPIO_ACTIVE_LOW>; - enable-active-high; - startup-delay-us = <5000>; - }; - - watchdog_ext: watchdog { - compatible = "linux,wdt-gpio"; - pinctrl-names = "default"; - pinctrl-0 = <&wdg_ext_pins_default>; - hw_algo = "toggle"; - hw_margin_ms = <1120>; /* STWD100xY: min. 1120, typ. 1600 */ - en-gpios = <&main_gpio0 42 GPIO_ACTIVE_LOW>; - gpios = <&main_gpio1 30 GPIO_ACTIVE_LOW>; - }; -}; - -&main_pmx0 { - main_uart0_pins_default: main-uart0-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x1c8, PIN_INPUT, 0) /* (D14) UART0_RXD */ - AM62X_IOPAD(0x1cc, PIN_OUTPUT, 0) /* (E14) UART0_TXD */ - >; - }; - - main_uart2_pins_default: main-uart2-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x01d0, PIN_INPUT, 3) /* (A15) UART0_CTSn.UART2_RXD */ - AM62X_IOPAD(0x01d4, PIN_OUTPUT, 3) /* (B15) UART0_RTSn.UART2_TXD */ - >; - }; - - main_uart4_pins_default: main-uart4-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x0b0, PIN_INPUT, 3) /* (K22) UART4_RXD */ - AM62X_IOPAD(0x0b4, PIN_OUTPUT, 3) /* (K24) UART4_TXD */ - AM62X_IOPAD(0x09c, PIN_OUTPUT_PULLDOWN, 7) /* (V25) GPIO0_38 (RS-DE) */ - >; - }; - - main_i2c0_pins_default: main-i2c0-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x1e0, PIN_INPUT_PULLUP, 0) /* (B16) I2C0_SCL */ - AM62X_IOPAD(0x1e4, PIN_INPUT_PULLUP, 0) /* (A16) I2C0_SDA */ - >; - }; - - main_i2c1_pins_default: main-i2c1-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x1e8, PIN_INPUT_PULLUP, 0) /* (B17) I2C1_SCL */ - AM62X_IOPAD(0x1ec, PIN_INPUT_PULLUP, 0) /* (A17) I2C1_SDA */ - >; - }; - - main_mmc0_pins_default: main-mmc0-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x220, PIN_INPUT, 0) /* (Y3) MMC0_CMD */ - AM62X_IOPAD(0x218, PIN_OUTPUT, 0) /* (AB1) MMC0_CLK */ - AM62X_IOPAD(0x214, PIN_INPUT, 0) /* (AA2) MMC0_DAT0 */ - AM62X_IOPAD(0x210, PIN_INPUT, 0) /* (AA1) MMC0_DAT1 */ - AM62X_IOPAD(0x20c, PIN_INPUT, 0) /* (AA3) MMC0_DAT2 */ - AM62X_IOPAD(0x208, PIN_INPUT, 0) /* (Y4) MMC0_DAT3 */ - AM62X_IOPAD(0x204, PIN_INPUT, 0) /* (AB2) MMC0_DAT4 */ - AM62X_IOPAD(0x200, PIN_INPUT, 0) /* (AC1) MMC0_DAT5 */ - AM62X_IOPAD(0x1fc, PIN_INPUT, 0) /* (AD2) MMC0_DAT6 */ - AM62X_IOPAD(0x1f8, PIN_INPUT, 0) /* (AC2) MMC0_DAT7 */ - >; - }; - - main_mmc1_pins_default: main-mmc1-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x23c, PIN_INPUT, 0) /* (A21) MMC1_CMD */ - AM62X_IOPAD(0x234, PIN_OUTPUT, 0) /* (B22) MMC1_CLK */ - AM62X_IOPAD(0x230, PIN_INPUT, 0) /* (A22) MMC1_DAT0 */ - AM62X_IOPAD(0x22c, PIN_INPUT, 0) /* (B21) MMC1_DAT1 */ - AM62X_IOPAD(0x228, PIN_INPUT, 0) /* (C21) MMC1_DAT2 */ - AM62X_IOPAD(0x224, PIN_INPUT, 0) /* (D22) MMC1_DAT3 */ - AM62X_IOPAD(0x240, PIN_INPUT_PULLUP, 0) /* (D17) MMC1_SDCD */ - AM62X_IOPAD(0x244, PIN_INPUT_PULLUP, 0) /* (C17) MMC1_SDWP */ - >; - }; - - main_mdio1_pins_default: main-mdio1-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x160, PIN_OUTPUT, 0) /* (AD24) MDIO0_MDC */ - AM62X_IOPAD(0x15c, PIN_INPUT_PULLUP, 0) /* (AB22) MDIO0_MDIO */ - AM62X_IOPAD(0x019c, PIN_OUTPUT, 7) /* (B18) MCASP0_AXR1.GPIO1_9 */ - >; - }; - - main_rgmii1_pins_default: main-rgmii1-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x14c, PIN_INPUT, 0) /* (AB17) RGMII1_RD0 */ - AM62X_IOPAD(0x150, PIN_INPUT, 0) /* (AC17) RGMII1_RD1 */ - AM62X_IOPAD(0x154, PIN_INPUT, 0) /* (AB16) RGMII1_RD2 */ - AM62X_IOPAD(0x158, PIN_INPUT, 0) /* (AA15) RGMII1_RD3 */ - AM62X_IOPAD(0x148, PIN_INPUT, 0) /* (AD17) RGMII1_RXC */ - AM62X_IOPAD(0x144, PIN_INPUT, 0) /* (AE17) RGMII1_RX_CTL */ - AM62X_IOPAD(0x134, PIN_OUTPUT, 0) /* (AE20) RGMII1_TD0 */ - AM62X_IOPAD(0x138, PIN_OUTPUT, 0) /* (AD20) RGMII1_TD1 */ - AM62X_IOPAD(0x13c, PIN_OUTPUT, 0) /* (AE18) RGMII1_TD2 */ - AM62X_IOPAD(0x140, PIN_OUTPUT, 0) /* (AD18) RGMII1_TD3 */ - AM62X_IOPAD(0x130, PIN_OUTPUT, 0) /* (AE19) RGMII1_TXC */ - AM62X_IOPAD(0x12c, PIN_OUTPUT, 0) /* (AD19) RGMII1_TX_CTL */ - AM62X_IOPAD(0x0030, PIN_INPUT, 7) /* (G21) OSPI0_CSn1.GPIO0_12 */ - >; - }; - - main_rgmii2_pins_default: main-rgmii2-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x184, PIN_INPUT, 0) /* (AE23) RGMII2_RD0 */ - AM62X_IOPAD(0x188, PIN_INPUT, 0) /* (AB20) RGMII2_RD1 */ - AM62X_IOPAD(0x18c, PIN_INPUT, 0) /* (AC21) RGMII2_RD2 */ - AM62X_IOPAD(0x190, PIN_INPUT, 0) /* (AE22) RGMII2_RD3 */ - AM62X_IOPAD(0x180, PIN_INPUT, 0) /* (AD23) RGMII2_RXC */ - AM62X_IOPAD(0x17c, PIN_INPUT, 0) /* (AD22) RGMII2_RX_CTL */ - AM62X_IOPAD(0x16c, PIN_OUTPUT, 0) /* (Y18) RGMII2_TD0 */ - AM62X_IOPAD(0x170, PIN_OUTPUT, 0) /* (AA18) RGMII2_TD1 */ - AM62X_IOPAD(0x174, PIN_OUTPUT, 0) /* (AD21) RGMII2_TD2 */ - AM62X_IOPAD(0x178, PIN_OUTPUT, 0) /* (AC20) RGMII2_TD3 */ - AM62X_IOPAD(0x168, PIN_OUTPUT, 0) /* (AE21) RGMII2_TXC */ - AM62X_IOPAD(0x164, PIN_OUTPUT, 0) /* (AA19) RGMII2_TX_CTL */ - AM62X_IOPAD(0x0034, PIN_INPUT, 7) /* (H21) OSPI0_CSn2.GPIO0_13 */ - >; - }; - - vdd_sd_dv_pins_default: vdd-sd-dv-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x07c, PIN_OUTPUT, 7) /* (P25) GPMC0_CLK.GPIO0_31 */ - >; - }; - - gpmc_data_pins_default: gpmc-data-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x00bc, PIN_OUTPUT, 1) /* (V24) VOUT0_DATA1.GPMC0_A1 */ - AM62X_IOPAD(0x00c0, PIN_OUTPUT, 1) /* (W25) VOUT0_DATA2.GPMC0_A2 */ - AM62X_IOPAD(0x00c4, PIN_OUTPUT, 1) /* (W24) VOUT0_DATA3.GPMC0_A3 */ - AM62X_IOPAD(0x00c8, PIN_OUTPUT, 1) /* (Y25) VOUT0_DATA4.GPMC0_A4 */ - AM62X_IOPAD(0x00cc, PIN_OUTPUT, 1) /* (Y24) VOUT0_DATA5.GPMC0_A5 */ - AM62X_IOPAD(0x00d0, PIN_OUTPUT, 1) /* (Y23) VOUT0_DATA6.GPMC0_A6 */ - AM62X_IOPAD(0x00d4, PIN_OUTPUT, 1) /* (AA25) VOUT0_DATA7.GPMC0_A7 */ - AM62X_IOPAD(0x00d8, PIN_OUTPUT, 1) /* (V21) VOUT0_DATA8.GPMC0_A8 */ - AM62X_IOPAD(0x00dc, PIN_OUTPUT, 1) /* (W21) VOUT0_DATA9.GPMC0_A9 */ - AM62X_IOPAD(0x00e0, PIN_OUTPUT, 1) /* (V20) VOUT0_DATA10.GPMC0_A10 */ - AM62X_IOPAD(0x00e4, PIN_OUTPUT, 1) /* (AA23) VOUT0_DATA11.GPMC0_A11 */ - AM62X_IOPAD(0x00e8, PIN_OUTPUT, 1) /* (AB25) VOUT0_DATA12.GPMC0_A12 */ - AM62X_IOPAD(0x00ec, PIN_OUTPUT, 1) /* (AA24) VOUT0_DATA13.GPMC0_A13 */ - AM62X_IOPAD(0x00f0, PIN_OUTPUT, 1) /* (Y22) VOUT0_DATA14.GPMC0_A14 */ - AM62X_IOPAD(0x00f4, PIN_OUTPUT, 1) /* (AA21) VOUT0_DATA15.GPMC0_A15 */ - AM62X_IOPAD(0x00f8, PIN_OUTPUT, 1) /* (AB24) VOUT0_HSYNC.GPMC0_A16 */ - >; - }; - - gpmc_addr_pins_default: gpmc-addr-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x003c, PIN_INPUT, 0) /* (M25) GPMC0_AD0 */ - AM62X_IOPAD(0x0040, PIN_INPUT, 0) /* (N23) GPMC0_AD1 */ - AM62X_IOPAD(0x0044, PIN_INPUT, 0) /* (N24) GPMC0_AD2 */ - AM62X_IOPAD(0x0048, PIN_INPUT, 0) /* (N25) GPMC0_AD3 */ - AM62X_IOPAD(0x004c, PIN_INPUT, 0) /* (P24) GPMC0_AD4 */ - AM62X_IOPAD(0x0050, PIN_INPUT, 0) /* (P22) GPMC0_AD5 */ - AM62X_IOPAD(0x0054, PIN_INPUT, 0) /* (P21) GPMC0_AD6 */ - AM62X_IOPAD(0x0058, PIN_INPUT, 0) /* (R23) GPMC0_AD7 */ - AM62X_IOPAD(0x005c, PIN_INPUT, 0) /* (R24) GPMC0_AD8 */ - AM62X_IOPAD(0x0060, PIN_INPUT, 0) /* (R25) GPMC0_AD9 */ - AM62X_IOPAD(0x0064, PIN_INPUT, 0) /* (T25) GPMC0_AD10 */ - AM62X_IOPAD(0x0068, PIN_INPUT, 0) /* (R21) GPMC0_AD11 */ - AM62X_IOPAD(0x006c, PIN_INPUT, 0) /* (T22) GPMC0_AD12 */ - AM62X_IOPAD(0x0070, PIN_INPUT, 0) /* (T24) GPMC0_AD13 */ - AM62X_IOPAD(0x0074, PIN_INPUT, 0) /* (U25) GPMC0_AD14 */ - AM62X_IOPAD(0x0078, PIN_INPUT, 0) /* (U24) GPMC0_AD15 */ - >; - }; - - gpmc_ctrl_pins_default: gpmc-ctrl-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x0094, PIN_OUTPUT, 0) /* (N20) GPMC0_BE1n */ - AM62X_IOPAD(0x00a8, PIN_OUTPUT, 0) /* (M21) GPMC0_CSn0 */ - AM62X_IOPAD(0x0088, PIN_OUTPUT, 0) /* (L24) GPMC0_OEn_REn */ - AM62X_IOPAD(0x008c, PIN_OUTPUT, 0) /* (L25) GPMC0_WEn */ - AM62X_IOPAD(0x0090, PIN_OUTPUT, 0) /* (M24) GPMC0_BE0n_CLE */ - >; - }; - - oms_pins_default: oms-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x0108, PIN_INPUT, 7) /* (D24) MMC2_DAT3.GPIO0_65 */ - AM62X_IOPAD(0x01a0, PIN_INPUT, 7) /* (E18) MCASP0_AXR0.GPIO1_10 */ - AM62X_IOPAD(0x01a8, PIN_INPUT, 7) /* (D20) MCASP0_AFSX.GPIO1_12 */ - AM62X_IOPAD(0x01a4, PIN_INPUT, 7) /* (B20) MCASP0_ACLKX.GPIO1_11 */ - >; - }; - - main_spi0_pins_default: main-spi0-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x01bc, PIN_OUTPUT, 0) /* (A14) SPI0_CLK */ - AM62X_IOPAD(0x01c0, PIN_INPUT, 0) /* (B13) SPI0_D0 */ - AM62X_IOPAD(0x01c4, PIN_OUTPUT, 0) /* (B14) SPI0_D1 */ - AM62X_IOPAD(0x01b4, PIN_OUTPUT, 0) /* (A13) SPI0_CS0 */ - >; - - }; - - main_spi2_pins_default: main-spi2-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x01b0, PIN_OUTPUT, 1) /* (A20) MCASP0_ACLKR.SPI2_CLK */ - AM62X_IOPAD(0x0194, PIN_INPUT, 1) /* (B19) MCASP0_AXR3.SPI2_D0 */ - AM62X_IOPAD(0x0198, PIN_INPUT, 1) /* (A19) MCASP0_AXR2.SPI2_D1 */ - AM62X_IOPAD(0x01ac, PIN_OUTPUT, 1) /* (E19) MCASP0_AFSR.SPI2_CS0 */ - >; - }; - - tpm_pins_default: tpm-pins-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x010c, PIN_INPUT, 7) /* (E23) MMC2_DAT2.GPIO0_66 */ - >; - }; - - kbus_pins_default: kbus-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x0100, PIN_INPUT_PULLUP, 7) /* (AC25) VOUT0_VSYNC.GPIO0_63 (kbus,nsync) */ - AM62X_IOPAD(0x0128, PIN_OUTPUT_PULLDOWN, 7) /* (B23) MMC2_SDWP.GPIO0_72 (kbus,nrst) */ - AM62X_IOPAD(0x0118, PIN_OUTPUT_PULLUP, 7) /* (D25) MMC2_CLK.GPIO0_69 (kbus,cmdsel) */ - AM62X_IOPAD(0x0104, PIN_OUTPUT_PULLUP, 7) /* (AC24) VOUT0_PCLK.GPIO0_64 (kbus,nirq) */ - AM62X_IOPAD(0x0120, PIN_INPUT_PULLUP, 7) /* (C24) MMC2_CMD.GPIO0_70 (kbus,nerr) */ - AM62X_IOPAD(0x0124, PIN_INPUT_PULLUP, 7) /* (A23) MMC2_SDCD.GPIO0_71 (kbus,nrdy) */ - >; - }; - - wdg_ext_pins_default: wdg-ext-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x00ac, PIN_OUTPUT_PULLUP | INPUT_EN, 7) /* (L21) GPMC0_CSn1.GPIO0_42 */ - AM62X_IOPAD(0x01f0, PIN_OUTPUT, 7) /* (A18) EXT_REFCLK1.GPIO1_30 */ - >; - }; - - pmic_irq_pins_default: pmic-irq-default-pins { - pinctrl-single,pins = < - AM62X_IOPAD(0x0114, PIN_INPUT, 7) /* (B24) MMC2_DAT0.GPIO0_68 */ - >; - }; -}; - -&gpmc0 { - pinctrl-names = "default"; - pinctrl-0 = <&gpmc_data_pins_default>, <&gpmc_addr_pins_default>, <&gpmc_ctrl_pins_default>; - - num-cs = <4>; - num-waitpins = <4>; - ranges = < - 0 0 0x00 0x51000000 0x01000000 /* CS0: NVRAM, 16M */ - >; - - nvram: nor@0,0 { /* NVRAM Device 128k */ - reg = <0 0 0x01000000>; - bank-width = <2>; /* 1: 8bit, 2: 16bit */ - gpmc,sync-clk-ps = <0>; - gpmc,cs-on-ns = <0>; - gpmc,cs-rd-off-ns = <50>; - gpmc,cs-wr-off-ns = <30>; - gpmc,adv-on-ns = <0>; - gpmc,adv-rd-off-ns = <0>; - gpmc,adv-wr-off-ns = <0>; - gpmc,oe-on-ns = <0>; - gpmc,oe-off-ns = <50>; - gpmc,we-on-ns = <0>; - gpmc,we-off-ns = <30>; - gpmc,rd-cycle-ns = <50>; - gpmc,wr-cycle-ns = <30>; - gpmc,access-ns = <40>; - gpmc,wr-access-ns = <10>; - gpmc,wr-data-mux-bus-ns = <0>; - gpmc,cycle2cycle-delay-ns = <10>; - gpmc,cycle2cycle-samecsen; - gpmc,cycle2cycle-diffcsen; - - #address-cells = <1>; - #size-cells = <1>; - }; -}; - -&main_uart0 { - pinctrl-names = "default"; - pinctrl-0 = <&main_uart0_pins_default>; -}; - -&main_uart2 { /* KBUS Firmware download */ - pinctrl-names = "default"; - pinctrl-0 = <&main_uart2_pins_default>; -}; - -&main_uart4 { /* RS485 Interface */ - pinctrl-names = "default"; - pinctrl-0 = <&main_uart4_pins_default>; - - rts-gpios = <&main_gpio0 38 GPIO_ACTIVE_HIGH>; - rs485-term-gpios = <&rs485 0 GPIO_ACTIVE_HIGH>; - rs485-rts-active-high; - linux,rs485-enabled-at-boot-time; -}; - -&main_i2c0 { - pinctrl-names = "default"; - pinctrl-0 = <&main_i2c0_pins_default>; - clock-frequency = <400000>; - - eeprom: at24c512@54 { - compatible = "atmel,24c512"; - reg = <0x54>; - pagesize = <128>; - }; - - led_bar60: pca9552@60 { - compatible = "nxp,pca9552"; - #address-cells = <1>; - #size-cells = <0>; - reg = <0x60>; - - lb60_0: sys-red@0 { - label = "sys-red"; - reg = <0>; - linux,default-trigger = "timer"; - }; - - lb60_1: sys-green@1 { - label = "sys-green"; - reg = <1>; - linux,default-trigger = "timer"; - }; - - lb60_2: run-red@2 { - label = "run-red"; - reg = <2>; - }; - - lb60_3: run-green@3 { - label = "run-green"; - reg = <3>; - }; - - lb60_4: io-red@4 { - label = "io-red"; - reg = <4>; - }; - - lb60_5: io-green@5 { - label = "io-green"; - reg = <5>; - }; - - lb60_6: ms-red@6 { - label = "ms-red"; - reg = <6>; - }; - - lb60_7: ms-green@7 { - label = "ms-green"; - reg = <7>; - }; - - lb60_8: ns-red@8 { - label = "ns-red"; - reg = <8>; - }; - - lb60_9: ns-green@9 { - label = "ns-green"; - reg = <9>; - }; - - lb60_10: usr_r@10 { - label = "trm-red"; - reg = <10>; - }; - - lb60_11: usr_g@11 { - label = "trm-green"; - reg = <11>; - }; - - lb60_15: sys-over-red@15 { - label = "sys-over-red"; - reg = <15>; - linux,default-trigger = "default-on"; - }; - }; - - led_bar61: pca9552@61 { - compatible = "nxp,pca9552"; - #address-cells = <1>; - #size-cells = <0>; - reg = <0x61>; - - lb61_0: u6-red@0 { - label = "u6-red"; - reg = <0>; - }; - - lb61_1: u6-green@1 { - label = "u6-green"; - reg = <1>; - }; - - lb61_2: u5-red@2 { - label = "u5-red"; - reg = <2>; - }; - - lb61_3: u5-green@3 { - label = "u5-green"; - reg = <3>; - }; - - lb61_4: u4-red@4 { - label = "u4-red"; - reg = <4>; - }; - - lb61_5: u4-green@5 { - label = "u4-green"; - reg = <5>; - }; - - lb61_6: u3-red@6 { - label = "u3-red"; - reg = <6>; - }; - - lb61_7: u3-green@7 { - label = "u3-green"; - reg = <7>; - }; - - lb61_8: u2-red@8 { - label = "u2-red"; - reg = <8>; - }; - - lb61_9: u2-green@9 { - label = "u2-green"; - reg = <9>; - }; - - lb61_10: u1-red@10 { - label = "u1-red"; - reg = <10>; - }; - - lb61_11: u1-green@11 { - label = "u1-green"; - reg = <11>; - }; - }; - - tps65219_30: pmic@30 { - compatible = "ti,tps65219"; - reg = <0x30>; - system-power-controller; - - buck1-supply = <&vcc_5v0>; - buck2-supply = <&vcc_5v0>; - buck3-supply = <&vcc_5v0>; - ldo1-supply = <&vcc_3v3_sys>; - ldo2-supply = <&vcc_3v3_sys>; - ldo3-supply = <&vcc_5v0>; - ldo4-supply = <&vcc_5v0>; - - pinctrl-names = "default"; - pinctrl-0 = <&pmic_irq_pins_default>; - - interrupt-parent = <&main_gpio0>; - interrupts = <68 IRQ_TYPE_EDGE_FALLING>; - - regulators { - buck1_30_reg: buck1 { - regulator-name = "VDD_CORE"; - regulator-min-microvolt = <750000>; - regulator-max-microvolt = <850000>; - regulator-boot-on; - regulator-always-on; - }; - - buck2_30_reg: buck2 { - regulator-name = "VCC1V8_SYS"; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - regulator-boot-on; - regulator-always-on; - }; - - buck3_30_reg: buck3 { - regulator-name = "VCC3V3_SYS"; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-boot-on; - regulator-always-on; - }; - - ldo1_30_reg: ldo1 { - regulator-name = "VCC3V3_SDC"; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - }; - - ldo2_30_reg: ldo2 { - regulator-name = "VDDA_1V8"; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - regulator-boot-on; - regulator-always-on; - }; - }; - }; -}; - -&main_spi0 { - pinctrl-names = "default"; - pinctrl-0 = <&main_spi0_pins_default>; - - spi-rt; - spi-rt-prio = <81>; - dmas = <&main_pktdma 0xc300 0>, <&main_pktdma 0x4300 0>; - dma-names = "tx0", "rx0"; - - /* - * When this option is set, the McSPI EOW Interrupt will be used - * to signal when a DMA Transfer is done. This is needed for this - * platform to prevent unpredictable delays resulting from TX/RX - * completions within the UDMA driver. - */ - use-eow-interrupt; - - kbus@0 { - pinctrl-names = "default"; - pinctrl-0 = <&kbus_pins_default>; - compatible = "wago,spi-kbus"; - reg = <0>; - spi-max-frequency = <10000000>; - - kbus,reset-on-boot; - kbus,renesas; - - /* - * kbus,cmdsel-gpio is used to signal the need for an update - * while the KBUS slave cpu is being reset. Its low level - * forces an update. - */ - kbus,force-update-detection; - - /* - * announce used tty-device in /sys/class/wago/system. - * is needed to link this device to /dev/ttyKbus - */ - /* TODO: check serial device name in user-space */ - kbus,tty-device = "ttyS1"; /* corresponds to &uart2*/ - - /* some should be active low, keep all to high for compatibility reasons */ - kbus,nrst-gpio = <&main_gpio0 72 GPIO_ACTIVE_LOW>; - kbus,nsync-gpio = <&main_gpio0 63 GPIO_ACTIVE_HIGH>; - kbus,cmdsel-gpio = <&main_gpio0 69 GPIO_ACTIVE_HIGH>; - kbus,nirq-gpio = <&main_gpio0 64 GPIO_ACTIVE_HIGH>; - kbus,nerr-gpio = <&main_gpio0 70 GPIO_ACTIVE_HIGH>; - kbus,nrdy-gpio = <&main_gpio0 71 GPIO_ACTIVE_HIGH>; - }; - -}; - -&main_spi2 { - pinctrl-names = "default"; - pinctrl-0 = <&main_spi2_pins_default>; - - SLB9670: SLB9670@0 { - compatible = "infineon,slb9670", "tis,tpm2-spi", "tcg,tpm_tis-spi"; - reg = <0>; - #gpio-cells = <2>; - #interrupt-cells = <2>; - pinctrl-names = "default"; - pinctrl-0 = <&tpm_pins_default>; - - interrupt-parent = <&main_gpio0>; - interrupts = <66 IRQ_TYPE_EDGE_FALLING>; - #address-cells = <1>; - #size-cells = <0>; - spi-max-frequency = <43000000>; - }; -}; - -&main_i2c1 { - pinctrl-names = "default"; - pinctrl-0 = <&main_i2c1_pins_default>; - clock-frequency = <400000>; - - rtc@52 { - compatible = "microcrystal,rv3028"; - reg = <0x52>; - // The backup goldcap is supplied with a higher voltage (+5V) - // then the RTC (+3,3) itself. It requires a special setup - // to avoid hardware failure. - use-goldcap-with-higher-voltage; - }; - - rs485: rs485@71 { - compatible = "nxp,pca9538"; - reg = <0x71>; - gpio-controller; - #gpio-cells = <2>; - gpio-line-names = "RS.TERM-EN", "RS.SLR", - "+5V0-FB-ENA", "MP200", - "BIAS.EN", "BIAS.HIR", - "MP201", "MP202"; - - rs485-5v { - gpio-hog; - gpios = <2 GPIO_ACTIVE_HIGH>; - output-high; - }; - }; -}; - -&sdhci0 { - /* eMMC */ - pinctrl-names = "default"; - pinctrl-0 = <&main_mmc0_pins_default>; - ti,driver-strength-ohm = <33>; - disable-wp; -}; - -&sdhci1 { - /* SD */ - vmmc-supply = <&vdd_mmc1>; - pinctrl-names = "default"; - pinctrl-0 = <&main_mmc1_pins_default>; - ti,driver-strength-ohm = <33>; - cap-sd-highspeed; - no-1-8-v; -}; - -&cpsw3g { - pinctrl-names = "default"; - pinctrl-0 = <&main_mdio1_pins_default - &main_rgmii1_pins_default - &main_rgmii2_pins_default>; -}; - -&cpsw_port1 { - phy-mode = "rgmii-rxid"; - phy-handle = <&cpsw3g_phy0>; -}; - -&cpsw_port2 { - phy-mode = "rgmii-rxid"; - phy-handle = <&cpsw3g_phy1>; -}; - -&cpsw3g_mdio { - reset-gpios = <&main_gpio1 9 GPIO_ACTIVE_LOW>; - reset-delay-us = <10>; - reset-post-delay-us = <10000>; - - cpsw3g_phy0: ethernet-phy@0 { - // ADIN1300 - compatible = "ethernet-phy-id0283.bc30"; - - reg = <0>; - adi,rx-internal-delay-ps = <2000>; - }; - - cpsw3g_phy1: ethernet-phy@1 { - // ADIN1300 - compatible = "ethernet-phy-id0283.bc30"; - - reg = <1>; - adi,rx-internal-delay-ps = <2000>; - }; -}; - -&mailbox0_cluster0 { - mbox_m4_0: mbox-m4-0 { - ti,mbox-rx = <0 0 0>; - ti,mbox-tx = <1 0 0>; - }; -}; - -/* - * This system watchdog is reserved for internal use and is not user-configurable. - * It must not be modified or deleted to ensure consistent behavior! - */ -&main_rti1 { // watchdog@e010000 - timeout-sec = <120>; -}; - -/* - * AM6232 does not have main_rti2, main_rti3, and main_rti15 - * https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1218039/am623-stuck-in-sd-card-after-boot-up - */ -&main_rti2 { // watchdog@e020000 - status = "disabled"; -}; - -&main_rti3 { // watchdog@e030000 - status = "disabled"; -}; - -&main_rti15 { // watchdog@e0f0000 - status = "disabled"; -}; - -&usbss0 { - ti,vbus-divider; -}; - -&usb0 { - dr_mode = "peripheral"; -}; diff --git a/arch/arm64/configs/am6xxx_defconfig b/arch/arm64/configs/am6xxx_defconfig index acb22623eccf..6cf9e266bf39 100644 --- a/arch/arm64/configs/am6xxx_defconfig +++ b/arch/arm64/configs/am6xxx_defconfig @@ -131,6 +131,7 @@ CONFIG_BRIDGE_EBT_T_FILTER=m CONFIG_BRIDGE_EBT_T_NAT=m CONFIG_BRIDGE=y CONFIG_BRIDGE_VLAN_FILTERING=y +CONFIG_NET_DSA=y CONFIG_VLAN_8021Q=m CONFIG_VLAN_8021Q_GVRP=y CONFIG_NET_SCHED=y @@ -172,6 +173,7 @@ CONFIG_SRAM=y CONFIG_EEPROM_AT24=y CONFIG_SCSI=y # CONFIG_SCSI_PROC_FS is not set +CONFIG_BLK_DEV_SD=y # CONFIG_BLK_DEV_BSG is not set CONFIG_SCSI_SAS_LIBSAS=y # CONFIG_SCSI_LOWLEVEL is not set @@ -182,6 +184,8 @@ CONFIG_IPVLAN=m CONFIG_VXLAN=m CONFIG_TUN=y CONFIG_VETH=m +CONFIG_NET_DSA_MICROCHIP_KSZ_COMMON=y +CONFIG_NET_DSA_MICROCHIP_KSZ_SPI=y # CONFIG_NET_VENDOR_ALACRITECH is not set # CONFIG_NET_VENDOR_AMAZON is not set # CONFIG_NET_VENDOR_AMD is not set @@ -297,14 +301,20 @@ CONFIG_REGULATOR_TPS65219=y CONFIG_USB=y CONFIG_USB_ANNOUNCE_NEW_DEVICES=y # CONFIG_USB_DEFAULT_PERSIST is not set +CONFIG_USB_OTG=y +CONFIG_USB_XHCI_HCD=y CONFIG_USB_EHCI_HCD=y -CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_HCD_PLATFORM=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_STORAGE=y +CONFIG_USB_MUSB_HDRC=y CONFIG_USB_DWC3=y -CONFIG_USB_DWC3_GADGET=y # CONFIG_USB_DWC3_KEYSTONE is not set CONFIG_NOP_USB_XCEIV=y CONFIG_USB_ULPI=y CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=32 CONFIG_USB_CONFIGFS=m CONFIG_USB_CONFIGFS_SERIAL=y CONFIG_USB_CONFIGFS_ACM=y @@ -317,6 +327,7 @@ CONFIG_USB_CONFIGFS_EEM=y CONFIG_USB_CONFIGFS_MASS_STORAGE=y CONFIG_USB_CONFIGFS_F_FS=y CONFIG_USB_FUNCTIONFS=m +CONFIG_USB_MASS_STORAGE=y CONFIG_MMC=y CONFIG_MMC_BLOCK_MINORS=32 CONFIG_MMC_ARMMMCI=y @@ -326,6 +337,7 @@ CONFIG_MMC_SDHCI_PLTFM=y CONFIG_MMC_SDHCI_AM654=y CONFIG_NEW_LEDS=y CONFIG_LEDS_CLASS=y +CONFIG_LEDS_GPIO=y CONFIG_LEDS_PCA955X=y CONFIG_LEDS_TRIGGERS=y CONFIG_LEDS_TRIGGER_TIMER=y diff --git a/drivers/spi/spi-kbus.c b/drivers/spi/spi-kbus.c index f2f41de82d8b..b2c92fecc4dc 100644 --- a/drivers/spi/spi-kbus.c +++ b/drivers/spi/spi-kbus.c @@ -54,7 +54,7 @@ static struct cdev kbus_cdev; /* sysfs */ extern struct class *wsysinit_sysfs_class; extern struct device *wsysinit_sysfs_device; -static struct device *kbus_device; +static struct device *kbus_device = NULL; int kbus_wait_for_gpio(int gpio) { @@ -223,19 +223,26 @@ static struct task_struct *find_dma_task(void) void kbus_boost_dma_task(u8 enable) { - struct kbus_drv_data *kdrvdata = dev_get_drvdata(kbus_device); - struct sched_param boost_param = { - .sched_priority = enable ? kdrvdata->kbus_dma_boost_prio : - kdrvdata->kbus_dma_normal_prio - }; + struct kbus_drv_data *kdrvdata = NULL; + struct sched_param boost_param; - if (kdrvdata->dma_task) { - if ((enable && !kdrvdata->kbus_dma_boost_en) || - (!enable && kdrvdata->kbus_dma_boost_en)) { - kdrvdata->kbus_dma_boost_en = - !kdrvdata->kbus_dma_boost_en; - sched_setscheduler(kdrvdata->dma_task, SCHED_FIFO, - &boost_param); + if (kbus_device) { + kdrvdata = dev_get_drvdata(kbus_device); + + if (kdrvdata) { + boost_param.sched_priority = enable ? + kdrvdata->kbus_dma_boost_prio : + kdrvdata->kbus_dma_normal_prio; + + if (kdrvdata->dma_task) { + if ((enable && !kdrvdata->kbus_dma_boost_en) || + (!enable && kdrvdata->kbus_dma_boost_en)) { + kdrvdata->kbus_dma_boost_en = + !kdrvdata->kbus_dma_boost_en; + sched_setscheduler(kdrvdata->dma_task, SCHED_FIFO, + &boost_param); + } + } } } } diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c index e6a520b26957..842156646c00 100644 --- a/drivers/spi/spi-omap2-mcspi.c +++ b/drivers/spi/spi-omap2-mcspi.c @@ -657,9 +657,11 @@ omap2_mcspi_txrx_dma(struct spi_device *spi, struct spi_transfer *xfer) int wait_res; #ifdef CONFIG_SPI_KBUS_OMAP_EXTENSION - trace_pxc_kbus(__func__, "enter"); + if (spi->dev.driver == &kbus_driver.driver) { + trace_pxc_kbus(__func__, "enter"); - kbus_boost_dma_task(1); + kbus_boost_dma_task(1); + } #endif mcspi = spi_controller_get_devdata(spi->controller); @@ -777,9 +779,11 @@ omap2_mcspi_txrx_dma_eow(struct spi_device *spi, struct spi_transfer *xfer) int ret; #ifdef CONFIG_SPI_KBUS_OMAP_EXTENSION - trace_pxc_kbus(__func__, "enter"); + if (spi->dev.driver == &kbus_driver.driver) { + trace_pxc_kbus(__func__, "enter"); - kbus_boost_dma_task(1); + kbus_boost_dma_task(1); + } #endif mcspi = spi_controller_get_devdata(spi->controller); @@ -866,10 +870,12 @@ omap2_mcspi_txrx_pio(struct spi_device *spi, struct spi_transfer *xfer) word_len = cs->word_len; #ifdef CONFIG_SPI_KBUS_OMAP_EXTENSION - trace_pxc_kbus(__func__, "enter"); - kbus_dbg("%s[%d]: count: %d\n", __func__,__LINE__, count); + if (spi->dev.driver == &kbus_driver.driver) { + trace_pxc_kbus(__func__, "enter"); + kbus_dbg("%s[%d]: count: %d\n", __func__,__LINE__, count); - kbus_boost_dma_task(0); + kbus_boost_dma_task(0); + } #endif l = mcspi_cached_chconf0(spi); diff --git a/labgrid.basesoftware b/labgrid.basesoftware index 32a1f8345ba9..bdfb3acb6798 160000 --- a/labgrid.basesoftware +++ b/labgrid.basesoftware @@ -1 +1 @@ -Subproject commit 32a1f8345ba9339cf5b75b5358841894610721c0 +Subproject commit bdfb3acb6798a588ebb0489d9b2a98ae5602b595