요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
Binding for Texas Instruments DPLL clock.
This binding uses the common clock binding[1]. It assumes a
register-mapped DPLL with usually two selectable input clocks
(reference clock and bypass clock), with digital phase locked
loop logic for multiplying the input clock to a desired output
clock. This clock also typically supports different operation
modes (locked, low power stop etc.) This binding has several
sub-types, which effectively result in slightly different setup
for the actual DPLL clock.
[1] Documentation/devicetree/bindings/clock/clock-bindings.txt
Required properties:
- compatible : shall be one of:
"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 : from common clock binding; shall be set to 0.
- clocks : link phandles of parent clocks, first entry lists reference clock
and second entry bypass clock
- reg : offsets for the register set for controlling the DPLL.
Registers are listed in following order:
"control" - contains the control register base address
"idlest" - contains the idle status register base address
"mult-div1" - contains the multiplier / divider register base address
"autoidle" - contains the autoidle register base address (optional)
"ssc-deltam" - DPLL supports spread spectrum clocking (SSC), contains
the frequency spreading register base address (optional)
"ssc-modfreq" - DPLL supports spread spectrum clocking (SSC), contains
the modulation frequency register base address
(optional)
ti,am3-* dpll types do not have autoidle register
ti,omap2-* dpll type does not support idlest / autoidle registers
Optional properties:
- DPLL mode setting - defining any one or more of the following overrides
default setting.
- ti,low-power-stop : DPLL supports low power stop mode, gating output
- ti,low-power-bypass : DPLL output matches rate of parent bypass clock
- ti,lock : DPLL locks in programmed rate
- ti,min-div : the minimum divisor to start from to round the DPLL
target rate
- ti,ssc-deltam : DPLL supports spread spectrum clocking, frequency
spreading in permille (10th of a percent)
- ti,ssc-modfreq-hz : DPLL supports spread spectrum clocking, spread
spectrum modulation frequency
- ti,ssc-downspread : DPLL supports spread spectrum clocking, boolean
to enable the downspread feature
Examples:
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>;
};
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
TI DPLL 구조와 mode
1-13Texas 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 설정이 조금씩 다릅니다.
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를 지원하지 않습니다.
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-103OMAP4 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>;
};
요약과 해설
dpll.txt:1-103DPLL parent, register 순서, mode override와 subtype 차이를 설명합니다.