← Documents Documentation/devicetree/bindings/clock/zynq-7000.txt GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings

Zynq 7000 clock controller

PS clock tree, optional MIO/EMIO inputs와 48개 indexed output 바인딩입니다.

Source pathDocumentation/devicetree/bindings/clock/zynq-7000.txt
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

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

1. 요약·해설

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

요약과 해설

zynq-7000.txt:1-110

SLCR clock controller input, FCLK enable와 output index 전체를 설명합니다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 Device Tree Clock bindings for the Zynq 7000 EPP
2
3 The Zynq EPP has several different clk providers, each with there own bindings.
4 The purpose of this document is to document their usage.
5
6 See clock_bindings.txt for more information on the generic clock bindings.
7 See Chapter 25 of Zynq TRM for more information about Zynq clocks.
8
9 == Clock Controller ==
10 The clock controller is a logical abstraction of Zynq's clock tree. It reads
11 required input clock frequencies from the devicetree and acts as clock provider
12 for all clock consumers of PS clocks.
13
14 Required properties:
15 - #clock-cells : Must be 1
16 - compatible : "xlnx,ps7-clkc"
17 - reg : SLCR offset and size taken via syscon < 0x100 0x100 >
18 - ps-clk-frequency : Frequency of the oscillator providing ps_clk in HZ
19 (usually 33 MHz oscillators are used for Zynq platforms)
20 - clock-output-names : List of strings used to name the clock outputs. Shall be
21 a list of the outputs given below.
22
23 Optional properties:
24 - clocks : as described in the clock bindings
25 - clock-names : as described in the clock bindings
26 - fclk-enable : Bit mask to enable FCLKs statically at boot time.
27 Bit [0..3] correspond to FCLK0..FCLK3. The corresponding
28 FCLK will only be enabled if it is actually running at
29 boot time.
30
31 Clock inputs:
32 The following strings are optional parameters to the 'clock-names' property in
33 order to provide an optional (E)MIO clock source.
34 - swdt_ext_clk
35 - gem0_emio_clk
36 - gem1_emio_clk
37 - mio_clk_XX # with XX = 00..53
38 ...
39
40 Clock outputs:
41 0: armpll
42 1: ddrpll
43 2: iopll
44 3: cpu_6or4x
45 4: cpu_3or2x
46 5: cpu_2x
47 6: cpu_1x
48 7: ddr2x
49 8: ddr3x
50 9: dci
51 10: lqspi
52 11: smc
53 12: pcap
54 13: gem0
55 14: gem1
56 15: fclk0
57 16: fclk1
58 17: fclk2
59 18: fclk3
60 19: can0
61 20: can1
62 21: sdio0
63 22: sdio1
64 23: uart0
65 24: uart1
66 25: spi0
67 26: spi1
68 27: dma
69 28: usb0_aper
70 29: usb1_aper
71 30: gem0_aper
72 31: gem1_aper
73 32: sdio0_aper
74 33: sdio1_aper
75 34: spi0_aper
76 35: spi1_aper
77 36: can0_aper
78 37: can1_aper
79 38: i2c0_aper
80 39: i2c1_aper
81 40: uart0_aper
82 41: uart1_aper
83 42: gpio_aper
84 43: lqspi_aper
85 44: smc_aper
86 45: swdt
87 46: dbg_trc
88 47: dbg_apb
89
90 Example:
91 clkc: clkc@100 {
92 #clock-cells = <1>;
93 compatible = "xlnx,ps7-clkc";
94 ps-clk-frequency = <33333333>;
95 reg = <0x100 0x100>;
96 clock-output-names = "armpll", "ddrpll", "iopll", "cpu_6or4x",
97 "cpu_3or2x", "cpu_2x", "cpu_1x", "ddr2x", "ddr3x",
98 "dci", "lqspi", "smc", "pcap", "gem0", "gem1",
99 "fclk0", "fclk1", "fclk2", "fclk3", "can0", "can1",
100 "sdio0", "sdio1", "uart0", "uart1", "spi0", "spi1",
101 "dma", "usb0_aper", "usb1_aper", "gem0_aper",
102 "gem1_aper", "sdio0_aper", "sdio1_aper",
103 "spi0_aper", "spi1_aper", "can0_aper", "can1_aper",
104 "i2c0_aper", "i2c1_aper", "uart0_aper", "uart1_aper",
105 "gpio_aper", "lqspi_aper", "smc_aper", "swdt",
106 "dbg_trc", "dbg_apb";
107 # optional props
108 clocks = <&clkc 16>, <&clk_foo>;
109 clock-names = "gem1_emio_clk", "can_mio_clk_23";
110 };
111

3. 한국어 전문 번역

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

Zynq 7000 clock controller

1-30

Zynq 7000 EPP의 여러 clock provider 사용법을 설명하는 바인딩입니다. Clock controller는 Zynq clock tree의 logical abstraction이며 devicetree에서 필요한 input frequency를 읽고 모든 processing-system(PS) clock consumer에 clock을 제공합니다.

