krait-regulator.c 46 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783
  1. /* Copyright (c) 2012-2014, The Linux Foundation. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. */
  12. #define pr_fmt(fmt) "PDN %s: " fmt, __func__
  13. #include <linux/err.h>
  14. #include <linux/kernel.h>
  15. #include <linux/module.h>
  16. #include <linux/init.h>
  17. #include <linux/delay.h>
  18. #include <linux/slab.h>
  19. #include <linux/string.h>
  20. #include <linux/io.h>
  21. #include <linux/of.h>
  22. #include <linux/of_device.h>
  23. #include <linux/platform_device.h>
  24. #include <linux/regulator/driver.h>
  25. #include <linux/regulator/machine.h>
  26. #include <linux/regulator/of_regulator.h>
  27. #include <linux/regulator/krait-regulator.h>
  28. #include <linux/debugfs.h>
  29. #include <linux/syscore_ops.h>
  30. #include <linux/cpu.h>
  31. #include <mach/msm_iomap.h>
  32. #include "krait-regulator-pmic.h"
  33. #include "spm.h"
  34. #include "pm.h"
  35. /*
  36. * supply
  37. * from
  38. * pmic
  39. * gang
  40. * |
  41. * |________________________________
  42. * | | |
  43. * ___|___ | |
  44. * | | | |
  45. * | | / /
  46. * | LDO | / /LDO BYP [6]
  47. * | | / BHS[6] /(bypass is a weak BHS
  48. * |_______| | | needs to be on when in
  49. * | | | BHS mode)
  50. * |________________|_______________|
  51. * |
  52. * ________|________
  53. * | |
  54. * | KRAIT |
  55. * |_________________|
  56. */
  57. #define PMIC_VOLTAGE_MIN 350000
  58. #define PMIC_VOLTAGE_MAX 1355000
  59. #define LV_RANGE_STEP 5000
  60. #define CORE_VOLTAGE_BOOTUP 900000
  61. #define KRAIT_LDO_VOLTAGE_MIN 465000
  62. #define KRAIT_LDO_VOLTAGE_OFFSET 465000
  63. #define KRAIT_LDO_STEP 5000
  64. #define BHS_SETTLING_DELAY_US 1
  65. #define LDO_SETTLING_DELAY_US 1
  66. #define MDD_SETTLING_DELAY_US 5
  67. #define _KRAIT_MASK(BITS, POS) (((u32)(1 << (BITS)) - 1) << POS)
  68. #define KRAIT_MASK(LEFT_BIT_POS, RIGHT_BIT_POS) \
  69. _KRAIT_MASK(LEFT_BIT_POS - RIGHT_BIT_POS + 1, RIGHT_BIT_POS)
  70. #define APC_SECURE 0x00000000
  71. #define CPU_PWR_CTL 0x00000004
  72. #define APC_PWR_STATUS 0x00000008
  73. #define APC_TEST_BUS_SEL 0x0000000C
  74. #define CPU_TRGTD_DBG_RST 0x00000010
  75. #define APC_PWR_GATE_CTL 0x00000014
  76. #define APC_LDO_VREF_SET 0x00000018
  77. #define APC_PWR_GATE_MODE 0x0000001C
  78. #define APC_PWR_GATE_DLY 0x00000020
  79. #define PWR_GATE_CONFIG 0x00000044
  80. #define VERSION 0x00000FD0
  81. /* MDD register group */
  82. #define MDD_CONFIG_CTL 0x00000000
  83. #define MDD_MODE 0x00000010
  84. #define PHASE_SCALING_REF 4
  85. /* bit definitions for phase scaling eFuses */
  86. #define PHASE_SCALING_EFUSE_VERSION_POS 26
  87. #define PHASE_SCALING_EFUSE_VERSION_MASK KRAIT_MASK(27, 26)
  88. #define PHASE_SCALING_EFUSE_VERSION_SET 1
  89. #define PHASE_SCALING_EFUSE_VALUE_POS 16
  90. #define PHASE_SCALING_EFUSE_VALUE_MASK KRAIT_MASK(18, 16)
  91. /* bit definitions for APC_PWR_GATE_CTL */
  92. #define BHS_CNT_BIT_POS 24
  93. #define BHS_CNT_MASK KRAIT_MASK(31, 24)
  94. #define BHS_CNT_DEFAULT 64
  95. #define CLK_SRC_SEL_BIT_POS 15
  96. #define CLK_SRC_SEL_MASK KRAIT_MASK(15, 15)
  97. #define CLK_SRC_DEFAULT 0
  98. #define LDO_PWR_DWN_BIT_POS 16
  99. #define LDO_PWR_DWN_MASK KRAIT_MASK(21, 16)
  100. #define LDO_BYP_BIT_POS 8
  101. #define LDO_BYP_MASK KRAIT_MASK(13, 8)
  102. #define BHS_SEG_EN_BIT_POS 1
  103. #define BHS_SEG_EN_MASK KRAIT_MASK(6, 1)
  104. #define BHS_SEG_EN_DEFAULT 0x3F
  105. #define BHS_EN_BIT_POS 0
  106. #define BHS_EN_MASK KRAIT_MASK(0, 0)
  107. /* bit definitions for APC_LDO_VREF_SET register */
  108. #define VREF_RET_POS 8
  109. #define VREF_RET_MASK KRAIT_MASK(14, 8)
  110. #define VREF_LDO_BIT_POS 0
  111. #define VREF_LDO_MASK KRAIT_MASK(6, 0)
  112. #define PWR_GATE_SWITCH_MODE_POS 4
  113. #define PWR_GATE_SWITCH_MODE_MASK KRAIT_MASK(6, 4)
  114. #define PWR_GATE_SWITCH_MODE_PC 0
  115. #define PWR_GATE_SWITCH_MODE_LDO 1
  116. #define PWR_GATE_SWITCH_MODE_BHS 2
  117. #define PWR_GATE_SWITCH_MODE_DT 3
  118. #define PWR_GATE_SWITCH_MODE_RET 4
  119. #define LDO_HDROOM_MIN 50000
  120. #define LDO_HDROOM_MAX 250000
  121. #define LDO_UV_MIN 465000
  122. #define LDO_UV_MAX 750000
  123. #define LDO_TH_MIN 600000
  124. #define LDO_TH_MAX 900000
  125. #define LDO_DELTA_MIN 10000
  126. #define LDO_DELTA_MAX 100000
  127. #define MSM_L2_SAW_PHYS 0xf9012000
  128. #define MSM_MDD_BASE_PHYS 0xf908a800
  129. #define KPSS_VERSION_2P0 0x20000000
  130. /**
  131. * struct pmic_gang_vreg -
  132. * @name: the string used to represent the gang
  133. * @pmic_vmax_uV: the current pmic gang voltage
  134. * @pmic_phase_count: the number of phases turned on in the gang
  135. * @krait_power_vregs: a list of krait consumers this gang supplies to
  136. * @krait_power_vregs_lock: lock to prevent simultaneous access to the list
  137. * and its nodes. This needs to be taken by each
  138. * regulator's callback functions to prevent
  139. * simultaneous updates to the pmic's phase
  140. * voltage.
  141. * @apcs_gcc_base: virtual address of the APCS GCC registers
  142. * @manage_phases: begin phase control
  143. * @pfm_threshold: the sum of coefficients below which PFM can be
  144. * enabled
  145. * @efuse_phase_scaling_factor: Phase scaling factor read out of an eFuse. When
  146. * calculating the appropriate phase count to use,
  147. * coeff2 is multiplied by this factor and then
  148. * divided by PHASE_SCALING_REF.
  149. */
  150. struct pmic_gang_vreg {
  151. const char *name;
  152. int pmic_vmax_uV;
  153. int pmic_phase_count;
  154. struct list_head krait_power_vregs;
  155. struct mutex krait_power_vregs_lock;
  156. bool pfm_mode;
  157. int pmic_min_uV_for_retention;
  158. bool retention_enabled;
  159. bool use_phase_switching;
  160. void __iomem *apcs_gcc_base;
  161. bool manage_phases;
  162. int pfm_threshold;
  163. bool force_auto_mode;
  164. int efuse_phase_scaling_factor;
  165. };
  166. static struct pmic_gang_vreg *the_gang;
  167. enum krait_supply_mode {
  168. HS_MODE = REGULATOR_MODE_NORMAL,
  169. LDO_MODE = REGULATOR_MODE_IDLE,
  170. };
  171. #define WAIT_FOR_LOAD 0x2
  172. #define WAIT_FOR_VOLTAGE 0x1
  173. struct krait_power_vreg {
  174. struct list_head link;
  175. struct regulator_desc desc;
  176. struct regulator_dev *rdev;
  177. const char *name;
  178. struct pmic_gang_vreg *pvreg;
  179. int uV;
  180. int load;
  181. enum krait_supply_mode mode;
  182. void __iomem *reg_base;
  183. void __iomem *mdd_base;
  184. int ldo_default_uV;
  185. int retention_uV;
  186. int headroom_uV;
  187. int ldo_threshold_uV;
  188. int ldo_delta_uV;
  189. int cpu_num;
  190. bool ldo_disable;
  191. int coeff1;
  192. int coeff2;
  193. bool reg_en;
  194. int online_at_probe;
  195. bool force_bhs;
  196. };
  197. DEFINE_PER_CPU(struct krait_power_vreg *, krait_vregs);
  198. static u32 version;
  199. static int use_efuse_phase_scaling_factor;
  200. module_param_named(
  201. use_phase_scaling_efuse, use_efuse_phase_scaling_factor, int,
  202. S_IRUSR | S_IWUSR
  203. );
  204. static int is_between(int left, int right, int value)
  205. {
  206. if (left >= right && left >= value && value >= right)
  207. return 1;
  208. if (left <= right && left <= value && value <= right)
  209. return 1;
  210. return 0;
  211. }
  212. static void krait_masked_write(struct krait_power_vreg *kvreg,
  213. int reg, uint32_t mask, uint32_t val)
  214. {
  215. uint32_t reg_val;
  216. reg_val = readl_relaxed(kvreg->reg_base + reg);
  217. reg_val &= ~mask;
  218. reg_val |= (val & mask);
  219. writel_relaxed(reg_val, kvreg->reg_base + reg);
  220. /*
  221. * Barrier to ensure that the reads and writes from
  222. * other regulator regions (they are 1k apart) execute in
  223. * order to the above write.
  224. */
  225. mb();
  226. }
  227. static int get_krait_retention_ldo_uv(struct krait_power_vreg *kvreg)
  228. {
  229. uint32_t reg_val;
  230. int uV;
  231. reg_val = readl_relaxed(kvreg->reg_base + APC_LDO_VREF_SET);
  232. reg_val &= VREF_RET_MASK;
  233. reg_val >>= VREF_RET_POS;
  234. if (reg_val == 0)
  235. uV = 0;
  236. else
  237. uV = KRAIT_LDO_VOLTAGE_OFFSET + reg_val * KRAIT_LDO_STEP;
  238. return uV;
  239. }
  240. static int get_krait_ldo_uv(struct krait_power_vreg *kvreg)
  241. {
  242. uint32_t reg_val;
  243. int uV;
  244. reg_val = readl_relaxed(kvreg->reg_base + APC_LDO_VREF_SET);
  245. reg_val &= VREF_LDO_MASK;
  246. reg_val >>= VREF_LDO_BIT_POS;
  247. if (reg_val == 0)
  248. uV = 0;
  249. else
  250. uV = KRAIT_LDO_VOLTAGE_OFFSET + reg_val * KRAIT_LDO_STEP;
  251. return uV;
  252. }
  253. static int set_krait_retention_uv(struct krait_power_vreg *kvreg, int uV)
  254. {
  255. uint32_t reg_val;
  256. reg_val = DIV_ROUND_UP(uV - KRAIT_LDO_VOLTAGE_OFFSET, KRAIT_LDO_STEP);
  257. krait_masked_write(kvreg, APC_LDO_VREF_SET, VREF_RET_MASK,
  258. reg_val << VREF_RET_POS);
  259. return 0;
  260. }
  261. static int set_krait_ldo_uv(struct krait_power_vreg *kvreg, int uV)
  262. {
  263. uint32_t reg_val;
  264. reg_val = DIV_ROUND_UP(uV - KRAIT_LDO_VOLTAGE_OFFSET, KRAIT_LDO_STEP);
  265. krait_masked_write(kvreg, APC_LDO_VREF_SET, VREF_LDO_MASK,
  266. reg_val << VREF_LDO_BIT_POS);
  267. return 0;
  268. }
  269. static int __krait_power_mdd_enable(struct krait_power_vreg *kvreg, bool on)
  270. {
  271. if (on) {
  272. writel_relaxed(0x00000002, kvreg->mdd_base + MDD_MODE);
  273. /* complete the above write before the delay */
  274. mb();
  275. udelay(MDD_SETTLING_DELAY_US);
  276. } else {
  277. writel_relaxed(0x00000000, kvreg->mdd_base + MDD_MODE);
  278. /*
  279. * complete the above write before other accesses
  280. * to krait regulator
  281. */
  282. mb();
  283. }
  284. return 0;
  285. }
  286. #define COEFF2_UV_THRESHOLD 850000
  287. static int get_coeff2(int krait_uV, int phase_scaling_factor)
  288. {
  289. int coeff2 = 0;
  290. int krait_mV = krait_uV / 1000;
  291. if (krait_uV <= COEFF2_UV_THRESHOLD)
  292. coeff2 = (612229 * krait_mV) / 1000 - 211258;
  293. else
  294. coeff2 = (892564 * krait_mV) / 1000 - 449543;
  295. coeff2 = coeff2 * phase_scaling_factor / PHASE_SCALING_REF;
  296. return coeff2;
  297. }
  298. static int get_coeff1(int actual_uV, int requested_uV, int load)
  299. {
  300. int ratio = actual_uV * 1000 / requested_uV;
  301. int coeff1 = 330 * load + (load * 673 * ratio / 1000);
  302. return coeff1;
  303. }
  304. static int get_coeff_total(struct krait_power_vreg *from)
  305. {
  306. int coeff_total = 0;
  307. struct krait_power_vreg *kvreg;
  308. struct pmic_gang_vreg *pvreg = from->pvreg;
  309. int phase_scaling_factor = PHASE_SCALING_REF;
  310. if (use_efuse_phase_scaling_factor)
  311. phase_scaling_factor = pvreg->efuse_phase_scaling_factor;
  312. list_for_each_entry(kvreg, &pvreg->krait_power_vregs, link) {
  313. if (!kvreg->reg_en)
  314. continue;
  315. if (kvreg->mode == LDO_MODE) {
  316. kvreg->coeff1 =
  317. get_coeff1(kvreg->uV - kvreg->ldo_delta_uV,
  318. kvreg->uV, kvreg->load);
  319. kvreg->coeff2 =
  320. get_coeff2(kvreg->uV - kvreg->ldo_delta_uV,
  321. phase_scaling_factor);
  322. } else {
  323. kvreg->coeff1 =
  324. get_coeff1(pvreg->pmic_vmax_uV,
  325. kvreg->uV, kvreg->load);
  326. kvreg->coeff2 = get_coeff2(pvreg->pmic_vmax_uV,
  327. phase_scaling_factor);
  328. }
  329. coeff_total += kvreg->coeff1 + kvreg->coeff2;
  330. }
  331. return coeff_total;
  332. }
  333. static int set_pmic_gang_phases(struct pmic_gang_vreg *pvreg, int phase_count)
  334. {
  335. pr_debug("programming phase_count = %d\n", phase_count);
  336. if (pvreg->use_phase_switching)
  337. /*
  338. * note the PMIC sets the phase count to one more than
  339. * the value in the register - hence subtract 1 from it
  340. */
  341. return msm_spm_apcs_set_phase(phase_count - 1);
  342. else
  343. return 0;
  344. }
  345. static int num_online(struct pmic_gang_vreg *pvreg)
  346. {
  347. int online_total = 0;
  348. struct krait_power_vreg *kvreg;
  349. list_for_each_entry(kvreg, &pvreg->krait_power_vregs, link) {
  350. if (kvreg->reg_en)
  351. online_total++;
  352. }
  353. return online_total;
  354. }
  355. static int get_total_load(struct krait_power_vreg *from)
  356. {
  357. int load_total = 0;
  358. struct krait_power_vreg *kvreg;
  359. struct pmic_gang_vreg *pvreg = from->pvreg;
  360. list_for_each_entry(kvreg, &pvreg->krait_power_vregs, link) {
  361. if (!kvreg->reg_en)
  362. continue;
  363. load_total += kvreg->load;
  364. }
  365. return load_total;
  366. }
  367. static bool enable_phase_management(struct pmic_gang_vreg *pvreg)
  368. {
  369. struct krait_power_vreg *kvreg;
  370. list_for_each_entry(kvreg, &pvreg->krait_power_vregs, link) {
  371. pr_debug("%s online_at_probe:0x%x\n", kvreg->name,
  372. kvreg->online_at_probe);
  373. if (kvreg->online_at_probe)
  374. return false;
  375. }
  376. return true;
  377. }
  378. #define PMIC_FTS_MODE_PFM 0x00
  379. #define PMIC_FTS_MODE_PWM 0x80
  380. #define PMIC_FTS_MODE_AUTO 0x40
  381. #define ONE_PHASE_COEFF 1000000
  382. #define TWO_PHASE_COEFF 2000000
  383. #define PWM_SETTLING_TIME_US 50
  384. #define PHASE_SETTLING_TIME_US 50
  385. static unsigned int pmic_gang_set_phases(struct krait_power_vreg *from,
  386. int coeff_total)
  387. {
  388. struct pmic_gang_vreg *pvreg = from->pvreg;
  389. int phase_count;
  390. int rc = 0;
  391. int n_online = num_online(pvreg);
  392. int load_total;
  393. load_total = get_total_load(from);
  394. if (pvreg->manage_phases == false) {
  395. if (enable_phase_management(pvreg))
  396. pvreg->manage_phases = true;
  397. else
  398. return 0;
  399. }
  400. if (!pvreg->force_auto_mode) {
  401. /* First check if the coeff is low for PFM mode */
  402. if (load_total <= pvreg->pfm_threshold
  403. && n_online == 1
  404. && krait_pmic_is_ready()) {
  405. if (!pvreg->pfm_mode) {
  406. rc = msm_spm_enable_fts_lpm(PMIC_FTS_MODE_PFM);
  407. if (rc) {
  408. pr_err("%s PFM en failed load_t %d rc = %d\n",
  409. from->name, load_total, rc);
  410. return rc;
  411. }
  412. krait_pmic_post_pfm_entry();
  413. pvreg->pfm_mode = true;
  414. }
  415. return rc;
  416. }
  417. /* coeff is high switch to PWM mode before changing phases */
  418. if (pvreg->pfm_mode) {
  419. rc = msm_spm_enable_fts_lpm(PMIC_FTS_MODE_PWM);
  420. if (rc) {
  421. pr_err("%s PFM exit failed load %d rc = %d\n",
  422. from->name, coeff_total, rc);
  423. return rc;
  424. }
  425. pvreg->pfm_mode = false;
  426. krait_pmic_post_pwm_entry();
  427. udelay(PWM_SETTLING_TIME_US);
  428. }
  429. }
  430. /* calculate phases */
  431. if (coeff_total < ONE_PHASE_COEFF)
  432. phase_count = 1;
  433. else if (coeff_total < TWO_PHASE_COEFF)
  434. phase_count = 2;
  435. else
  436. phase_count = 4;
  437. /* don't increase the phase count higher than number of online cpus */
  438. if (phase_count > n_online)
  439. phase_count = n_online;
  440. if (phase_count != pvreg->pmic_phase_count) {
  441. if (pvreg->force_auto_mode && phase_count > 1) {
  442. /* Disable Auto Mode prior to setting phase count > 1 */
  443. rc = msm_spm_enable_fts_lpm(PMIC_FTS_MODE_PWM);
  444. if (rc) {
  445. dev_err(&from->rdev->dev,
  446. "failed to force PWM, rc=%d\n", rc);
  447. return rc;
  448. }
  449. /* complete the writes before switching phases */
  450. mb();
  451. }
  452. rc = set_pmic_gang_phases(pvreg, phase_count);
  453. if (rc < 0) {
  454. pr_err("%s failed set phase %d rc = %d\n",
  455. from->name, phase_count, rc);
  456. return rc;
  457. }
  458. /* complete the writes before the delay */
  459. mb();
  460. /*
  461. * delay until the phases are settled when
  462. * the count is raised
  463. */
  464. if (phase_count > pvreg->pmic_phase_count)
  465. udelay(PHASE_SETTLING_TIME_US);
  466. if (pvreg->force_auto_mode && phase_count == 1) {
  467. /* Enable Auto Mode after setting phase count = 1 */
  468. rc = msm_spm_enable_fts_lpm(PMIC_FTS_MODE_AUTO);
  469. if (rc) {
  470. dev_err(&from->rdev->dev,
  471. "failed to force AUTO, rc=%d\n", rc);
  472. return rc;
  473. }
  474. /* complete the writes before any other access */
  475. mb();
  476. }
  477. pvreg->pmic_phase_count = phase_count;
  478. }
  479. return rc;
  480. }
  481. static unsigned int _get_optimum_mode(struct regulator_dev *rdev,
  482. int input_uV, int output_uV, int load)
  483. {
  484. struct krait_power_vreg *kvreg = rdev_get_drvdata(rdev);
  485. int coeff_total;
  486. int rc;
  487. kvreg->online_at_probe &= ~WAIT_FOR_LOAD;
  488. coeff_total = get_coeff_total(kvreg);
  489. rc = pmic_gang_set_phases(kvreg, coeff_total);
  490. if (rc < 0) {
  491. dev_err(&rdev->dev, "%s failed set mode %d rc = %d\n",
  492. kvreg->name, coeff_total, rc);
  493. }
  494. return kvreg->mode;
  495. }
  496. static unsigned int krait_power_get_optimum_mode(struct regulator_dev *rdev,
  497. int input_uV, int output_uV, int load_uA)
  498. {
  499. struct krait_power_vreg *kvreg = rdev_get_drvdata(rdev);
  500. struct pmic_gang_vreg *pvreg = kvreg->pvreg;
  501. int rc;
  502. mutex_lock(&pvreg->krait_power_vregs_lock);
  503. kvreg->load = load_uA;
  504. if (!kvreg->reg_en) {
  505. mutex_unlock(&pvreg->krait_power_vregs_lock);
  506. return kvreg->mode;
  507. }
  508. rc = _get_optimum_mode(rdev, input_uV, output_uV, load_uA);
  509. mutex_unlock(&pvreg->krait_power_vregs_lock);
  510. return rc;
  511. }
  512. static int krait_power_set_mode(struct regulator_dev *rdev, unsigned int mode)
  513. {
  514. return 0;
  515. }
  516. static unsigned int krait_power_get_mode(struct regulator_dev *rdev)
  517. {
  518. struct krait_power_vreg *kvreg = rdev_get_drvdata(rdev);
  519. return kvreg->mode;
  520. }
  521. static void __switch_to_using_bhs(void *info)
  522. {
  523. struct krait_power_vreg *kvreg = info;
  524. /* enable bhs */
  525. if (version > KPSS_VERSION_2P0) {
  526. krait_masked_write(kvreg, APC_PWR_GATE_MODE,
  527. PWR_GATE_SWITCH_MODE_MASK,
  528. PWR_GATE_SWITCH_MODE_BHS << PWR_GATE_SWITCH_MODE_POS);
  529. /* complete the writes before the delay */
  530. mb();
  531. /* wait for the bhs to settle */
  532. udelay(BHS_SETTLING_DELAY_US);
  533. } else {
  534. /* enable bhs */
  535. krait_masked_write(kvreg, APC_PWR_GATE_CTL,
  536. BHS_EN_MASK, BHS_EN_MASK);
  537. /* complete the above write before the delay */
  538. mb();
  539. /* wait for the bhs to settle */
  540. udelay(BHS_SETTLING_DELAY_US);
  541. /* Turn on BHS segments */
  542. krait_masked_write(kvreg, APC_PWR_GATE_CTL, BHS_SEG_EN_MASK,
  543. BHS_SEG_EN_DEFAULT << BHS_SEG_EN_BIT_POS);
  544. /* complete the above write before the delay */
  545. mb();
  546. /*
  547. * wait for the bhs to settle - note that
  548. * after the voltage has settled both BHS and LDO are supplying
  549. * power to the krait. This avoids glitches during switching
  550. */
  551. udelay(BHS_SETTLING_DELAY_US);
  552. /*
  553. * enable ldo bypass - the krait is powered still by LDO since
  554. * LDO is enabled
  555. */
  556. krait_masked_write(kvreg, APC_PWR_GATE_CTL,
  557. LDO_BYP_MASK, LDO_BYP_MASK);
  558. /*
  559. * disable ldo - only the BHS provides voltage to
  560. * the cpu after this
  561. */
  562. krait_masked_write(kvreg, APC_PWR_GATE_CTL,
  563. LDO_PWR_DWN_MASK, LDO_PWR_DWN_MASK);
  564. }
  565. kvreg->mode = HS_MODE;
  566. pr_debug("%s using BHS\n", kvreg->name);
  567. }
  568. static void __switch_to_using_ldo(void *info)
  569. {
  570. struct krait_power_vreg *kvreg = info;
  571. if (kvreg->ldo_disable)
  572. return;
  573. /*
  574. * if the krait is in ldo mode and a voltage change is requested on the
  575. * ldo switch to using hs before changing ldo voltage
  576. */
  577. if (kvreg->mode == LDO_MODE)
  578. __switch_to_using_bhs(kvreg);
  579. set_krait_ldo_uv(kvreg, kvreg->uV - kvreg->ldo_delta_uV);
  580. if (version > KPSS_VERSION_2P0) {
  581. krait_masked_write(kvreg, APC_PWR_GATE_MODE,
  582. PWR_GATE_SWITCH_MODE_MASK,
  583. PWR_GATE_SWITCH_MODE_LDO << PWR_GATE_SWITCH_MODE_POS);
  584. /* complete the writes before the delay */
  585. mb();
  586. /* wait for the ldo to settle */
  587. udelay(LDO_SETTLING_DELAY_US);
  588. } else {
  589. /*
  590. * enable ldo - note that both LDO and BHS are are supplying
  591. * voltage to the cpu after this. This avoids glitches during
  592. * switching from BHS to LDO.
  593. */
  594. krait_masked_write(kvreg, APC_PWR_GATE_CTL,
  595. LDO_PWR_DWN_MASK, 0);
  596. /* complete the writes before the delay */
  597. mb();
  598. /* wait for the ldo to settle */
  599. udelay(LDO_SETTLING_DELAY_US);
  600. /*
  601. * disable BHS and disable LDO bypass seperate from enabling
  602. * the LDO above.
  603. */
  604. krait_masked_write(kvreg, APC_PWR_GATE_CTL,
  605. BHS_EN_MASK | LDO_BYP_MASK, 0);
  606. krait_masked_write(kvreg, APC_PWR_GATE_CTL, BHS_SEG_EN_MASK, 0);
  607. }
  608. kvreg->mode = LDO_MODE;
  609. pr_debug("%s using LDO\n", kvreg->name);
  610. }
  611. static int switch_to_using_ldo(struct krait_power_vreg *kvreg)
  612. {
  613. int uV = kvreg->uV - kvreg->ldo_delta_uV;
  614. int ldo_uV = DIV_ROUND_UP(uV, KRAIT_LDO_STEP) * KRAIT_LDO_STEP;
  615. if (kvreg->mode == LDO_MODE && get_krait_ldo_uv(kvreg) == ldo_uV)
  616. return 0;
  617. return smp_call_function_single(kvreg->cpu_num,
  618. __switch_to_using_ldo, kvreg, 1);
  619. }
  620. static int switch_to_using_bhs(struct krait_power_vreg *kvreg)
  621. {
  622. if (kvreg->mode == HS_MODE)
  623. return 0;
  624. return smp_call_function_single(kvreg->cpu_num,
  625. __switch_to_using_bhs, kvreg, 1);
  626. }
  627. static int set_pmic_gang_voltage(struct pmic_gang_vreg *pvreg, int uV)
  628. {
  629. int setpoint;
  630. int rc;
  631. if (pvreg->pmic_vmax_uV == uV)
  632. return 0;
  633. pr_debug("%d\n", uV);
  634. if (uV < PMIC_VOLTAGE_MIN) {
  635. pr_err("requested %d < %d, restricting it to %d\n",
  636. uV, PMIC_VOLTAGE_MIN, PMIC_VOLTAGE_MIN);
  637. uV = PMIC_VOLTAGE_MIN;
  638. }
  639. if (uV > PMIC_VOLTAGE_MAX) {
  640. pr_err("requested %d > %d, restricting it to %d\n",
  641. uV, PMIC_VOLTAGE_MAX, PMIC_VOLTAGE_MAX);
  642. uV = PMIC_VOLTAGE_MAX;
  643. }
  644. if (uV < pvreg->pmic_min_uV_for_retention) {
  645. if (pvreg->retention_enabled) {
  646. pr_debug("Disabling Retention pmic = %duV, pmic_min_uV_for_retention = %duV",
  647. uV, pvreg->pmic_min_uV_for_retention);
  648. msm_pm_enable_retention(false);
  649. pvreg->retention_enabled = false;
  650. }
  651. } else {
  652. if (!pvreg->retention_enabled) {
  653. pr_debug("Enabling Retention pmic = %duV, pmic_min_uV_for_retention = %duV",
  654. uV, pvreg->pmic_min_uV_for_retention);
  655. msm_pm_enable_retention(true);
  656. pvreg->retention_enabled = true;
  657. }
  658. }
  659. setpoint = DIV_ROUND_UP(uV, LV_RANGE_STEP);
  660. rc = msm_spm_set_vdd(0, setpoint); /* value of CPU is don't care */
  661. if (rc < 0)
  662. pr_err("could not set %duV setpt = 0x%x rc = %d\n",
  663. uV, setpoint, rc);
  664. else
  665. pvreg->pmic_vmax_uV = uV;
  666. return rc;
  667. }
  668. static int configure_ldo_or_hs_one(struct krait_power_vreg *kvreg, int vmax)
  669. {
  670. int rc;
  671. if (!kvreg->reg_en)
  672. return 0;
  673. if (kvreg->force_bhs)
  674. /*
  675. * The cpu is in transitory phase where it is being
  676. * prepared to be offlined or onlined and is being
  677. * forced to run on BHS during that time
  678. */
  679. return 0;
  680. if (kvreg->uV <= kvreg->ldo_threshold_uV
  681. && kvreg->uV - kvreg->ldo_delta_uV + kvreg->headroom_uV
  682. <= vmax) {
  683. rc = switch_to_using_ldo(kvreg);
  684. if (rc < 0) {
  685. pr_err("could not switch %s to ldo rc = %d\n",
  686. kvreg->name, rc);
  687. return rc;
  688. }
  689. } else {
  690. rc = switch_to_using_bhs(kvreg);
  691. if (rc < 0) {
  692. pr_err("could not switch %s to hs rc = %d\n",
  693. kvreg->name, rc);
  694. return rc;
  695. }
  696. }
  697. return 0;
  698. }
  699. static int configure_ldo_or_hs_all(struct krait_power_vreg *from, int vmax)
  700. {
  701. struct pmic_gang_vreg *pvreg = from->pvreg;
  702. struct krait_power_vreg *kvreg;
  703. int rc = 0;
  704. list_for_each_entry(kvreg, &pvreg->krait_power_vregs, link) {
  705. rc = configure_ldo_or_hs_one(kvreg, vmax);
  706. if (rc) {
  707. pr_err("could not switch %s\n", kvreg->name);
  708. break;
  709. }
  710. }
  711. return rc;
  712. }
  713. #define SLEW_RATE 2395
  714. static int krait_voltage_increase(struct krait_power_vreg *from,
  715. int vmax)
  716. {
  717. struct pmic_gang_vreg *pvreg = from->pvreg;
  718. int rc = 0;
  719. int settling_us = DIV_ROUND_UP(vmax - pvreg->pmic_vmax_uV, SLEW_RATE);
  720. /*
  721. * since krait voltage is increasing set the gang voltage
  722. * prior to changing ldo/hs states of the requesting krait
  723. */
  724. rc = set_pmic_gang_voltage(pvreg, vmax);
  725. if (rc < 0) {
  726. dev_err(&from->rdev->dev, "%s failed set voltage %d rc = %d\n",
  727. pvreg->name, vmax, rc);
  728. return rc;
  729. }
  730. /* complete the above writes before the delay */
  731. mb();
  732. /* delay until the voltage is settled when it is raised */
  733. udelay(settling_us);
  734. rc = configure_ldo_or_hs_all(from, vmax);
  735. if (rc < 0) {
  736. dev_err(&from->rdev->dev, "%s failed ldo/hs conf %d rc = %d\n",
  737. pvreg->name, vmax, rc);
  738. }
  739. return rc;
  740. }
  741. static int krait_voltage_decrease(struct krait_power_vreg *from,
  742. int vmax)
  743. {
  744. struct pmic_gang_vreg *pvreg = from->pvreg;
  745. int rc = 0;
  746. /*
  747. * since krait voltage is decreasing ldos might get out of their
  748. * operating range. Hence configure such kraits to be in hs mode prior
  749. * to setting the pmic gang voltage
  750. */
  751. rc = configure_ldo_or_hs_all(from, vmax);
  752. if (rc < 0) {
  753. dev_err(&from->rdev->dev, "%s failed ldo/hs conf %d rc = %d\n",
  754. pvreg->name, vmax, rc);
  755. return rc;
  756. }
  757. rc = set_pmic_gang_voltage(pvreg, vmax);
  758. if (rc < 0) {
  759. dev_err(&from->rdev->dev, "%s failed set voltage %d rc = %d\n",
  760. pvreg->name, vmax, rc);
  761. }
  762. return rc;
  763. }
  764. static int krait_power_get_voltage(struct regulator_dev *rdev)
  765. {
  766. struct krait_power_vreg *kvreg = rdev_get_drvdata(rdev);
  767. return kvreg->uV;
  768. }
  769. static int get_vmax(struct pmic_gang_vreg *pvreg)
  770. {
  771. int vmax = 0;
  772. int v;
  773. struct krait_power_vreg *kvreg;
  774. list_for_each_entry(kvreg, &pvreg->krait_power_vregs, link) {
  775. if (!kvreg->reg_en)
  776. continue;
  777. v = kvreg->uV;
  778. if (vmax < v)
  779. vmax = v;
  780. }
  781. return vmax;
  782. }
  783. #define ROUND_UP_VOLTAGE(v, res) (DIV_ROUND_UP(v, res) * res)
  784. static int _set_voltage(struct regulator_dev *rdev,
  785. int orig_krait_uV, int requested_uV)
  786. {
  787. struct krait_power_vreg *kvreg = rdev_get_drvdata(rdev);
  788. struct pmic_gang_vreg *pvreg = kvreg->pvreg;
  789. int rc;
  790. int vmax;
  791. int coeff_total;
  792. pr_debug("%s: %d to %d\n", kvreg->name, orig_krait_uV, requested_uV);
  793. /*
  794. * Assign the voltage before updating the gang voltage as we iterate
  795. * over all the core voltages and choose HS or LDO for each of them
  796. */
  797. kvreg->uV = requested_uV;
  798. vmax = get_vmax(pvreg);
  799. /* round up the pmic voltage as per its resolution */
  800. vmax = ROUND_UP_VOLTAGE(vmax, LV_RANGE_STEP);
  801. if (requested_uV > orig_krait_uV)
  802. rc = krait_voltage_increase(kvreg, vmax);
  803. else
  804. rc = krait_voltage_decrease(kvreg, vmax);
  805. if (rc < 0) {
  806. pr_err("%s failed to set %duV from %duV rc = %d\n",
  807. kvreg->name, requested_uV, orig_krait_uV, rc);
  808. }
  809. kvreg->online_at_probe &= ~WAIT_FOR_VOLTAGE;
  810. coeff_total = get_coeff_total(kvreg);
  811. /* adjust the phases since coeff2 would have changed */
  812. rc = pmic_gang_set_phases(kvreg, coeff_total);
  813. return rc;
  814. }
  815. static int krait_power_set_voltage(struct regulator_dev *rdev,
  816. int min_uV, int max_uV, unsigned *selector)
  817. {
  818. struct krait_power_vreg *kvreg = rdev_get_drvdata(rdev);
  819. struct pmic_gang_vreg *pvreg = kvreg->pvreg;
  820. int rc;
  821. /*
  822. * if the voltage requested is below LDO_THRESHOLD this cpu could
  823. * switch to LDO mode. Hence round the voltage as per the LDO
  824. * resolution
  825. */
  826. if (min_uV < kvreg->ldo_threshold_uV) {
  827. if (min_uV < KRAIT_LDO_VOLTAGE_MIN)
  828. min_uV = KRAIT_LDO_VOLTAGE_MIN;
  829. min_uV = ROUND_UP_VOLTAGE(min_uV, KRAIT_LDO_STEP);
  830. }
  831. mutex_lock(&pvreg->krait_power_vregs_lock);
  832. if (!kvreg->reg_en) {
  833. kvreg->uV = min_uV;
  834. mutex_unlock(&pvreg->krait_power_vregs_lock);
  835. return 0;
  836. }
  837. rc = _set_voltage(rdev, kvreg->uV, min_uV);
  838. mutex_unlock(&pvreg->krait_power_vregs_lock);
  839. return rc;
  840. }
  841. static int krait_power_is_enabled(struct regulator_dev *rdev)
  842. {
  843. struct krait_power_vreg *kvreg = rdev_get_drvdata(rdev);
  844. return kvreg->reg_en;
  845. }
  846. static int krait_power_enable(struct regulator_dev *rdev)
  847. {
  848. struct krait_power_vreg *kvreg = rdev_get_drvdata(rdev);
  849. struct pmic_gang_vreg *pvreg = kvreg->pvreg;
  850. int rc;
  851. mutex_lock(&pvreg->krait_power_vregs_lock);
  852. pr_debug("enable %s\n", kvreg->name);
  853. __krait_power_mdd_enable(kvreg, true);
  854. kvreg->reg_en = true;
  855. rc = _get_optimum_mode(rdev, kvreg->uV, kvreg->uV, kvreg->load);
  856. if (rc < 0)
  857. goto en_err;
  858. /*
  859. * since the core is being enabled, behave as if it is increasing
  860. * the core voltage
  861. */
  862. rc = _set_voltage(rdev, 0, kvreg->uV);
  863. en_err:
  864. mutex_unlock(&pvreg->krait_power_vregs_lock);
  865. return rc;
  866. }
  867. static int krait_power_disable(struct regulator_dev *rdev)
  868. {
  869. struct krait_power_vreg *kvreg = rdev_get_drvdata(rdev);
  870. struct pmic_gang_vreg *pvreg = kvreg->pvreg;
  871. int rc;
  872. mutex_lock(&pvreg->krait_power_vregs_lock);
  873. pr_debug("disable %s\n", kvreg->name);
  874. kvreg->reg_en = false;
  875. rc = _get_optimum_mode(rdev, kvreg->uV, kvreg->uV, kvreg->load);
  876. if (rc < 0)
  877. goto dis_err;
  878. rc = _set_voltage(rdev, kvreg->uV, kvreg->uV);
  879. __krait_power_mdd_enable(kvreg, false);
  880. dis_err:
  881. mutex_unlock(&pvreg->krait_power_vregs_lock);
  882. return rc;
  883. }
  884. static struct regulator_ops krait_power_ops = {
  885. .get_voltage = krait_power_get_voltage,
  886. .set_voltage = krait_power_set_voltage,
  887. .get_optimum_mode = krait_power_get_optimum_mode,
  888. .set_mode = krait_power_set_mode,
  889. .get_mode = krait_power_get_mode,
  890. .enable = krait_power_enable,
  891. .disable = krait_power_disable,
  892. .is_enabled = krait_power_is_enabled,
  893. };
  894. static int krait_regulator_cpu_callback(struct notifier_block *nfb,
  895. unsigned long action, void *hcpu)
  896. {
  897. int cpu = (int)hcpu;
  898. struct krait_power_vreg *kvreg = per_cpu(krait_vregs, cpu);
  899. struct pmic_gang_vreg *pvreg = kvreg->pvreg;
  900. pr_debug("start state=0x%02x, cpu=%d is_online=%d\n",
  901. (int)action, cpu, cpu_online(cpu));
  902. switch (action & ~CPU_TASKS_FROZEN) {
  903. case CPU_UP_PREPARE:
  904. case CPU_UP_CANCELED:
  905. mutex_lock(&pvreg->krait_power_vregs_lock);
  906. kvreg->force_bhs = true;
  907. /*
  908. * cpu is offline at this point, force bhs on which ever cpu
  909. * this callback is running on
  910. */
  911. pr_debug("%s force BHS locally\n", kvreg->name);
  912. __switch_to_using_bhs(kvreg);
  913. mutex_unlock(&pvreg->krait_power_vregs_lock);
  914. break;
  915. case CPU_ONLINE:
  916. mutex_lock(&pvreg->krait_power_vregs_lock);
  917. kvreg->force_bhs = false;
  918. /*
  919. * switch the cpu to proper bhs/ldo, the cpu is online at this
  920. * point. The gang voltage and mode votes for the cpu were
  921. * submitted in CPU_UP_PREPARE phase
  922. */
  923. configure_ldo_or_hs_one(kvreg, pvreg->pmic_vmax_uV);
  924. mutex_unlock(&pvreg->krait_power_vregs_lock);
  925. break;
  926. case CPU_DOWN_PREPARE:
  927. mutex_lock(&pvreg->krait_power_vregs_lock);
  928. kvreg->force_bhs = true;
  929. /*
  930. * switch the cpu to run on bhs using smp function calls. Note
  931. * that the cpu is online at this point.
  932. */
  933. pr_debug("%s force BHS remotely\n", kvreg->name);
  934. switch_to_using_bhs(kvreg);
  935. mutex_unlock(&pvreg->krait_power_vregs_lock);
  936. break;
  937. case CPU_DOWN_FAILED:
  938. mutex_lock(&pvreg->krait_power_vregs_lock);
  939. kvreg->force_bhs = false;
  940. configure_ldo_or_hs_one(kvreg, pvreg->pmic_vmax_uV);
  941. mutex_unlock(&pvreg->krait_power_vregs_lock);
  942. break;
  943. default:
  944. break;
  945. }
  946. pr_debug("done state=0x%02x, cpu=%d is_online=%d\n",
  947. (int)action, cpu, cpu_online(cpu));
  948. return NOTIFY_OK;
  949. }
  950. static struct notifier_block krait_cpu_notifier = {
  951. .notifier_call = krait_regulator_cpu_callback,
  952. };
  953. static struct dentry *dent;
  954. static int get_retention_dbg_uV(void *data, u64 *val)
  955. {
  956. struct pmic_gang_vreg *pvreg = data;
  957. struct krait_power_vreg *kvreg;
  958. mutex_lock(&pvreg->krait_power_vregs_lock);
  959. if (!list_empty(&pvreg->krait_power_vregs)) {
  960. /* return the retention voltage on just the first cpu */
  961. kvreg = list_entry((&pvreg->krait_power_vregs)->next,
  962. typeof(*kvreg), link);
  963. *val = get_krait_retention_ldo_uv(kvreg);
  964. }
  965. mutex_unlock(&pvreg->krait_power_vregs_lock);
  966. return 0;
  967. }
  968. static int set_retention_dbg_uV(void *data, u64 val)
  969. {
  970. struct pmic_gang_vreg *pvreg = data;
  971. struct krait_power_vreg *kvreg;
  972. int retention_uV = val;
  973. if (!is_between(LDO_UV_MIN, LDO_UV_MAX, retention_uV))
  974. return -EINVAL;
  975. mutex_lock(&pvreg->krait_power_vregs_lock);
  976. list_for_each_entry(kvreg, &pvreg->krait_power_vregs, link) {
  977. kvreg->retention_uV = retention_uV;
  978. set_krait_retention_uv(kvreg, retention_uV);
  979. }
  980. mutex_unlock(&pvreg->krait_power_vregs_lock);
  981. return 0;
  982. }
  983. DEFINE_SIMPLE_ATTRIBUTE(retention_fops,
  984. get_retention_dbg_uV, set_retention_dbg_uV, "%llu\n");
  985. static void kvreg_ldo_voltage_init(struct krait_power_vreg *kvreg)
  986. {
  987. set_krait_retention_uv(kvreg, kvreg->retention_uV);
  988. set_krait_ldo_uv(kvreg, kvreg->ldo_default_uV);
  989. }
  990. #define CPU_PWR_CTL_ONLINE_MASK 0x80
  991. static void kvreg_hw_init(struct krait_power_vreg *kvreg)
  992. {
  993. /* setup the bandgap that configures the reference to the LDO */
  994. writel_relaxed(0x00000190, kvreg->mdd_base + MDD_CONFIG_CTL);
  995. /* Enable MDD */
  996. writel_relaxed(0x00000002, kvreg->mdd_base + MDD_MODE);
  997. mb();
  998. if (version > KPSS_VERSION_2P0) {
  999. /* Configure hardware sequencer delays. */
  1000. writel_relaxed(0x30430600, kvreg->reg_base + APC_PWR_GATE_DLY);
  1001. /* Enable the hardware sequencer in BHS mode. */
  1002. writel_relaxed(0x00000021, kvreg->reg_base + APC_PWR_GATE_MODE);
  1003. }
  1004. }
  1005. static void online_at_probe(struct krait_power_vreg *kvreg)
  1006. {
  1007. int online;
  1008. online = CPU_PWR_CTL_ONLINE_MASK
  1009. & readl_relaxed(kvreg->reg_base + CPU_PWR_CTL);
  1010. kvreg->online_at_probe
  1011. = online ? (WAIT_FOR_LOAD | WAIT_FOR_VOLTAGE) : 0x0;
  1012. if (online)
  1013. kvreg->force_bhs = false;
  1014. }
  1015. static void glb_init(void __iomem *apcs_gcc_base)
  1016. {
  1017. /* read kpss version */
  1018. version = readl_relaxed(apcs_gcc_base + VERSION);
  1019. pr_debug("version= 0x%x\n", version);
  1020. /* configure bi-modal switch */
  1021. if (version > KPSS_VERSION_2P0)
  1022. writel_relaxed(0x0308736E, apcs_gcc_base + PWR_GATE_CONFIG);
  1023. else
  1024. writel_relaxed(0x0008736E, apcs_gcc_base + PWR_GATE_CONFIG);
  1025. }
  1026. static int __devinit krait_power_probe(struct platform_device *pdev)
  1027. {
  1028. struct krait_power_vreg *kvreg;
  1029. struct resource *res, *res_mdd;
  1030. struct regulator_init_data *init_data = pdev->dev.platform_data;
  1031. int rc = 0;
  1032. int headroom_uV, retention_uV, ldo_default_uV, ldo_threshold_uV;
  1033. int ldo_delta_uV;
  1034. int cpu_num;
  1035. bool ldo_disable = false;
  1036. if (pdev->dev.of_node) {
  1037. /* Get init_data from device tree. */
  1038. init_data = of_get_regulator_init_data(&pdev->dev,
  1039. pdev->dev.of_node);
  1040. init_data->constraints.valid_ops_mask
  1041. |= REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_DRMS
  1042. | REGULATOR_CHANGE_MODE;
  1043. init_data->constraints.valid_modes_mask
  1044. |= REGULATOR_MODE_NORMAL | REGULATOR_MODE_IDLE
  1045. | REGULATOR_MODE_FAST;
  1046. init_data->constraints.input_uV = init_data->constraints.max_uV;
  1047. rc = of_property_read_u32(pdev->dev.of_node,
  1048. "qcom,headroom-voltage",
  1049. &headroom_uV);
  1050. if (rc < 0) {
  1051. pr_err("headroom-voltage missing rc=%d\n", rc);
  1052. return rc;
  1053. }
  1054. if (!is_between(LDO_HDROOM_MIN, LDO_HDROOM_MAX, headroom_uV)) {
  1055. pr_err("bad headroom-voltage = %d specified\n",
  1056. headroom_uV);
  1057. return -EINVAL;
  1058. }
  1059. rc = of_property_read_u32(pdev->dev.of_node,
  1060. "qcom,retention-voltage",
  1061. &retention_uV);
  1062. if (rc < 0) {
  1063. pr_err("retention-voltage missing rc=%d\n", rc);
  1064. return rc;
  1065. }
  1066. if (!is_between(LDO_UV_MIN, LDO_UV_MAX, retention_uV)) {
  1067. pr_err("bad retention-voltage = %d specified\n",
  1068. retention_uV);
  1069. return -EINVAL;
  1070. }
  1071. rc = of_property_read_u32(pdev->dev.of_node,
  1072. "qcom,ldo-default-voltage",
  1073. &ldo_default_uV);
  1074. if (rc < 0) {
  1075. pr_err("ldo-default-voltage missing rc=%d\n", rc);
  1076. return rc;
  1077. }
  1078. if (!is_between(LDO_UV_MIN, LDO_UV_MAX, ldo_default_uV)) {
  1079. pr_err("bad ldo-default-voltage = %d specified\n",
  1080. ldo_default_uV);
  1081. return -EINVAL;
  1082. }
  1083. rc = of_property_read_u32(pdev->dev.of_node,
  1084. "qcom,ldo-threshold-voltage",
  1085. &ldo_threshold_uV);
  1086. if (rc < 0) {
  1087. pr_err("ldo-threshold-voltage missing rc=%d\n", rc);
  1088. return rc;
  1089. }
  1090. if (!is_between(LDO_TH_MIN, LDO_TH_MAX, ldo_threshold_uV)) {
  1091. pr_err("bad ldo-threshold-voltage = %d specified\n",
  1092. ldo_threshold_uV);
  1093. return -EINVAL;
  1094. }
  1095. rc = of_property_read_u32(pdev->dev.of_node,
  1096. "qcom,ldo-delta-voltage",
  1097. &ldo_delta_uV);
  1098. if (rc < 0) {
  1099. pr_err("ldo-delta-voltage missing rc=%d\n", rc);
  1100. return rc;
  1101. }
  1102. if (!is_between(LDO_DELTA_MIN, LDO_DELTA_MAX, ldo_delta_uV)) {
  1103. pr_err("bad ldo-delta-voltage = %d specified\n",
  1104. ldo_delta_uV);
  1105. return -EINVAL;
  1106. }
  1107. rc = of_property_read_u32(pdev->dev.of_node,
  1108. "qcom,cpu-num",
  1109. &cpu_num);
  1110. if (cpu_num > num_possible_cpus()) {
  1111. pr_err("bad cpu-num= %d specified\n", cpu_num);
  1112. return -EINVAL;
  1113. }
  1114. ldo_disable = of_property_read_bool(pdev->dev.of_node,
  1115. "qcom,ldo-disable");
  1116. }
  1117. if (!init_data) {
  1118. dev_err(&pdev->dev, "init data required.\n");
  1119. return -EINVAL;
  1120. }
  1121. if (!init_data->constraints.name) {
  1122. dev_err(&pdev->dev,
  1123. "regulator name must be specified in constraints.\n");
  1124. return -EINVAL;
  1125. }
  1126. res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "acs");
  1127. if (!res) {
  1128. dev_err(&pdev->dev, "missing physical register addresses\n");
  1129. return -EINVAL;
  1130. }
  1131. res_mdd = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mdd");
  1132. if (!res_mdd) {
  1133. dev_err(&pdev->dev, "missing mdd register addresses\n");
  1134. return -EINVAL;
  1135. }
  1136. kvreg = devm_kzalloc(&pdev->dev,
  1137. sizeof(struct krait_power_vreg), GFP_KERNEL);
  1138. if (!kvreg) {
  1139. dev_err(&pdev->dev, "kzalloc failed.\n");
  1140. return -ENOMEM;
  1141. }
  1142. kvreg->reg_base = devm_ioremap(&pdev->dev,
  1143. res->start, resource_size(res));
  1144. kvreg->mdd_base = devm_ioremap(&pdev->dev,
  1145. res_mdd->start, resource_size(res));
  1146. kvreg->pvreg = the_gang;
  1147. kvreg->name = init_data->constraints.name;
  1148. kvreg->desc.name = kvreg->name;
  1149. kvreg->desc.ops = &krait_power_ops;
  1150. kvreg->desc.type = REGULATOR_VOLTAGE;
  1151. kvreg->desc.owner = THIS_MODULE;
  1152. kvreg->uV = CORE_VOLTAGE_BOOTUP;
  1153. kvreg->mode = HS_MODE;
  1154. kvreg->desc.ops = &krait_power_ops;
  1155. kvreg->headroom_uV = headroom_uV;
  1156. kvreg->retention_uV = retention_uV;
  1157. kvreg->ldo_default_uV = ldo_default_uV;
  1158. kvreg->ldo_threshold_uV = ldo_threshold_uV;
  1159. kvreg->ldo_delta_uV = ldo_delta_uV;
  1160. kvreg->cpu_num = cpu_num;
  1161. kvreg->ldo_disable = ldo_disable;
  1162. kvreg->force_bhs = true;
  1163. platform_set_drvdata(pdev, kvreg);
  1164. mutex_lock(&the_gang->krait_power_vregs_lock);
  1165. the_gang->pmic_min_uV_for_retention
  1166. = min(the_gang->pmic_min_uV_for_retention,
  1167. kvreg->retention_uV + kvreg->headroom_uV);
  1168. list_add_tail(&kvreg->link, &the_gang->krait_power_vregs);
  1169. mutex_unlock(&the_gang->krait_power_vregs_lock);
  1170. online_at_probe(kvreg);
  1171. kvreg_ldo_voltage_init(kvreg);
  1172. if (kvreg->cpu_num == 0)
  1173. kvreg_hw_init(kvreg);
  1174. per_cpu(krait_vregs, cpu_num) = kvreg;
  1175. kvreg->rdev = regulator_register(&kvreg->desc, &pdev->dev, init_data,
  1176. kvreg, pdev->dev.of_node);
  1177. if (IS_ERR(kvreg->rdev)) {
  1178. rc = PTR_ERR(kvreg->rdev);
  1179. pr_err("regulator_register failed, rc=%d.\n", rc);
  1180. goto out;
  1181. }
  1182. dev_dbg(&pdev->dev, "id=%d, name=%s\n", pdev->id, kvreg->name);
  1183. return 0;
  1184. out:
  1185. mutex_lock(&the_gang->krait_power_vregs_lock);
  1186. list_del(&kvreg->link);
  1187. mutex_unlock(&the_gang->krait_power_vregs_lock);
  1188. platform_set_drvdata(pdev, NULL);
  1189. return rc;
  1190. }
  1191. static int __devexit krait_power_remove(struct platform_device *pdev)
  1192. {
  1193. struct krait_power_vreg *kvreg = platform_get_drvdata(pdev);
  1194. struct pmic_gang_vreg *pvreg = kvreg->pvreg;
  1195. mutex_lock(&pvreg->krait_power_vregs_lock);
  1196. list_del(&kvreg->link);
  1197. mutex_unlock(&pvreg->krait_power_vregs_lock);
  1198. regulator_unregister(kvreg->rdev);
  1199. platform_set_drvdata(pdev, NULL);
  1200. return 0;
  1201. }
  1202. static struct of_device_id krait_power_match_table[] __initdata = {
  1203. { .compatible = "qcom,krait-regulator", },
  1204. {}
  1205. };
  1206. static struct platform_driver krait_power_driver __refdata = {
  1207. .probe = krait_power_probe,
  1208. .remove = __devexit_p(krait_power_remove),
  1209. .driver = {
  1210. .name = KRAIT_REGULATOR_DRIVER_NAME,
  1211. .of_match_table = krait_power_match_table,
  1212. .owner = THIS_MODULE,
  1213. },
  1214. };
  1215. static struct of_device_id krait_pdn_match_table[] __initdata = {
  1216. { .compatible = "qcom,krait-pdn", },
  1217. {}
  1218. };
  1219. static int boot_cpu_mdd_off(void)
  1220. {
  1221. struct krait_power_vreg *kvreg = per_cpu(krait_vregs, 0);
  1222. __krait_power_mdd_enable(kvreg, false);
  1223. return 0;
  1224. }
  1225. static void boot_cpu_mdd_on(void)
  1226. {
  1227. struct krait_power_vreg *kvreg = per_cpu(krait_vregs, 0);
  1228. __krait_power_mdd_enable(kvreg, true);
  1229. }
  1230. static struct syscore_ops boot_cpu_mdd_ops = {
  1231. .suspend = boot_cpu_mdd_off,
  1232. .resume = boot_cpu_mdd_on,
  1233. };
  1234. static int __devinit krait_pdn_phase_scaling_init(struct pmic_gang_vreg *pvreg,
  1235. struct platform_device *pdev)
  1236. {
  1237. struct resource *res;
  1238. void __iomem *efuse;
  1239. u32 efuse_data, efuse_version, efuse_version_data;
  1240. bool sf_valid, use_efuse;
  1241. int sf_pos, sf_mask;
  1242. struct device_node *node = pdev->dev.of_node;
  1243. struct device *dev = &pdev->dev;
  1244. int valid_sfs[4] = {0, 0, 0, 0};
  1245. int sf_versions_len;
  1246. int rc;
  1247. use_efuse = of_property_read_bool(node,
  1248. "qcom,use-phase-scaling-factor");
  1249. /*
  1250. * Allow usage of the eFuse phase scaling factor if it is enabled in
  1251. * either device tree or by module parameter.
  1252. */
  1253. use_efuse_phase_scaling_factor = use_efuse_phase_scaling_factor
  1254. || use_efuse;
  1255. res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
  1256. "phase-scaling-efuse");
  1257. if (!res || !res->start) {
  1258. pr_err("phase scaling eFuse address is missing\n");
  1259. return -EINVAL;
  1260. }
  1261. /* Read efuse registers */
  1262. efuse = ioremap(res->start, 8);
  1263. if (!efuse) {
  1264. pr_err("could not map phase scaling eFuse address\n");
  1265. return -EINVAL;
  1266. }
  1267. efuse_data = readl_relaxed(efuse);
  1268. efuse_version_data = readl_relaxed(efuse + 4);
  1269. iounmap(efuse);
  1270. rc = of_property_read_u32(pdev->dev.of_node,
  1271. "qcom,phase-scaling-factor-bits-pos",
  1272. &sf_pos);
  1273. if (rc < 0) {
  1274. dev_err(dev, "qcom,phase-scaling-factor-bits-pos missing rc=%d\n",
  1275. rc);
  1276. return -EINVAL;
  1277. }
  1278. sf_mask = KRAIT_MASK(sf_pos + 2, sf_pos);
  1279. efuse_version
  1280. = ((efuse_version_data & PHASE_SCALING_EFUSE_VERSION_MASK) >>
  1281. PHASE_SCALING_EFUSE_VERSION_POS);
  1282. if (of_find_property(node, "qcom,valid-scaling-factor-versions",
  1283. &sf_versions_len)
  1284. && (sf_versions_len == 4 * sizeof(u32))) {
  1285. rc = of_property_read_u32_array(node,
  1286. "qcom,valid-scaling-factor-versions",
  1287. valid_sfs, 4);
  1288. sf_valid = (valid_sfs[efuse_version] == 1);
  1289. } else {
  1290. dev_err(dev, "qcom,valid-scaling-factor-versions missing or its size is incorrect rc=%d\n",
  1291. rc);
  1292. return -EINVAL;
  1293. }
  1294. if (sf_valid)
  1295. pvreg->efuse_phase_scaling_factor
  1296. = ((efuse_data & sf_mask)
  1297. >> sf_pos) + 1;
  1298. else
  1299. pvreg->efuse_phase_scaling_factor = PHASE_SCALING_REF;
  1300. pr_info("eFuse phase scaling factor = %d/%d%s\n",
  1301. pvreg->efuse_phase_scaling_factor, PHASE_SCALING_REF,
  1302. sf_valid ? "" : " (eFuse not blown)");
  1303. pr_info("initial phase scaling factor = %d/%d%s\n",
  1304. use_efuse_phase_scaling_factor
  1305. ? pvreg->efuse_phase_scaling_factor : PHASE_SCALING_REF,
  1306. PHASE_SCALING_REF,
  1307. use_efuse_phase_scaling_factor ? "" : " (ignoring eFuse)");
  1308. return 0;
  1309. }
  1310. static int __devinit krait_pdn_probe(struct platform_device *pdev)
  1311. {
  1312. int rc;
  1313. bool use_phase_switching = false;
  1314. int pfm_threshold;
  1315. struct device *dev = &pdev->dev;
  1316. struct device_node *node = dev->of_node;
  1317. struct pmic_gang_vreg *pvreg;
  1318. struct resource *res;
  1319. bool force_auto_mode;
  1320. if (!dev->of_node) {
  1321. dev_err(dev, "device tree information missing\n");
  1322. return -ENODEV;
  1323. }
  1324. use_phase_switching = of_property_read_bool(node,
  1325. "qcom,use-phase-switching");
  1326. force_auto_mode = of_property_read_bool(pdev->dev.of_node,
  1327. "qcom,force-auto-mode");
  1328. if (!force_auto_mode) {
  1329. rc = of_property_read_u32(node, "qcom,pfm-threshold",
  1330. &pfm_threshold);
  1331. if (rc < 0) {
  1332. dev_err(dev, "pfm-threshold missing rc=%d\n", rc);
  1333. return -EINVAL;
  1334. }
  1335. }
  1336. pvreg = devm_kzalloc(&pdev->dev,
  1337. sizeof(struct pmic_gang_vreg), GFP_KERNEL);
  1338. if (!pvreg) {
  1339. pr_err("kzalloc failed.\n");
  1340. return 0;
  1341. }
  1342. res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "apcs_gcc");
  1343. if (!res) {
  1344. dev_err(&pdev->dev, "missing apcs gcc base addresses\n");
  1345. return -EINVAL;
  1346. }
  1347. pvreg->apcs_gcc_base = devm_ioremap(&pdev->dev, res->start,
  1348. resource_size(res));
  1349. if (pvreg->apcs_gcc_base == NULL)
  1350. return -ENOMEM;
  1351. rc = krait_pdn_phase_scaling_init(pvreg, pdev);
  1352. if (rc)
  1353. return rc;
  1354. pvreg->name = "pmic_gang";
  1355. pvreg->pmic_vmax_uV = PMIC_VOLTAGE_MIN;
  1356. pvreg->pmic_phase_count = -EINVAL;
  1357. pvreg->retention_enabled = true;
  1358. pvreg->pmic_min_uV_for_retention = INT_MAX;
  1359. pvreg->use_phase_switching = use_phase_switching;
  1360. pvreg->pfm_threshold = pfm_threshold;
  1361. pvreg->force_auto_mode = force_auto_mode;
  1362. mutex_init(&pvreg->krait_power_vregs_lock);
  1363. INIT_LIST_HEAD(&pvreg->krait_power_vregs);
  1364. the_gang = pvreg;
  1365. pr_debug("name=%s inited\n", pvreg->name);
  1366. /* global initializtion */
  1367. glb_init(pvreg->apcs_gcc_base);
  1368. rc = of_platform_populate(node, NULL, NULL, dev);
  1369. if (rc) {
  1370. dev_err(dev, "failed to add child nodes, rc=%d\n", rc);
  1371. return rc;
  1372. }
  1373. dent = debugfs_create_dir(KRAIT_REGULATOR_DRIVER_NAME, NULL);
  1374. debugfs_create_file("retention_uV",
  1375. 0644, dent, the_gang, &retention_fops);
  1376. register_syscore_ops(&boot_cpu_mdd_ops);
  1377. return 0;
  1378. }
  1379. static int __devexit krait_pdn_remove(struct platform_device *pdev)
  1380. {
  1381. the_gang = NULL;
  1382. debugfs_remove_recursive(dent);
  1383. return 0;
  1384. }
  1385. static struct platform_driver krait_pdn_driver __refdata = {
  1386. .probe = krait_pdn_probe,
  1387. .remove = __devexit_p(krait_pdn_remove),
  1388. .driver = {
  1389. .name = KRAIT_PDN_DRIVER_NAME,
  1390. .of_match_table = krait_pdn_match_table,
  1391. .owner = THIS_MODULE,
  1392. },
  1393. };
  1394. int __init krait_power_init(void)
  1395. {
  1396. int rc = platform_driver_register(&krait_power_driver);
  1397. if (rc) {
  1398. pr_err("failed to add %s driver rc = %d\n",
  1399. KRAIT_REGULATOR_DRIVER_NAME, rc);
  1400. return rc;
  1401. }
  1402. register_hotcpu_notifier(&krait_cpu_notifier);
  1403. return platform_driver_register(&krait_pdn_driver);
  1404. }
  1405. static void __exit krait_power_exit(void)
  1406. {
  1407. unregister_hotcpu_notifier(&krait_cpu_notifier);
  1408. platform_driver_unregister(&krait_power_driver);
  1409. platform_driver_unregister(&krait_pdn_driver);
  1410. }
  1411. module_exit(krait_power_exit);
  1412. #define GCC_BASE 0xF9011000
  1413. /**
  1414. * secondary_cpu_hs_init - Initialize BHS and LDO registers
  1415. * for nonboot cpu
  1416. *
  1417. * @base_ptr: address pointer to APC registers of a cpu
  1418. * @cpu: the cpu being brought out of reset
  1419. *
  1420. * seconday_cpu_hs_init() is called when a secondary cpu
  1421. * is being brought online for the first time. It is not
  1422. * called for boot cpu. It initializes power related
  1423. * registers and makes the core run from BHS.
  1424. * It also ends up turning on MDD which is required when the
  1425. * core switches to LDO mode
  1426. */
  1427. void secondary_cpu_hs_init(void *base_ptr, int cpu)
  1428. {
  1429. uint32_t reg_val;
  1430. void *l2_saw_base;
  1431. void *gcc_base_ptr;
  1432. void *mdd_base;
  1433. struct krait_power_vreg *kvreg;
  1434. if (version == 0) {
  1435. gcc_base_ptr = ioremap_nocache(GCC_BASE, SZ_4K);
  1436. version = readl_relaxed(gcc_base_ptr + VERSION);
  1437. iounmap(gcc_base_ptr);
  1438. }
  1439. /* Turn on the BHS, turn off LDO Bypass and power down LDO */
  1440. reg_val = BHS_CNT_DEFAULT << BHS_CNT_BIT_POS
  1441. | LDO_PWR_DWN_MASK
  1442. | CLK_SRC_DEFAULT << CLK_SRC_SEL_BIT_POS
  1443. | BHS_EN_MASK;
  1444. writel_relaxed(reg_val, base_ptr + APC_PWR_GATE_CTL);
  1445. /* complete the above write before the delay */
  1446. mb();
  1447. /* wait for the bhs to settle */
  1448. udelay(BHS_SETTLING_DELAY_US);
  1449. /* Turn on BHS segments */
  1450. reg_val |= BHS_SEG_EN_DEFAULT << BHS_SEG_EN_BIT_POS;
  1451. writel_relaxed(reg_val, base_ptr + APC_PWR_GATE_CTL);
  1452. /* complete the above write before the delay */
  1453. mb();
  1454. /* wait for the bhs to settle */
  1455. udelay(BHS_SETTLING_DELAY_US);
  1456. /* Finally turn on the bypass so that BHS supplies power */
  1457. reg_val |= LDO_BYP_MASK;
  1458. writel_relaxed(reg_val, base_ptr + APC_PWR_GATE_CTL);
  1459. kvreg = per_cpu(krait_vregs, cpu);
  1460. if (kvreg != NULL) {
  1461. kvreg_hw_init(kvreg);
  1462. } else {
  1463. /*
  1464. * This nonboot cpu has not been probed yet. This cpu was
  1465. * brought out of reset as a part of maxcpus >= 2. Initialize
  1466. * its MDD and APC_PWR_GATE_MODE register here
  1467. */
  1468. mdd_base = ioremap_nocache(MSM_MDD_BASE_PHYS + cpu * 0x10000,
  1469. SZ_4K);
  1470. /* setup the bandgap that configures the reference to the LDO */
  1471. writel_relaxed(0x00000190, mdd_base + MDD_CONFIG_CTL);
  1472. /* Enable MDD */
  1473. writel_relaxed(0x00000002, mdd_base + MDD_MODE);
  1474. mb();
  1475. iounmap(mdd_base);
  1476. if (version > KPSS_VERSION_2P0) {
  1477. writel_relaxed(0x30430600, base_ptr + APC_PWR_GATE_DLY);
  1478. writel_relaxed(0x00000021,
  1479. base_ptr + APC_PWR_GATE_MODE);
  1480. }
  1481. mb();
  1482. }
  1483. if (!the_gang || !the_gang->manage_phases) {
  1484. /*
  1485. * If the driver has not yet started to manage phases then
  1486. * enable max phases.
  1487. */
  1488. l2_saw_base = ioremap_nocache(MSM_L2_SAW_PHYS, SZ_4K);
  1489. if (l2_saw_base) {
  1490. writel_relaxed(0x10003, l2_saw_base + 0x1c);
  1491. mb();
  1492. udelay(PHASE_SETTLING_TIME_US);
  1493. iounmap(l2_saw_base);
  1494. } else {
  1495. __WARN();
  1496. }
  1497. }
  1498. }
  1499. MODULE_LICENSE("GPL v2");
  1500. MODULE_DESCRIPTION("KRAIT POWER regulator driver");
  1501. MODULE_ALIAS("platform:"KRAIT_REGULATOR_DRIVER_NAME);