This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] SK-AM69:支持 SERDES 包装程序中的 USB 3.0通道交换

Guru**** 2467770 points
Other Parts Discussed in Thread: AM69, SK-AM69, TUSB321

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1460602/sk-am69-support-for-usb-3-0-lane-swapping-in-serdes-wrapper

器件型号:SK-AM69
主题中讨论的其他器件:AM69、、 TUSB321

工具与软件:

根据 AM69 TRM (spruj52)、SERDES 包装器模块能够执行 USB Type-C 通道交换。

但是、根据 AM69 SERDES 文档SERDES 0  仅支持一个 USB 3通道(USB3_0):

                  ┌───────────────────┐
                  |                   │
      PCIE1_LANE0/|                   │
  HYPERLINK_LANE0 │                   │   <-> RX0/TX0
──────────────────┤                   ├────────────────
                  │                   │
                  │                   │
      PCIE1_LANE1/|                   │
  HYPERLINK_LANE1 │                   │   <-> RX1/TX1
──────────────────┤                   ├────────────────
                  │                   │
                  │    4L SERDES      │
      PCIE3_LANE0/|                   │
      PCIE1_LANE2/│                   │
  HYPERLINK_LANE2 │                   │   <-> RX2/TX2
──────────────────┤                   ├────────────────
                  │                   │
                  │                   │
      PCIE3_LANE1/|                   │
      PCIE1_LANE3/│                   │
           USB3_0/│                   │
  HYPERLINK_LANE3 │                   │   <-> RX3/TX3
──────────────────┤                   ├────────────────
                  │                   │
                  └───────────────────┘

这不同于其他处理器。 TDA4VM 文档 SERDES 0 因为具有一个 USB 3通道(USB3_0)、而另一个通道可配置为 USB 3通道交换功能(USB3_0_swap)。

                    ┌───────────────────┐
CPSW0_Q/SGMII_LANE1/│                   │
        PCIE0_LANE0/│                   │
        USB3_0_SWAP │                   │   <-> RX0/TX0
  ──────────────────┤                   ├────────────────
                    │                   │
                    │    2L SERDES      │
CPSW0_Q/SGMII_LANE2/│                   │
        PCIE0_LANE1/│                   │
             USB3_0 │                   │   <-> RX1/TX1
  ──────────────────┤                   ├────────────────
                    │                   │
                    │                   │
                    └───────────────────┘

我的主要问题是:AM69是否支持 USB 3 Type-C 通道交换? 或者我们是否应该添加多路复用器来选择将哪组超高速信号路由到单个 SERDES 通道?

我们当前的 USB 硬件配置基于 SK-AM69评估板的配置、具有以下重要差异:

  • USB Type-C 配置为使用 DRD 角色运行。
  • 串行器/解串器0通道3:一组来自 Type-C 连接器的 USB_SS_TX/RX 信号
  • 串行器/解串器0通道4:来自 Type-C 连接器的另一组 USB_SS_TX/RX 信号
  • GPIO0_36:由 TUSB321输出的 USBC_DIR 信号

在对各种器件树更改进行实验之后、PC 和 AM69电路板之间的 USB 3 Type-A 转 Type-C 电缆的行为如下:

  • 在一个 Type-C 连接器方向上、PC 能够以 USB 3速度与电路板进行通信。
  • Type-C 连接器翻转时、PC 只能以 USB 2速度与电路板通信。
  • GPIO0_36会根据 Type-C 连接器的方向而变化。

USB 3 Type-A 转 Type-C 电缆只有一组 SuperSpeed 信号、因此这些信号将连接到 SERDES 0的通道3或通道4、具体取决于电缆的方向。

