arm64: dts: ti: k3-am623-pfc-750-8400: add Rev.3 support via DT overlay-boot

The PFC400-750-8400 exists in two hardware revisions, each consisting
of several sub-PCBs identified by a Leiterplattenkennung (LPK). Rev.2
(LPK p0003xxx) was supported by a monolithic DTS. Rev.3 (LPK p0004xxx)
introduces new sub-PCB variants that cannot be described alongside
Rev.2 in a single static DTS.

Overlay-boot is introduced to support both revisions simultaneously.
U-Boot reads the LPK from each sub-PCB's ID EEPROM at boot and applies
the matching set of DTBOs to the shared base DTB.

Base DTS restructured:
- Strip k3-am623-pfc-750-8400.dts to the minimal shared base; remove
  direct includes of wosm, baseboard, kbus and interaction dtsis.
- Extract TPS65219 PMIC, 4 GiB memory map, voltage regulators and SD
  card voltage-selector GPIO into new k3-am623-pfc-750-84xx-wosm-base.dtsi,
  shared across both revisions.
- Correct buck1 VDD_CORE min-microvolt from 750 mV to 850 mV, per TI
  recommendation for stable CPU frequency scaling. The PMIC NVM was
  updated accordingly on Rev.3 hardware.
- Enable DTC symbol export (-@) for the 750-8400 DTB so overlays can
  resolve labeled references at runtime.
- Export a stable leds_m4 symbol on the M4 LED wrapper node and mark
  it status = disabled; defer LED child nodes and activation entirely
  to the interaction overlay, establishing a clean overlay interface.
- Add fitImage.its packaging the base DTB and all nine DTBOs into a
  U-Boot FIT image for overlay-boot.

DTS overlay compatibility fixes applied to shared dtsis:
- Replace bare `/ {` with `&{/}` in kbus, interaction and wosm dtsis.
- Add explicit #address-cells/#size-cells to &main_i2c1, &mcu_spi0,
  &main_spi0 and &ospi0 fragments to prevent DTC standalone warnings.
- Move rts-gpios from k3-am623-pfc-rs485.dtsi to the board-level
  k3-am623-pfc-750-8xxx-common.dtsi.
- Strip shared interaction dtsi to truly common i2c1 peripherals only
  (HW-ID EEPROM, ST25DV NFC tag); PCA9552 drivers, their reset-pin
  pinctrl and all leds-group-multicolor RGB groups were incorrectly
  shared and are moved exclusively into the p0003965 overlay.

Nine hardware-variant overlays across four subsystems:

WOSM:
- p0004037 (Rev.2): baseline WOSM, no additions.
- p0004263 (Rev.3): adds MRAM reset GPIO, dual EM-module reset GPIOs,
  second RS485 (UART3) pinctrl and CAN (MCAN0) pinctrl.

Base board:
- p0003964 (Rev.2): restores microchip,single-led-mode on KSZ9477.
- p0004305 (Rev.3): corrects KSZ9477 Ethernet port labels to reflect
  changed port-to-PHY routing on Rev.3 PCB (ethX1<->ethX3,
  ethEM<->ethX4). baseboard.dtsi retains Rev.2 labels as default.
- p0004224: overrides UART4 RS485 pinctrl and GPIO RTS for boards
  with a relocated RS485 transceiver.

Local bus:
- p0003978 (Rev.2): baseline K-Bus / OMS configuration.
- p0004067 (Rev.3): routes RUN/STOP switches through dedicated MCU
  GPIOs; disables the legacy combined oms_stop_run node.

Interaction board:
- p0003965 (Rev.2): owns the full PCA9552 LED subsystem — reset-pin
  pinctrl, led_bar60/61 drivers and ten leds-group-multicolor RGB
  groups.
- p0004065 (Rev.3): activates the M4 firmware LED wrapper (&leds_m4)
  and defines all eight LED child nodes.

