Loading drivers/gpu/msm/adreno_a5xx.c +22 −8 Original line number Diff line number Diff line Loading @@ -1480,6 +1480,20 @@ static void a5xx_lm_enable(struct adreno_device *adreno_dev) kgsl_regwrite(device, A5XX_GPMU_CLOCK_THROTTLE_CTRL, val); } static int gpmu_set_level(struct kgsl_device *device, unsigned int val) { unsigned int reg; int retry = 20; kgsl_regwrite(device, A5XX_GPMU_GPMU_VOLTAGE, val); do { kgsl_regread(device, A5XX_GPMU_GPMU_VOLTAGE, ®); } while ((reg & 0x80000000) && retry--); return (reg & 0x80000000) ? -ETIMEDOUT : 0; } /* * a5xx_pwrlevel_change_settings() - Program the hardware during power level * transitions Loading Loading @@ -1514,16 +1528,16 @@ static void a5xx_pwrlevel_change_settings(struct adreno_device *adreno_dev, else if (post == 1) pre = 0; if (pre) kgsl_regwrite(device, A5XX_GPMU_GPMU_VOLTAGE, (0x80000010 | postlevel)); if (pre && post) udelay(3); if (pre) { if (gpmu_set_level(device, (0x80000010 | postlevel))) KGSL_CORE_ERR( "GPMU pre powerlevel did not stabilize\n"); } if (post) { kgsl_regwrite(device, A5XX_GPMU_GPMU_VOLTAGE, (0x80000000 | postlevel)); if (gpmu_set_level(device, (0x80000000 | postlevel))) KGSL_CORE_ERR( "GPMU post powerlevel did not stabilize\n"); pre = 0; } } Loading Loading
drivers/gpu/msm/adreno_a5xx.c +22 −8 Original line number Diff line number Diff line Loading @@ -1480,6 +1480,20 @@ static void a5xx_lm_enable(struct adreno_device *adreno_dev) kgsl_regwrite(device, A5XX_GPMU_CLOCK_THROTTLE_CTRL, val); } static int gpmu_set_level(struct kgsl_device *device, unsigned int val) { unsigned int reg; int retry = 20; kgsl_regwrite(device, A5XX_GPMU_GPMU_VOLTAGE, val); do { kgsl_regread(device, A5XX_GPMU_GPMU_VOLTAGE, ®); } while ((reg & 0x80000000) && retry--); return (reg & 0x80000000) ? -ETIMEDOUT : 0; } /* * a5xx_pwrlevel_change_settings() - Program the hardware during power level * transitions Loading Loading @@ -1514,16 +1528,16 @@ static void a5xx_pwrlevel_change_settings(struct adreno_device *adreno_dev, else if (post == 1) pre = 0; if (pre) kgsl_regwrite(device, A5XX_GPMU_GPMU_VOLTAGE, (0x80000010 | postlevel)); if (pre && post) udelay(3); if (pre) { if (gpmu_set_level(device, (0x80000010 | postlevel))) KGSL_CORE_ERR( "GPMU pre powerlevel did not stabilize\n"); } if (post) { kgsl_regwrite(device, A5XX_GPMU_GPMU_VOLTAGE, (0x80000000 | postlevel)); if (gpmu_set_level(device, (0x80000000 | postlevel))) KGSL_CORE_ERR( "GPMU post powerlevel did not stabilize\n"); pre = 0; } } Loading