summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/imagination/pvr_stream_defs.c
blob: 59265a7accce71122cf70d53ca5795d1020c379d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// SPDX-License-Identifier: GPL-2.0-only OR MIT
/* Copyright (c) 2023 Imagination Technologies Ltd. */

#include "pvr_device_info.h"
#include "pvr_rogue_fwif_client.h"
#include "pvr_rogue_fwif_stream.h"
#include "pvr_stream.h"
#include "pvr_stream_defs.h"

#include <linux/stddef.h>
#include <uapi/drm/pvr_drm.h>

#define PVR_STREAM_DEF_SET(owner, member, _size, _array_size, _feature) \
	{ .offset = offsetof(struct owner, member), \
	  .size = (_size),  \
	  .array_size = (_array_size), \
	  .feature = (_feature) }

#define PVR_STREAM_DEF(owner, member, member_size)  \
	PVR_STREAM_DEF_SET(owner, member, PVR_STREAM_SIZE_ ## member_size, 0, PVR_FEATURE_NONE)

#define PVR_STREAM_DEF_FEATURE(owner, member, member_size, feature) \
	PVR_STREAM_DEF_SET(owner, member, PVR_STREAM_SIZE_ ## member_size, 0, feature)

#define PVR_STREAM_DEF_NOT_FEATURE(owner, member, member_size, feature)       \
	PVR_STREAM_DEF_SET(owner, member, PVR_STREAM_SIZE_ ## member_size, 0, \
			   (feature) | PVR_FEATURE_NOT)

#define PVR_STREAM_DEF_ARRAY(owner, member)                                       \
	PVR_STREAM_DEF_SET(owner, member, PVR_STREAM_SIZE_ARRAY,                  \
			   sizeof(((struct owner *)0)->member), PVR_FEATURE_NONE)

#define PVR_STREAM_DEF_ARRAY_FEATURE(owner, member, feature)            \
	PVR_STREAM_DEF_SET(owner, member, PVR_STREAM_SIZE_ARRAY,         \
			   sizeof(((struct owner *)0)->member), feature)

#define PVR_STREAM_DEF_ARRAY_NOT_FEATURE(owner, member, feature)                             \
	PVR_STREAM_DEF_SET(owner, member, PVR_STREAM_SIZE_ARRAY,                             \
			   sizeof(((struct owner *)0)->member), (feature) | PVR_FEATURE_NOT)

/*
 * When adding new parameters to the stream definition, the new parameters must go after the
 * existing parameters, to preserve order. As parameters are naturally aligned, care must be taken
 * with respect to implicit padding in the stream; padding should be minimised as much as possible.
 */
static const struct pvr_stream_def rogue_fwif_static_render_context_state_stream[] = {
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_reg_vdm_context_state_base_addr, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_reg_vdm_context_state_resume_addr, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_reg_ta_context_state_base_addr, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[0].geom_reg_vdm_context_store_task0, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[0].geom_reg_vdm_context_store_task1, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[0].geom_reg_vdm_context_store_task2, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[0].geom_reg_vdm_context_store_task3, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[0].geom_reg_vdm_context_store_task4, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[0].geom_reg_vdm_context_resume_task0, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[0].geom_reg_vdm_context_resume_task1, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[0].geom_reg_vdm_context_resume_task2, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[0].geom_reg_vdm_context_resume_task3, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[0].geom_reg_vdm_context_resume_task4, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[1].geom_reg_vdm_context_store_task0, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[1].geom_reg_vdm_context_store_task1, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[1].geom_reg_vdm_context_store_task2, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[1].geom_reg_vdm_context_store_task3, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[1].geom_reg_vdm_context_store_task4, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[1].geom_reg_vdm_context_resume_task0, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[1].geom_reg_vdm_context_resume_task1, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[1].geom_reg_vdm_context_resume_task2, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[1].geom_reg_vdm_context_resume_task3, 64),
	PVR_STREAM_DEF(rogue_fwif_geom_registers_caswitch,
		       geom_state[1].geom_reg_vdm_context_resume_task4, 64),
};

const struct pvr_stream_cmd_defs pvr_static_render_context_state_stream = {
	.type = PVR_STREAM_TYPE_STATIC_RENDER_CONTEXT,

	.main_stream = rogue_fwif_static_render_context_state_stream,
	.main_stream_len = ARRAY_SIZE(rogue_fwif_static_render_context_state_stream),

	.ext_nr_headers = 0,

	.dest_size = sizeof(struct rogue_fwif_geom_registers_caswitch),
};

static const struct pvr_stream_def rogue_fwif_static_compute_context_state_stream[] = {
	PVR_STREAM_DEF(rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_context_pds0, 64),
	PVR_STREAM_DEF(rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_context_pds1, 64),
	PVR_STREAM_DEF(rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_terminate_pds, 64),
	PVR_STREAM_DEF(rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_terminate_pds1, 64),
	PVR_STREAM_DEF(rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_resume_pds0, 64),
	PVR_STREAM_DEF(rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_context_pds0_b, 64),
	PVR_STREAM_DEF(rogue_fwif_cdm_registers_cswitch, cdmreg_cdm_resume_pds0_b, 64),
};

const struct pvr_stream_cmd_defs pvr_static_compute_context_state_stream = {
	.type = PVR_STREAM_TYPE_STATIC_COMPUTE_CONTEXT,

	.main_stream = rogue_fwif_static_compute_context_state_stream,
	.main_stream_len = ARRAY_SIZE(rogue_fwif_static_compute_context_state_stream),

	.ext_nr_headers = 0,

	.dest_size = sizeof(struct rogue_fwif_cdm_registers_cswitch),
};