设备树 记录

记录些设备树相关的规范。

1. 节点, 属性, 值

2. compatible,  匹配/兼容的驱动名称, OpenFirm框架会去寻找相应的驱动

3. 寄存器

amba_apu: amba_apu@0 {                                                                                       
	compatible = "simple-bus";                                                                               
	#address-cells = <2>;                                                                                   
	#size-cells = <1>;                                                                                       
	ranges = <0 0 0 0 0xffffffff>;                                                                          
																											
	gic: interrupt-controller@f9010000 {                                                                    
		compatible = "arm,gic-400", "arm,cortex-a15-gic";                                                   
		#interrupt-cells = <3>;                                                                             
		reg = <0x0 0xf9010000 0x10000>,                                                                     
				<0x0 0xf9020000 0x20000>,                                                                     
				<0x0 0xf9040000 0x20000>,                                                                     
				<0x0 0xf9060000 0x20000>;                                                                     
		interrupt-controller;                                                                               
		interrupt-parent = <&gic>;                                                                          
		interrupts = <1 9 0xf04>;                                                                           
	};                                                                                                      
}; 

address-cells: 地址单元,  = 2, 代表reg属性中2个32位数代表一个地址

size-cells: 长度单元, =1, 代表reg属性中1个32位数代表一个长度

4. 中断

还以上述为例,

interrupt-controller,  空键值的属性。代表该节点是一个中断控制器。 是的, gic是一个中断控制器。(包括gpio等, 都可抽象为中断控制器)

interrupt-parent: 由于中断数目众多, 现在多采用树状结构,  即最终到arm core的 irq num 是由各个/各层中断控制器汇总而来。

interrupts:  具体的中断信息, 其中数值代表的含义 跟 其中的interrupt-cells 属性有关。 上述例子中 interrupt-cells = 3,  代表中断由三个数据域组成。 <1(中断域), 9(中断号), 0xf04(触发条件)>

参考/Documentation/devicetree/bindings/interrupt-controller/arm,gic.txt

  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).

故上述 <1 9 0xf04> 含义为:

1号中断域

9号中断号

PPI中断, 绑定cpu0,1,2,3,  高电平有效


此处记录下ARM架构中断相关。

arm cpu核心有7种异常模式(armv8 多了2种,  hypervisor和monitor模式)

跟中断相关的是其中两种,  irq和fiq, 对应两根pin。

 

故外部必然有中断控制器进行拓展并管理。

从中断控制器角度 看 外部来的中断, 常用的可分为3种,

- SGI, Software-Generated Interrupt, 软件中断(不等同于swi), 软件可以通过中断控制器的GICD_SGIR寄存器来触发一个中断事件,  即会触发irq中断。 此类中断可用于多核的核间通信。例如 cpu0 写GICD_SGIR寄存器 触发cpu1 irq。SGI统一编号0~15。

- PPI, Private Peripheral Interrupt, 私有的外设中断, 该PPI只能分配给特定的处理器。统一编号16-31。每个cpu的local timmer即arch timmer产生的中断就是通过PPI发给cpu的。

- SPI, Shared Peripheral Interrupt, 共享的外设中断, 即各个cpu核心都可以收到该中断。 统一编号32~1019。 常见的global timmer, uart, gpio, usb等等外设控制器都通过该中断通知cpu核心。

其他还有虚拟中断和Maintenace interrupt, 暂不讨论。


贴张常见的图

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值