요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
Binding for keystone PLLs. The main PLL IP typically has a multiplier,
a divider and a post divider. The additional PLL IPs like ARMPLL, DDRPLL
and PAPLL are controlled by the memory mapped register where as the Main
PLL is controlled by a PLL controller registers along with memory mapped
registers.
This binding uses the common clock binding[1].
[1] Documentation/devicetree/bindings/clock/clock-bindings.txt
Required properties:
- #clock-cells : from common clock binding; shall be set to 0.
- compatible : shall be "ti,keystone,main-pll-clock" or "ti,keystone,pll-clock"
- clocks : parent clock phandle
- reg - pll control0 and pll multiplier registers
- reg-names : control, multiplier and post-divider. The multiplier and
post-divider registers are applicable only for main pll clock
- fixed-postdiv : fixed post divider value. If absent, use clkod register bits
for postdiv
Example:
mainpllclk: mainpllclk@2310110 {
#clock-cells = <0>;
compatible = "ti,keystone,main-pll-clock";
clocks = <&refclksys>;
reg = <0x02620350 4>, <0x02310110 4>, <0x02310108 4>;
reg-names = "control", "multiplier", "post-divider";
fixed-postdiv = <2>;
};
papllclk: papllclk@2620358 {
#clock-cells = <0>;
compatible = "ti,keystone,pll-clock";
clocks = <&refclkpass>;
clock-output-names = "pa-pll-clk";
reg = <0x02620358 4>;
reg-names = "control";
};
Required properties:
- #clock-cells : from common clock binding; shall be set to 0.
- compatible : shall be "ti,keystone,pll-mux-clock"
- clocks : link phandles of parent clocks
- reg - pll mux register
- bit-shift : number of bits to shift the bit-mask
- bit-mask : arbitrary bitmask for programming the mux
Optional properties:
- clock-output-names : From common clock binding.
Example:
mainmuxclk: mainmuxclk@2310108 {
#clock-cells = <0>;
compatible = "ti,keystone,pll-mux-clock";
clocks = <&mainpllclk>, <&refclkmain>;
reg = <0x02310108 4>;
bit-shift = <23>;
bit-mask = <1>;
clock-output-names = "mainmuxclk";
};
Required properties:
- #clock-cells : from common clock binding; shall be set to 0.
- compatible : shall be "ti,keystone,pll-divider-clock"
- clocks : parent clock phandle
- reg - pll mux register
- bit-shift : number of bits to shift the bit-mask
- bit-mask : arbitrary bitmask for programming the divider
Optional properties:
- clock-output-names : From common clock binding.
Example:
gemtraceclk: gemtraceclk@2310120 {
#clock-cells = <0>;
compatible = "ti,keystone,pll-divider-clock";
clocks = <&mainmuxclk>;
reg = <0x02310120 4>;
bit-shift = <0>;
bit-mask = <8>;
clock-output-names = "gemtraceclk";
};
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
Keystone main 및 additional PLL
1-39Keystone PLL 바인딩입니다. Main PLL IP에는 일반적으로 multiplier, divider와 post-divider가 있습니다. ARMPLL, DDRPLL, PAPLL 같은 additional PLL IP는 memory-mapped register로 제어합니다.
Main PLL은 memory-mapped register와 함께 PLL controller register로 제어합니다. 이 바인딩은 공통 clock 바인딩 `Documentation/devicetree/bindings/clock/clock-bindings.txt`를 사용합니다.
필수 `#clock-cells`는 0입니다. `compatible`은 `ti,keystone,main-pll-clock` 또는 `ti,keystone,pll-clock`이고 `clocks`에는 parent clock phandle을 지정합니다.
`reg`에는 PLL control0과 multiplier register를 지정합니다. `reg-names`는 `control`, `multiplier`, `post-divider`를 사용하며 multiplier와 post-divider register는 main PLL clock에만 적용됩니다.
`fixed-postdiv`는 고정 post-divider 값입니다. 이 속성이 없으면 `clkod` register bit를 post-divider로 사용합니다.
Main PLL과 additional PLL의 제어 register 차이를 정리합니다.
예제는 fixed post-divider 2를 사용하는 main PLL과 `pa-pll-clk` output을 제공하는 PAPLL을 보여 줍니다.
mainpllclk: mainpllclk@2310110 {
#clock-cells = <0>;
compatible = "ti,keystone,main-pll-clock";
clocks = <&refclksys>;
reg = <0x02620350 4>, <0x02310110 4>, <0x02310108 4>;
reg-names = "control", "multiplier", "post-divider";
fixed-postdiv = <2>;
};
papllclk: papllclk@2620358 {
#clock-cells = <0>;
compatible = "ti,keystone,pll-clock";
clocks = <&refclkpass>;
clock-output-names = "pa-pll-clk";
reg = <0x02620358 4>;
reg-names = "control";
};
Keystone PLL mux clock
40-61PLL mux clock의 필수 `#clock-cells`는 0이고 `compatible`은 `ti,keystone,pll-mux-clock`입니다. `clocks`에는 parent clock phandle 목록을 지정하고 `reg`에는 PLL mux register를 지정합니다.
`bit-shift`는 bit-mask를 이동할 bit 수이며 `bit-mask`는 mux를 program하는 임의의 bitmask입니다. 선택적 `clock-output-names`는 공통 clock 바인딩을 따릅니다.
예제는 main PLL과 main reference clock 사이를 선택하는 bit 23의 1-bit mux를 구성합니다.
mainmuxclk: mainmuxclk@2310108 {
#clock-cells = <0>;
compatible = "ti,keystone,pll-mux-clock";
clocks = <&mainpllclk>, <&refclkmain>;
reg = <0x02310108 4>;
bit-shift = <23>;
bit-mask = <1>;
clock-output-names = "mainmuxclk";
};
Keystone PLL divider clock
62-82PLL divider clock의 필수 `#clock-cells`는 0이고 `compatible`은 `ti,keystone,pll-divider-clock`입니다. `clocks`에는 parent clock phandle, `reg`에는 PLL mux register를 지정합니다.
`bit-shift`는 bit-mask 이동 수이고 `bit-mask`는 divider를 program하는 임의의 bitmask입니다. 선택적 `clock-output-names`로 output 이름을 지정할 수 있습니다.
예제는 `mainmuxclk`을 parent로 하여 mask 8을 사용하는 `gemtraceclk` divider를 구성합니다.
gemtraceclk: gemtraceclk@2310120 {
#clock-cells = <0>;
compatible = "ti,keystone,pll-divider-clock";
clocks = <&mainmuxclk>;
reg = <0x02310120 4>;
bit-shift = <0>;
bit-mask = <8>;
clock-output-names = "gemtraceclk";
};
Main PLL에서 mux와 divider를 거쳐 최종 clock이 생성되는 경로입니다.
요약과 해설
keystone-pll.txt:1-82Reference에서 PLL, mux, divider로 이어지는 Keystone clock chain을 설명합니다.