Thor SFP bring-up

Hi all,

We have designed a Thor carrier with just one MGBE UPHY lane broken out into an SFP, instead of an SFP-28. What device tree modifications need to be made to adapt the nvidia QSFP implementation to work with a single SFP? I cannot find where the pin assignments for the QSFP are made in the dts.

Thank you

Hi,
Any updates on this? I am having a similar issue.

As mentioned in the Jetson Thor Series Modules Interface Design Guide, the MGBE on Jetson Thor supports 2.5, 5, 10, or 25 Gbps. SFP is likely limited to a maximum of 1.25 Gbps and may not work with Jetson Thor’s MGBE. SFP+ supports up to 10 Gbps and should be used instead of SFP.

Hi,
So far I have been trying to use a 10G SFP28 DAC directly into a 10G capable switch, but I am not seeing any traffic over any of the MGBE interfaces. Are any changes required to the default QSFP setup provided with the Thor developer kit for this? We are not using the same GPIO as were used on the QSFP in the dev kit.

Are you following the Jetson Linux Developer Guide for enabling QSFP and checking for traffic?

Since you did not use the same GPIOs, have you programmed whatever was used accordingly? Is there a particular reason the GPIOs were remapped instead of following the Dev Kit?

Hi,
The QSFP28 and SFP28 GPIO assignments are not the same - the difference in GPIO functions are shown here. Additionally, we are using 2 SFP28 modules instead of 1 QSFP, so using all of the same GPIOs as the developer kit was not feasible. I was not able to find where nvethernet maps these GPIOs, so I have not be able to reasign them. Setting a static IP (suggested in a different post by I think NV’s Wayne) and forcing the interface up shows a couple of TX packets in ifconfig, but never an actual link. We’re a bit stuck here, do you have any leads on what we should try next?

10G SFP28 with DAC (Direct Attachment Cable) adds additional losses to the system, scaling with the length of the cable. The high losses could be one of the reasons why you are not able to link-up..

Can you try a Fiber transceiver (instead of DAC) for connecting the SFP28 to the 10G capable switch?

Just looking at my Thor and here are somethings that may be relevant.

Jetson Thor Series Modules Pinmux Template

In excel did a search for sfp and got these 4 rows.

Row259 J52	I2C0_CLK	GP190_I2C0_CLK	GEN0_I2C_SCL	unused_GEN0_I2C_SCL	GPIO3_PW.04	I2C0_CLK				B	B				I2C0_CLK	RSVD1	RSVD2	RSVD3	RSVD1	gen0_i2c_scl_pw4	vddio_gpiob				I2C0	GPIOB	ST/DD	BDGPIOLTL_DFCT6M16L_VD121812NC	20K	z	GPIO_PW4		NORMAL	NORMAL	DISABLE	0	TRUE	TRUE	TRUE	TRUE	TRUE	TRUE	VALID	GPIO3_PW.04	Output	Drive 0			Disable	Disable	Disable	Enable	Mid	Disable	1k							XFI0_RST_N (SOC_QSFP_RESET)	BM20		
Row260 J53	I2C0_DAT	GP191_I2C0_DAT	GEN0_I2C_SDA	unused_GEN0_I2C_SDA	GPIO3_PW.05	I2C0_DAT				B	B				I2C0_DAT	RSVD1	RSVD2	RSVD3	RSVD1	gen0_i2c_sda_pw5	vddio_gpiob				I2C0	GPIOB	ST/DD	BDGPIOLTL_DFCT6M16L_VD121812NC	20K	z	GPIO_PW5		NORMAL	TRISTATE	ENABLE		TRUE	TRUE	TRUE	TRUE	TRUE	TRUE	VALID	GPIO3_PW.05	Input				Disable	Disable	Disable	Enable	Mid	Disable	1k							XFI0_INT_N (SOC_QSFP_INT)	BR20		
Row276 H17	GPIO62	GP273	SOC_GPIO273	unused_SOC_GPIO273	GPIO3_PY.03		I2S3_SDATA_OUT			B		O			RSVD0	I2S3_SDATA_OUT	RSVD2	RSVD3	RSVD0	soc_gpio273_py3	vddio_gpiod				DAP3	GPIOD	ST/DD	BDGPIOLTL_DFCT6M16L_VD121812NC	20K	pd	GPIO_PY3		NORMAL	TRISTATE	ENABLE		TRUE	TRUE	TRUE	TRUE	TRUE	TRUE	VALID	GPIO3_PY.03	Input				Disable	Disable	Disable	Enable	Mid	Disable			10k					SOC_QSFP_RPSNT_N	BY12		
Row278 GPIO57	GP275	SOC_GPIO275	unused_SOC_GPIO275	GPIO3_PY.05		I2S3_LRCK			B		B			RSVD0	I2S3_LRCK	RSVD2	RSVD3	RSVD0	soc_gpio275_py5	vddio_gpiod				DAP3	GPIOD	ST/DD	BDGPIOLTL_DFCT6M16L_VD121812NC	20K	pd	GPIO_PY5		NORMAL	NORMAL	DISABLE	1	TRUE	TRUE	TRUE	TRUE	TRUE	TRUE	VALID	GPIO3_PY.05	Output	Drive 1			Disable	Disable	Disable	Enable	Mid	Disable			10k					XFI3_RST_N (SOC_QSFP_LP_N)	CC12		

/etc/systemd/nvpower.sh

function udev_mgbe_handler()
{
        # INTERFACE environment variable is initialized by udev based on
        # the interface detected by the kernel
        inf=$INTERFACE

        if [[ -e "/sys/class/net/$inf/carrier" ]]; then
                connected=$(cat "/sys/class/net/$inf/carrier")
                if [[ "$connected" -eq 0 ]]; then
                        ip link set dev "$inf" down
                fi
        fi
}

/etc/udev/rules.d/99-tegra-devices.rules

SUBSYSTEM=="net", KERNEL=="mgbe0_0", RUN+="/bin/bash /etc/systemd/nvpower.sh --mgbe"
SUBSYSTEM=="net", KERNEL=="mgbe1_0", RUN+="/bin/bash /etc/systemd/nvpower.sh --mgbe"
SUBSYSTEM=="net", KERNEL=="mgbe2_0", RUN+="/bin/bash /etc/systemd/nvpower.sh --mgbe"
SUBSYSTEM=="net", KERNEL=="mgbe3_0", RUN+="/bin/bash /etc/systemd/nvpower.sh --mgbe"

sudo cat /etc/netplan/90-NM-c19b17e2-f49c-3c83-99dc-b7cd9b26ca6e.yaml

network:
  version: 2
  ethernets:
    NM-c19b17e2-f49c-3c83-99dc-b7cd9b26ca6e:
      renderer: NetworkManager
      match:
        name: "mgbe0_0"
      addresses:
      - "192.168.1.60/24"
      dhcp6: true
      wakeonlan: true
      networkmanager:
        uuid: "c19b17e2-f49c-3c83-99dc-b7cd9b26ca6e"
        name: "mgbe0_0"
        passthrough:
          connection.autoconnect-priority: "-999"
          connection.timestamp: "1760080945"
          ethernet._: ""
          ipv4.address1: "192.168.1.60/24,192.168.1.1"
          ipv4.method: "manual"
          ipv6.addr-gen-mode: "default"
          ipv6.ip6-privacy: "-1"
          proxy._: ""

Thank you both for the information, it was helpful in determining that the setup we have should work. We have now managed to obtain link and transfer data over the DAC cable in both 10G and 25G mode. The issue was with a misbehaving clock signal on the MGBE UPHY, and fixing this allowed the link to come up.