【问题标题】:Linux Device tree, node with multiple interrupt parentsLinux 设备树,具有多个中断父节点的节点
【发布时间】:2014-07-31 10:34:31
【问题描述】:

我正在使用 linux 内核设备树,乍一看似乎缺少具有多个中断父节点的节点的功能。我有一个控制自定义 ARM 嵌入式板的驱动程序,它从多个 GPIO 中断父级获取 GPIO 和引脚中断,并管理板载电池、电压低 irqs、reset_pending irq 等。

我发现一个来源似乎有人破解了额外的功能来处理这个问题,但这不是官方的,并且涉及修改我不想要的中断源文件。 修改增加了对这样一个称为“中断扩展”的术语的支持。这里的中断父级在元组中指定。

    #interrupt-cells = <2>;
    interrupts-extended = <&gpio3 21 1>, <&gpio7 13 2>; /* voltage/reset irq */

我还没有找到任何方法或示例来说明如何使用 interrupt-map 属性来实现简单的 gpio 中断映射,所以我在那里不知所措。

如果我只使用单个 GPIO 中断父级,那么正确的方法是这样的。

interrupt-parent = <&gpio1>;
interrupts = <9 2>, <8,1>;

但这仅允许声明 一个 中断父级,并在“中断”中指定多个中断,并且它们都必须属于指定的父级。我正在使用 2 个中断父级,gpio7 和 gpio3。

在设备树的单个设备节点中实现具有不同中断父级的多个中断的正确方法是什么?

【问题讨论】:

    标签: linux-kernel device-driver device-tree


    【解决方案1】:

    我不知道这是否适用于 gpio 中断父级,但对于其他类型的中断控制器,您可以使用“interrupt-map”属性,并使用 phandles 为每个单独的控制器指定中断列表。这是我看到的一个示例,其中驱动程序需要 3 个中断,2 个来自“intc”控制器,1 个来自“spmi”控制器:

    interrupts = <0 1 2>;
    interrupt-map = <0 &intc 0 134 0
                     1 &intc 0 140 0
                     2 &spmi 0 0x9 0 0>;
    interrupt-names = "core_irq", "async_irq", "pmic_id_irq";
    interrupt-map-mask = <0 0 0 0>;
    

    在本例中,intc 节点的 #interrupt-cells 值为 ,spmi 节点的 #interrupt-cells 值为 4(这意味着许多参数需要与它们各自的 phandles 一起使用)。

    interrupt-names 字段是可选的,但允许您在代码中按名称而不是按编号请求 irq(即,使用 platform_get_irq_byname(),而不是 platform_get_irq())

    老实说,我有点不确定中断映射掩码的用途。

    【讨论】:

    • 好的 - 做更多研究,看起来设备树中的中断映射功能已被您描述的中断扩展功能所取代。请参阅文件 Documentation/devicetree/bindings/interrupt-controller/interrupts.txt 以获取对此的一些描述。原始补丁于 2013 年 10 月提交 - 请参阅 lkml.org/lkml/2013/10/15/783
    • 感谢您的贡献,我遇到的问题是我的内核源代码 3.10.17 有一些较旧的中断绑定源,因此不支持“扩展”功能。我确实设法通过在树中(在我的驱动程序节点下)为每个包含 interupt-parent 关键字和中断列表的所需中断父节点创建一个子节点来解决这个问题,然后让我的驱动程序查找子节点并提取中断使用当前的设备树代码。不是很优雅,但足以绕过当前的限制。
    【解决方案2】:

    “中断扩展”属性是一种特殊形式;有用的时候 节点需要引用多个中断父节点或不同的 中断父母比继承的。此属性中的每个条目 包含父 phandle 和中断说明符。

    例子:

    interrupts-extended = <&intc1 5 1>, <&intc2 1 0>;
    

    https://www.kernel.org/doc/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多