[device tree] interrupt mapping example
This is for Devicetree Specification Release 0.1
Interrupt Mapping Example p19
在講解前,先帶進一些 PCI 的基礎觀念
pci device 的 其中一種 type address 由下方組成
為什麼 硬體要連成這樣子呢? 因為要 loading balance
pci device 的 INTA 是較常使用到的,
INTB,INTC,INTD 是較少使用到,
假如每個 device 的 INTA 都發出中斷,這種接線方式會讓 每個中斷 都接到一根 IRQ。
Interrupt Mapping Example p19
有兩個 PCI slots (IDSEL 0x11, 0x12)
每個 slot 有 4 個 中斷 pin, INTA,INTB,INTC,INTD
並且連接到 Open PIC interrupt controller
IDSEL(Initialization Device Select)是指"it used as a chip select during configuration read and write transactions."
這部分會連接到PCI AD[31:11],是由硬體拉線所決定的。
soc {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
open-pic {
clock-frequency = <0>;
interrupt-controller; // interrupt controller node 需要填寫 interrupt-controller property
#address-cells = <0>;
#interrupt-cells = <2>;
};
pci {
#interrupt-cells = <1>;
#size-cells = <2>;
#address-cells = <3>;
interrupt-map-mask = <0xf800 0 0 7>;
interrupt-map = <
/* IDSEL 0x11 - PCI slot 1 */
0x8800 0 0 1 &open-pic 2 1 /* INTA */
0x8800 0 0 2 &open-pic 3 1 /* INTB */
0x8800 0 0 3 &open-pic 4 1 /* INTC */
0x8800 0 0 4 &open-pic 1 1 /* INTD */
/* IDSEL 0x12 - PCI slot 2 */
0x9000 0 0 1 &open-pic 3 1 /* INTA */
0x9000 0 0 2 &open-pic 4 1 /* INTB */
0x9000 0 0 3 &open-pic 1 1 /* INTC */
0x9000 0 0 4 &open-pic 2 1 /* INTD */
>;
};
};
interrupt-map table 裡的每一列,包含5個部分,
1.child unit address
2.child interrupt specifier
3.interrupt parent
4.parent unit address
5.parent interrupt specifier
child unit address 和 child interrupt specifier 會對應到 特定的 parent unit address 及 interrupt specifier 的 interrupt parent。
interrupt-map table 裡的第一列,
0x8800 0 0 1 &open-pic 2 1
1。child unit address 是 0x8800 0 0
為什麼是由3個 32-bit cells 組成 child unit address?
因為 pci controller 裡的 address-cells property 是3,
所以 PCI bus 是使用 3 個 address cells 來表達 PCI bus。
為什麼是 0x8800?
因為 IDSEL 其中一個是 0x11,這連接到PCI AD[31:11],所以整個 pci address 編碼為 0x8800(編碼方式最上面有提到).
2。child interrupt specifier 是 1
pci controller 的 interrupt-cells 是1,
所以只用一個cell 表達 child interrupt specifier,
而 1 是表達 INTA,(不是從0)
這是指 child interrupt domain,不是 parent interrupt domain。
3。interrupt parent 是 &open-pic
這會填入interrupt parent 的 phandle 的值,來代表 要將 中斷傳給誰(parent)。
4。沒有parent unit address。
因為 parent interrupt domain (open-pic)的 address-cells property 是 0。
5。parent interrupt specifier 是 2 1
parent 的 interrupt-cells 是 2,
所以是使用 2 個 cells 表達 parent interrupt secpfier
2代表 中斷要連到 parent 的 IRQ2。
1代表 level/sense encoding,還不知道這是什麼。
interrupt-map-mask
interrupt-map-mask = <0xf800 0 0 7>
在搜尋 interrupt map table之前,child unit address 及 child interrupt specifier 會先經過
interrupt-map-mask 做 & bit 運算後,得到一個結果,再到 interrupt map talbe 裡取出對應 parent unit address 及 parent interrupt specifier。
Ex:
一個 pci device IDSEL 0x12 (slot 2),function 0x3,發出 INTB 中斷,然後要去 interrupt map talbe 找出 parent open-pic 的 interrupt source number,也就是要找出對應的 parent 中斷 IRQ
pci device 的 address (IDSEL 0x12 (slot 2),function 0x3) 編碼為 0x9300(編碼方式最上面有提到),
因為 pci controller 的 address-cells 為3,所以最後編碼為 0x9300 0 0,
pci device 的 INTB 中斷,編碼為 2,
child unit address及child interrupt specifier整個是 < 0x9300 0 0 2 >。
而<0x9300 0 0 2> 要與 interrupt-map-mask <0xf800 0 0 7> 做 & bit 運算,
得到結果為 <0x9000 0 0 2>,
<0x9000 0 0 2>再往 interrupt map table搜尋 找出,
parent unit address 為空,為什麼為空,因為 parent (open-pic) 的 #address-cells = <0>
parent interrupt specifier 為 <4 1>,對應到 parent (open-pic) 的 IRQ4,1尚未知道其意義,
這樣就完成了 child interrupt domain 到 parent interrupt domain 的轉換
那為什麼要做 interrupt-map-mask 運算呢?
依稀記得網上有篇文章提到,做interrupt-map-mask 運算是要找出那一個 device 發出那一個中斷,所以只保留 bus 及 device bits及 INTx,其它bits 歸零。
reference
http://www.devicetree.org/specifications/
PCI Local Bus Specification Revision 2.2
PCI Read/Write
[device tree] interrupt mapping example的更多相关文章
- [device tree] interrupt
Specifying interrupt information for devices ============================================ 1) Interru ...
- Device Tree Usage( DTS文件语法)
http://elinux.org/Device_Tree_Usage Device Tree Usage Top Device Tree page This page walks throu ...
- Device Tree Usage(理解DTS文件语法)
Basic Data Format The device tree is a simple tree structure of nodes and properties. Properties are ...
- Device Tree Usage 【转】
转自:http://blog.chinaunix.net/uid-20522771-id-3457184.html 原文链接:http://devicetree.org/Device_Tree_Usa ...
- 學習 DT device tree 以 ST 的開發板 STM32F429i-disc1 為例
目標 因為對 device tree 不是很熟悉, 所以就將 device tree, 設為學習目標. 啟動 注意, 這篇隨筆的解說都放在最下面,會標 Explanation_XX,只要搜尋 Expl ...
- Device Tree(二):基本概念
转自:http://www.wowotech.net/linux_kenrel/dt_basic_concept.html 一.前言 一些背景知识(例如:为何要引入Device Tree,这个机制是用 ...
- Linux and the Device Tree
来之\kernel\Documentation\devicetree\usage-model.txt Linux and the Device Tree ----------------------- ...
- Device Tree(三):代码分析【转】
转自:http://www.wowotech.net/linux_kenrel/dt-code-analysis.html Device Tree(三):代码分析 作者:linuxer 发布于:201 ...
- ARM Linux 3.x的设备树(Device Tree)
http://blog.csdn.net/21cnbao/article/details/8457546 宋宝华 Barry Song <21cnbao@gmail.com> 1. ...
随机推荐
- 第45天:2017webstrom下载破解汉化
1.webstrom 11.0.3下载地址1:http://pan.baidu.com/s/1kVQjcwf 密码:uggr 下载地址2:http://pan.baidu.com/s/1kVQjcwf ...
- 第22天:js改变样式效果
一.输出语句 1.alert:弹出警示框(用的非常少,用户体验不好)完整写法:window.alert(“执行语句”):window对象,窗口,一般情况可省略alert(123); 2.console ...
- 能选择日期范围js控件
html页面中使用日期控件是常有的事,好控件能使用开发变的快捷,下面是在开发过程中发现的几款日期控件,比较不错,收藏 1.基于bootstrap的jQuery日期范围选择插件 2.jQuery多功能日 ...
- 【python】如何查看已经安装的python软件包和版本
pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品. pip freeze可以查看已经安装的python软件包和版本 pip list 也可以
- poj 1422 Air Raid (二分匹配)
Air Raid Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6520 Accepted: 3877 Descript ...
- 【题解】51nod1327 棋盘游戏
那天和机房的同学们一起想了很久,然而并没有做出来……今天看了题解,的确比较巧妙,不过细细想来其实规律还是比较明显,在这里记录一下~ 当天自己做的时候,主要想到的是两点 : 1.按列dp 2.对行进行排 ...
- 【刷题】BZOJ 3175 [Tjoi2013]攻击装置
Description 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照"日"字攻击其周围的 8个位置(x-1,y-2),(x-2,y-1), ...
- IDEA的使用总结篇-1
随笔:随着回首所在的公司的日益扩大,所在的技术中心也日渐兵强马壮,但由于各位新老同仁的开发工具一直未曾统一,所以小编的老大终于一声令下,统一开发工具!统一使用IDEA,而且每个人今天要交一份IDEA的 ...
- oracle-java7-installer安装java失败之后的处理
最开始尝试使用installer安装jdk7,但是未能进行完整,之后每次安装软件都会报错,说oracle-java7-installer处有错误,查得如下解决办法: sudo rm /var/lib/ ...
- BroadcastReceiver学习
一.使用系统广播.以监听电话状态为例 1.写一个类继承自BroadcastReceiver类 package com.diysoul.android.blacklist.receivers; impo ...