forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/drivers/gpu/drm/nouveau/dispnv50/core907d.c
....@@ -22,13 +22,51 @@
2222 #include "core.h"
2323 #include "head.h"
2424
25
+#include <nvif/push507c.h>
26
+#include <nvif/timer.h>
27
+
28
+#include <nvhw/class/cl907d.h>
29
+
30
+#include "nouveau_bo.h"
31
+
32
+int
33
+core907d_caps_init(struct nouveau_drm *drm, struct nv50_disp *disp)
34
+{
35
+ struct nv50_core *core = disp->core;
36
+ struct nouveau_bo *bo = disp->sync;
37
+ s64 time;
38
+ int ret;
39
+
40
+ NVBO_WR32(bo, NV50_DISP_CORE_NTFY, NV907D_CORE_NOTIFIER_3, CAPABILITIES_4,
41
+ NVDEF(NV907D_CORE_NOTIFIER_3, CAPABILITIES_4, DONE, FALSE));
42
+
43
+ ret = core507d_read_caps(disp);
44
+ if (ret < 0)
45
+ return ret;
46
+
47
+ time = nvif_msec(core->chan.base.device, 2000ULL,
48
+ if (NVBO_TD32(bo, NV50_DISP_CORE_NTFY,
49
+ NV907D_CORE_NOTIFIER_3, CAPABILITIES_4, DONE, ==, TRUE))
50
+ break;
51
+ usleep_range(1, 2);
52
+ );
53
+ if (time < 0)
54
+ NV_ERROR(drm, "core caps notifier timeout\n");
55
+
56
+ return 0;
57
+}
58
+
2559 static const struct nv50_core_func
2660 core907d = {
2761 .init = core507d_init,
2862 .ntfy_init = core507d_ntfy_init,
63
+ .caps_init = core907d_caps_init,
2964 .ntfy_wait_done = core507d_ntfy_wait_done,
3065 .update = core507d_update,
3166 .head = &head907d,
67
+#if IS_ENABLED(CONFIG_DEBUG_FS)
68
+ .crc = &crc907d,
69
+#endif
3270 .dac = &dac907d,
3371 .sor = &sor907d,
3472 };