Introduction to Device Trees - 7

Introduction to Device Trees - 7

#embedded #linux #pdf

원본은 NXP 사이트에서 바로 받을 수 있다.

Introduction to Device Trees - 1

Introduction to Device Trees - 2

Introduction to Device Trees - 3

Introduction to Device Trees - 4

Introduction to Device Trees - 5

Introduction to Device Trees - 6

11.2.2 ls1021a.dtsi

다음 섹션에서는 LS1021A SoC 하드웨어를 설명하고, 타워 보드 장치 트리에 포함된 ls1021a.dtsi 파일의 정보를 사용합니다. 이 파일에는 두 개의 추가 파일이 포함되어 있으며, 이 파일에는 주석이 없습니다.

DTS file Comments
#include “skeleton64.dtsi”  
#include <dt-bindings/interrupt-controller/arm-gic.h> Interrupt controller 정의
/ {  
compatible = “fsl,ls1021a”;  
interrupt-parent = <&gic>; Interrupt controller - phandle GIC(arm-gic.h)
#address-cells = <2>;  
#size-cells = <2>;  
aliases { aliases node
serial0 = &lpuart0;  
serial1 = &lpuart1;  
serial2 = &lpuart2;  
serial3 = &lpuart3;  
serial4 = &lpuart4;  
serial5 = &lpuart5;  
ethernet0 = &enet0;  
ethernet1 = &enet1;  
ethernet2 = &enet2;  
sysclk = &sysclk;  
gpio0 = &gpio1;  
gpio1 = &gpio2;  
gpio2 = &gpio3;  
gpio3 = &gpio4;  
crypto = &crypto;  
};  
memory@80000000 { memory address = 0x8000_0000
device_type = “memory”;  
reg = <0x0 0x80000000 0x0 0x20000000>; address = 0x8000_0000, size = 0x2000_0000
};  
cpus {  
#address-cells = <1>;  
#size-cells = <0>;  
cpu@f00 { ARM, Cortex®-A7, address = 0xf00
compatible = “arm,cortex-a7”;  
device_type = “cpu”;  
reg = <0xf00>; reg 속성은 CPU ID 정의. CPU 노드의 주소와 동일해야 함.
clocks = <&cluster1_clk>;  
};  
cpu@f01 { ARM, Cortex®-A7, address = 0xf01
compatible = “arm,cortex-a7”;  
device_type = “cpu”;  
reg = <0xf01>;  
clocks = <&cluster1_clk>;  
};  
};  
soc { SoC를 정의하는 상위 레벨 노드
compatible = “simple-bus”; 특정 드라이버가 없는 메모리 매핑. 자식 노드는 플랫폼 장치로 등록됩니다.
#address-cells = <2>;  
#size-cells = <2>;  
device_type = “soc”;  
interrupt-parent = <&gic>; interrput를 phandle GIC 전달되도록 설정
ranges; ranges 속성은 아이디 매핑이 사용됨을 나타냅니다.
gic: interrupt-controller@1400000 { phandle GIC, interrupt-controller address = 0x140_0000
compatible = “arm,cortex-a15-gic”;  
#interrupt-cells = <3>; interrupt 지정하는데 필요한 cell의 개수
interrupt-controller; interrupt-controller 노드로써 정의
reg = <0x0 0x1401000 0x0 0x1000>, location 0x140_1000, size 0x1000
<0x0 0x1402000 0x0 0x1000>, location 0x1402000, size 0x1000
<0x0 0x1404000 0x0 0x2000>, location 0x1404000, size 0x2000
<0x0 0x1406000 0x0 0x2000>; location0x1406000, size 0x2000
interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_HIGH)>; GIC interrupt 정의
};  
ifc: ifc@1530000 { IFC 노드, address = 0x1530000
compatible = “fsl,ifc”, “simple-bus”; “fsl,ifc” driver
reg = <0x0 0x1530000 0x0 0x10000>; location 0x1530000, size 0x10000
interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>; IFC interrupt 정의
};  
qspi: quadspi@1550000 { QSPI노드, address = 0x1550000
compatible = “fsl,ls1-qspi”;  
#address-cells = <1>; 자식노드에 대한 …
#size-cells = <0>;  
reg = <0x0 0x1550000 0x0 0x10000>, 0x155_0000, size 0x10000
<0x0 0x40000000 0x0 0x4000000>; 0x4000_0000 size 0x4000_0000
reg-names = “QuadSPI”, “QuadSPI-memory”; 첫번째 영역 이름 QuadSPI, 두번째 영역 QuadSPI-memory
interrupts = <GIC_SPI 131 IRQ_TYPE_LEVEL_HIGH>; QSPI interrupt
clock-names = “qspi_en”, “qspi”; QSPI clock name
clocks = <&platform_clk 1>, <&platform_clk 1>; QSPI에 해당하는 clock
big-endian; 주변 장치가 big-endian
amba-base = <0x40000000>; AMBA® base address = 0x4000_0000
status = “disabled”; DISABLE
};  
i2c0: i2c@2180000 { i2c 노드 address = 0x218_0000
compatible = “fsl,vf610-i2c”;  
#address-cells = <1>;  
#size-cells = <0>;  
reg = <0x0 0x2180000 0x0 0x10000>; 0x2180000, size 0x10000
interrupts = <GIC_SPI 88 IRQ_TYPE_LEVEL_HIGH>; interrupt for I2C0
clock-names = “i2c”; label
clocks = <&platform_clk 1>; Clocks = phandle platform_clk
status = “disabled”; 장치가 현재 작동하지 않지만 나중에 작동 할 수 있음을 나타냅니다.
};