diff --git a/drivers/gpu/msm/adreno_a6xx_gmu.c b/drivers/gpu/msm/adreno_a6xx_gmu.c index e7b2f5124748..ebe85967ec35 100644 --- a/drivers/gpu/msm/adreno_a6xx_gmu.c +++ b/drivers/gpu/msm/adreno_a6xx_gmu.c @@ -2821,25 +2821,21 @@ error: void a6xx_enable_gpu_irq(struct adreno_device *adreno_dev) { struct kgsl_device *device = KGSL_DEVICE(adreno_dev); - struct kgsl_pwrctrl *pwr = &device->pwrctrl; + + kgsl_pwrctrl_irq(device, KGSL_PWRFLAGS_ON); adreno_irqctrl(adreno_dev, 1); - enable_irq(pwr->interrupt_num); - - trace_kgsl_irq(device, 1); } void a6xx_disable_gpu_irq(struct adreno_device *adreno_dev) { struct kgsl_device *device = KGSL_DEVICE(adreno_dev); - struct kgsl_pwrctrl *pwr = &device->pwrctrl; - disable_irq(pwr->interrupt_num); + kgsl_pwrctrl_irq(device, KGSL_PWRFLAGS_OFF); if (a6xx_gmu_gx_is_on(device)) adreno_irqctrl(adreno_dev, 0); - trace_kgsl_irq(device, 0); } static int a6xx_gpu_boot(struct adreno_device *adreno_dev) diff --git a/drivers/gpu/msm/kgsl_iommu.c b/drivers/gpu/msm/kgsl_iommu.c index aa12bafebc0a..71619ddcfd6b 100644 --- a/drivers/gpu/msm/kgsl_iommu.c +++ b/drivers/gpu/msm/kgsl_iommu.c @@ -649,7 +649,12 @@ static int kgsl_iommu_fault_handler(struct iommu_domain *domain, * The device mutex must be held to change power state */ mutex_lock(&device->mutex); - kgsl_pwrctrl_change_state(device, KGSL_STATE_AWARE); + + if (gmu_core_isenabled(device)) + kgsl_pwrctrl_irq(device, KGSL_PWRFLAGS_OFF); + else + kgsl_pwrctrl_change_state(device, KGSL_STATE_AWARE); + mutex_unlock(&device->mutex); } diff --git a/drivers/gpu/msm/kgsl_pwrctrl.c b/drivers/gpu/msm/kgsl_pwrctrl.c index 504cde5aea09..e07c165a3fb1 100644 --- a/drivers/gpu/msm/kgsl_pwrctrl.c +++ b/drivers/gpu/msm/kgsl_pwrctrl.c @@ -1330,7 +1330,7 @@ static int kgsl_pwrctrl_pwrrail(struct kgsl_device *device, int state) return status; } -static void kgsl_pwrctrl_irq(struct kgsl_device *device, int state) +void kgsl_pwrctrl_irq(struct kgsl_device *device, int state) { struct kgsl_pwrctrl *pwr = &device->pwrctrl; diff --git a/drivers/gpu/msm/kgsl_pwrctrl.h b/drivers/gpu/msm/kgsl_pwrctrl.h index 483ab3464576..eeae3cec3568 100644 --- a/drivers/gpu/msm/kgsl_pwrctrl.h +++ b/drivers/gpu/msm/kgsl_pwrctrl.h @@ -228,4 +228,12 @@ int kgsl_pwrctrl_axi(struct kgsl_device *device, int state); * off state if the active_cnt is 0 and the hardware is idle. */ void kgsl_idle_check(struct work_struct *work); + +/** + * kgsl_pwrctrl_irq - Enable or disable gpu interrupts + * @device: Handle to the kgsl device + * @state: Variable to decide whether interrupts need to be enabled or disabled + * + */ +void kgsl_pwrctrl_irq(struct kgsl_device *device, int state); #endif /* __KGSL_PWRCTRL_H */