← Documents Documentation/devicetree/bindings/dma/img-mdc-dma.txt GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings

IMG Multi-threaded DMA Controller

MDC channel bitmap, thread ID와 request mapping 바인딩입니다.

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

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

1. 요약·해설

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

요약과 해설

img-mdc-dma.txt:1-57

3-cell DMA specifier와 SPI TX/RX client를 설명합니다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 * IMG Multi-threaded DMA Controller (MDC)
2
3 Required properties:
4 - compatible: Must be "img,pistachio-mdc-dma".
5 - reg: Must contain the base address and length of the MDC registers.
6 - interrupts: Must contain all the per-channel DMA interrupts.
7 - clocks: Must contain an entry for each entry in clock-names.
8 See ../clock/clock-bindings.txt for details.
9 - clock-names: Must include the following entries:
10 - sys: MDC system interface clock.
11 - img,cr-periph: Must contain a phandle to the peripheral control syscon
12 node which contains the DMA request to channel mapping registers.
13 - img,max-burst-multiplier: Must be the maximum supported burst size multiplier.
14 The maximum burst size is this value multiplied by the hardware-reported bus
15 width.
16 - #dma-cells: Must be 3:
17 - The first cell is the peripheral's DMA request line.
18 - The second cell is a bitmap specifying to which channels the DMA request
19 line may be mapped (i.e. bit N set indicates channel N is usable).
20 - The third cell is the thread ID to be used by the channel.
21
22 Optional properties:
23 - dma-channels: Number of supported DMA channels, up to 32. If not specified
24 the number reported by the hardware is used.
25
26 Example:
27
28 mdc: dma-controller@18143000 {
29 compatible = "img,pistachio-mdc-dma";
30 reg = <0x18143000 0x1000>;
31 interrupts = <GIC_SHARED 27 IRQ_TYPE_LEVEL_HIGH>,
32 <GIC_SHARED 28 IRQ_TYPE_LEVEL_HIGH>,
33 <GIC_SHARED 29 IRQ_TYPE_LEVEL_HIGH>,
34 <GIC_SHARED 30 IRQ_TYPE_LEVEL_HIGH>,
35 <GIC_SHARED 31 IRQ_TYPE_LEVEL_HIGH>,
36 <GIC_SHARED 32 IRQ_TYPE_LEVEL_HIGH>,
37 <GIC_SHARED 33 IRQ_TYPE_LEVEL_HIGH>,
38 <GIC_SHARED 34 IRQ_TYPE_LEVEL_HIGH>,
39 <GIC_SHARED 35 IRQ_TYPE_LEVEL_HIGH>,
40 <GIC_SHARED 36 IRQ_TYPE_LEVEL_HIGH>,
41 <GIC_SHARED 37 IRQ_TYPE_LEVEL_HIGH>,
42 <GIC_SHARED 38 IRQ_TYPE_LEVEL_HIGH>;
43 clocks = <&system_clk>;
44 clock-names = "sys";
45
46 img,max-burst-multiplier = <16>;
47 img,cr-periph = <&cr_periph>;
48
49 #dma-cells = <3>;
50 };
51
52 spi@18100f00 {
53 ...
54 dmas = <&mdc 9 0xffffffff 0>, <&mdc 10 0xffffffff 0>;
55 dma-names = "tx", "rx";
56 ...
57 };
58

3. 한국어 전문 번역

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

IMG MDC 속성과 DMA specifier

1-25

IMG Multi-threaded DMA Controller(MDC) 바인딩입니다. 필수 `compatible`은 `img,pistachio-mdc-dma`, `reg`는 MDC register 영역, `interrupts`는 channel별 DMA interrupt 전체입니다.

`clocks`에는 `clock-names` 항목마다 clock을 넣고 `sys`는 MDC system interface clock입니다. 형식은 `../clock/clock-bindings.txt`를 따릅니다. `img,cr-periph`는 DMA request-to-channel mapping register를 가진 peripheral control syscon의 phandle입니다.

`img,max-burst-multiplier`는 최대 burst size multiplier이며 실제 최대 burst는 이 값과 hardware-reported bus width의 곱입니다. `#dma-cells = <3>`이며 첫 cell은 peripheral DMA request line, 두 번째는 사용 가능한 channel bitmap, 세 번째는 channel이 사용할 thread ID입니다.

선택 `dma-channels`는 지원 channel 수를 최대 32까지 지정합니다. 생략하면 hardware가 보고한 수를 사용합니다.

IMG MDC 3-cell DMA specifier
Cell의미
0Peripheral DMA request line
1Usable-channel bitmap
2Thread ID

Client `dmas` entry의 세 cell 의미를 정리합니다.

12-channel MDC 예제

26-51

예제 controller는 GIC shared interrupt 27부터 38까지 12개 channel interrupt와 `sys` clock을 사용합니다. Burst multiplier는 16이고 peripheral control syscon을 참조하며 `#dma-cells`는 3입니다.

mdc: dma-controller@18143000 {
        compatible = "img,pistachio-mdc-dma";
        reg = <0x18143000 0x1000>;
        interrupts = <GIC_SHARED 27 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SHARED 28 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SHARED 29 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SHARED 30 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SHARED 31 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SHARED 32 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SHARED 33 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SHARED 34 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SHARED 35 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SHARED 36 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SHARED 37 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SHARED 38 IRQ_TYPE_LEVEL_HIGH>;
        clocks = <&system_clk>;
        clock-names = "sys";

        img,max-burst-multiplier = <16>;
        img,cr-periph = <&cr_periph>;

        #dma-cells = <3>;
};

SPI TX/RX client 예제

52-57

SPI client는 request line 9와 10을 각각 TX/RX로 사용하고, channel bitmap `0xffffffff`와 thread ID 0을 전달합니다. 생략 표기 `...`도 원문 그대로 보존합니다.

spi@18100f00 {
        ...
        dmas = <&mdc 9 0xffffffff 0>, <&mdc 10 0xffffffff 0>;
        dma-names = "tx", "rx";
        ...
};