pcie RC侧设备树配置

PCIE RC侧的设备树和配置主要需要配置以下几个部分:

  1. PCIe控制器节点

在设备树中添加PCIe控制器节点,并设置相应属性,如vendor-id、device-id、bus-range等。具体示例如下:

pcie0: pcie@ff800000 {
    compatible = "xlnx,versal-pcie-5.2", "xlnx,versal-pcie";
    reg = <0x0 0xff800000 0x0 0x1000>;
    interrupts = <0 60 4>;
    interrupt-names = "msi";
    #address-cells = <3>;
    #size-cells = <2>;
    ranges = <0x02000000 0 0x40000000 0x40000000 0 0x40000000>;
};

  1. PCIe端口节点

在PCIe控制器节点下添加PCIe端口节点,并设置相应属性,如vendor-id、device-id、bar-range等。具体示例如下:

pcie0_ep: endpoint@0 {
    compatible = "xlnx,versal-pcie-5.2-ep", "xlnx,versal-pcie-ep";
    reg = <0x0 0x0 0x0 0x1000>;
    device_type = "pci";

    /* BAR0 */
    ranges = <0x02000000 0x0 0x30000000 0x0 0x30000000 0x1000000>;
    reg-names = "bar";
    reg = <0x0 0x0 0x30000000>;

    /* MSI */
    msi-controller;
    msi-parent = <&pcie0>;
    interrupts = <0 61 4>;
    interrupt-names = "msi";
};

  1. 设备驱动节点

在PCIe端口节点下添加设备驱动节点,并设置相应属性,如compatible、interrupts等。具体示例如下:

my_device: my_device@0 {
    compatible = "my_device";
    reg = <0x0 0x0 0x0 0x0 0x0>;
    interrupts = <0 62 4>;
};

以上是一个简单的PCIE RC侧设备树和配置示例,具体配置要根据硬件设计而定。

PCIE RC侧的设备树和配置主要需要配置以下几个部分:

  1. PCIe控制器节点

在设备树中添加PCIe控制器节点,并设置相应属性,如vendor-id、device-id、bus-range等。具体示例如下:

pcie0: pcie@ff800000 {
    compatible = "xlnx,versal-pcie-5.2", "xlnx,versal-pcie";
    reg = <0x0 0xff800000 0x0 0x1000>;
    interrupts = <0 60 4>;
    interrupt-names = "msi";
    #address-cells = <3>;
    #size-cells = <2>;
    ranges = <0x02000000 0 0x40000000 0x40000000 0 0x40000000>;
};

  1. PCIe端口节点

在PCIe控制器节点下添加PCIe端口节点,并设置相应属性,如vendor-id、device-id、bar-range等。具体示例如下:

pcie0_ep: endpoint@0 {
    compatible = "xlnx,versal-pcie-5.2-ep", "xlnx,versal-pcie-ep";
    reg = <0x0 0x0 0x0 0x1000>;
    device_type = "pci";

    /* BAR0 */
    ranges = <0x02000000 0x0 0x30000000 0x0 0x30000000 0x1000000>;
    reg-names = "bar";
    reg = <0x0 0x0 0x30000000>;

    /* MSI */
    msi-controller;
    msi-parent = <&pcie0>;
    interrupts = <0 61 4>;
    interrupt-names = "msi";
};

  1. 设备驱动节点

在PCIe端口节点下添加设备驱动节点,并设置相应属性,如compatible、interrupts等。具体示例如下:

my_device: my_device@0 {
    compatible = "my_device";
    reg = <0x0 0x0 0x0 0x0 0x0>;
    interrupts = <0 62 4>;
};

以上是一个简单的PCIE RC侧设备树和配置示例,具体配置要根据硬件设计而定。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 EP 端驱动代码中,可以通过以下步骤实现向 PCIe RC 发送 hot reset 请求: 1. 首先需要获取 PCIe 设备的 PCI 设备 ID,可以使用 `pci_get_device()` 函数来获取。 2. 然后需要获取 PCIe 设备所在的 PCIe 总线编号和 PCIe 设备编号,可以使用 `pci_read_config_byte()` 函数来读取 PCIe 设备的配置空间中的 `bus` 和 `devfn` 寄存器。 3. 接下来,需要向 PCIe RC 发送 hot reset 请求。可以使用 `pcie_capability_clear_and_set_word()` 函数来设置 PCIe 设备的 `Device Control` 寄存器中的 `Secondary Bus Reset` 位,以触发 hot reset 请求。 4. 最后,需要等待一段时间,让 hot reset 请求完成。可以通过读取 `Device Control` 寄存器中的 `Secondary Bus Reset` 位来判断 hot reset 请求是否完成。 以下是一个示例代码片段,用于在 EP 端向 PCIe RC 发送 hot reset 请求: ```c /* 获取 PCI 设备 ID */ struct pci_dev *pdev = pci_get_device(PCI_VENDOR_ID, PCI_DEVICE_ID, NULL); /* 获取 PCIe 总线编号和 PCIe 设备编号 */ u8 bus = pci_read_config_byte(pdev, PCI_BUS); u8 devfn = pci_read_config_byte(pdev, PCI_DEVFN); /* 向 PCIe RC 发送 hot reset 请求 */ pcie_capability_clear_and_set_word(pdev, PCI_EXP_DEVCTL, PCI_EXP_DEVCTL_RESET_LT, PCI_EXP_DEVCTL_RESET_LT); /* 等待 hot reset 请求完成 */ while (pcie_capability_read_word(pdev, PCI_EXP_DEVCTL) & PCI_EXP_DEVCTL_RESET_LT) msleep(100); ``` 需要注意的是,hot reset 请求可能会影响 PCIe 设备的状态和性能,因此在实际应用中需要慎重考虑是否需要发送 hot reset 请求。此外,hot reset 请求也可能会影响 PCIe RC 连接的其他 PCIe 设备,因此需要确保在发送 hot reset 请求前已经做好了相关的准备工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值