Signed-off-by: Heinrich Toews <ht@twx-software.de>
This commit is contained in:
Heinrich Toews
2026-06-18 12:39:44 +02:00
parent db380cc82d
commit 6373fa5baf
21 changed files with 1003 additions and 464 deletions
+10
View File
@@ -27,6 +27,15 @@ dtb-$(CONFIG_ARCH_K3) += k3-am623-pfc-750-8302.dtb
dtb-$(CONFIG_ARCH_K3) += k3-am623-pfc-750-830x-ems.dtb
dtb-$(CONFIG_ARCH_K3) += k3-am623-pfc-750-8400.dtb
dtb-$(CONFIG_ARCH_K3) += k3-am623-spehvac.dtb
dtb-$(CONFIG_ARCH_K3) += overlay-750-8400-wosm-p0004037.dtbo \
overlay-750-8400-wosm-p0004263.dtbo \
overlay-750-8400-base-p0003964.dtbo \
overlay-750-8400-base-p0004305.dtbo \
overlay-750-8400-base-p0004224.dtbo \
overlay-750-8400-localbus-p0003978.dtbo \
overlay-750-8400-localbus-p0004067.dtbo \
overlay-750-8400-interaction-p0003965.dtbo \
overlay-750-8400-interaction-p0004065.dtbo
# Boards with AM62Ax SoC
dtb-$(CONFIG_ARCH_K3) += k3-am62a7-sk.dtb
@@ -87,3 +96,4 @@ DTC_FLAGS_k3-am6548-iot2050-advanced-m2 += -@
DTC_FLAGS_k3-j721e-common-proc-board += -@
DTC_FLAGS_k3-j721s2-common-proc-board += -@
DTC_FLAGS_k3-am623-pfc-750-8302 += -@
DTC_FLAGS_k3-am623-pfc-750-8400 += -@
@@ -0,0 +1,166 @@
// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
/ {
description = "WAGO AM623 PFC FIT Image";
#address-cells = <1>;
images {
kernel {
description = "Linux Kernel";
data = /incbin/("../../Image");
type = "kernel";
arch = "arm64";
os = "linux";
compression = "none";
load = <0x80080000>;
entry = <0x80080000>;
hash-1 {
algo = "sha256";
};
};
fdt-PFC-750-840x {
description = "Flattened Device Tree blob";
data = /incbin/("k3-am623-pfc-750-8400.dtb");
type = "flat_dt";
arch = "arm64";
compression = "none";
load = <0x88000000>;
hash-1 {
algo = "sha256";
};
};
img-overlay-PFC-750-840x-wosm-p0004037 {
description = "WOSM Overlay";
data = /incbin/("overlay-750-8400-wosm-p0004037.dtbo");
type = "flat_dt";
arch = "arm64";
compression = "none";
};
img-overlay-PFC-750-840x-wosm-p0004263 {
description = "WOSM Overlay p0004263";
data = /incbin/("overlay-750-8400-wosm-p0004263.dtbo");
type = "flat_dt";
arch = "arm64";
compression = "none";
};
img-overlay-PFC-750-840x-base-p0003964 {
description = "Base Overlay";
data = /incbin/("overlay-750-8400-base-p0003964.dtbo");
type = "flat_dt";
arch = "arm64";
compression = "none";
};
img-overlay-PFC-750-840x-base-p0004224 {
description = "Base Overlay p0004224";
data = /incbin/("overlay-750-8400-base-p0004224.dtbo");
type = "flat_dt";
arch = "arm64";
compression = "none";
};
img-overlay-PFC-750-840x-base-p0004305 {
description = "Base Overlay p0004305";
data = /incbin/("overlay-750-8400-base-p0004305.dtbo");
type = "flat_dt";
arch = "arm64";
compression = "none";
};
img-overlay-PFC-750-840x-localbus-p0003978 {
description = "Localbus Overlay";
data = /incbin/("overlay-750-8400-localbus-p0003978.dtbo");
type = "flat_dt";
arch = "arm64";
compression = "none";
};
img-overlay-PFC-750-840x-localbus-p0004067 {
description = "Localbus Overlay p0004067";
data = /incbin/("overlay-750-8400-localbus-p0004067.dtbo");
type = "flat_dt";
arch = "arm64";
compression = "none";
};
img-overlay-PFC-750-840x-interaction-p0003965 {
description = "Interaction Overlay";
data = /incbin/("overlay-750-8400-interaction-p0003965.dtbo");
type = "flat_dt";
arch = "arm64";
compression = "none";
};
img-overlay-PFC-750-840x-interaction-p0004065 {
description = "Interaction Overlay p0004065";
data = /incbin/("overlay-750-8400-interaction-p0004065.dtbo");
type = "flat_dt";
arch = "arm64";
compression = "none";
};
};
configurations {
default = "conf-PFC-750-840x";
conf-PFC-750-840x {
description = "Boot Linux kernel with base FDT and overlays";
kernel = "kernel";
fdt = "fdt-PFC-750-840x";
};
ovl-750-840x-wosm-p0004037 {
description = "WOSM Overlay config";
fdt = "img-overlay-PFC-750-840x-wosm-p0004037";
};
ovl-750-840x-wosm-p0004263 {
description = "WOSM Overlay p0004263 config";
fdt = "img-overlay-PFC-750-840x-wosm-p0004263";
};
ovl-750-840x-base-p0003964 {
description = "Base Overlay config";
fdt = "img-overlay-PFC-750-840x-base-p0003964";
};
ovl-750-840x-base-p0004224 {
description = "Base Overlay p0004224 config";
fdt = "img-overlay-PFC-750-840x-base-p0004224";
};
ovl-750-840x-base-p0004305 {
description = "Base Overlay p0004305 config";
fdt = "img-overlay-PFC-750-840x-base-p0004305";
};
ovl-750-840x-localbus-p0003978 {
description = "Localbus Overlay config";
fdt = "img-overlay-PFC-750-840x-localbus-p0003978";
};
ovl-750-840x-localbus-p0004067 {
description = "Localbus Overlay p0004067 config";
fdt = "img-overlay-PFC-750-840x-localbus-p0004067";
};
ovl-750-840x-interaction-p0003965 {
description = "Interaction Overlay config";
fdt = "img-overlay-PFC-750-840x-interaction-p0003965";
};
ovl-750-840x-interaction-p0004065 {
description = "Interaction Overlay p0004065 config";
fdt = "img-overlay-PFC-750-840x-interaction-p0004065";
};
};
};
@@ -6,14 +6,29 @@
* 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"
/dts-v1/;
#include "k3-am623-pfc-750-8xxx-common.dtsi"
#include "k3-am623-pfc-750-84xx-wosm-base.dtsi"
#include "k3-am623-pfc-tpm.dtsi"
/ {
compatible = "wago,am623-pfc-750_8400-100d", "wago,am623-pfc", "ti,am625";
model = "PFC400-750-8400";
aliases {
usb1 = &usb1;
ethernet0 = &cpsw_port2;
ethernet1 = &cpsw_port1;
};
leds_m4: leds-m4 {
compatible = "wago,m4-led-wrapper";
remoteproc = <&mcu_m4fss>;
firmware-name = "wago-led-server-app.elf";
wago,reset-on-init;
status = "disabled";
};
};
&wsysinit {
@@ -21,6 +36,10 @@
board,variant = "pfc400";
};
&slb9670 {
status = "okay";
};
&main_spi2 {
ti,spi-num-cs = <4>;
@@ -23,6 +23,9 @@
};
&mcu_spi0 {
#address-cells = <1>;
#size-cells = <0>;
ksz9477@0 {
compatible = "microchip,ksz9477";
pinctrl-names = "default";
@@ -37,8 +40,6 @@
interrupt-parent = <&main_gpio0>;
interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
microchip,single-led-mode;
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -90,6 +91,9 @@
};
&main_i2c1 {
#address-cells = <1>;
#size-cells = <0>;
eeprom_hw_id_bb: at24c02@54 {
status = "disabled";
compatible = "atmel,24c02";
@@ -9,15 +9,10 @@
#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 {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
eeprom_hw_id_ib: at24c02@54 {
@@ -27,250 +22,6 @@
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>;
color = <LED_COLOR_ID_RED>;
default-state = "keep";
linux,default-trigger = "timer";
};
lb60_1: sys-green@1 {
label = "sys-green";
reg = <1>;
color = <LED_COLOR_ID_GREEN>;
default-state = "keep";
linux,default-trigger = "timer";
};
lb60_2: sys-blue@2 {
label = "sys-blue";
reg = <2>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb60_3: run-red@3 {
label = "run-red";
reg = <3>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb60_4: run-green@4 {
label = "run-green";
reg = <4>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb60_5: run-blue@5 {
label = "run-blue";
reg = <5>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb60_6: io-red@6 {
label = "io-red";
reg = <6>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb60_7: io-green@7 {
label = "io-green";
reg = <7>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb60_8: io-blue@8 {
label = "io-blue";
reg = <8>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb60_9: em-red@9 {
label = "em-red";
reg = <9>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb60_10: em-green@10 {
label = "em-green";
reg = <10>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb60_11: em-blue@11 {
label = "em-blue";
reg = <11>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb60_12: u1-red@12 {
label = "u1-red";
reg = <12>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb60_13: u1-green@13 {
label = "u1-green";
reg = <13>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb60_14: u1-blue@14 {
label = "u1-blue";
reg = <14>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb60_15: sys-overwrite@15 {
label = "sys-overwrite";
reg = <15>;
default-state = "on";
};
};
/*
* NXP PCA9552BS
* 16-Bit I²C-Bus LED Driver
*/
led_bar61: pca9552@61 {
compatible = "nxp,pca9552";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x61>;
lb61_0: u2-red@0 {
label = "u2-red";
reg = <0>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb61_1: u2-green@1 {
label = "u2-green";
reg = <1>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb61_2: u2-blue@2 {
label = "u2-blue";
reg = <2>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb61_3: u3-red@3 {
label = "u3-red";
reg = <3>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb61_4: u3-green@4 {
label = "u3-green";
reg = <4>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb61_5: u3-blue@5 {
label = "u3-blue";
reg = <5>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb61_6: u4-red@6 {
label = "u4-red";
reg = <6>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb61_7: u4-green@7 {
label = "u4-green";
reg = <7>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb61_8: u4-blue@8 {
label = "u4-blue";
reg = <8>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb61_9: u5-red@9 {
label = "u5-red";
reg = <9>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb61_10: u5-green@10 {
label = "u5-green";
reg = <10>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb61_11: u5-blue@11 {
label = "u5-blue";
reg = <11>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb61_12: u6_r@12 {
label = "u6-red";
reg = <12>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb61_13: u6_g@13 {
label = "u6-green";
reg = <13>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb61_14: u6_b@14 {
label = "u6-blue";
reg = <14>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
};
/*
* Dynamic NFC/RFID tag IC with 4-Kbit EEPROM
*
@@ -284,112 +35,4 @@
compatible = "st25dv,st25dv04k";
reg = <0x53>;
};
};
/*
* Multicolor LED groups for PFC400 (RGB)
* Group triplets from PCA9552 into multicolor LEDs to enable
* led-class-multicolor and pattern trigger RGB support.
*/
/ {
sys_led: sys-led {
compatible = "leds-group-multicolor";
label = "sys";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "keep";
mc-allow-subled-writes;
leds = <&lb60_0 &lb60_1 &lb60_2>;
max-brightness = <255>;
};
run_led: run-led {
compatible = "leds-group-multicolor";
label = "run";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb60_3 &lb60_4 &lb60_5>;
max-brightness = <255>;
};
io_led: io-led {
compatible = "leds-group-multicolor";
label = "io";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb60_6 &lb60_7 &lb60_8>;
max-brightness = <255>;
};
em_led: em-led {
compatible = "leds-group-multicolor";
label = "em";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb60_9 &lb60_10 &lb60_11>;
max-brightness = <255>;
};
u1_led: u1-led {
compatible = "leds-group-multicolor";
label = "u1";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb60_12 &lb60_13 &lb60_14>;
max-brightness = <255>;
};
u2_led: u2-led {
compatible = "leds-group-multicolor";
label = "u2";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb61_0 &lb61_1 &lb61_2>;
max-brightness = <255>;
};
u3_led: u3-led {
compatible = "leds-group-multicolor";
label = "u3";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb61_3 &lb61_4 &lb61_5>;
max-brightness = <255>;
};
u4_led: u4-led {
compatible = "leds-group-multicolor";
label = "u4";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb61_6 &lb61_7 &lb61_8>;
max-brightness = <255>;
};
u5_led: u5-led {
compatible = "leds-group-multicolor";
label = "u5";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb61_9 &lb61_10 &lb61_11>;
max-brightness = <255>;
};
u6_led: u6-led {
compatible = "leds-group-multicolor";
label = "u6";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb61_12 &lb61_13 &lb61_14>;
max-brightness = <255>;
};
};
@@ -8,7 +8,7 @@
#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
@@ -71,6 +71,9 @@
};
&main_i2c1 {
#address-cells = <1>;
#size-cells = <0>;
eeprom_hw_id_lb: at24c02@50 {
status = "disabled";
compatible = "atmel,24c02";
@@ -0,0 +1,144 @@
// SPDX-License-Identifier: GPL-2.0
/ {
compatible = "ti,am623-pfc", "ti,am625";
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;
};
ldo1_sd_1v8_reg: ldo1-sd-1v8-reg {
/* Output VLDO1 of tps65219 */
compatible = "regulator-gpio";
regulator-name = "VDDSHV_SD_1V8_IO_PMIC_GPIO";
pinctrl-names = "default";
pinctrl-0 = <&mcu_sd_vsel_pin>;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-boot-on;
vin-supply = <&vcc_5v0>;
gpios = <&mcu_gpio0 10 GPIO_ACTIVE_HIGH>;
states = <1800000 0x0>,
<3300000 0x1>;
};
};
&mcu_pmx0 {
mcu_sd_vsel_pin: mcu-sd-vsel-pins {
pinctrl-single,pins = <
AM64X_MCU_IOPAD(0x028, PIN_OUTPUT, 7) /* (C5) WKUP_UART0_TXD.MCU_GPIO0_10 */
>;
};
};
&cpu0 {
cpu-supply = <&buck1_30_reg>;
};
&cpu1 {
cpu-supply = <&buck1_30_reg>;
};
&cpu2 {
cpu-supply = <&buck1_30_reg>;
};
&cpu3 {
cpu-supply = <&buck1_30_reg>;
};
&main_i2c0 {
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_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 = <850000>;
regulator-max-microvolt = <850000>;
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;
};
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;
};
};
};
};
@@ -6,17 +6,12 @@
* 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"
/ {
&{/} {
compatible = "ti,am623-pfc", "ti,am625";
aliases {
usb1 = &usb1;
ethernet0 = &cpsw_port2;
ethernet1 = &cpsw_port1;
};
#address-cells = <2>;
#size-cells = <2>;
cpus {
cpu@0 {
@@ -71,6 +66,9 @@
};
&fss {
#address-cells = <2>;
#size-cells = <2>;
uio_mram: uio@500000000 {
compatible = "uio_pdrv_genirq";
linux,uio-name = "UIO_OSPI_MRAM";
@@ -93,12 +91,6 @@
AM64X_MCU_IOPAD(0x010, PIN_OUTPUT, 0) /* (C9) MCU_SPI0_D1 MOSI */
>;
};
mcu_sd_vsel_pin: mcu-sd-vsel-pins {
pinctrl-single,pins = <
AM64X_MCU_IOPAD(0x028, PIN_OUTPUT, 7) /* (C5) WKUP_UART0_TXD.MCU_GPIO0_10 */
>;
};
};
&main_pmx0 {
@@ -190,6 +182,8 @@
};
&ospi0 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "ti,am654-ospi";
pinctrl-names = "default";
pinctrl-0 = <&ospi0_pins_default>;
@@ -242,6 +236,8 @@
};
&main_i2c0 {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
eeprom_hw_id_wosm: at24c02@50 {
@@ -250,86 +246,6 @@
reg = <0x50>;
pagesize = <16>;
};
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_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 = <850000>;
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;
};
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 {
@@ -286,6 +286,7 @@
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&main_uart4_pins_default>;
rts-gpios = <&main_gpio0 38 GPIO_ACTIVE_HIGH>;
};
&main_i2c0 { /* type label */
@@ -20,6 +20,9 @@
};
&main_spi0 {
#address-cells = <1>;
#size-cells = <0>;
spi-rt;
spi-rt-prio = <81>;
@@ -7,6 +7,9 @@
*/
&main_i2c1 {
#address-cells = <1>;
#size-cells = <0>;
/*
* PCA9538, 8-Bit I/O Expander
*/
@@ -29,7 +32,6 @@
};
&main_uart4 { /* RS485 Interface */
rts-gpios = <&main_gpio0 38 GPIO_ACTIVE_HIGH>;
/* RS485 termination is controlled via GPIO userspace tools */
rs485-rts-active-high;
linux,rs485-enabled-at-boot-time;
+4 -1
View File
@@ -7,11 +7,14 @@
*/
&main_i2c1 {
#address-cells = <1>;
#size-cells = <0>;
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.
@@ -0,0 +1,16 @@
// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
/plugin/;
#include "k3-pinctrl.h"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/leds/common.h>
#include "k3-am623-pfc-750-84xx-baseboard.dtsi"
&mcu_spi0 {
ksz9477@0 {
microchip,single-led-mode;
};
};
@@ -0,0 +1,25 @@
// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
/plugin/;
#include "k3-pinctrl.h"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/leds/common.h>
#include "k3-am623-pfc-750-84xx-baseboard.dtsi"
&main_pmx0 {
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(0x0098, PIN_OUTPUT_PULLDOWN, 7) /* (U23) GPIO0_37 (RS-DE) */
>;
};
};
&main_uart4 {
pinctrl-0 = <&main_uart4_pins_default>;
rts-gpios = <&main_gpio0 37 GPIO_ACTIVE_HIGH>;
};
@@ -0,0 +1,36 @@
// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
/plugin/;
#include "k3-pinctrl.h"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/leds/common.h>
#include "k3-am623-pfc-750-84xx-baseboard.dtsi"
/*
* Rev.3 hardware has a different KSZ9477 port-to-PHY routing compared
* to Rev.2. Override the port labels accordingly.
*/
&mcu_spi0 {
ksz9477@0 {
ports {
port@0 {
label = "ethX1";
};
port@2 {
label = "ethX3";
};
port@3 {
label = "ethX4";
};
port@4 {
label = "ethEM";
};
};
};
};
@@ -0,0 +1,375 @@
// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
/plugin/;
#include "k3-pinctrl.h"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/leds/common.h>
#include "k3-am623-pfc-750-84xx-interaction.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 {
#address-cells = <1>;
#size-cells = <0>;
/*
* NXP PCA9552BS
* 16-Bit I2C-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>;
color = <LED_COLOR_ID_RED>;
default-state = "keep";
linux,default-trigger = "timer";
};
lb60_1: sys-green@1 {
label = "sys-green";
reg = <1>;
color = <LED_COLOR_ID_GREEN>;
default-state = "keep";
linux,default-trigger = "timer";
};
lb60_2: sys-blue@2 {
label = "sys-blue";
reg = <2>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb60_3: run-red@3 {
label = "run-red";
reg = <3>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb60_4: run-green@4 {
label = "run-green";
reg = <4>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb60_5: run-blue@5 {
label = "run-blue";
reg = <5>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb60_6: io-red@6 {
label = "io-red";
reg = <6>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb60_7: io-green@7 {
label = "io-green";
reg = <7>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb60_8: io-blue@8 {
label = "io-blue";
reg = <8>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb60_9: em-red@9 {
label = "em-red";
reg = <9>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb60_10: em-green@10 {
label = "em-green";
reg = <10>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb60_11: em-blue@11 {
label = "em-blue";
reg = <11>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb60_12: u1-red@12 {
label = "u1-red";
reg = <12>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb60_13: u1-green@13 {
label = "u1-green";
reg = <13>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb60_14: u1-blue@14 {
label = "u1-blue";
reg = <14>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb60_15: sys-overwrite@15 {
label = "sys-overwrite";
reg = <15>;
default-state = "on";
};
};
/*
* NXP PCA9552BS
* 16-Bit I2C-Bus LED Driver
*/
led_bar61: pca9552@61 {
compatible = "nxp,pca9552";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x61>;
lb61_0: u2-red@0 {
label = "u2-red";
reg = <0>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb61_1: u2-green@1 {
label = "u2-green";
reg = <1>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb61_2: u2-blue@2 {
label = "u2-blue";
reg = <2>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb61_3: u3-red@3 {
label = "u3-red";
reg = <3>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb61_4: u3-green@4 {
label = "u3-green";
reg = <4>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb61_5: u3-blue@5 {
label = "u3-blue";
reg = <5>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb61_6: u4-red@6 {
label = "u4-red";
reg = <6>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb61_7: u4-green@7 {
label = "u4-green";
reg = <7>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb61_8: u4-blue@8 {
label = "u4-blue";
reg = <8>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb61_9: u5-red@9 {
label = "u5-red";
reg = <9>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb61_10: u5-green@10 {
label = "u5-green";
reg = <10>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb61_11: u5-blue@11 {
label = "u5-blue";
reg = <11>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
lb61_12: u6_r@12 {
label = "u6-red";
reg = <12>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
};
lb61_13: u6_g@13 {
label = "u6-green";
reg = <13>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
};
lb61_14: u6_b@14 {
label = "u6-blue";
reg = <14>;
color = <LED_COLOR_ID_BLUE>;
default-state = "off";
};
};
};
/*
* Multicolor LED groups for PFC400 (RGB)
* Group triplets from PCA9552 into multicolor LEDs to enable
* led-class-multicolor and pattern trigger RGB support.
*/
&{/} {
sys_led: sys-led {
compatible = "leds-group-multicolor";
label = "sys";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "keep";
mc-allow-subled-writes;
leds = <&lb60_0 &lb60_1 &lb60_2>;
max-brightness = <255>;
};
run_led: run-led {
compatible = "leds-group-multicolor";
label = "run";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb60_3 &lb60_4 &lb60_5>;
max-brightness = <255>;
};
io_led: io-led {
compatible = "leds-group-multicolor";
label = "io";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb60_6 &lb60_7 &lb60_8>;
max-brightness = <255>;
};
em_led: em-led {
compatible = "leds-group-multicolor";
label = "em";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb60_9 &lb60_10 &lb60_11>;
max-brightness = <255>;
};
u1_led: u1-led {
compatible = "leds-group-multicolor";
label = "u1";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb60_12 &lb60_13 &lb60_14>;
max-brightness = <255>;
};
u2_led: u2-led {
compatible = "leds-group-multicolor";
label = "u2";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb61_0 &lb61_1 &lb61_2>;
max-brightness = <255>;
};
u3_led: u3-led {
compatible = "leds-group-multicolor";
label = "u3";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb61_3 &lb61_4 &lb61_5>;
max-brightness = <255>;
};
u4_led: u4-led {
compatible = "leds-group-multicolor";
label = "u4";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb61_6 &lb61_7 &lb61_8>;
max-brightness = <255>;
};
u5_led: u5-led {
compatible = "leds-group-multicolor";
label = "u5";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb61_9 &lb61_10 &lb61_11>;
max-brightness = <255>;
};
u6_led: u6-led {
compatible = "leds-group-multicolor";
label = "u6";
color = <LED_COLOR_ID_RGB>;
function = LED_FUNCTION_INDICATOR;
default-state = "off";
leds = <&lb61_12 &lb61_13 &lb61_14>;
max-brightness = <255>;
};
};
@@ -0,0 +1,58 @@
// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
/plugin/;
#include "k3-pinctrl.h"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/leds/common.h>
#include "k3-am623-pfc-750-84xx-interaction.dtsi"
&leds_m4 {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
label = "sys";
linux,default-trigger = "timer";
led-default-intensity = <255 80 0 64>; /* Orange, brightness 64/255 */
};
led@1 {
reg = <1>;
label = "run";
};
led@2 {
reg = <2>;
label = "io";
};
led@3 {
reg = <3>;
label = "em";
};
led@4 {
reg = <4>;
label = "u1";
};
led@5 {
reg = <5>;
label = "u2";
};
led@6 {
reg = <6>;
label = "u3";
};
led@7 {
reg = <7>;
label = "u4";
};
};
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
/plugin/;
#include "k3-pinctrl.h"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/leds/common.h>
#include "k3-am623-pfc-750-84xx-kbus.dtsi"
@@ -0,0 +1,50 @@
// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
/plugin/;
#include "k3-pinctrl.h"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/leds/common.h>
#include "k3-am623-pfc-750-84xx-kbus.dtsi"
&mcu_pmx0 {
oms_mcu_pins_default: oms-mcu-default-pins {
pinctrl-single,pins = <
AM62X_MCU_IOPAD(0x0044, PIN_INPUT, 7) /* (A8) MCU_I2C0_SCL.MCU_GPIO0_17 nRUN-BAS */
AM62X_MCU_IOPAD(0x0048, PIN_INPUT, 7) /* (D10) MCU_I2C0_SDA.MCU_GPIO0_18 nSTOP-BAS */
>;
};
};
&oms_pins_default {
pinctrl-single,pins = <
AM62X_IOPAD(0x01a4, PIN_INPUT, 7) /* (B20) MCASP0_ACLKX.GPIO1_11 IO-RAB */
>;
};
&oms {
pinctrl-0 = <&oms_pins_default &oms_mcu_pins_default>;
poll-interval = <100>;
oms_run: run {
label = "RUN";
gpios = <&mcu_gpio0 17 GPIO_ACTIVE_LOW>;
linux,code = <1>;
linux,input-type = <5>;
debounce-interval = <1>;
};
oms_stop: stop {
label = "STOP";
gpios = <&mcu_gpio0 18 GPIO_ACTIVE_LOW>;
linux,code = <2>;
linux,input-type = <5>;
debounce-interval = <1>;
};
};
&oms_stop_run {
status = "disabled";
};
@@ -0,0 +1,10 @@
// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
/plugin/;
#include "k3-pinctrl.h"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/leds/common.h>
#include "k3-am623-pfc-750-84xx-wosm.dtsi"
@@ -0,0 +1,45 @@
// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
/plugin/;
#include "k3-pinctrl.h"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/leds/common.h>
#include "k3-am623-pfc-750-84xx-wosm.dtsi"
&main_pmx0 {
mram_reset_pins_default: mram-reset-default-pins {
pinctrl-single,pins = <
AM62X_IOPAD(0x0004, PIN_OUTPUT, 7) /* (G25) OSPI0_LBCLKO.GPIO0_1 (nRST) */
>;
};
em_reset_pins_default: em-reset-default-pins {
pinctrl-single,pins = <
AM62X_IOPAD(0x01a0, PIN_OUTPUT, 7) /* (E18) MCASP0_AXR0.GPIO1_10 (nRST-EM2) */
AM62X_IOPAD(0x019c, PIN_OUTPUT, 7) /* (B18) MCASP0_AXR1.GPIO1_9 (nRST-EM3) */
>;
};
rs485_2_pins_default: rs485-2-default-pins {
pinctrl-single,pins = <
AM62X_IOPAD(0x0098, PIN_OUTPUT, 7) /* (U23) GPMC0_WAIT0.GPIO0_38 (RS-2.DE) */
AM62X_IOPAD(0x00c0, PIN_INPUT, 4) /* (W25) VOUT0_DATA2.UART3_RXD (RS-2.RXD) */
AM62X_IOPAD(0x00c4, PIN_OUTPUT, 4) /* (W24) VOUT0_DATA3.UART3_TXD (RS-2.TXD) */
>;
};
can_interface_pins_default: can-interface-default-pins {
pinctrl-single,pins = <
AM62X_IOPAD(0x01dc, PIN_INPUT, 0) /* (E15) MCAN0_RX (CAN.RXD) */
AM62X_IOPAD(0x01d8, PIN_OUTPUT, 0) /* (C15) MCAN0_TX (CAN.TXD) */
>;
};
};
&mram {
pinctrl-0 = <&mram_irq_pins_default &mram_reset_pins_default>;
reset-gpios = <&main_gpio0 1 GPIO_ACTIVE_LOW>;
};