在器件树中、我们根据 TRM 对 SERDES 通道进行了以下更改。 这里值得注意的一点是  include/dt-bindings/mux/j721E_SERDES0_LANE0_USB3_0_swap 等 ti-serdes.h 定义、但对于 AM69 (J784S4)没有类似的 USB 交换定义。

 &serdes_ln_ctrl {
 	idle-states = <J784S4_SERDES0_LANE0_PCIE1_LANE0>, <J784S4_SERDES0_LANE1_PCIE1_LANE1>,
-		      <J784S4_SERDES0_LANE2_PCIE3_LANE0>, <J784S4_SERDES0_LANE3_USB>,
+		      <J784S4_SERDES0_LANE2_IP3_UNUSED>, <J784S4_SERDES0_LANE3_USB>,
 			<J784S4_SERDES1_LANE0_PCIE0_LANE0>, <J784S4_SERDES1_LANE1_PCIE0_LANE1>,
 			<J784S4_SERDES1_LANE2_PCIE0_LANE2>, <J784S4_SERDES1_LANE3_PCIE0_LANE3>;
 };

USB PHY 配置如下所示。

&serdes0 {
	status = "okay";

	serdes0_usb_link: phy@2 {
		reg = <2>;
		cdns,num-lanes = <2>;
		#phy-cells = <0>;
		cdns,phy-type = <PHY_TYPE_USB3>;
		resets = <&serdes_wiz0 3>, <&serdes_wiz0 4>;
	};
};

最后、我们尝试使用 GPIO0_36 作为 USBC_DIR 信号来进行通道交换。

&serdes_wiz0 {
	status = "okay";
	typec-dir-gpios = <&main_gpio0 36 GPIO_ACTIVE_HIGH>;
	typec-dir-debounce-ms = <700>;
};

我在 drivers/phy/ti/phy-j721e-wiz.c (SERDES 包装程序驱动程序)中注意到的一个问题是、它仅支持根据 Type-C 方向 GPIO 位设置 LN10_SWAP 位。 我们尝试修改此值来设置 LN23_swap 位、但在 以 任一方向插入 Type-C 连接器后、未能获得 USB 3速度。

static int wiz_phy_reset_deassert(struct reset_controller_dev *rcdev,
				  unsigned long id)
{
	struct device *dev = rcdev->dev;
	struct wiz *wiz = dev_get_drvdata(dev);
	int ret;

	if (id == 0) {
		/* if typec-dir gpio was specified, set LN10 SWAP bit based on that */
		if (wiz->gpio_typec_dir) {
			if (wiz->typec_dir_delay)
				msleep_interruptible(wiz->typec_dir_delay);

			if (gpiod_get_value_cansleep(wiz->gpio_typec_dir))
				regmap_field_write(wiz->typec_ln10_swap, 1);
			else
				regmap_field_write(wiz->typec_ln10_swap, 0);
		} else {
...

在某些情况下、尝试使用 LN23_swap 位会导致引导期间失败:

[    6.634286] cdns-torrent-phy 5060000.serdes: Timeout waiting for PHY status ready
[    6.641770] phy phy-5060000.serdes.13: phy poweron failed --> -110
[    6.647948] cdns-usb3: probe of 6000000.usb failed with error -110

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [quote userid="620411" url="~/support/processors-group/processors/f/processors-forum/1460602/sk-am69-support-for-usb-3-0-lane-swapping-in-serdes-wrapper 我的主要问题是:AM69是否支持 USB 3 Type-C 通道交换? 或者我们是否应该添加多路复用器以选择将哪组超高速信号路由到单个 SERDES 通道?[/QUOT]

    AM69支持 Type-C 通道交换、但是、此实现是由外部 IC 完成的、IC 不会自动支持。

    您还可以参阅适用于 Type-C 实现的 J784S4 EVM。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    另请注意、USB3.0在连接到 SERDES0和 SERDES4的位置具有双路多路复用。 USB_SERDES_MUX 需要选择正确的 SERDES、在本例中为 SERDES0以及 SERDES0_ln3_ctrl。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们的电路与 J784S4 EVM 的 Type-C 实现非常相似、我们使用了正确的 SERDES、但我认为 我们遇到了一些信号完整性问题。 我们最终能够让 USB SuperSpeed 在使用外部多路复用器(仅具有 SERDES 0通道3)的不同硬件上工作。 谢谢、这可以视为问题得到解决。