1*c66ec88fSEmmanuel VadotAdaptive Body Bias(ABB) SoC internal LDO regulator for Texas Instruments SoCs 2*c66ec88fSEmmanuel Vadot 3*c66ec88fSEmmanuel VadotRequired Properties: 4*c66ec88fSEmmanuel Vadot- compatible: Should be one of: 5*c66ec88fSEmmanuel Vadot - "ti,abb-v1" for older SoCs like OMAP3 6*c66ec88fSEmmanuel Vadot - "ti,abb-v2" for newer SoCs like OMAP4, OMAP5 7*c66ec88fSEmmanuel Vadot - "ti,abb-v3" for a generic definition where setup and control registers are 8*c66ec88fSEmmanuel Vadot provided (example: DRA7) 9*c66ec88fSEmmanuel Vadot- reg: Address and length of the register set for the device. It contains 10*c66ec88fSEmmanuel Vadot the information of registers in the same order as described by reg-names 11*c66ec88fSEmmanuel Vadot- reg-names: Should contain the reg names 12*c66ec88fSEmmanuel Vadot - "base-address" - contains base address of ABB module (ti,abb-v1,ti,abb-v2) 13*c66ec88fSEmmanuel Vadot - "control-address" - contains control register address of ABB module (ti,abb-v3) 14*c66ec88fSEmmanuel Vadot - "setup-address" - contains setup register address of ABB module (ti,abb-v3) 15*c66ec88fSEmmanuel Vadot - "int-address" - contains address of interrupt register for ABB module 16*c66ec88fSEmmanuel Vadot (also see Optional properties) 17*c66ec88fSEmmanuel Vadot- #address-cells: should be 0 18*c66ec88fSEmmanuel Vadot- #size-cells: should be 0 19*c66ec88fSEmmanuel Vadot- clocks: should point to the clock node used by ABB module 20*c66ec88fSEmmanuel Vadot- ti,settling-time: Settling time in uSecs from SoC documentation for ABB module 21*c66ec88fSEmmanuel Vadot to settle down(target time for SR2_WTCNT_VALUE). 22*c66ec88fSEmmanuel Vadot- ti,clock-cycles: SoC specific data about count of system ti,clock-cycles used for 23*c66ec88fSEmmanuel Vadot computing settling time from SoC Documentation for ABB module(clock 24*c66ec88fSEmmanuel Vadot cycles for SR2_WTCNT_VALUE). 25*c66ec88fSEmmanuel Vadot- ti,tranxdone-status-mask: Mask to the int-register to write-to-clear mask 26*c66ec88fSEmmanuel Vadot indicating LDO tranxdone (operation complete). 27*c66ec88fSEmmanuel Vadot- ti,abb_info: An array of 6-tuples u32 items providing information about ABB 28*c66ec88fSEmmanuel Vadot configuration needed per operational voltage of the device. 29*c66ec88fSEmmanuel Vadot Each item consists of the following in the same order: 30*c66ec88fSEmmanuel Vadot volt: voltage in uV - Only used to index ABB information. 31*c66ec88fSEmmanuel Vadot ABB mode: one of the following: 32*c66ec88fSEmmanuel Vadot 0-bypass 33*c66ec88fSEmmanuel Vadot 1-Forward Body Bias(FBB) 34*c66ec88fSEmmanuel Vadot 3-Reverse Body Bias(RBB) 35*c66ec88fSEmmanuel Vadot efuse: (see Optional properties) 36*c66ec88fSEmmanuel Vadot RBB enable efuse Mask: (See Optional properties) 37*c66ec88fSEmmanuel Vadot FBB enable efuse Mask: (See Optional properties) 38*c66ec88fSEmmanuel Vadot Vset value efuse Mask: (See Optional properties) 39*c66ec88fSEmmanuel Vadot 40*c66ec88fSEmmanuel Vadot NOTE: If more than 1 entry is present, then regulator is setup to change 41*c66ec88fSEmmanuel Vadot voltage, allowing for various modes to be selected indexed off 42*c66ec88fSEmmanuel Vadot the regulator. Further, ABB LDOs are considered always-on by 43*c66ec88fSEmmanuel Vadot default. 44*c66ec88fSEmmanuel Vadot 45*c66ec88fSEmmanuel VadotOptional Properties: 46*c66ec88fSEmmanuel Vadot- reg-names: In addition to the required properties, the following are optional 47*c66ec88fSEmmanuel Vadot - "efuse-address" - Contains efuse base address used to pick up ABB info. 48*c66ec88fSEmmanuel Vadot - "ldo-address" - Contains address of ABB LDO override register. 49*c66ec88fSEmmanuel Vadot "efuse-address" is required for this. 50*c66ec88fSEmmanuel Vadot- ti,ldovbb-vset-mask - Required if ldo-address is set, mask for LDO override 51*c66ec88fSEmmanuel Vadot register to provide override vset value. 52*c66ec88fSEmmanuel Vadot- ti,ldovbb-override-mask - Required if ldo-address is set, mask for LDO 53*c66ec88fSEmmanuel Vadot override register to enable override vset value. 54*c66ec88fSEmmanuel Vadot- ti,abb_opp_sel: Addendum to the description in required properties 55*c66ec88fSEmmanuel Vadot efuse: Mandatory if 'efuse-address' register is defined. Provides offset 56*c66ec88fSEmmanuel Vadot from efuse-address to pick up ABB characteristics. Set to 0 if 57*c66ec88fSEmmanuel Vadot 'efuse-address' is not defined. 58*c66ec88fSEmmanuel Vadot RBB enable efuse Mask: Optional if 'efuse-address' register is defined. 59*c66ec88fSEmmanuel Vadot 'ABB mode' is force set to RBB mode if value at "efuse-address" 60*c66ec88fSEmmanuel Vadot + efuse maps to RBB mask. Set to 0 to ignore this. 61*c66ec88fSEmmanuel Vadot FBB enable efuse Mask: Optional if 'efuse-address' register is defined. 62*c66ec88fSEmmanuel Vadot 'ABB mode' is force set to FBB mode if value at "efuse-address" 63*c66ec88fSEmmanuel Vadot + efuse maps to FBB mask (valid only if RBB mask does not match) 64*c66ec88fSEmmanuel Vadot Set to 0 to ignore this. 65*c66ec88fSEmmanuel Vadot Vset value efuse Mask: Mandatory if ldo-address is set. Picks up from 66*c66ec88fSEmmanuel Vadot efuse the value to set in 'ti,ldovbb-vset-mask' at ldo-address. 67*c66ec88fSEmmanuel Vadot 68*c66ec88fSEmmanuel VadotExample #1: Simplest configuration (no efuse data, hard coded ABB table): 69*c66ec88fSEmmanuel Vadotabb_x: regulator-abb-x { 70*c66ec88fSEmmanuel Vadot compatible = "ti,abb-v1"; 71*c66ec88fSEmmanuel Vadot regulator-name = "abb_x"; 72*c66ec88fSEmmanuel Vadot #address-cells = <0>; 73*c66ec88fSEmmanuel Vadot #size-cells = <0>; 74*c66ec88fSEmmanuel Vadot reg = <0x483072f0 0x8>, <0x48306818 0x4>; 75*c66ec88fSEmmanuel Vadot reg-names = "base-address", "int-address"; 76*c66ec88fSEmmanuel Vadot ti,tranxdone-status-mask = <0x4000000>; 77*c66ec88fSEmmanuel Vadot clocks = <&sysclk>; 78*c66ec88fSEmmanuel Vadot ti,settling-time = <30>; 79*c66ec88fSEmmanuel Vadot ti,clock-cycles = <8>; 80*c66ec88fSEmmanuel Vadot ti,abb_info = < 81*c66ec88fSEmmanuel Vadot /* uV ABB efuse rbb_m fbb_m vset_m */ 82*c66ec88fSEmmanuel Vadot 1012500 0 0 0 0 0 /* Bypass */ 83*c66ec88fSEmmanuel Vadot 1200000 3 0 0 0 0 /* RBB mandatory */ 84*c66ec88fSEmmanuel Vadot 1320000 1 0 0 0 0 /* FBB mandatory */ 85*c66ec88fSEmmanuel Vadot >; 86*c66ec88fSEmmanuel Vadot}; 87*c66ec88fSEmmanuel Vadot 88*c66ec88fSEmmanuel VadotExample #2: Efuse bits contain ABB mode setting (no LDO override capability) 89*c66ec88fSEmmanuel Vadotabb_y: regulator-abb-y { 90*c66ec88fSEmmanuel Vadot compatible = "ti,abb-v2"; 91*c66ec88fSEmmanuel Vadot regulator-name = "abb_y"; 92*c66ec88fSEmmanuel Vadot #address-cells = <0>; 93*c66ec88fSEmmanuel Vadot #size-cells = <0>; 94*c66ec88fSEmmanuel Vadot reg = <0x4a307bd0 0x8>, <0x4a306014 0x4>, <0x4A002268 0x8>; 95*c66ec88fSEmmanuel Vadot reg-names = "base-address", "int-address", "efuse-address"; 96*c66ec88fSEmmanuel Vadot ti,tranxdone-status-mask = <0x4000000>; 97*c66ec88fSEmmanuel Vadot clocks = <&sysclk>; 98*c66ec88fSEmmanuel Vadot ti,settling-time = <50>; 99*c66ec88fSEmmanuel Vadot ti,clock-cycles = <16>; 100*c66ec88fSEmmanuel Vadot ti,abb_info = < 101*c66ec88fSEmmanuel Vadot /* uV ABB efuse rbb_m fbb_m vset_m */ 102*c66ec88fSEmmanuel Vadot 975000 0 0 0 0 0 /* Bypass */ 103*c66ec88fSEmmanuel Vadot 1012500 0 0 0x40000 0 0 /* RBB optional */ 104*c66ec88fSEmmanuel Vadot 1200000 0 0x4 0 0x40000 0 /* FBB optional */ 105*c66ec88fSEmmanuel Vadot 1320000 1 0 0 0 0 /* FBB mandatory */ 106*c66ec88fSEmmanuel Vadot >; 107*c66ec88fSEmmanuel Vadot}; 108*c66ec88fSEmmanuel Vadot 109*c66ec88fSEmmanuel VadotExample #3: Efuse bits contain ABB mode setting and LDO override capability 110*c66ec88fSEmmanuel Vadotabb_z: regulator-abb-z { 111*c66ec88fSEmmanuel Vadot compatible = "ti,abb-v2"; 112*c66ec88fSEmmanuel Vadot regulator-name = "abb_z"; 113*c66ec88fSEmmanuel Vadot #address-cells = <0>; 114*c66ec88fSEmmanuel Vadot #size-cells = <0>; 115*c66ec88fSEmmanuel Vadot reg = <0x4ae07ce4 0x8>, <0x4ae06010 0x4>, 116*c66ec88fSEmmanuel Vadot <0x4a002194 0x8>, <0x4ae0C314 0x4>; 117*c66ec88fSEmmanuel Vadot reg-names = "base-address", "int-address", 118*c66ec88fSEmmanuel Vadot "efuse-address", "ldo-address"; 119*c66ec88fSEmmanuel Vadot ti,tranxdone-status-mask = <0x8000000>; 120*c66ec88fSEmmanuel Vadot /* LDOVBBMM_MUX_CTRL */ 121*c66ec88fSEmmanuel Vadot ti,ldovbb-override-mask = <0x400>; 122*c66ec88fSEmmanuel Vadot /* LDOVBBMM_VSET_OUT */ 123*c66ec88fSEmmanuel Vadot ti,ldovbb-vset-mask = <0x1F>; 124*c66ec88fSEmmanuel Vadot clocks = <&sysclk>; 125*c66ec88fSEmmanuel Vadot ti,settling-time = <50>; 126*c66ec88fSEmmanuel Vadot ti,clock-cycles = <16>; 127*c66ec88fSEmmanuel Vadot ti,abb_info = < 128*c66ec88fSEmmanuel Vadot /* uV ABB efuse rbb_m fbb_m vset_m */ 129*c66ec88fSEmmanuel Vadot 975000 0 0 0 0 0 /* Bypass */ 130*c66ec88fSEmmanuel Vadot 1200000 0 0x4 0 0x40000 0x1f00 /* FBB optional, vset */ 131*c66ec88fSEmmanuel Vadot >; 132*c66ec88fSEmmanuel Vadot}; 133