← Documents Documentation/devicetree/bindings/clock/ti/dpll.txt GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings

TI DPLL clock

OMAP/AM3 DPLL subtype, mode와 optional spread-spectrum register 바인딩입니다.

Source pathDocumentation/devicetree/bindings/clock/ti/dpll.txt
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

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

1. 요약·해설

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

요약과 해설

dpll.txt:1-103

DPLL parent, register 순서, mode override와 subtype 차이를 설명합니다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 Binding for Texas Instruments DPLL clock.
2
3 This binding uses the common clock binding[1]. It assumes a
4 register-mapped DPLL with usually two selectable input clocks
5 (reference clock and bypass clock), with digital phase locked
6 loop logic for multiplying the input clock to a desired output
7 clock. This clock also typically supports different operation
8 modes (locked, low power stop etc.) This binding has several
9 sub-types, which effectively result in slightly different setup
10 for the actual DPLL clock.
11
12 [1] Documentation/devicetree/bindings/clock/clock-bindings.txt
13
14 Required properties:
15 - compatible : shall be one of:
16 "ti,omap3-dpll-clock",
17 "ti,omap3-dpll-core-clock",
18 "ti,omap3-dpll-per-clock",
19 "ti,omap3-dpll-per-j-type-clock",
20 "ti,omap4-dpll-clock",
21 "ti,omap4-dpll-x2-clock",
22 "ti,omap4-dpll-core-clock",
23 "ti,omap4-dpll-m4xen-clock",
24 "ti,omap4-dpll-j-type-clock",
25 "ti,omap5-mpu-dpll-clock",
26 "ti,am3-dpll-no-gate-clock",
27 "ti,am3-dpll-j-type-clock",
28 "ti,am3-dpll-no-gate-j-type-clock",
29 "ti,am3-dpll-clock",
30 "ti,am3-dpll-core-clock",
31 "ti,am3-dpll-x2-clock",
32 "ti,omap2-dpll-core-clock",
33
34 - #clock-cells : from common clock binding; shall be set to 0.
35 - clocks : link phandles of parent clocks, first entry lists reference clock
36 and second entry bypass clock
37 - reg : offsets for the register set for controlling the DPLL.
38 Registers are listed in following order:
39 "control" - contains the control register base address
40 "idlest" - contains the idle status register base address
41 "mult-div1" - contains the multiplier / divider register base address
42 "autoidle" - contains the autoidle register base address (optional)
43 "ssc-deltam" - DPLL supports spread spectrum clocking (SSC), contains
44 the frequency spreading register base address (optional)
45 "ssc-modfreq" - DPLL supports spread spectrum clocking (SSC), contains
46 the modulation frequency register base address
47 (optional)
48 ti,am3-* dpll types do not have autoidle register
49 ti,omap2-* dpll type does not support idlest / autoidle registers
50
51 Optional properties:
52 - DPLL mode setting - defining any one or more of the following overrides
53 default setting.
54 - ti,low-power-stop : DPLL supports low power stop mode, gating output
55 - ti,low-power-bypass : DPLL output matches rate of parent bypass clock
56 - ti,lock : DPLL locks in programmed rate
57 - ti,min-div : the minimum divisor to start from to round the DPLL
58 target rate
59 - ti,ssc-deltam : DPLL supports spread spectrum clocking, frequency
60 spreading in permille (10th of a percent)
61 - ti,ssc-modfreq-hz : DPLL supports spread spectrum clocking, spread
62 spectrum modulation frequency
63 - ti,ssc-downspread : DPLL supports spread spectrum clocking, boolean
64 to enable the downspread feature
65
66 Examples:
67 dpll_core_ck: dpll_core_ck@44e00490 {
68 #clock-cells = <0>;
69 compatible = "ti,omap4-dpll-core-clock";
70 clocks = <&sys_clkin_ck>, <&sys_clkin_ck>;
71 reg = <0x490>, <0x45c>, <0x488>, <0x468>;
72 };
73
74 dpll2_ck: dpll2_ck@48004004 {
75 #clock-cells = <0>;
76 compatible = "ti,omap3-dpll-clock";
77 clocks = <&sys_ck>, <&dpll2_fck>;
78 ti,low-power-stop;
79 ti,low-power-bypass;
80 ti,lock;
81 reg = <0x4>, <0x24>, <0x34>, <0x40>;
82 };
83
84 dpll_core_ck: dpll_core_ck@44e00490 {
85 #clock-cells = <0>;
86 compatible = "ti,am3-dpll-core-clock";
87 clocks = <&sys_clkin_ck>, <&sys_clkin_ck>;
88 reg = <0x90>, <0x5c>, <0x68>;
89 };
90
91 dpll_ck: dpll_ck {
92 #clock-cells = <0>;
93 compatible = "ti,omap2-dpll-core-clock";
94 clocks = <&sys_ck>, <&sys_ck>;
95 reg = <0x0500>, <0x0540>;
96 };
97
98 dpll_disp_ck: dpll_disp_ck {
99 #clock-cells = <0>;
100 compatible = "ti,am3-dpll-no-gate-clock";
101 clocks = <&sys_clkin_ck>, <&sys_clkin_ck>;
102 reg = <0x0498>, <0x0448>, <0x0454>, <0x044c>, <0x0450>;
103 };
104

3. 한국어 전문 번역

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

TI DPLL 구조와 mode

1-13

Texas Instruments DPLL clock 바인딩입니다. 공통 clock 바인딩을 사용하며, 일반적으로 reference clock과 bypass clock의 두 selectable input을 가진 register-mapped DPLL을 가정합니다.

