forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-11 04dd17822334871b23ea2862f7798fb0e0007777
kernel/drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.c
....@@ -23,6 +23,42 @@
2323 */
2424 #include "priv.h"
2525
26
+s64
27
+nvkm_timer_wait_test(struct nvkm_timer_wait *wait)
28
+{
29
+ struct nvkm_subdev *subdev = &wait->tmr->subdev;
30
+ u64 time = nvkm_timer_read(wait->tmr);
31
+
32
+ if (wait->reads == 0) {
33
+ wait->time0 = time;
34
+ wait->time1 = time;
35
+ }
36
+
37
+ if (wait->time1 == time) {
38
+ if (wait->reads++ == 16) {
39
+ nvkm_fatal(subdev, "stalled at %016llx\n", time);
40
+ return -ETIMEDOUT;
41
+ }
42
+ } else {
43
+ wait->time1 = time;
44
+ wait->reads = 1;
45
+ }
46
+
47
+ if (wait->time1 - wait->time0 > wait->limit)
48
+ return -ETIMEDOUT;
49
+
50
+ return wait->time1 - wait->time0;
51
+}
52
+
53
+void
54
+nvkm_timer_wait_init(struct nvkm_device *device, u64 nsec,
55
+ struct nvkm_timer_wait *wait)
56
+{
57
+ wait->tmr = device->timer;
58
+ wait->limit = nsec;
59
+ wait->reads = 0;
60
+}
61
+
2662 u64
2763 nvkm_timer_read(struct nvkm_timer *tmr)
2864 {