Hope to get technical guidance,Use the KSZ9896 PHY to replace the Jetson-AGX-Xavier PHY driver via the MDIO interface

My reference is as follows: https://forums.developer.nvidia.com/t/how-to-replace-net-phy-of-xavier/77574

Then I want to ask the path of the device tree file corresponding to jetson-agx-xavier 32g, as well as the file name, whether it is consistent with the file path I modified, I am afraid that the modification will not take effect.

Here is the path to the file I modified:


Contents modified by the tegra194-platforms-eqos.dtsi file:

ethernet@2490000 {
interrupts = <0 194 0x4>, /* common /
<0 186 0x4>, /
tx0 /
<0 190 0x4>; /
rx0 /
rxq_enable_ctrl =
* 0x0 = Not enabled, 0x1 = Enabled for AV
* 0x2 = Enabled for Legacy, 0x3 = Reserved
nvidia,rxq_enable_ctrl = <2>;
nvidia,num-dma-chans = <1>;
nvidia,dma-chans = <0>;
nvidia,num-mtl-queues = <1>;
nvidia,mtl-queues = <0>;
nvidia,rx-queue-prio = <0x2>;
nvidia,tx-queue-prio = <0x0>;
0=enable, 1=disable */
nvidia,pause_frames = <0>;
nvidia,phy-reset-gpio = <&tegra_main_gpio TEGRA194_MAIN_GPIO(G, 5) 1>;
phy-mode = “rgmii-id”;
phy-handle = <&phy>;
fixed-link {
speed = <1000>;
//nvidia,max-platform-mtu = <16383>;

  mdio {
  	compatible = "nvidia,eqos-mdio";
  	#address-cells = <1>;
  	#size-cells = <0>;

  	phy: phy@0 {
  		compatible = "microchip,ksz9896";
  		reg = <0>;
  		interrupt-parent = <&tegra_main_gpio>;
  		interrupts = <TEGRA194_MAIN_GPIO(G, 4) IRQ_TYPE_LEVEL_LOW>;
  		/* Setup LED[2] as interrupt pin (active low) */
  		microchip,reg-init = <0x03 0x12 0x7fff 0x880>;


How do I enable fixed-link? For platforms that support device trees, simply add a fixed-link child node to the Mac device node.

I modified whether the device tree file corresponds to jetson-agx-xavier’s platform by modifying this tegra194-platforms-eqos.dtsi
The file is still tegra194-p2888-0001-p2822-0000.dts

Use the KSZ9896 PHY to replace the Jetson-AGX-Xavier PHY driver via the MDIO interface

The network ping on jetson is not working, can the senior take a look for me? Thank you.

It is not an error that you are flashing tegra194-p2888-0001-p2822-0000.dtb to your device…

Please get some basic knowledge of how device tree works first.

“dtsi” file is more like a file that will be “included” by other files and “dts” file is the one that will become a finalized dtb file… We flash the finalized dtb file but not a dtsi file…

And for ksz9896 phy, some other users had shared their experience.

I have seen this topic, this topic uses I2C and SPI drivers, not MDIO, so now you need to configure Linux PHY Fixed-Link mode, RGMII interface delay, Switch has a default delay state, need Mac to adapt, keep Mac consistent with Switch. I probably know how this works, but I don’t know exactly what to modify.@WayneWWW

Okay, thanks, it’s that I don’t know which different jetson platforms correspond to that device tree file, is there a description in the official SDK development guide? I went to learn about the device tree file.


You could check your flash log from flash.sh to know which dtb is in use.
Then download our kernel public source to track the code. I guess you already had them.

1 Like

How does jetson-agx-xavier set fixed-link mode?
I want to set the MPU to treat the external switch as a virtual PHY with fixed connection properties, in this mode, the switch works in the default working state, and Linux will not be able to access
The internal registers of the switch cannot be managed by ordinary MDIO, the MPU only has basic network communication functions, and the network is fixed: link up/1000M or 100M/full

If I knew exactly how to set the fixed-link mode, this problem should be solved

What does that mean how to set fixed-link mode? How did you tell whether the fixed-link mode is set or not?

View the two configurations of Speed and Duplex with the command “sudo ethtool eth0”

I would like to ask in which device tree file to enable fixed-link? For platforms that support device trees, just add a fixed-link child node to the Mac device node, but I don’t know to modify that file, add the following child node to the corresponding file:

  fixed-link {
  	speed = <1000>;

Have you downloaded the kernel source? You don’t know how to compile the dtb?

請問你kernel source有抓了嗎? 你的問題是不知道怎樣compile dtb ?



Two possible reasons

  1. your change/patch is not built into the dtb.
  2. Change/patch is already in dtb. But you didn’t update the dtb on the board correctly…

Please check whether you hit 1 or 2.


  1. 你改的東西沒build進dtb
  2. 你改的東西有進dtb, 但是你沒有更新到板子上讀到的dtb…




然后我编译执行./nvbuild.sh -o $PWD/kernel_out,

cp -r ./kernel_out/arch/arm64/boot/dts/nvidia/* /home/lth/nvidia/install_sdk/JetPack_5.0.2_Linux_JETSON_AGX_XAVIER_TARGETS/Linux_for_Tegra/kernel/dtb
sudo ./flash.sh -r -k kernel-dtb jetson-agx-xavier-devkit mmcblk0p1

By default rel-35 reads the dtb from rootfs. So you need to check /boot/extlinux/extlinux.conf and see which dtb is in use.

rel-35預設的dtb是從rootfs讀的. 所以你要看/boot/extlinux/extlinux.conf裡面指定的路徑在哪 然後去改那個dtb

1 Like




DEFAULT primary

MENU TITLE L4T boot options

LABEL primary
MENU LABEL primary kernel
LINUX /boot/Image
FDT /boot/dtb/kernel_tegra194-p2888-0001-p2822-0000.dtb
INITRD /boot/initrd
APPEND ${cbootargs}