요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
Adaptive Body Bias(ABB) SoC internal LDO regulator for Texas Instruments SoCs
Required Properties:
- compatible: Should be one of:
- "ti,abb-v1" for older SoCs like OMAP3
- "ti,abb-v2" for newer SoCs like OMAP4, OMAP5
- "ti,abb-v3" for a generic definition where setup and control registers are
provided (example: DRA7)
- reg: Address and length of the register set for the device. It contains
the information of registers in the same order as described by reg-names
- reg-names: Should contain the reg names
- "base-address" - contains base address of ABB module (ti,abb-v1,ti,abb-v2)
- "control-address" - contains control register address of ABB module (ti,abb-v3)
- "setup-address" - contains setup register address of ABB module (ti,abb-v3)
- "int-address" - contains address of interrupt register for ABB module
(also see Optional properties)
- #address-cells: should be 0
- #size-cells: should be 0
- clocks: should point to the clock node used by ABB module
- ti,settling-time: Settling time in uSecs from SoC documentation for ABB module
to settle down(target time for SR2_WTCNT_VALUE).
- ti,clock-cycles: SoC specific data about count of system ti,clock-cycles used for
computing settling time from SoC Documentation for ABB module(clock
cycles for SR2_WTCNT_VALUE).
- ti,tranxdone-status-mask: Mask to the int-register to write-to-clear mask
indicating LDO tranxdone (operation complete).
- ti,abb_info: An array of 6-tuples u32 items providing information about ABB
configuration needed per operational voltage of the device.
Each item consists of the following in the same order:
volt: voltage in uV - Only used to index ABB information.
ABB mode: one of the following:
0-bypass
1-Forward Body Bias(FBB)
3-Reverse Body Bias(RBB)
efuse: (see Optional properties)
RBB enable efuse Mask: (See Optional properties)
FBB enable efuse Mask: (See Optional properties)
Vset value efuse Mask: (See Optional properties)
NOTE: If more than 1 entry is present, then regulator is setup to change
voltage, allowing for various modes to be selected indexed off
the regulator. Further, ABB LDOs are considered always-on by
default.
Optional Properties:
- reg-names: In addition to the required properties, the following are optional
- "efuse-address" - Contains efuse base address used to pick up ABB info.
- "ldo-address" - Contains address of ABB LDO override register.
"efuse-address" is required for this.
- ti,ldovbb-vset-mask - Required if ldo-address is set, mask for LDO override
register to provide override vset value.
- ti,ldovbb-override-mask - Required if ldo-address is set, mask for LDO
override register to enable override vset value.
- ti,abb_opp_sel: Addendum to the description in required properties
efuse: Mandatory if 'efuse-address' register is defined. Provides offset
from efuse-address to pick up ABB characteristics. Set to 0 if
'efuse-address' is not defined.
RBB enable efuse Mask: Optional if 'efuse-address' register is defined.
'ABB mode' is force set to RBB mode if value at "efuse-address"
+ efuse maps to RBB mask. Set to 0 to ignore this.
FBB enable efuse Mask: Optional if 'efuse-address' register is defined.
'ABB mode' is force set to FBB mode if value at "efuse-address"
+ efuse maps to FBB mask (valid only if RBB mask does not match)
Set to 0 to ignore this.
Vset value efuse Mask: Mandatory if ldo-address is set. Picks up from
efuse the value to set in 'ti,ldovbb-vset-mask' at ldo-address.
Example #1: Simplest configuration (no efuse data, hard coded ABB table):
abb_x: regulator-abb-x {
compatible = "ti,abb-v1";
regulator-name = "abb_x";
#address-cells = <0>;
#size-cells = <0>;
reg = <0x483072f0 0x8>, <0x48306818 0x4>;
reg-names = "base-address", "int-address";
ti,tranxdone-status-mask = <0x4000000>;
clocks = <&sysclk>;
ti,settling-time = <30>;
ti,clock-cycles = <8>;
ti,abb_info = <
/* uV ABB efuse rbb_m fbb_m vset_m */
1012500 0 0 0 0 0 /* Bypass */
1200000 3 0 0 0 0 /* RBB mandatory */
1320000 1 0 0 0 0 /* FBB mandatory */
>;
};
Example #2: Efuse bits contain ABB mode setting (no LDO override capability)
abb_y: regulator-abb-y {
compatible = "ti,abb-v2";
regulator-name = "abb_y";
#address-cells = <0>;
#size-cells = <0>;
reg = <0x4a307bd0 0x8>, <0x4a306014 0x4>, <0x4A002268 0x8>;
reg-names = "base-address", "int-address", "efuse-address";
ti,tranxdone-status-mask = <0x4000000>;
clocks = <&sysclk>;
ti,settling-time = <50>;
ti,clock-cycles = <16>;
ti,abb_info = <
/* uV ABB efuse rbb_m fbb_m vset_m */
975000 0 0 0 0 0 /* Bypass */
1012500 0 0 0x40000 0 0 /* RBB optional */
1200000 0 0x4 0 0x40000 0 /* FBB optional */
1320000 1 0 0 0 0 /* FBB mandatory */
>;
};
Example #3: Efuse bits contain ABB mode setting and LDO override capability
abb_z: regulator-abb-z {
compatible = "ti,abb-v2";
regulator-name = "abb_z";
#address-cells = <0>;
#size-cells = <0>;
reg = <0x4ae07ce4 0x8>, <0x4ae06010 0x4>,
<0x4a002194 0x8>, <0x4ae0C314 0x4>;
reg-names = "base-address", "int-address",
"efuse-address", "ldo-address";
ti,tranxdone-status-mask = <0x8000000>;
/* LDOVBBMM_MUX_CTRL */
ti,ldovbb-override-mask = <0x400>;
/* LDOVBBMM_VSET_OUT */
ti,ldovbb-vset-mask = <0x1F>;
clocks = <&sysclk>;
ti,settling-time = <50>;
ti,clock-cycles = <16>;
ti,abb_info = <
/* uV ABB efuse rbb_m fbb_m vset_m */
975000 0 0 0 0 0 /* Bypass */
1200000 0 0x4 0 0x40000 0x1f00 /* FBB optional, vset */
>;
};
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
TI SoC 내부 ABB LDO
1-2이 binding은 Texas Instruments SoC를 위한 Adaptive Body Bias(ABB) SoC 내부 LDO regulator를 설명합니다.
ABB 필수 register·timing property
3-26`compatible`은 OMAP3 같은 구형 SoC에서 `ti,abb-v1`, OMAP4·OMAP5 같은 신형 SoC에서 `ti,abb-v2`, setup·control register를 직접 제공하는 generic 정의에서는 `ti,abb-v3`를 사용합니다. DRA7이 v3의 예입니다.
`reg`에는 `reg-names`에 설명된 순서대로 device register set의 address와 length를 지정합니다. `reg-names`의 `base-address`는 v1·v2 ABB module base, `control-address`와 `setup-address`는 v3의 control·setup register, `int-address`는 ABB interrupt register address입니다.
`#address-cells`와 `#size-cells`는 모두 0이어야 합니다. `clocks`는 ABB module이 사용하는 clock node를 가리킵니다.
`ti,settling-time`은 SoC 문서의 ABB settling time을 microsecond 단위로 지정하며 SR2_WTCNT_VALUE의 target time입니다. `ti,clock-cycles`는 SoC 문서에서 settling time 계산에 사용하는 system clock cycle 수, 즉 SR2_WTCNT_VALUE의 clock cycle입니다. `ti,tranxdone-status-mask`는 LDO transaction 완료를 나타내는 int-register write-to-clear mask입니다.
ti,abb_info 6-tuple
27-44`ti,abb_info`는 device의 각 operational voltage에 필요한 ABB configuration을 제공하는 u32 6-tuple 배열입니다. 각 항목은 다음 순서를 사용합니다.
- `volt`: ABB 정보를 찾기 위한 index로만 사용하는 uV 단위 전압입니다.
- `ABB mode`: 0은 bypass, 1은 Forward Body Bias(FBB), 3은 Reverse Body Bias(RBB)입니다.
- `efuse`: 선택 property 설명을 따르는 efuse offset입니다.
- `RBB enable efuse Mask`: 선택 property 설명의 RBB enable mask입니다.
- `FBB enable efuse Mask`: 선택 property 설명의 FBB enable mask입니다.
- `Vset value efuse Mask`: 선택 property 설명의 Vset mask입니다.
항목이 둘 이상이면 regulator가 전압을 변경하도록 설정되어 regulator를 index로 여러 mode를 선택할 수 있습니다. ABB LDO는 기본적으로 always-on으로 간주합니다.
Efuse와 LDO override 선택 property
45-67필수 `reg-names`에 더해 `efuse-address`로 ABB 정보를 읽는 efuse base address를, `ldo-address`로 ABB LDO override register address를 지정할 수 있습니다. `ldo-address`를 사용하려면 `efuse-address`가 필요합니다.
`ti,ldovbb-vset-mask`는 `ldo-address`를 설정했을 때 필수이며 override Vset 값을 넣을 LDO override register mask입니다. `ti,ldovbb-override-mask`도 `ldo-address`를 설정했을 때 필수이며 override Vset을 enable하는 mask입니다.
`ti,abb_opp_sel` 설명에서 `efuse`는 `efuse-address`가 정의되면 필수이고 ABB 특성을 읽을 offset입니다. `efuse-address`가 없으면 0으로 설정합니다.
RBB enable efuse mask는 선택 사항이며 `efuse-address + efuse`의 값이 RBB mask에 맞으면 ABB mode를 RBB로 강제합니다. FBB mask도 선택 사항이며 RBB mask가 맞지 않을 때만 FBB로 강제합니다. 각 mask를 무시하려면 0으로 설정합니다. Vset value efuse mask는 `ldo-address`를 사용하면 필수이며 efuse에서 읽은 값을 `ldo-address`의 `ti,ldovbb-vset-mask` 위치에 설정합니다.
예제 1: Efuse 없는 고정 ABB table
68-87가장 단순한 v1 구성으로 efuse data 없이 ABB table을 직접 지정합니다. 1,012,500uV는 bypass, 1,200,000uV는 필수 RBB, 1,320,000uV는 필수 FBB입니다.
abb_x: regulator-abb-x {
compatible = "ti,abb-v1";
regulator-name = "abb_x";
#address-cells = <0>;
#size-cells = <0>;
reg = <0x483072f0 0x8>, <0x48306818 0x4>;
reg-names = "base-address", "int-address";
ti,tranxdone-status-mask = <0x4000000>;
clocks = <&sysclk>;
ti,settling-time = <30>;
ti,clock-cycles = <8>;
ti,abb_info = <
/* uV ABB efuse rbb_m fbb_m vset_m */
1012500 0 0 0 0 0 /* Bypass */
1200000 3 0 0 0 0 /* RBB mandatory */
1320000 1 0 0 0 0 /* FBB mandatory */
>;
};
예제 2: Efuse mode 선택
88-108v2 구성에서 efuse bit로 ABB mode를 선택하지만 LDO override 기능은 사용하지 않습니다. Table에는 bypass, optional RBB, optional FBB와 mandatory FBB 항목이 들어 있습니다.
abb_y: regulator-abb-y {
compatible = "ti,abb-v2";
regulator-name = "abb_y";
#address-cells = <0>;
#size-cells = <0>;
reg = <0x4a307bd0 0x8>, <0x4a306014 0x4>, <0x4A002268 0x8>;
reg-names = "base-address", "int-address", "efuse-address";
ti,tranxdone-status-mask = <0x4000000>;
clocks = <&sysclk>;
ti,settling-time = <50>;
ti,clock-cycles = <16>;
ti,abb_info = <
/* uV ABB efuse rbb_m fbb_m vset_m */
975000 0 0 0 0 0 /* Bypass */
1012500 0 0 0x40000 0 0 /* RBB optional */
1200000 0 0x4 0 0x40000 0 /* FBB optional */
1320000 1 0 0 0 0 /* FBB mandatory */
>;
};
예제 3: Efuse와 LDO override
109-132v2 구성에서 `efuse-address`와 `ldo-address`를 모두 제공하고 `ti,ldovbb-override-mask` 0x400, `ti,ldovbb-vset-mask` 0x1F를 설정합니다. 1,200,000uV 항목은 optional FBB와 efuse Vset 0x1f00을 사용합니다.
abb_z: regulator-abb-z {
compatible = "ti,abb-v2";
regulator-name = "abb_z";
#address-cells = <0>;
#size-cells = <0>;
reg = <0x4ae07ce4 0x8>, <0x4ae06010 0x4>,
<0x4a002194 0x8>, <0x4ae0C314 0x4>;
reg-names = "base-address", "int-address",
"efuse-address", "ldo-address";
ti,tranxdone-status-mask = <0x8000000>;
/* LDOVBBMM_MUX_CTRL */
ti,ldovbb-override-mask = <0x400>;
/* LDOVBBMM_VSET_OUT */
ti,ldovbb-vset-mask = <0x1F>;
clocks = <&sysclk>;
ti,settling-time = <50>;
ti,clock-cycles = <16>;
ti,abb_info = <
/* uV ABB efuse rbb_m fbb_m vset_m */
975000 0 0 0 0 0 /* Bypass */
1200000 0 0x4 0 0x40000 0x1f00 /* FBB optional, vset */
>;
};
요약과 해설
ti-abb-regulator.txt:1-132필수·선택 property를 요약하고 영어 원문 전체와 줄 좌표별 한국어 전문, 설정 예제를 제공합니다.