summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoland Hieber <r.hieber@pengutronix.de>2018-08-13 15:02:57 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2018-08-14 08:54:40 +0200
commit8b21dfca002ca9c7fe0906e7b9747ef392c3a9ae (patch)
tree713e9762c77d67369329fc2b5c1c3935aaef4288
parent7005932ca66cdc0a91cdae0bf99d790e0c108fe2 (diff)
downloadbarebox-8b21dfca002ca9c7fe0906e7b9747ef392c3a9ae.tar.gz
barebox-8b21dfca002ca9c7fe0906e7b9747ef392c3a9ae.tar.xz
ARM: MXS: make VDDx brownout setup more understandable
Rename bo_int to prev_bo_enirq to make its purpose clearer, and throw in a few comments for easier understanding. Signed-off-by: Roland Hieber <r.hieber@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--arch/arm/mach-mxs/power-init.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/arm/mach-mxs/power-init.c b/arch/arm/mach-mxs/power-init.c
index 6796a4491d..9ab36463e2 100644
--- a/arch/arm/mach-mxs/power-init.c
+++ b/arch/arm/mach-mxs/power-init.c
@@ -1066,7 +1066,7 @@ static void mxs_power_set_vddx(const struct mxs_vddx_cfg *cfg,
{
struct mxs_power_regs *power_regs =
(struct mxs_power_regs *)IMX_POWER_BASE;
- uint32_t cur_target, diff, bo_int = 0;
+ uint32_t cur_target, diff, prev_bo_enirq = 0;
uint32_t powered_by_linreg = 0;
int adjust_up, tmp;
@@ -1082,8 +1082,10 @@ static void mxs_power_set_vddx(const struct mxs_vddx_cfg *cfg,
powered_by_linreg = cfg->powered_by_linreg();
if (adjust_up && cfg->bo_irq) {
+ /* temporarily disable brownout to prevent it from taking
+ effect prematurely during the adjustment */
if (powered_by_linreg) {
- bo_int = readl(&power_regs->hw_power_ctrl);
+ prev_bo_enirq = readl(&power_regs->hw_power_ctrl) & cfg->bo_enirq;
writel(cfg->bo_enirq, &power_regs->hw_power_ctrl_clr);
}
setbits_le32(cfg->reg, cfg->bo_offset_mask);
@@ -1124,8 +1126,10 @@ static void mxs_power_set_vddx(const struct mxs_vddx_cfg *cfg,
if (cfg->bo_irq) {
if (adjust_up && powered_by_linreg) {
+ /* clear brownout IRQ flag in case it fired */
writel(cfg->bo_irq, &power_regs->hw_power_ctrl_clr);
- if (bo_int & cfg->bo_enirq)
+ if (prev_bo_enirq)
+ /* re-enable brownout IRQ after adjustment has finished */
writel(cfg->bo_enirq, &power_regs->hw_power_ctrl_set);
}