← Documents Documentation/devicetree/bindings/dma/ti-dma-crossbar.txt GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings

TI DMA Crossbar

DRA7/AM335x DMA event routing과 reserved request range 바인딩입니다.

Source pathDocumentation/devicetree/bindings/dma/ti-dma-crossbar.txt
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약과 해설

ti-dma-crossbar.txt:1-68

Crossbar specifier, sDMA master와 UART client 예제를 설명합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 Texas Instruments DMA Crossbar (DMA request router)
2
3 Required properties:
4 - compatible: "ti,dra7-dma-crossbar" for DRA7xx DMA crossbar
5 "ti,am335x-edma-crossbar" for AM335x and AM437x
6 - reg: Memory map for accessing module
7 - #dma-cells: Should be set to match with the DMA controller's dma-cells
8 for ti,dra7-dma-crossbar and <3> for ti,am335x-edma-crossbar.
9 - dma-requests: Number of DMA requests the crossbar can receive
10 - dma-masters: phandle pointing to the DMA controller
11
12 The DMA controller node need to have the following poroperties:
13 - dma-requests: Number of DMA requests the controller can handle
14
15 Optional properties:
16 - ti,dma-safe-map: Safe routing value for unused request lines
17 - ti,reserved-dma-request-ranges: DMA request ranges which should not be used
18 when mapping xbar input to DMA request, they are either
19 allocated to be used by for example the DSP or they are used as
20 memcpy channels in eDMA.
21
22 Notes:
23 When requesting channel via ti,dra7-dma-crossbar, the DMA client must request
24 the DMA event number as crossbar ID (input to the DMA crossbar).
25
26 For ti,am335x-edma-crossbar: the meaning of parameters of dmas for clients:
27 dmas = <&edma_xbar 12 0 1>; where <12> is the DMA request number, <0> is the TC
28 the event should be assigned and <1> is the mux selection for in the crossbar.
29 When mux 0 is used the DMA channel can be requested directly from edma node.
30
31 Example:
32
33 /* DMA controller */
34 sdma: dma-controller@4a056000 {
35 compatible = "ti,omap4430-sdma";
36 reg = <0x4a056000 0x1000>;
37 interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
38 <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
39 <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
40 <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
41 #dma-cells = <1>;
42 dma-channels = <32>;
43 dma-requests = <127>;
44 };
45
46 /* DMA crossbar */
47 sdma_xbar: dma-router@4a002b78 {
48 compatible = "ti,dra7-dma-crossbar";
49 reg = <0x4a002b78 0xfc>;
50 #dma-cells = <1>;
51 dma-requests = <205>;
52 ti,dma-safe-map = <0>;
53 /* Protect the sDMA request ranges: 10-14 and 100-126 */
54 ti,reserved-dma-request-ranges = <10 5>, <100 27>;
55 dma-masters = <&sdma>;
56 };
57
58 /* DMA client */
59 uart1: serial@4806a000 {
60 compatible = "ti,omap4-uart";
61 reg = <0x4806a000 0x100>;
62 interrupts-extended = <&gic GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
63 ti,hwmods = "uart1";
64 clock-frequency = <48000000>;
65 /* Requesting crossbar input 49 and 50 */
66 dmas = <&sdma_xbar 49>, <&sdma_xbar 50>;
67 dma-names = "tx", "rx";
68 };
69

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

TI DMA crossbar 속성과 요청 규칙

1-30

Texas Instruments DMA Crossbar는 DMA request router입니다. `compatible`은 DRA7xx용 `ti,dra7-dma-crossbar` 또는 AM335x/AM437x용 `ti,am335x-edma-crossbar`입니다. `reg`는 module memory map입니다.

`#dma-cells`는 DRA7 crossbar에서는 연결 DMA controller의 cell 수와 같고 AM335x eDMA crossbar에서는 3입니다. `dma-requests`는 crossbar가 받을 수 있는 request 수, `dma-masters`는 DMA controller phandle입니다. DMA controller node에도 처리 가능한 request 수를 나타내는 `dma-requests`가 필요합니다.

선택 `ti,dma-safe-map`은 사용하지 않는 request line의 안전한 routing 값입니다. `ti,reserved-dma-request-ranges`는 DSP에 할당되었거나 eDMA memcpy channel로 쓰여 crossbar mapping에서 제외할 request range입니다.

DRA7 crossbar client는 DMA event 번호를 crossbar input ID로 요청합니다. AM335x의 `dmas = <&edma_xbar 12 0 1>`에서 12는 DMA request, 0은 event가 배정될 transfer controller(TC), 1은 crossbar mux 선택입니다. Mux 0이면 eDMA node에서 DMA channel을 직접 요청할 수 있습니다.

TI DMA crossbar routing
DMA client eventCrossbar input ID
Reserved-range filterDSP/memcpy exclusions
DMA crossbarMux selection
DMA masterController request line

Client event가 crossbar input에서 안전/예약 범위를 피해 DMA master request로 routing됩니다.

AM335x eDMA crossbar specifier
Cell예제 값의미
012DMA request number
10Transfer controller
21Crossbar mux selection

`<&edma_xbar 12 0 1>`의 세 cell을 해석합니다.

sDMA와 crossbar 예제

31-57

예제 sDMA controller는 interrupt 7~10, 32 channel, 127 request와 단일-cell specifier를 사용합니다. DRA7 crossbar는 205 request를 받아 sDMA로 전달하고 safe map 0을 사용합니다.

Reserved range `<10 5>`는 request 10~14, `<100 27>`은 100~126을 보호합니다.

/* DMA controller */
sdma: dma-controller@4a056000 {
        compatible = "ti,omap4430-sdma";
        reg = <0x4a056000 0x1000>;
        interrupts =        <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>,
                        <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
                        <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
                        <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
        #dma-cells = <1>;
        dma-channels = <32>;
        dma-requests = <127>;
};

/* DMA crossbar */
sdma_xbar: dma-router@4a002b78 {
        compatible = "ti,dra7-dma-crossbar";
        reg = <0x4a002b78 0xfc>;
        #dma-cells = <1>;
        dma-requests = <205>;
        ti,dma-safe-map = <0>;
        /* Protect the sDMA request ranges: 10-14 and 100-126 */
        ti,reserved-dma-request-ranges = <10 5>, <100 27>;
        dma-masters = <&sdma>;
};

UART crossbar client 예제

58-68

UART1 client는 crossbar input 49와 50을 각각 TX와 RX DMA로 요청합니다. Register, GIC interrupt 67, hwmod와 48 MHz clock도 함께 선언합니다.

uart1: serial@4806a000 {
        compatible = "ti,omap4-uart";
        reg = <0x4806a000 0x100>;
        interrupts-extended = <&gic GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
        ti,hwmods = "uart1";
        clock-frequency = <48000000>;
        /* Requesting crossbar input 49 and 50 */
        dmas = <&sdma_xbar 49>, <&sdma_xbar 50>;
        dma-names = "tx", "rx";
};