code style

2017年7月14日 星期五

Device Tree(2)Properties

Property Names:
由1~31個字元組成,內容為下述:
Character Description 0-9
digit a-z lowercase letter
,(comma ). (period) _ (underscore) +( plus sign) - (dash) ? (question mark) #(hash)

需要一個唯一的prefix,來辨別property的名稱或組織,例如:
fsl,channel-fifo-len
ibm,ppc-interrupt-server#s
linux,network-index

Property Values:
有下面幾種類型,記憶體排方式應該是看CPU 架構為主,little-endian或big-endian:
empty => 如果是true-false的話,可以為空。
u32 => 32bit 整數
u64 => 64bit 整數
string=> 字串
prop-encoded-array=>描述property用
phandle => 一個u32 value,可以用來給別的node拿來參考用,類似指標,指向另一個node。
stringlist => 連續的字串

Standard Properties:
device tree是使用 Device Tree Source(DTS)格式來描述nodes和properties。下面列出一些標準的properties。


Property:compatible
Value type:<stringlist>
用來描述driver model,OS會照stringlist順序去找尋driver model,建議格式為 "manufacturer,model"。
例:
compatible = “fsl,mpc8641-uart”, “ns16550";

在這例子中有兩個string,OS會先去找“fsl,mpc8641-uart”, 如果找不到就會改去找 general ns16650 device type。

Property:model
Value type:<string>
driver名稱及model number。
例:
model = “fsl,MPC8349EMITX”;

Property:phandle
Value type:<u32>
一個在device tree中的唯一值,給其他的node參考用。
例:
pic@10000000 {
    phandle = <1>;
    interrupt-controller; 20
};
定義pandle=1,其他的node可用1這個值來使用pic@10000000。
例:
interrupt-parent = <1>;

Property:status
Value type:<string>
顯示driver的操作,有4種。
okay=>表示可操作
disabled=>表示目前為關閉,不可操作
fail=>表示目前為錯誤,需要修復,不可操作
fail-sss=>表示目前為錯誤,需要修復,不可操作。sss用來指示錯誤原因。

Property:#address-cells and #size-cells
Value type:<u32>
表示在child node's 的reg裡的address and size。如果沒有寫,default為2 and 1。
#size-cells是可以為0的,那reg裡面的size就會被省略。
例:
裡面表示soc的child serial node裡的reg有一個address (0x4600)和一個size(0x100)。

Property:reg
Value type:<prop-encoded-array>, 表示方式為(address, length)
register,主要是指memory-mapped IO register的offsets and lengths。
例:
#address-cells為1 and #size-cells為1
reg = <0x3000 0x20 0xFE00 0x100>;
代表在0x3000有一個32byte的block和0xFE00有一個256 byte block

Property:ranges
Value type:<empty> or <prop-encoded-array>, 表示方式為(child-bus-address, parent-bus-address, length)
表示 register定址的範圍
例:
定址範圍有0x00100000, 1024KB,child 定址在0x0, mapping 到parent 0xe0000000。
在此例中,serial的offset 為04600,而mapping後的位置為0xe0004600

Property:device_type
Value type:<string>
原本在IEEE1275中用來描述FCode,因為ePAPR沒有FCode,為了相容性,只用在cpu and memory上。
例:
 memory {
   device_type = "memory";
   reg = <0x00000000 0x100000000>; /* 4 GB */
 };








沒有留言:

張貼留言