1*00423c4aSJani Nikula /* SPDX-License-Identifier: MIT */ 2*00423c4aSJani Nikula /* Copyright © 2025 Intel Corporation */ 3*00423c4aSJani Nikula 4*00423c4aSJani Nikula #ifndef __INTEL_DISPLAY_JIFFIES_H__ 5*00423c4aSJani Nikula #define __INTEL_DISPLAY_JIFFIES_H__ 6*00423c4aSJani Nikula 7*00423c4aSJani Nikula #include <linux/jiffies.h> 8*00423c4aSJani Nikula 9*00423c4aSJani Nikula static inline unsigned long msecs_to_jiffies_timeout(const unsigned int m) 10*00423c4aSJani Nikula { 11*00423c4aSJani Nikula unsigned long j = msecs_to_jiffies(m); 12*00423c4aSJani Nikula 13*00423c4aSJani Nikula return min_t(unsigned long, MAX_JIFFY_OFFSET, j + 1); 14*00423c4aSJani Nikula } 15*00423c4aSJani Nikula 16*00423c4aSJani Nikula /* 17*00423c4aSJani Nikula * If you need to wait X milliseconds between events A and B, but event B 18*00423c4aSJani Nikula * doesn't happen exactly after event A, you record the timestamp (jiffies) of 19*00423c4aSJani Nikula * when event A happened, then just before event B you call this function and 20*00423c4aSJani Nikula * pass the timestamp as the first argument, and X as the second argument. 21*00423c4aSJani Nikula */ 22*00423c4aSJani Nikula static inline void 23*00423c4aSJani Nikula wait_remaining_ms_from_jiffies(unsigned long timestamp_jiffies, int to_wait_ms) 24*00423c4aSJani Nikula { 25*00423c4aSJani Nikula unsigned long target_jiffies, tmp_jiffies, remaining_jiffies; 26*00423c4aSJani Nikula 27*00423c4aSJani Nikula /* 28*00423c4aSJani Nikula * Don't re-read the value of "jiffies" every time since it may change 29*00423c4aSJani Nikula * behind our back and break the math. 30*00423c4aSJani Nikula */ 31*00423c4aSJani Nikula tmp_jiffies = jiffies; 32*00423c4aSJani Nikula target_jiffies = timestamp_jiffies + 33*00423c4aSJani Nikula msecs_to_jiffies_timeout(to_wait_ms); 34*00423c4aSJani Nikula 35*00423c4aSJani Nikula if (time_after(target_jiffies, tmp_jiffies)) { 36*00423c4aSJani Nikula remaining_jiffies = target_jiffies - tmp_jiffies; 37*00423c4aSJani Nikula while (remaining_jiffies) 38*00423c4aSJani Nikula remaining_jiffies = 39*00423c4aSJani Nikula schedule_timeout_uninterruptible(remaining_jiffies); 40*00423c4aSJani Nikula } 41*00423c4aSJani Nikula } 42*00423c4aSJani Nikula 43*00423c4aSJani Nikula #endif /* __INTEL_DISPLAY_JIFFIES_H__ */ 44