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.

[参考译文] TDA4VM:AM64x PCIe 处于 EC 和 EP 模式

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1520656/tda4vm-am64x-pcie-in-ec-and-ep-mode

器件型号:TDA4VM
主题中讨论的其他器件:TDA4VL

工具/软件:

大家好、我使用的是 AM64x、我想从 RC 向 EP 发送中断。 所以我使用的 是 VENDOR_SPECIFIC_CONTROL_REG。 所处的位置。

因为我知道将 ox8写入该寄存器会触发中断。

但我想知道此寄存器的地址是什么。 此寄存器的地址

此致

Mahanteah

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

    尊敬的 Mahanteah:  

    我之前已经针对 TDA4VL 执行了这一操作、并参考了您找到的线程。 我创建了 一个常见问题解答、其中包含一个补丁和一个脚本、该脚本在脚本中设置了一组注释 、可用作参考:https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1329184/faq-tda4vl-q1-how-to-generate-downstream-pcie-interrupt-from-rc-to-ep 

    此致、

    Takuma

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

    尊敬的 Takuma:  

    非常感谢您的答复。 它是非常有帮助的。

    我使用的是 AM64x 电路板。   您提到的静态地址对于该板也是相同的。  

    我希望我可以     为此 AM64x 电路板使用相同的命令< setpci -s 0001:01:00.0 eCAP_VNDR+8.l=100 >

    #!/bin/bash

    #PCIE_INTD_ENABLE_REG_SYS_0 [位0-5]
    为 sys_en_pcie_download_0-5启用 set
    devmem2 0x2910100、带0x3f

    #pcie_core_PFN_I_vendor_specific control_REG
    导致 VSEC 中断
    devmem2 0x0d800408 (带0x100)
    devmem2 0x0d801408、带0x100
    devmem2 0x0d802408、带0x100
    devmem2 0x0d803408、带0x100
    devmem2 0x0d804408、带0x100
    devmem2 0x0d805408 (带0x100)

    #pcie_eoi_vector
    devmem2 0x29170c8、带0x0

    回波"状态为:"
    #pcie_status_reg_sys_x
    sys_en_pcie_download_0-5的#status
    devmem2 0x2910500

    清除 PCIE_CORE_PFN_I_VENDOR_SPECIFIC_CONTROL_REG
    devmem2 0x0d800408 w 0x0
    devmem2 0x0d801408、带0x0
    devmem2 0x0d802408、带0x0
    devmem2 0x0d803408、带0x0
    devmem2 0x0d804408、带0x0
    devmem2 0x0d805408 (带0x0  

    此致

    Mahantsh

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

    尊敬的 Takuma:

    我在设置中完成了以下更改。 我使用了  命令<  setpci -s 0001:01:00.0 eCAP_VNDR+8.l=100>、仍然无法从 RC 向 EP 触发下游中断、有任何建议吗?  

    diff --git a/arch/arm64/boot/dts/ti/k3-am64-main.dtsi b/arch/arm64/boot/dts/ti/k3-am64-main.dtsi
    索引9ff5cc05bc.c59c711944 100644
    -- A/arch/arm64/boot/dts/ti/k3-am64-main.dtsi
    ++ b/arch/arm64/boot/dts/ti/k3-am64-main.dtsi
    @@-813、8 +813、9 @@ pcie0_ep:pcie-EP@f102000{
    0x00 0x0d000000 0x00 0x00800000>、
    0x00 0x68000000 0x00 0x08000000>;
    reg-names ="intd_cfg"、"user_cfg"、"reg"、"mem";
    -中断名称="link_state";
    -中断= ;
    +中断名称="LINK_STATE"、"LINDER_PULSE";
    +中断= 、
    + ;
    TI、SYSCON-PCIe-Ctrl =<&MAIN_conf 0x4070>;
    最大链路速度=<2>;
    num-lanes =<1>;
    diff -git a/arch/arm64/boot/dts/ti/k3-am642-evm.dts b/arch/arm64/boot/dts/ti/k3-am642-evm.dts
    索引96f90ebf28..40ae656d73 100644
    -- A/arch/arm64/boot/dts/ti/k3-am642-evm.dts
    ++ b/arch/arm64/boot/dts/ti/k3-am642-evm.dts
    @@-711、13 + 711、16 @@&pcie0_rc{
    PHY =<&S serdes0_pcie_link>;
    PHY-NAMES ="PCIe-phy";
    num-lanes =<1>;
    +//状态="正常";
    + status ="disabled";
    };

    &pcie0_ep{
    PHY =<&S serdes0_pcie_link>;
    PHY-NAMES ="PCIe-phy";
    num-lanes =<1>;
    - status ="disabled";
    +//状态="已禁用";
    +状态="正常";
    };

    &tscadc0{
    diff -git a/arch/arm64/boot/dts/ti/k3-am642-sk.dts b/arch/arm64/boot/dts/ti/k3-am642-sk.dts
    索引2167b23355..f87db55cf4 100644
    -- A/arch/arm64/boot/dts/ti/k3-am642-sk.dts
    ++ b/arch/arm64/boot/dts/ti/k3-am642-sk.dts
    @@-566、11 +566、13 @@&mailbox0_cluster7{
    };

    &pcie0_rc{
    +//状态="正常";
    STATUS ="已禁用";
    };

    &pcie0_ep{
    - status ="disabled";
    +//状态="已禁用";
    +状态="正常";
    };

    diff -git a/drivers/pci/controllers/cadence/PCI-j721e.c b/drivers/pci/controllers/cadence/PCI-j721e.c
    索引40256815e8..7cd246859f 100644
    ---a/drivers/pci/controllers/cadence/pci-j721e.c
    ++ b/drivers/pci/控制器/cadence/PCI-j721e.c
    @@-134、6 +134、12 @@ static irqreturn_t j721e_pcie_link_irq_handler (int irq、void *priv)
    返回 IRQ_HANDLED;
    }

    +static irqreturn_t j721e_pcie_download_irq_handler (int irq、void *priv)
    +{
    + printk ("调试:已处理 MAHA 下游 IRQ ");
    +返回 IRQ_HANDLED;
    +}
    +
    静态 void j721e_pcie_config_link_irq (结构 j721e_pcie *pcie)

    u32寄存器;
    @@-507、7 +513、8 @@ static int j721e_pcie_probe (struct platform_device *pdev)
    U32模式;
    内部 ret;
    内部 IRQ;
    -
    + int down_irq;
    + printk ("DBG1000 Maha in j721e_pcie_probe2 \n");
    DATA =(结构 j721e_pcie_data *) of_device_get_match_data (dev);
    if (!data)
    return -EINVAL;
    @@-545、6 +552、9 @@ static int j721e_pcie_probe (结构 platform_device *pdev)
    IF (IRQ < 0)
    返回 IRQ;

    + DOWN_IRQ = platform_get_irq_byname (pdev、"download_pulse");
    + IF (DOWN_IRQ < 0)
    + RETURN DOWN_IRQ;
    dev_set_drvdata (dev、pcie);
    PM_runtime_enable (dev);
    RET = pm_runtime_get_sync (dev);
    @@-566、6 +576、15 @@ static int j721e_pcie_probe (struct platform_device *pdev)
    转到 err_get_sync;
    }

    + ret = devm_request_irq (dev、down_irq、j721e_pcie_download_irq_handler、0、
    +"j721e-PCIe-Downstream-IRQ"、PCIe);
    + if (ret < 0){
    + dev_err (dev、"未能请求下游脉冲 IRQ %d\n"、ret);
    +返回 ret;
    +}
    +
    + printk("******* DBG500 DOWN_IRQ ==%d\n"、DOWN_IRQ);
    +
    j721e_pcie_config_link_IRQ (PCIe);

    开关(MODE){




    PCIE0_EXLINGER_PULSE
    _0  

    此致

    Mahantsh

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

    尊敬的 Mahantsh:

    对迟来的答复表示歉意。 我错过了该主题。

    首先、您是否能够在本地从 EP 触发 EP 中断? 这将是从 RC 在 EP 上设置中断的先决条件。

    如果在 EP 本地触发中断、那么我可以确认已完成第6步:"在 EP 器件上、运行"devmemm2 0x29170c8 w 0x0 >/dev/null "和"devmemm2 0x0d800408 w 0x0 >/dev/null "以设置 EOI 寄存器以表示中断处理程序结束、并复位 pcie_core_PFN_I_vendor_specific control_REG"。 您可以省略/dev/null 的 PIPE 以查看输出、以确认寄存器正在更改。

    此致、

    Takuma

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

    尊敬的 Mahantsh:

    您可以尝试198来计算 download_pulse 的中断数吗? 一些器件的 GIC 中断偏移为32。

    此致、

    Takuma

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

    尊敬的 Takuma:

    第198章. 现在、我可以从 RC 向 EP 发送 MSI 中断。  现在正在执行 ISR。

    非常感谢您的帮助。

    为了我的好奇心和逻辑总结, 从你的脚本,如下所述,你是如何到达或结束这些地址,

    请您解释 一下您是如何得到下面的地址,  


    devmem2 0x2910100 w 0x3f >/dev/null  

    devmem2 0x29170c8 w 0x0 >/dev/null

    devmem2 0x0d800408 w 0x100 >/dev/null   

    谢谢

    Mahantsh

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

    尊敬的 Mahantsh:

    很高兴我能提供帮助!

    出于兴趣、这些 TDA4VL 的寄存器 位于与 TDA4VL 技术参考手册压缩的寄存器 Excel 工作表中。 相关寄存器位于 TRM 的"PCIe 内核下行中断"部分:

    此致、

    Takuma

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

    嗨、Takuma、我 A;ready 告诉您、通过这次中断、我能够触发下游中断。
    请您详细解释一下"  某些器件的 GIC 中断偏移量为32 "。这是必需的、因为我需要从逻辑上总结"

    谢谢

    Mahantsh

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

    尊敬的 Mahantsh:

    没问题。 对于 GICSS、保留前32个中断、因此中断 ID 从32开始、如下面 AM64的屏幕截图所示。 这可能会导致偏移32、具体取决于软件(是否考虑32个偏移)和不同的 SoC (中断 ID 号是从32还是0开始)。   

    此致、

    Takuma