Digital phase-locked loop가 input clock을 원하는 output frequency로 곱합니다. Locked, low-power stop 등의 operation mode를 지원하며 subtype마다 실제 DPLL 설정이 조금씩 다릅니다.

TI DPLL frequency path
Reference clock / bypass clock두 parent input
DPLL modeLock, low-power stop 또는 bypass
Multiplier / dividerTarget frequency 생성
0-cell outputConsumer clock

Reference 또는 bypass input이 mode와 multiplier/divider 설정을 거쳐 output을 만듭니다.

DPLL subtype과 register 순서

14-50

`compatible`은 OMAP3의 일반/core/per/per-j-type, OMAP4의 일반/x2/core/m4xen/j-type, OMAP5 MPU, AM3의 no-gate/j-type/no-gate-j-type/일반/core/x2, OMAP2 core DPLL subtype 중 hardware에 맞게 선택합니다.

정확한 값은 `ti,omap3-dpll-clock`, `ti,omap3-dpll-core-clock`, `ti,omap3-dpll-per-clock`, `ti,omap3-dpll-per-j-type-clock`, `ti,omap4-dpll-clock`, `ti,omap4-dpll-x2-clock`, `ti,omap4-dpll-core-clock`, `ti,omap4-dpll-m4xen-clock`, `ti,omap4-dpll-j-type-clock`, `ti,omap5-mpu-dpll-clock`, `ti,am3-dpll-no-gate-clock`, `ti,am3-dpll-j-type-clock`, `ti,am3-dpll-no-gate-j-type-clock`, `ti,am3-dpll-clock`, `ti,am3-dpll-core-clock`, `ti,am3-dpll-x2-clock`, `ti,omap2-dpll-core-clock`입니다.

`#clock-cells`는 0입니다. `clocks`의 첫 entry는 reference clock, 두 번째 entry는 bypass clock입니다.

`reg` offset은 `control`, `idlest`, `mult-div1`, 선택적인 `autoidle`, 선택적인 SSC frequency spreading register `ssc-deltam`, 선택적인 SSC modulation-frequency register `ssc-modfreq` 순서입니다.

`ti,am3-*` DPLL에는 autoidle register가 없고 `ti,omap2-*` DPLL은 idlest와 autoidle register를 지원하지 않습니다.

TI DPLL register availability
FamilyidlestautoidleSSC registers
General OMAP3/4/5지원선택지원 subtype에서 선택
ti,am3-*지원없음지원 subtype에서 선택
ti,omap2-*없음없음지원 subtype에서 선택

Subtype family별 선택 register 차이를 정리합니다.

DPLL override 속성

51-65

다음 속성 중 하나 이상을 정의하면 default DPLL mode 설정을 덮어씁니다. `ti,low-power-stop`은 output을 gate하는 low-power stop, `ti,low-power-bypass`는 output rate를 bypass parent와 같게 하는 mode, `ti,lock`은 programmed rate에 lock하는 mode입니다.

`ti,min-div`는 target rate를 반올림할 때 시작할 최소 divisor입니다. Spread-spectrum clocking(SSC) 속성은 0.1% 단위 frequency spreading의 `ti,ssc-deltam`, modulation frequency의 `ti,ssc-modfreq-hz`, downspread를 켜는 boolean `ti,ssc-downspread`입니다.

OMAP4, OMAP3, AM3와 OMAP2 예제

66-103

OMAP4 core 예제는 네 register offset을 사용합니다. OMAP3 예제는 low-power stop, bypass와 lock을 모두 선언합니다. AM3 core는 autoidle 없이 세 offset을, OMAP2 core는 idlest/autoidle 없이 두 offset을 사용합니다.

마지막 AM3 no-gate 예제는 `control`, `idlest`, `mult-div1`, `ssc-deltam`, `ssc-modfreq`에 해당하는 다섯 offset으로 SSC register까지 기술합니다.

dpll_core_ck: dpll_core_ck@44e00490 {
        #clock-cells = <0>;
        compatible = "ti,omap4-dpll-core-clock";
        clocks = <&sys_clkin_ck>, <&sys_clkin_ck>;
        reg = <0x490>, <0x45c>, <0x488>, <0x468>;
};

dpll2_ck: dpll2_ck@48004004 {
        #clock-cells = <0>;
        compatible = "ti,omap3-dpll-clock";
        clocks = <&sys_ck>, <&dpll2_fck>;
        ti,low-power-stop;
        ti,low-power-bypass;
        ti,lock;
        reg = <0x4>, <0x24>, <0x34>, <0x40>;
};

dpll_core_ck: dpll_core_ck@44e00490 {
        #clock-cells = <0>;
        compatible = "ti,am3-dpll-core-clock";
        clocks = <&sys_clkin_ck>, <&sys_clkin_ck>;
        reg = <0x90>, <0x5c>, <0x68>;
};

dpll_ck: dpll_ck {
        #clock-cells = <0>;
        compatible = "ti,omap2-dpll-core-clock";
        clocks = <&sys_ck>, <&sys_ck>;
        reg = <0x0500>, <0x0540>;
};

dpll_disp_ck: dpll_disp_ck {
        #clock-cells = <0>;
        compatible = "ti,am3-dpll-no-gate-clock";
        clocks = <&sys_clkin_ck>, <&sys_clkin_ck>;
        reg = <0x0498>, <0x0448>, <0x0454>, <0x044c>, <0x0450>;
};