Linux 驱动开发 三十七:《gic.txt》翻译

文件目录:linux\\Documentation\devicetree\bindings\arm\gic.txt

一、ARM 通用中断控制器

ARM 内核通常与一个 GIC 相关联,为每个处理器提供 PPI(外设私有中断)、SPI(公用外设中断)和 SGI(软件触发中断)。

1、必须属性

  • compatible:必须是以下选项之一
	"arm,gic-400"
	"arm,cortex-a15-gic"
	"arm,cortex-a9-gic"
	"arm,cortex-a7-gic"
	"arm,arm11mp-gic"
	"brcm,brahma-b15-gic"
	"arm,arm1176jzf-devchip-gic"
	"qcom,msm-8660-qgic"
	"qcom,msm-qgic2"
  • interrupt-controller:将节点标识为中断控制器
  • #interrupt-cells:指定对中断源进行编码所需的单元格数。这个必须被设置为 3。
// 第一个单元用于说明中断类型
0:SPI 类型中断
1:PPI 类型中断

// 第二个单元用于说明中断号
SPI 类型中断号范围 [0-987]
PPI 类型中断号范围 [0-15]

// 第三个单元用于说明标志
// bit[3:0]用于标识触发类型
1:上升沿触发
2:下降沿触发
4:高电平触发
8:低电平触发
// bit[15:8]用于标识 PPI 中断掩码
  • reg:指定 GIC 寄存器的基本物理地址和大小。
第一个区域是 GIC 分发器寄存器基地址和大小
第二个区域是 GIC 的 CPU 接口寄存器基地址和大小

2、可选属性

  • interrupts:二级 GIC 父中断控制器的中断源,或主 GIC 上的 VGIC 维护中断。
  • cpu-offset:分发器和 CPU 接口区域内的每个 CPU 偏移,当 GIC 没有备份寄存器时使用。

3、示例

	intc: interrupt-controller@fff11000 {
		compatible = "arm,cortex-a9-gic";
		#interrupt-cells = <3>;
		#address-cells = <1>;
		interrupt-controller;
		reg = <0xfff11000 0x1000>,
		      <0xfff10100 0x100>;
	};

二、GIC 虚拟化扩展 (VGIC)

对于支持虚拟化扩展的 ARM 内核,必须描述额外的属性(仅当 GIC 是主中断控制器时才存在)。

1、必须属性

  • reg:指定 VGIC 寄存器的基本物理地址和大小的其他区域。
第一个附加区域为 GIC 虚拟接口控制器寄存器基地址和大小
第二个附加区域为 GIC 虚拟 CPU 接口寄存器基地址和大小
  • interruptsVGIC 维护中断。

2、示例

	interrupt-controller@2c001000 {
		compatible = "arm,cortex-a15-gic";
		#interrupt-cells = <3>;
		interrupt-controller;
		reg = <0x2c001000 0x1000>,
		      <0x2c002000 0x1000>,
		      <0x2c004000 0x2000>,
		      <0x2c006000 0x2000>;
		interrupts = <1 9 0xf04>;
	};

三、用于支持 MSI/MSI-x 的 GICv2m 扩展(可选)

GIC-400 的某些修订版通过 V2M 寄存器帧支持 MSI/MSI-x。这可以通过指定 v2m 子节点来启用。

1、必需属性

  • compatible:这里的值应包含 "arm,gic-v2m-frame"

  • msi-controller:将节点标识为 MSI 控制器。

  • regGICv2m MSI 接口寄存器基地址和大小

可选属性:

  • arm,msi-base-spi:当 MSI_TYPER 寄存器包含不正确的值时,此属性应包含 MSI 帧的 SPI 基数,并覆盖硬件值。
  • arm,msi-num-spis:当 MSI_TYPER 寄存器包含不正确的值时,此属性应包含分配给帧的 SPI 数,并覆盖硬件值。

2、示例

	interrupt-controller@e1101000 {
		compatible = "arm,gic-400";
		#interrupt-cells = <3>;
		#address-cells = <2>;
		#size-cells = <2>;
		interrupt-controller;
		interrupts = <1 8 0xf04>;
		ranges = <0 0 0 0xe1100000 0 0x100000>;
		reg = <0x0 0xe1110000 0 0x01000>,
		      <0x0 0xe112f000 0 0x02000>,
		      <0x0 0xe1140000 0 0x10000>,
		      <0x0 0xe1160000 0 0x10000>;
		v2m0: v2m@0x8000 {
			compatible = "arm,gic-v2m-frame";
			msi-controller;
			reg = <0x0 0x80000 0 0x1000>;
		};

		....

		v2mN: v2m@0x9000 {
			compatible = "arm,gic-v2m-frame";
			msi-controller;
			reg = <0x0 0x90000 0 0x1000>;
		};
	};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值