Lines Matching refs:rpm

68 static void init_intel_runtime_pm_wakeref(struct intel_runtime_pm *rpm)  in init_intel_runtime_pm_wakeref()  argument
70 spin_lock_init(&rpm->debug.lock); in init_intel_runtime_pm_wakeref()
74 track_intel_runtime_pm_wakeref(struct intel_runtime_pm *rpm) in track_intel_runtime_pm_wakeref() argument
79 if (!rpm->available) in track_intel_runtime_pm_wakeref()
86 spin_lock_irqsave(&rpm->debug.lock, flags); in track_intel_runtime_pm_wakeref()
88 if (!rpm->debug.count) in track_intel_runtime_pm_wakeref()
89 rpm->debug.last_acquire = stack; in track_intel_runtime_pm_wakeref()
91 stacks = krealloc(rpm->debug.owners, in track_intel_runtime_pm_wakeref()
92 (rpm->debug.count + 1) * sizeof(*stacks), in track_intel_runtime_pm_wakeref()
95 stacks[rpm->debug.count++] = stack; in track_intel_runtime_pm_wakeref()
96 rpm->debug.owners = stacks; in track_intel_runtime_pm_wakeref()
101 spin_unlock_irqrestore(&rpm->debug.lock, flags); in track_intel_runtime_pm_wakeref()
106 static void untrack_intel_runtime_pm_wakeref(struct intel_runtime_pm *rpm, in untrack_intel_runtime_pm_wakeref() argument
109 struct drm_i915_private *i915 = container_of(rpm, in untrack_intel_runtime_pm_wakeref()
118 spin_lock_irqsave(&rpm->debug.lock, flags); in untrack_intel_runtime_pm_wakeref()
119 for (n = rpm->debug.count; n--; ) { in untrack_intel_runtime_pm_wakeref()
120 if (rpm->debug.owners[n] == stack) { in untrack_intel_runtime_pm_wakeref()
121 memmove(rpm->debug.owners + n, in untrack_intel_runtime_pm_wakeref()
122 rpm->debug.owners + n + 1, in untrack_intel_runtime_pm_wakeref()
123 (--rpm->debug.count - n) * sizeof(stack)); in untrack_intel_runtime_pm_wakeref()
128 spin_unlock_irqrestore(&rpm->debug.lock, flags); in untrack_intel_runtime_pm_wakeref()
132 rpm->debug.count, atomic_read(&rpm->wakeref_count))) { in untrack_intel_runtime_pm_wakeref()
142 stack = READ_ONCE(rpm->debug.last_release); in untrack_intel_runtime_pm_wakeref()
227 __intel_wakeref_dec_and_check_tracking(struct intel_runtime_pm *rpm) in __intel_wakeref_dec_and_check_tracking() argument
232 if (!atomic_dec_and_lock_irqsave(&rpm->wakeref_count, in __intel_wakeref_dec_and_check_tracking()
233 &rpm->debug.lock, in __intel_wakeref_dec_and_check_tracking()
237 __untrack_all_wakerefs(&rpm->debug, &dbg); in __intel_wakeref_dec_and_check_tracking()
238 spin_unlock_irqrestore(&rpm->debug.lock, flags); in __intel_wakeref_dec_and_check_tracking()
244 untrack_all_intel_runtime_pm_wakerefs(struct intel_runtime_pm *rpm) in untrack_all_intel_runtime_pm_wakerefs() argument
249 spin_lock_irqsave(&rpm->debug.lock, flags); in untrack_all_intel_runtime_pm_wakerefs()
250 __untrack_all_wakerefs(&rpm->debug, &dbg); in untrack_all_intel_runtime_pm_wakerefs()
251 spin_unlock_irqrestore(&rpm->debug.lock, flags); in untrack_all_intel_runtime_pm_wakerefs()
256 void print_intel_runtime_pm_wakeref(struct intel_runtime_pm *rpm, in print_intel_runtime_pm_wakeref() argument
265 spin_lock_irq(&rpm->debug.lock); in print_intel_runtime_pm_wakeref()
266 dbg.count = rpm->debug.count; in print_intel_runtime_pm_wakeref()
269 rpm->debug.owners, in print_intel_runtime_pm_wakeref()
272 dbg.last_acquire = rpm->debug.last_acquire; in print_intel_runtime_pm_wakeref()
273 dbg.last_release = rpm->debug.last_release; in print_intel_runtime_pm_wakeref()
274 spin_unlock_irq(&rpm->debug.lock); in print_intel_runtime_pm_wakeref()
295 static void init_intel_runtime_pm_wakeref(struct intel_runtime_pm *rpm) in init_intel_runtime_pm_wakeref() argument
300 track_intel_runtime_pm_wakeref(struct intel_runtime_pm *rpm) in track_intel_runtime_pm_wakeref() argument
305 static void untrack_intel_runtime_pm_wakeref(struct intel_runtime_pm *rpm, in untrack_intel_runtime_pm_wakeref() argument
311 __intel_wakeref_dec_and_check_tracking(struct intel_runtime_pm *rpm) in __intel_wakeref_dec_and_check_tracking() argument
313 atomic_dec(&rpm->wakeref_count); in __intel_wakeref_dec_and_check_tracking()
317 untrack_all_intel_runtime_pm_wakerefs(struct intel_runtime_pm *rpm) in untrack_all_intel_runtime_pm_wakerefs() argument
324 intel_runtime_pm_acquire(struct intel_runtime_pm *rpm, bool wakelock) in intel_runtime_pm_acquire() argument
327 atomic_add(1 + INTEL_RPM_WAKELOCK_BIAS, &rpm->wakeref_count); in intel_runtime_pm_acquire()
328 assert_rpm_wakelock_held(rpm); in intel_runtime_pm_acquire()
330 atomic_inc(&rpm->wakeref_count); in intel_runtime_pm_acquire()
331 assert_rpm_raw_wakeref_held(rpm); in intel_runtime_pm_acquire()
336 intel_runtime_pm_release(struct intel_runtime_pm *rpm, int wakelock) in intel_runtime_pm_release() argument
339 assert_rpm_wakelock_held(rpm); in intel_runtime_pm_release()
340 atomic_sub(INTEL_RPM_WAKELOCK_BIAS, &rpm->wakeref_count); in intel_runtime_pm_release()
342 assert_rpm_raw_wakeref_held(rpm); in intel_runtime_pm_release()
345 __intel_wakeref_dec_and_check_tracking(rpm); in intel_runtime_pm_release()
348 static intel_wakeref_t __intel_runtime_pm_get(struct intel_runtime_pm *rpm, in __intel_runtime_pm_get() argument
351 struct drm_i915_private *i915 = container_of(rpm, in __intel_runtime_pm_get()
356 ret = pm_runtime_get_sync(rpm->kdev); in __intel_runtime_pm_get()
360 intel_runtime_pm_acquire(rpm, wakelock); in __intel_runtime_pm_get()
362 return track_intel_runtime_pm_wakeref(rpm); in __intel_runtime_pm_get()
382 intel_wakeref_t intel_runtime_pm_get_raw(struct intel_runtime_pm *rpm) in intel_runtime_pm_get_raw() argument
384 return __intel_runtime_pm_get(rpm, false); in intel_runtime_pm_get_raw()
399 intel_wakeref_t intel_runtime_pm_get(struct intel_runtime_pm *rpm) in intel_runtime_pm_get() argument
401 return __intel_runtime_pm_get(rpm, true); in intel_runtime_pm_get()
426 static intel_wakeref_t __intel_runtime_pm_get_if_active(struct intel_runtime_pm *rpm, in __intel_runtime_pm_get_if_active() argument
436 if (pm_runtime_get_if_active(rpm->kdev, ignore_usecount) <= 0) in __intel_runtime_pm_get_if_active()
440 intel_runtime_pm_acquire(rpm, true); in __intel_runtime_pm_get_if_active()
442 return track_intel_runtime_pm_wakeref(rpm); in __intel_runtime_pm_get_if_active()
445 intel_wakeref_t intel_runtime_pm_get_if_in_use(struct intel_runtime_pm *rpm) in intel_runtime_pm_get_if_in_use() argument
447 return __intel_runtime_pm_get_if_active(rpm, false); in intel_runtime_pm_get_if_in_use()
450 intel_wakeref_t intel_runtime_pm_get_if_active(struct intel_runtime_pm *rpm) in intel_runtime_pm_get_if_active() argument
452 return __intel_runtime_pm_get_if_active(rpm, true); in intel_runtime_pm_get_if_active()
474 intel_wakeref_t intel_runtime_pm_get_noresume(struct intel_runtime_pm *rpm) in intel_runtime_pm_get_noresume() argument
476 assert_rpm_wakelock_held(rpm); in intel_runtime_pm_get_noresume()
477 pm_runtime_get_noresume(rpm->kdev); in intel_runtime_pm_get_noresume()
479 intel_runtime_pm_acquire(rpm, true); in intel_runtime_pm_get_noresume()
481 return track_intel_runtime_pm_wakeref(rpm); in intel_runtime_pm_get_noresume()
484 static void __intel_runtime_pm_put(struct intel_runtime_pm *rpm, in __intel_runtime_pm_put() argument
488 struct device *kdev = rpm->kdev; in __intel_runtime_pm_put()
490 untrack_intel_runtime_pm_wakeref(rpm, wref); in __intel_runtime_pm_put()
492 intel_runtime_pm_release(rpm, wakelock); in __intel_runtime_pm_put()
508 intel_runtime_pm_put_raw(struct intel_runtime_pm *rpm, intel_wakeref_t wref) in intel_runtime_pm_put_raw() argument
510 __intel_runtime_pm_put(rpm, wref, false); in intel_runtime_pm_put_raw()
525 void intel_runtime_pm_put_unchecked(struct intel_runtime_pm *rpm) in intel_runtime_pm_put_unchecked() argument
527 __intel_runtime_pm_put(rpm, -1, true); in intel_runtime_pm_put_unchecked()
540 void intel_runtime_pm_put(struct intel_runtime_pm *rpm, intel_wakeref_t wref) in intel_runtime_pm_put() argument
542 __intel_runtime_pm_put(rpm, wref, true); in intel_runtime_pm_put()
556 void intel_runtime_pm_enable(struct intel_runtime_pm *rpm) in intel_runtime_pm_enable() argument
558 struct drm_i915_private *i915 = container_of(rpm, in intel_runtime_pm_enable()
561 struct device *kdev = rpm->kdev; in intel_runtime_pm_enable()
582 if (!rpm->available) { in intel_runtime_pm_enable()
601 void intel_runtime_pm_disable(struct intel_runtime_pm *rpm) in intel_runtime_pm_disable() argument
603 struct drm_i915_private *i915 = container_of(rpm, in intel_runtime_pm_disable()
606 struct device *kdev = rpm->kdev; in intel_runtime_pm_disable()
614 if (!rpm->available) in intel_runtime_pm_disable()
618 void intel_runtime_pm_driver_release(struct intel_runtime_pm *rpm) in intel_runtime_pm_driver_release() argument
620 struct drm_i915_private *i915 = container_of(rpm, in intel_runtime_pm_driver_release()
623 int count = atomic_read(&rpm->wakeref_count); in intel_runtime_pm_driver_release()
630 untrack_all_intel_runtime_pm_wakerefs(rpm); in intel_runtime_pm_driver_release()
633 void intel_runtime_pm_init_early(struct intel_runtime_pm *rpm) in intel_runtime_pm_init_early() argument
636 container_of(rpm, struct drm_i915_private, runtime_pm); in intel_runtime_pm_init_early()
640 rpm->kdev = kdev; in intel_runtime_pm_init_early()
641 rpm->available = HAS_RUNTIME_PM(i915); in intel_runtime_pm_init_early()
643 init_intel_runtime_pm_wakeref(rpm); in intel_runtime_pm_init_early()