Loading drivers/gpu/msm/kgsl_cffdump.c +9 −0 Original line number Diff line number Diff line Loading @@ -627,6 +627,15 @@ int kgsl_cff_dump_enable_set(void *data, u64 val) } if (!device->cff_dump_enable) { device->cff_dump_enable = 1; /* * put device to slumber so that we ensure that the * start opcode in CFF is present */ mutex_lock(&device->mutex); ret = kgsl_pwrctrl_slumber(device); if (ret) device->cff_dump_enable = 0; mutex_unlock(&device->mutex); } } else if (device->cff_dump_enable && !val) { device->cff_dump_enable = 0; Loading drivers/gpu/msm/kgsl_pwrctrl.c +37 −0 Original line number Diff line number Diff line Loading @@ -1413,6 +1413,43 @@ int kgsl_pwrctrl_sleep(struct kgsl_device *device) } EXPORT_SYMBOL(kgsl_pwrctrl_sleep); /* * kgsl_pwrctrl_slumber() - Put device into slumber if it is not in suspend * @device: Device pointer * * Return 0 on success else error code */ int kgsl_pwrctrl_slumber(struct kgsl_device *device) { int ret = 0; if (KGSL_STATE_SLUMBER == device->state || KGSL_STATE_SUSPEND == device->state) return ret; if (KGSL_STATE_SUSPEND == device->requested_state) return ret; /* drain to prevent from more commands being submitted */ device->ftbl->drain(device); /* wait for active count so device can be put in slumber */ ret = kgsl_active_count_wait(device, 0); if (ret) { device->ftbl->resume(device); return ret; } ret = device->ftbl->idle(device); if (ret) { device->ftbl->resume(device); return ret; } /* resume since we drained earlier */ device->ftbl->resume(device); kgsl_pwrctrl_request_state(device, KGSL_STATE_SLUMBER); ret = kgsl_pwrctrl_sleep(device); return ret; } EXPORT_SYMBOL(kgsl_pwrctrl_slumber); /** * kgsl_pwrctrl_wake() - Power up the GPU from a slumber/sleep state * @device - Pointer to the kgsl_device struct Loading drivers/gpu/msm/kgsl_pwrctrl.h +1 −0 Original line number Diff line number Diff line Loading @@ -157,5 +157,6 @@ void kgsl_active_count_put(struct kgsl_device *device); int kgsl_active_count_wait(struct kgsl_device *device, int count); void kgsl_pwrctrl_clk(struct kgsl_device *device, int state, int requested_state); int kgsl_pwrctrl_slumber(struct kgsl_device *device); #endif /* __KGSL_PWRCTRL_H */ Loading
drivers/gpu/msm/kgsl_cffdump.c +9 −0 Original line number Diff line number Diff line Loading @@ -627,6 +627,15 @@ int kgsl_cff_dump_enable_set(void *data, u64 val) } if (!device->cff_dump_enable) { device->cff_dump_enable = 1; /* * put device to slumber so that we ensure that the * start opcode in CFF is present */ mutex_lock(&device->mutex); ret = kgsl_pwrctrl_slumber(device); if (ret) device->cff_dump_enable = 0; mutex_unlock(&device->mutex); } } else if (device->cff_dump_enable && !val) { device->cff_dump_enable = 0; Loading
drivers/gpu/msm/kgsl_pwrctrl.c +37 −0 Original line number Diff line number Diff line Loading @@ -1413,6 +1413,43 @@ int kgsl_pwrctrl_sleep(struct kgsl_device *device) } EXPORT_SYMBOL(kgsl_pwrctrl_sleep); /* * kgsl_pwrctrl_slumber() - Put device into slumber if it is not in suspend * @device: Device pointer * * Return 0 on success else error code */ int kgsl_pwrctrl_slumber(struct kgsl_device *device) { int ret = 0; if (KGSL_STATE_SLUMBER == device->state || KGSL_STATE_SUSPEND == device->state) return ret; if (KGSL_STATE_SUSPEND == device->requested_state) return ret; /* drain to prevent from more commands being submitted */ device->ftbl->drain(device); /* wait for active count so device can be put in slumber */ ret = kgsl_active_count_wait(device, 0); if (ret) { device->ftbl->resume(device); return ret; } ret = device->ftbl->idle(device); if (ret) { device->ftbl->resume(device); return ret; } /* resume since we drained earlier */ device->ftbl->resume(device); kgsl_pwrctrl_request_state(device, KGSL_STATE_SLUMBER); ret = kgsl_pwrctrl_sleep(device); return ret; } EXPORT_SYMBOL(kgsl_pwrctrl_slumber); /** * kgsl_pwrctrl_wake() - Power up the GPU from a slumber/sleep state * @device - Pointer to the kgsl_device struct Loading
drivers/gpu/msm/kgsl_pwrctrl.h +1 −0 Original line number Diff line number Diff line Loading @@ -157,5 +157,6 @@ void kgsl_active_count_put(struct kgsl_device *device); int kgsl_active_count_wait(struct kgsl_device *device, int count); void kgsl_pwrctrl_clk(struct kgsl_device *device, int state, int requested_state); int kgsl_pwrctrl_slumber(struct kgsl_device *device); #endif /* __KGSL_PWRCTRL_H */