OSDN Git Service

regulator: msm_gfx_ldo: Fix invalid memory accesses
authorAnirudh Ghayal <aghayal@codeaurora.org>
Sat, 15 Oct 2016 10:09:23 +0000 (15:39 +0530)
committerTirupathi Reddy <tirupath@codeaurora.org>
Mon, 5 Dec 2016 05:47:01 +0000 (11:17 +0530)
A few gfx_ldo memory read/write calls use an invalid ldo
base address leading to other corruptions in the system.
Fix this by using the correct LDO base address.

CRs-Fixed: 1078353
Change-Id: I034d473e86b3fe7164d1c9ddad326c9dd77a188f
Signed-off-by: Anirudh Ghayal <aghayal@codeaurora.org>
drivers/regulator/msm_gfx_ldo.c

index 5c97bc0..4bcfd8a 100644 (file)
@@ -319,23 +319,23 @@ static int enable_ldo_mode(struct msm_gfx_ldo *ldo_vreg)
 
        /* Move BHS under SW control */
        ctl |= BHS_UNDER_SW_CTL;
-       writel_relaxed(ctl, ldo_vreg + PWRSWITCH_CTRL_REG);
+       writel_relaxed(ctl, ldo_vreg->ldo_base + PWRSWITCH_CTRL_REG);
 
        /* Set LDO under gdsc control */
        ctl &= ~LDO_UNDER_SW_CTRL_BIT;
-       writel_relaxed(ctl, ldo_vreg + PWRSWITCH_CTRL_REG);
+       writel_relaxed(ctl, ldo_vreg->ldo_base + PWRSWITCH_CTRL_REG);
 
        /* enable hw_pre-on to gdsc */
        ctl |= LDO_PREON_SW_OVR_BIT;
-       writel_relaxed(ctl, ldo_vreg + PWRSWITCH_CTRL_REG);
+       writel_relaxed(ctl, ldo_vreg->ldo_base + PWRSWITCH_CTRL_REG);
 
        /* remove LDO bypass */
        ctl &= ~LDO_BYPASS_BIT;
-       writel_relaxed(ctl, ldo_vreg + PWRSWITCH_CTRL_REG);
+       writel_relaxed(ctl, ldo_vreg->ldo_base + PWRSWITCH_CTRL_REG);
 
        /* set power-source as LDO */
        ctl |= PWR_SRC_SEL_BIT;
-       writel_relaxed(ctl, ldo_vreg + PWRSWITCH_CTRL_REG);
+       writel_relaxed(ctl, ldo_vreg->ldo_base + PWRSWITCH_CTRL_REG);
 
        /* clear fake-sw ack to gdsc */
        ctl &= ~ACK_SW_OVR_BIT;
@@ -343,7 +343,7 @@ static int enable_ldo_mode(struct msm_gfx_ldo *ldo_vreg)
 
        /* put CPR in bypass mode */
        ctl |= CPR_BYPASS_IN_LDO_MODE_BIT;
-       writel_relaxed(ctl, ldo_vreg + PWRSWITCH_CTRL_REG);
+       writel_relaxed(ctl, ldo_vreg->ldo_base + PWRSWITCH_CTRL_REG);
 
        /* complete all writes */
        mb();
@@ -535,7 +535,7 @@ static int switch_mode_to_ldo(struct msm_gfx_ldo *ldo_vreg, int new_corner)
 
        /* remove LDO bypass */
        ctl &= ~LDO_BYPASS_BIT;
-       writel_relaxed(ctl, ldo_vreg + PWRSWITCH_CTRL_REG);
+       writel_relaxed(ctl, ldo_vreg->ldo_base + PWRSWITCH_CTRL_REG);
 
        /* expose LDO to gdsc */
        ctl &= ~ACK_SW_OVR_BIT;