为什么我使能了rgmii接口,之后,我得uphy0的lane2出来的usbhub无法识别了?

你好:
我是用的最新的36.4.3的版本,然后修改了pinmux和gpio。
我是完全按照指导来修改的,修改成如下
tegra234-mb1-bct-gpio-p3701-0000-a04.dtsi_lhz2.txt (5.0 KB)
tegra234-mb1-bct-pinmux-p3701-0000-a04.dtsi_lhz2.txt (63.6 KB)

然后,我把修改过的内核还有设备树,即使都换成默认的,那么我得usb2.0 hub,都不会出来,我得usb2.0hub是用了uphy0的lane 2通道,出来的。
不知道为什么回事这样?但是如果我什么都不改,也就是pinmux和gpio配置,都不改的话,那么usb2.0hub,还是会是正常的。

root@orin:/home/orin# sudo cat /sys/kernel/debug/bpmp/debug/uphy/config
0x00584000
dmesg 如下:
dmesg-250306.txt (59.4 KB)

正常情况lsusb如下:
root@orin:~# lsusb
Bus 002 Device 002: ID 0bda:0420 Realtek Semiconductor Corp. 4-Port USB 3.0 Hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 0bda:5420 Realtek Semiconductor Corp. 4-Port USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

但我的板子的lsusb,(如果只改动pinmux和gpio),执行lsusb,就是空的,什么设备都没有。

rel-36的kernel預設有做dependencies檢查. 你的device tree裡面每一個欄位他都會去檢查
如果有其中一項是沒有準備好的, 那整個driver就完全不會起來. 你driver不起來的狀況下去查對應的list自然就沒有東西.

比方說你device tree裡面某個usb vbus-supply裡面有使用某個GPIO控制regulator. 如果那個GPIO被改掉了無法使用, 那檢查不過的情況下整個usb driver都不會被probed.

基本上不建議在那邊用各種奇怪的東西拼湊起來然後問為什麼一下能動一下不能動, 現在要做的是讓你整個pinmux/ usb部分的device tree都要跟你的底板吻合.

是这样的,我现在的板子,关于usb这里,是不在使用typec接口了,直接出的typeA接口。 也就是不在使用uphy0的lane0 和 lane 1.但是我修改pinmux的xlsm文件,生成的pinmux和gpio文件,发现并没有变化。 是否我只需要修改device tree的相关部分呢? 还是修改ODMDATA呢?

pinmux沒有在管你的接口長怎樣. 那些是device tree的事情.

ODMDATA管的是如果你有把其中一個UPHY從USB轉成PCIe (或是任何其他PCIE/USB/MGBE的功能轉換) 才需要改.

1 Like

问题解决了。我修改了设备树:关闭了一下一些关于usb的地方:
usb3 {
lanes {
usb3-0 {
status = “disabled”;
};

					usb3-1 {
						status = "disabled";
					};

					usb3-2 {
						status = "disabled";
					};
				};
			};
		};

		ports {
			usb2-0 {
				mode = "otg";
				usb-role-switch;
				status = "disabled";
				port {
					hs_typec_p1: endpoint {
						remote-endpoint = <&hs_ucsi_ccg_p1>;
					};
				};
			};

			usb2-1 {
				mode = "host";
				status = "disabled";
				port {
					hs_typec_p0: endpoint {
						remote-endpoint = <&hs_ucsi_ccg_p0>;
					};
				};
			};

			usb2-2 {
				mode = "host";
				status = "okay";
			};

			usb2-3 {
				mode = "host";
				status = "okay";
			};

			usb3-0 {
				nvidia,usb2-companion = <1>;
				status = "disabled";
				port {
					ss_typec_p0: endpoint {
						remote-endpoint = <&ss_ucsi_ccg_p0>;
					};
				};
			};

			usb3-1 {
				nvidia,usb2-companion = <0>;
				status = "disabled";
				port {
					ss_typec_p1: endpoint {
						remote-endpoint = <&ss_ucsi_ccg_p1>;
					};
				};
			};

			usb3-2 {
				nvidia,usb2-companion = <3>;
				status = "disabled";
			};
		};
	};

	usb@3550000 {
		status = "disabled";

		phys = <&{/bus@0/padctl@3520000/pads/usb2/lanes/usb2-0}>,
		       <&{/bus@0/padctl@3520000/pads/usb3/lanes/usb3-1}>;
		phy-names = "usb2-0", "usb3-0";
	};

感谢您的支持。
应该就是我们没有再使用typeC导致的,我关闭了,一些typeC的接口的相关的地方,就可以了。不知道我关闭的这些会不会伤及无辜,过多的关闭了什么的?

這樣要看你的板子怎麼設計的. 單看這些我無法知道到底有沒有關到一些你有使用的部份.

嗯嗯,看着lsusb,是没问题。usb这块没有再用别的功能了。感谢支持。

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.