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.

[参考译文] AM6442:PRU-ICSSG 至 A53中断示例

Guru**** 2481465 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1448426/am6442-example-on-pru-icssg-to-a53-interrupts

器件型号:AM6442

工具与软件:

大家好!

PRU-ICSSG 可以向 A53发出中断吗?
执行此操作是否有某种示例、包括传入中断的内核端映射?

非常感谢 Advantage。

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

    尊敬的 

    感谢您的提问。

    您能否提供有关用例的更多信息? RTOS 或 Linux?

    此致

    Ashwani

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

    Ashwani 您好!

    我使用的是来自 SDK v10.00.07.04的 Linux。

    我期望 remoteproc 会启动被配置为引发中断 (例如 pr0_pru_mst_intr[0]_intr_req)的 PRU 应用和一个用于处理传入中断的自定义内核驱动程序。 对吗?

    我已经看了 SDK 中的 RPMsg 示例、我了解 PRU 如何生成中断、但我仍然不 了解 A53内核如何识别和处理中断。  器件树应如何映射中断? 是否 要使用 GICSS0_SPI_IN_120/PRU_ICSSG0_PR1_HOST_INTR_pend_0中断? 内核驱动程序如何注册该中断?

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

    尊敬的 

    感谢您提供信息。

    我将把您的问题转发给 Linux-IPC 专家。

    此致

    Ashwani

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

    您好!
    有相关新闻吗?

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

    位于 TI 达拉斯的 TI e2e IPC Linux 专家将在假期到1/2。 他也精通 PRU 相互作用。

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

    您好、Federico、

    是的、你在 Linux 器件树中配置中断。

    首先、设置 PRU 客户端驱动程序中断的文档在哪里?  

    请参阅 PRU 软件支持包(PSSP)示例中 intc_map_0.h 文件中的我的注释。 它们提供了有关您应该从 Linux 方面执行哪些操作的指导:
    https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/examples/am64x/PRU_RPMsg_Echo_Interrupt 0/ intc_map_0.h 

    好的、那么我可以在哪里复制示例呢?

    RPMsg 示例的配置被隐藏了一个位。 通常、我建议客户在顶级的电路板配置.dts 文件中进行更改(这样可以保证您的代码不会被包括您所更改的文件在内的任何其他.dts 文件覆盖)。 但是、对于 RPMsg 示例、我们直接在 PRU 内核定义中配置了 PRU 中断:

    ti-linux-kernel-6.6.6.32+git-ti/arch/arm64/boot/dts/ti/k3-am64-main.dtsi

            icssg0: icssg@30000000 {
                    compatible = "ti,am642-icssg";
                    reg = <0x00 0x30000000 0x00 0x80000>;
    ...
    // all PRU interrupts going to Linux are defined here
                    icssg0_intc: interrupt-controller@20000 {
                            compatible = "ti,icssg-intc";
                            reg = <0x20000 0x2000>;
                            interrupt-controller;
                            #interrupt-cells = <3>;
                            interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>,
                                         <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>,
                                         <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>,
                                         <GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>,
                                         <GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>,
                                         <GIC_SPI 93 IRQ_TYPE_LEVEL_HIGH>,
                                         <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>,
                                         <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
                            interrupt-names = "host_intr0", "host_intr1",
                                              "host_intr2", "host_intr3",
                                              "host_intr4", "host_intr5",
                                              "host_intr6", "host_intr7";
                    };
    ...                
    // now we configure the interrupt mapping as documented in the intc map file.
                    pru0_0: pru@34000 {
    ...
                            interrupt-parent = <&icssg0_intc>;
                            interrupts = <16 2 2>;
                            interrupt-names = "vring";
                    };
    
                    rtu0_0: rtu@4000 {
    ...
                            interrupt-parent = <&icssg0_intc>;
                            interrupts = <20 4 4>;
                            interrupt-names = "vring";
                    };
    

    此致、

    Nick