필수 `#clock-cells`는 1, `compatible`은 `xlnx,ps7-clkc`입니다. `reg`는 syscon을 통해 가져오는 SLCR offset/size `<0x100 0x100>`, `ps-clk-frequency`는 ps_clk oscillator frequency(Hz), `clock-output-names`는 아래 output 전체의 이름 목록입니다.

선택적으로 `clocks`와 `clock-names`를 사용합니다. `fclk-enable` bitmask의 bit 0..3은 FCLK0..FCLK3을 boot 시 정적으로 enable하지만, 해당 FCLK가 boot 시 실제로 동작 중인 경우에만 enable됩니다.

Zynq PS clock tree
ps_clk + optional MIO/EMIOClock inputs
xlnx,ps7-clkcSLCR clock controller
ARM / DDR / IO PLLRoot clock generation
CPU / DDR / FCLK / peripheral clocks48 indexed outputs

PS oscillator와 optional MIO/EMIO sources가 controller의 PLL, fabric 및 peripheral outputs로 분배됩니다.

Optional MIO 및 EMIO inputs

31-39

Optional (E)MIO source를 제공하려면 `clock-names`에 `swdt_ext_clk`, `gem0_emio_clk`, `gem1_emio_clk`, 또는 XX가 00..53인 `mio_clk_XX` 문자열을 사용합니다.

Zynq output index 0..47

40-89

Clock output index는 0부터 47까지입니다. 0..2는 ARM/DDR/IO PLL, 3..9는 CPU/DDR/DCI, 10..27은 QSPI/SMC/PCAP/GEM/FCLK/CAN/SDIO/UART/SPI/DMA, 28..44는 peripheral APER clock, 45..47은 watchdog와 debug clock입니다.

0:  armpll
1:  ddrpll
2:  iopll
3:  cpu_6or4x
4:  cpu_3or2x
5:  cpu_2x
6:  cpu_1x
7:  ddr2x
8:  ddr3x
9:  dci
10: lqspi
11: smc
12: pcap
13: gem0
14: gem1
15: fclk0
16: fclk1
17: fclk2
18: fclk3
19: can0
20: can1
21: sdio0
22: sdio1
23: uart0
24: uart1
25: spi0
26: spi1
27: dma
28: usb0_aper
29: usb1_aper
30: gem0_aper
31: gem1_aper
32: sdio0_aper
33: sdio1_aper
34: spi0_aper
35: spi1_aper
36: can0_aper
37: can1_aper
38: i2c0_aper
39: i2c1_aper
40: uart0_aper
41: uart1_aper
42: gpio_aper
43: lqspi_aper
44: smc_aper
45: swdt
46: dbg_trc
47: dbg_apb
Zynq clock output groups
IndexGroupExamples
0-2PLLsarmpll, ddrpll, iopll
3-9CPU / DDRcpu_6or4x, ddr3x, dci
10-27Functional clockslqspi, FCLK0..3, CAN, SDIO, UART, SPI, DMA
28-44APER clocksUSB/GEM/SDIO/SPI/CAN/I2C/UART/GPIO/LQSPI/SMC
45-47Watchdog / debugswdt, dbg_trc, dbg_apb

정확한 개별 index는 보존된 원문 표를 따릅니다.

48-output controller 예제

90-110

예제는 33.333333 MHz PS oscillator와 48개 `clock-output-names`를 index 순서대로 제공합니다. Optional source 예에서는 controller output 16과 외부 `clk_foo`를 `gem1_emio_clk`, `can_mio_clk_23` 이름으로 연결합니다.

clkc: clkc@100 {
        #clock-cells = <1>;
        compatible = "xlnx,ps7-clkc";
        ps-clk-frequency = <33333333>;
        reg = <0x100 0x100>;
        clock-output-names = "armpll", "ddrpll", "iopll", "cpu_6or4x",
                        "cpu_3or2x", "cpu_2x", "cpu_1x", "ddr2x", "ddr3x",
                        "dci", "lqspi", "smc", "pcap", "gem0", "gem1",
                        "fclk0", "fclk1", "fclk2", "fclk3", "can0", "can1",
                        "sdio0", "sdio1", "uart0", "uart1", "spi0", "spi1",
                        "dma", "usb0_aper", "usb1_aper", "gem0_aper",
                        "gem1_aper", "sdio0_aper", "sdio1_aper",
                        "spi0_aper", "spi1_aper", "can0_aper", "can1_aper",
                        "i2c0_aper", "i2c1_aper", "uart0_aper", "uart1_aper",
                        "gpio_aper", "lqspi_aper", "smc_aper", "swdt",
                        "dbg_trc", "dbg_apb";
        # optional props
        clocks = <&clkc 16>, <&clk_foo>;
        clock-names = "gem1_emio_clk", "can_mio_clk_23";
};