forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/drivers/gpu/drm/nouveau/dispnv50/base827c.c
....@@ -21,27 +21,60 @@
2121 */
2222 #include "base.h"
2323
24
-static void
24
+#include <nvif/push507c.h>
25
+
26
+#include <nvhw/class/cl827c.h>
27
+
28
+static int
2529 base827c_image_set(struct nv50_wndw *wndw, struct nv50_wndw_atom *asyw)
2630 {
27
- u32 *push;
28
- if ((push = evo_wait(&wndw->wndw, 10))) {
29
- evo_mthd(push, 0x0084, 1);
30
- evo_data(push, asyw->image.mode << 8 |
31
- asyw->image.interval << 4);
32
- evo_mthd(push, 0x00c0, 1);
33
- evo_data(push, asyw->image.handle[0]);
34
- evo_mthd(push, 0x0800, 5);
35
- evo_data(push, asyw->image.offset[0] >> 8);
36
- evo_data(push, 0x00000000);
37
- evo_data(push, asyw->image.h << 16 | asyw->image.w);
38
- evo_data(push, asyw->image.layout << 20 |
39
- (asyw->image.pitch[0] >> 8) << 8 |
40
- asyw->image.blocks[0] << 8 |
41
- asyw->image.blockh);
42
- evo_data(push, asyw->image.format << 8);
43
- evo_kick(push, &wndw->wndw);
31
+ struct nvif_push *push = wndw->wndw.push;
32
+ int ret;
33
+
34
+ if ((ret = PUSH_WAIT(push, 13)))
35
+ return ret;
36
+
37
+ PUSH_MTHD(push, NV827C, SET_PRESENT_CONTROL,
38
+ NVVAL(NV827C, SET_PRESENT_CONTROL, BEGIN_MODE, asyw->image.mode) |
39
+ NVVAL(NV827C, SET_PRESENT_CONTROL, MIN_PRESENT_INTERVAL, asyw->image.interval));
40
+
41
+ PUSH_MTHD(push, NV827C, SET_CONTEXT_DMAS_ISO(0), asyw->image.handle, 1);
42
+
43
+ if (asyw->image.format == NV827C_SURFACE_SET_PARAMS_FORMAT_RF16_GF16_BF16_AF16) {
44
+ PUSH_MTHD(push, NV827C, SET_PROCESSING,
45
+ NVDEF(NV827C, SET_PROCESSING, USE_GAIN_OFS, ENABLE),
46
+
47
+ SET_CONVERSION,
48
+ NVVAL(NV827C, SET_CONVERSION, GAIN, 0) |
49
+ NVVAL(NV827C, SET_CONVERSION, OFS, 0x64));
50
+ } else {
51
+ PUSH_MTHD(push, NV827C, SET_PROCESSING,
52
+ NVDEF(NV827C, SET_PROCESSING, USE_GAIN_OFS, DISABLE),
53
+
54
+ SET_CONVERSION,
55
+ NVVAL(NV827C, SET_CONVERSION, GAIN, 0) |
56
+ NVVAL(NV827C, SET_CONVERSION, OFS, 0));
4457 }
58
+
59
+ PUSH_MTHD(push, NV827C, SURFACE_SET_OFFSET(0, 0), asyw->image.offset[0] >> 8,
60
+ SURFACE_SET_OFFSET(0, 1), 0x00000000,
61
+
62
+ SURFACE_SET_SIZE(0),
63
+ NVVAL(NV827C, SURFACE_SET_SIZE, WIDTH, asyw->image.w) |
64
+ NVVAL(NV827C, SURFACE_SET_SIZE, HEIGHT, asyw->image.h),
65
+
66
+ SURFACE_SET_STORAGE(0),
67
+ NVVAL(NV827C, SURFACE_SET_STORAGE, BLOCK_HEIGHT, asyw->image.blockh) |
68
+ NVVAL(NV827C, SURFACE_SET_STORAGE, PITCH, asyw->image.pitch[0] >> 8) |
69
+ NVVAL(NV827C, SURFACE_SET_STORAGE, PITCH, asyw->image.blocks[0]) |
70
+ NVVAL(NV827C, SURFACE_SET_STORAGE, MEMORY_LAYOUT, asyw->image.layout),
71
+
72
+ SURFACE_SET_PARAMS(0),
73
+ NVVAL(NV827C, SURFACE_SET_PARAMS, FORMAT, asyw->image.format) |
74
+ NVDEF(NV827C, SURFACE_SET_PARAMS, SUPER_SAMPLE, X1_AA) |
75
+ NVDEF(NV827C, SURFACE_SET_PARAMS, GAMMA, LINEAR) |
76
+ NVDEF(NV827C, SURFACE_SET_PARAMS, LAYOUT, FRM));
77
+ return 0;
4578 }
4679
4780 static const struct nv50_wndw_func