linux - #interrupt-cells 是 2 但中断是 3 元组
问题描述
我正在查看 Beagle Bone Black 的设备树,并从am57xx-beagle-x15.dts
. 深入dra7.dtsi
研究我发现gpio1
:
gpio1: gpio@4ae10000 {
compatible = "ti,omap4-gpio";
reg = <0x4ae10000 0x200>;
interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
ti,hwmods = "gpio1";
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupt-cells = <2>;
};
我读过它#interrupt-cells
给出了列表中一个项目中预期的 u32 或单元格的数量interrupts
。但是当我查看时,interrupts
我看到了一个 3-tuple: <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>
。很想知道,为什么它包含 3 个细胞而不是 2 个?
解决方案
这是一个很晚的答案,但添加一个以便有人可以获得帮助。
我无法从我当前的 linux 5.15 源代码中找到确切的 dts 文件。但是节点的中断父节点应该需要 3 个单元格作为中断属性。对于 gic,通常它需要 3 个值 - {中断类型、中断号、标志}。它在gic的设备绑定文档中(Documentation/devicetree/bindings/interrupt-controller/arm,gic.yaml in linux 5.15)
"#interrupt-cells":
const: 3
description: |
The 1st cell is the interrupt type; 0 for SPI interrupts, 1 for PPI
interrupts.
The 2nd cell contains the interrupt number for the interrupt type.
SPI interrupts are in the range [0-987]. PPI interrupts are in the
range [0-15].
The 3rd cell is the flags, encoded as follows:
bits[3:0] trigger type and level flags.
1 = low-to-high edge triggered
2 = high-to-low edge triggered (invalid for SPIs)
4 = active high level-sensitive
8 = active low level-sensitive (invalid for SPIs).
bits[15:8] PPI interrupt cpu mask. Each bit corresponds to each of
the 8 possible cpus attached to the GIC. A bit set to '1' indicated
the interrupt is wired to that CPU. Only valid for PPI interrupts.
Also note that the configurability of PPI interrupts is IMPLEMENTATION
DEFINED and as such not guaranteed to be present (most SoC available
in 2014 seem to ignore the setting of this flag and use the hardware
default value).
推荐阅读
- laravel - 如何使用 Laravel 迁移转换外键中的现有列
- security - 是否有一种聪明的方法可以让程序更改 IPTable 而无需为其提供 cap_net_admin 功能?
- regex - 如何进行跨越几个特定项目的 gerrit 查询?
- fullcalendar - ngFullCalendar 获取 dayagenda 中的所有空时隙
- apache - 如何通过带有 SSL 的 Apache 2 公开 nginx docker 容器?
- wordpress - WordPress:更改发布日期
- spring-boot - 春季启动休息API HttpMediaTypeNotSupportedException
- javascript - 保持水平滚动位置页面到页面
- angular - 尝试区分“[object Object]”的 Angular 6 错误。只允许使用数组和可迭代对象
- angular - 在页面加载Angular4上打开一个模式