* [PATCH 1/2] dt-bindings: soc: xilinx: Document ifm ZynqMP VHIP6 EvalBoard
@ 2026-09-09 16:43 Marek Vasut
2026-09-09 16:43 ` [PATCH 2/2] arm64: zynqmp: Add " Marek Vasut
0 siblings, 1 reply; 4+ messages in thread
From: Marek Vasut @ 2026-09-09 16:43 UTC (permalink / raw)
To: linux-arm-kernel
Cc: Marek Vasut, Conor Dooley, Krzysztof Kozlowski, Michal Simek,
Rob Herring, devicetree, linux-kernel
Document ifm ZynqMP VHIP6 EvalBoard reference design binding.
The board is populated with four ethernet ports, QSPI NOR,
eMMC, UART and USB host interfaces.
Signed-off-by: Marek Vasut <marex@nabladev.com>
---
Cc: Conor Dooley <conor+dt@kernel.org>
Cc: Krzysztof Kozlowski <krzk+dt@kernel.org>
Cc: Michal Simek <michal.simek@amd.com>
Cc: Rob Herring <robh@kernel.org>
Cc: devicetree@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
---
Documentation/devicetree/bindings/soc/xilinx/xilinx.yaml | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/Documentation/devicetree/bindings/soc/xilinx/xilinx.yaml b/Documentation/devicetree/bindings/soc/xilinx/xilinx.yaml
index c9f99e0df2b35..49ef4e0c68501 100644
--- a/Documentation/devicetree/bindings/soc/xilinx/xilinx.yaml
+++ b/Documentation/devicetree/bindings/soc/xilinx/xilinx.yaml
@@ -44,6 +44,11 @@ properties:
- const: xlnx,zynq-zed
- const: xlnx,zynq-7000
+ - items:
+ - const: ifm,zynqmp-vhip6-evalboard
+ - const: ifm,zynqmp-vhip6
+ - const: xlnx,zynqmp
+
- items:
- enum:
- xlnx,zynqmp-zc1751
--
2.53.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] arm64: zynqmp: Add ifm ZynqMP VHIP6 EvalBoard
2026-09-09 16:43 [PATCH 1/2] dt-bindings: soc: xilinx: Document ifm ZynqMP VHIP6 EvalBoard Marek Vasut
@ 2026-09-09 16:43 ` Marek Vasut
2026-09-09 16:55 ` sashiko-bot
0 siblings, 1 reply; 4+ messages in thread
From: Marek Vasut @ 2026-09-09 16:43 UTC (permalink / raw)
To: linux-arm-kernel
Cc: Marek Vasut, Conor Dooley, Krzysztof Kozlowski, Michal Simek,
Rob Herring, devicetree, linux-kernel
Add support for ifm ZynqMP VHIP6 EvalBoard reference design.
The board is populated with four ethernet ports, QSPI NOR,
eMMC, UART and USB host interfaces.
Signed-off-by: Marek Vasut <marex@nabladev.com>
---
Cc: Conor Dooley <conor+dt@kernel.org>
Cc: Krzysztof Kozlowski <krzk+dt@kernel.org>
Cc: Michal Simek <michal.simek@amd.com>
Cc: Rob Herring <robh@kernel.org>
Cc: devicetree@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
---
NOTE: Checkpatch complains about ethernet-phy-id2000.a240 being
undocumented, but the TI DP83822I is generic C45 PHY that
is valided by Documentation/devicetree/bindings/net/ethernet-phy.yaml
---
arch/arm64/boot/dts/xilinx/Makefile | 1 +
.../dts/xilinx/zynqmp-vhip6-evalboard.dts | 321 ++++++++++++++++++
2 files changed, 322 insertions(+)
create mode 100644 arch/arm64/boot/dts/xilinx/zynqmp-vhip6-evalboard.dts
diff --git a/arch/arm64/boot/dts/xilinx/Makefile b/arch/arm64/boot/dts/xilinx/Makefile
index 70fac0b276df0..936ddf6eb80a6 100644
--- a/arch/arm64/boot/dts/xilinx/Makefile
+++ b/arch/arm64/boot/dts/xilinx/Makefile
@@ -1,5 +1,6 @@
# SPDX-License-Identifier: GPL-2.0
dtb-$(CONFIG_ARCH_ZYNQMP) += avnet-ultra96-rev1.dtb
+dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-vhip6-evalboard.dtb
dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zc1232-revA.dtb
dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zc1254-revA.dtb
dtb-$(CONFIG_ARCH_ZYNQMP) += zynqmp-zc1751-xm015-dc1.dtb
diff --git a/arch/arm64/boot/dts/xilinx/zynqmp-vhip6-evalboard.dts b/arch/arm64/boot/dts/xilinx/zynqmp-vhip6-evalboard.dts
new file mode 100644
index 0000000000000..0e1d1baf40a82
--- /dev/null
+++ b/arch/arm64/boot/dts/xilinx/zynqmp-vhip6-evalboard.dts
@@ -0,0 +1,321 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * ifm Zynq UltraScale+ MPSoC VHIP6 Evaluation Board
+ *
+ * Copyright (C) 2022-2026 Fedor Ross, ifm ecomatic gmbh
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/phy/phy.h>
+
+#include "zynqmp.dtsi"
+#include "zynqmp-clk-ccf.dtsi"
+
+/ {
+ model = "ifm ZynqMP VHIP6 Evaluation Board";
+ compatible = "ifm,zynqmp-vhip6-evalboard", "ifm,zynqmp-vhip6", "xlnx,zynqmp";
+
+ aliases {
+ ethernet0 = &gem0;
+ ethernet1 = &gem1;
+ ethernet2 = &gem2;
+ ethernet3 = &gem3;
+ gpio0 = &gpio;
+ i2c0 = &i2c0;
+ i2c1 = &i2c1;
+ rtc0 = &i2crtc;
+ serial0 = &uart0;
+ spi0 = &qspi;
+ usb0 = &usb0;
+ usb1 = &usb1;
+ };
+
+ chosen {
+ bootargs = "clk_ignore_unused";
+ stdout-path = "serial0:115200n8";
+ };
+
+ memory@0 {
+ device_type = "memory";
+ reg = <0x0 0x0 0x0 0x40000000>;
+ };
+};
+
+&dwc3_1 {
+ dr_mode = "host";
+ maximum-speed = "high-speed";
+ status = "okay";
+};
+
+&gem0 {
+ phy-handle = <&phy0>;
+ phy-mode = "mii";
+ status = "okay";
+
+ mdio0: mdio {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ phy0: phy@1 { /* TI DP83822I */
+ compatible = "ethernet-phy-id2000.a240",
+ "ethernet-phy-ieee802.3-c45";
+ reg = <1>;
+ reset-gpios = <&gpio 78 GPIO_ACTIVE_LOW>;
+ reset-assert-us = <10>;
+ reset-deassert-us = <10>;
+ };
+ };
+};
+
+&gem1 {
+ phy-handle = <&phy1>;
+ phy-mode = "rgmii-rxid";
+ status = "okay";
+
+ mdio1: mdio {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ phy1: phy@1 { /* TI DP83822I */
+ compatible = "ethernet-phy-id2000.a240",
+ "ethernet-phy-ieee802.3-c45";
+ reg = <1>;
+ max-speed = <100>;
+ reset-gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
+ reset-assert-us = <10>;
+ reset-deassert-us = <10>;
+ tx-internal-delay-ps = <1>;
+ };
+ };
+};
+
+&gem2 {
+ phy-handle = <&phy2>;
+ phy-mode = "mii";
+ status = "okay";
+
+ mdio2: mdio {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ phy2: phy@1 { /* TI DP83822I */
+ compatible = "ethernet-phy-id2000.a240",
+ "ethernet-phy-ieee802.3-c45";
+ reg = <1>;
+ reset-gpios = <&gpio 79 GPIO_ACTIVE_LOW>;
+ reset-assert-us = <10>;
+ reset-deassert-us = <10>;
+ };
+ };
+};
+
+&gem3 {
+ phy-handle = <&phy3>;
+ phy-mode = "mii";
+ status = "okay";
+
+ mdio3: mdio {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ phy3: phy@1 { /* TI DP83822I */
+ compatible = "ethernet-phy-id2000.a240",
+ "ethernet-phy-ieee802.3-c45";
+ reg = <1>;
+ reset-gpios = <&gpio 80 GPIO_ACTIVE_LOW>;
+ reset-assert-us = <10>;
+ reset-deassert-us = <10>;
+ };
+ };
+};
+
+&gpio {
+ status = "okay";
+ gpio-line-names =
+ /* GPIO 0 - 77 */
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "",
+ "ifm_device_info_eeprom_wp",
+ "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ /* EMIO 0 - 96 */
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "";
+};
+
+&i2c0 {
+ clock-frequency = <400000>;
+ status = "okay";
+
+ lm75@48 {
+ compatible = "national,lm75";
+ reg = <0x48>;
+ };
+
+ eeprom@50 {
+ compatible = "atmel,24c128";
+ reg = <0x50>;
+ label = "ifm-logging";
+ wp-gpios = <&gpio 36 GPIO_ACTIVE_HIGH>;
+ };
+};
+
+&i2c1 {
+ clock-frequency = <400000>;
+ status = "okay";
+
+ eeprom@51 {
+ compatible = "atmel,24c128";
+ reg = <0x51>;
+ label = "ifm-deviceinfo";
+ wp-gpios = <&gpio 37 GPIO_ACTIVE_HIGH>;
+
+ nvmem-layout {
+ compatible = "fixed-layout";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ vhip-signature@0 {
+ reg = <0x0 0x4>;
+ };
+
+ vhip-version@4 {
+ reg = <0x4 0x4>;
+ };
+
+ vhip-size@8 {
+ reg = <0x8 0x4>;
+ };
+
+ device-serial@c {
+ reg = <0xc 0x10>;
+ };
+
+ order-number@1c {
+ reg = <0x1c 0x20>;
+ };
+
+ article-name@3c {
+ reg = <0x3c 0x20>;
+ };
+
+ article-rev@5c {
+ reg = <0x5c 0x4>;
+ };
+
+ hardware-rev@60 {
+ reg = <0x60 0x4>;
+ };
+
+ product-type@64 {
+ reg = <0x64 0x20>;
+ };
+
+ software-compatibility@84 {
+ reg = <0x84 0x4>;
+ };
+
+ manufacturing-date@88 {
+ reg = <0x88 0x20>;
+ };
+
+ production-order-number@a8 {
+ reg = <0xa8 0x20>;
+ };
+
+ /* Each MAC address is padded to 8 Bytes */
+ cfg_eeprom_mac1: mac-address-1@c8 {
+ reg = <0xc8 0x8>;
+ };
+
+ cfg_eeprom_mac2: mac-address-2@d0 {
+ reg = <0xd0 0x8>;
+ };
+
+ cfg_eeprom_mac3: mac-address-3@d8 {
+ reg = <0xd8 0x8>;
+ };
+
+ cfg_eeprom_mac4: mac-address-4@e0 {
+ reg = <0xe0 0x8>;
+ };
+
+ cfg_eeprom_mac5: mac-address-5@e8 {
+ reg = <0xe8 0x8>;
+ };
+
+ cfg_eeprom_mac6: mac-address-6@f0 {
+ reg = <0xf0 0x8>;
+ };
+
+ cfg_eeprom_mac7: mac-address-7@f8 {
+ reg = <0xf8 0x8>;
+ };
+
+ cfg_eeprom_mac8: mac-address-8@100 {
+ reg = <0x100 0x8>;
+ };
+
+ next-block-offset@108 {
+ reg = <0x108 0x4>;
+ };
+
+ section-crc@10c {
+ reg = <0x10c 0x4>;
+ };
+ };
+ };
+
+ i2crtc: rtc@52 {
+ compatible = "microcrystal,rv3028";
+ reg = <0x52>;
+ };
+};
+
+&qspi {
+ status = "okay";
+
+ flash@0 {
+ compatible = "jedec,spi-nor";
+ reg = <0x0>;
+ spi-max-frequency = <80000000>;
+ spi-tx-bus-width = <1>;
+ spi-rx-bus-width = <4>;
+ };
+};
+
+&sdhci0 {
+ xlnx,mio-bank = <0x0>;
+ status = "okay";
+};
+
+&spi0 {
+ status = "okay";
+
+ eeprom@0 {
+ compatible = "atmel,at25";
+ reg = <0x0>;
+ address-width = <16>;
+ pagesize = <64>;
+ size = <32768>;
+ spi-max-frequency = <60000000>;
+ };
+};
+
+&uart0 {
+ status = "okay";
+};
+
+&usb1 {
+ reset-gpios = <&gpio 77 1>;
+ status = "okay";
+};
--
2.53.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] arm64: zynqmp: Add ifm ZynqMP VHIP6 EvalBoard
2026-09-09 16:43 ` [PATCH 2/2] arm64: zynqmp: Add " Marek Vasut
@ 2026-09-09 16:55 ` sashiko-bot
2026-09-09 18:25 ` Marek Vasut
0 siblings, 1 reply; 4+ messages in thread
From: sashiko-bot @ 2026-09-09 16:55 UTC (permalink / raw)
To: Marek Vasut; +Cc: devicetree, robh, conor+dt
Thank you for your contribution! Sashiko AI review found 5 potential issue(s) to consider:
- [High] The TI DP83822I PHY is incorrectly declared as a Clause 45 PHY, which will cause MDIO probe failures.
- [Medium] Contradictory RGMII internal delay configuration on gem1 forces TX delay on a mode that explicitly requests it disabled.
- [Medium] USB0 interface is not enabled despite commit message claiming 'USB host interfaces' (plural).
- [Low] Magic number '1' used instead of the standard 'GPIO_ACTIVE_LOW' macro.
- [Low] Non-generic node name for LM75 temperature sensor.
--
commit 9efb3b575525e794cefe9379fc0090ce8f78e409
Author: Marek Vasut <marex@nabladev.com>
arm64: zynqmp: Add ifm ZynqMP VHIP6 EvalBoard
This commit adds support for the ifm ZynqMP VHIP6 EvalBoard reference
design. The board configuration includes four ethernet ports, QSPI NOR,
eMMC, UART, and USB host interfaces.
> diff --git a/arch/arm64/boot/dts/xilinx/zynqmp-vhip6-evalboard.dts b/arch/arm64/boot/dts/xilinx/zynqmp-vhip6-evalboard.dts
> new file mode 100644
> --- /dev/null
> +++ b/arch/arm64/boot/dts/xilinx/zynqmp-vhip6-evalboard.dts
[ ... ]
> + aliases {
> + ethernet0 = &gem0;
> + ethernet1 = &gem1;
> + ethernet2 = &gem2;
> + ethernet3 = &gem3;
> + gpio0 = &gpio;
> + i2c0 = &i2c0;
> + i2c1 = &i2c1;
> + rtc0 = &i2crtc;
> + serial0 = &uart0;
> + spi0 = &qspi;
> + usb0 = &usb0;
[Severity: Medium]
The commit message mentions USB host interfaces in the plural, and there is an
alias for usb0 here, but is the usb0 node actually enabled in this file?
The zynqmp.dtsi base disables both usb0 and usb1 by default. While usb1
is enabled later in this file, there is no corresponding override for usb0
or dwc3_0. Does this inadvertently leave the first USB interface disabled?
> + usb1 = &usb1;
> + };
[ ... ]
> +&gem0 {
> + phy-handle = <&phy0>;
> + phy-mode = "mii";
> + status = "okay";
> +
> + mdio0: mdio {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + phy0: phy@1 { /* TI DP83822I */
> + compatible = "ethernet-phy-id2000.a240",
> + "ethernet-phy-ieee802.3-c45";
[Severity: High]
Will this compatible string cause the MDIO probe to fail?
The TI DP83822I is a Clause 22 PHY, but the ethernet-phy-ieee802.3-c45 string
sets the is_c45 flag in the kernel MDIO core. This forces macb_mdio to emit
C45 frames, which the DP83822I will ignore, causing the read to return 0xffff
and the probe to fail with -ENODEV.
Should this just be ethernet-phy-ieee802.3-c22 or rely solely on the ID?
This same C45 compatibility declaration appears to be applied to gem1, gem2,
and gem3 below as well.
> + reg = <1>;
> + reset-gpios = <&gpio 78 GPIO_ACTIVE_LOW>;
> + reset-assert-us = <10>;
> + reset-deassert-us = <10>;
> + };
> + };
> +};
> +
> +&gem1 {
> + phy-handle = <&phy1>;
> + phy-mode = "rgmii-rxid";
[Severity: Medium]
Does this PHY mode contradict the internal delay property defined below?
The rgmii-rxid mode specifies that only RX delay should be added by the PHY.
> + status = "okay";
> +
> + mdio1: mdio {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + phy1: phy@1 { /* TI DP83822I */
> + compatible = "ethernet-phy-id2000.a240",
> + "ethernet-phy-ieee802.3-c45";
> + reg = <1>;
> + max-speed = <100>;
> + reset-gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
> + reset-assert-us = <10>;
> + reset-deassert-us = <10>;
> + tx-internal-delay-ps = <1>;
[Severity: Medium]
The DP83822 driver interprets tx-internal-delay-ps as a request to enable the
PHY internal TX delay, overriding the rgmii-rxid contract.
If the MAC or PCB also applies a delay, this double-delay on the TX clock
could cause connection instability. Should this property be removed, or should
the mode be changed to rgmii-id?
> + };
> + };
> +};
[ ... ]
> +&i2c0 {
> + clock-frequency = <400000>;
> + status = "okay";
> +
> + lm75@48 {
> + compatible = "national,lm75";
[Severity: Low]
Does this node name align with the Devicetree specification?
The guidelines require node names to be generic and describe the function of
the device rather than the specific model. Would a name like
temperature-sensor@48 or sensor@48 be more appropriate here?
> + reg = <0x48>;
> + };
[ ... ]
> +&usb1 {
> + reset-gpios = <&gpio 77 1>;
[Severity: Low]
Is there a reason to use the magic number 1 here instead of the standard
GPIO_ACTIVE_LOW macro?
The dt-bindings header is included at the top of the file, and GPIO_ACTIVE_LOW
is used correctly for all other reset-gpios definitions in this board setup.
> + status = "okay";
> +};
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260909164423.97288-1-marex@nabladev.com?part=2
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] arm64: zynqmp: Add ifm ZynqMP VHIP6 EvalBoard
2026-09-09 16:55 ` sashiko-bot
@ 2026-09-09 18:25 ` Marek Vasut
0 siblings, 0 replies; 4+ messages in thread
From: Marek Vasut @ 2026-09-09 18:25 UTC (permalink / raw)
To: Linux ARM; +Cc: devicetree, robh, conor+dt, Michal Simek
On 9/9/26 6:55 PM, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 5 potential issue(s) to consider:
I really do not understand why the bot drops linux-arm-kernel@ and the
maintainer from CC, grumb.
> - [High] The TI DP83822I PHY is incorrectly declared as a Clause 45 PHY
Datasheet says C45.
> - [Medium] Contradictory RGMII internal delay configuration on gem1 forces TX delay on a mode that explicitly requests it disabled.
Delay is needed.
> - [Medium] USB0 interface is not enabled despite commit message claiming 'USB host interfaces' (plural).
Yes, "UART and USB" are interfaces, plural.
> - [Low] Magic number '1' used instead of the standard 'GPIO_ACTIVE_LOW' macro.
> - [Low] Non-generic node name for LM75 temperature sensor.
These two are addressed in V2.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-09-09 18:25 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-09 16:43 [PATCH 1/2] dt-bindings: soc: xilinx: Document ifm ZynqMP VHIP6 EvalBoard Marek Vasut
2026-09-09 16:43 ` [PATCH 2/2] arm64: zynqmp: Add " Marek Vasut
2026-09-09 16:55 ` sashiko-bot
2026-09-09 18:25 ` Marek Vasut
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox