summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/imagination/pvr_rogue_cr_defs_client.h
blob: 46186b56effc97b47c9671431de8515c4174f2e3 (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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/* SPDX-License-Identifier: GPL-2.0-only OR MIT */
/* Copyright (c) 2023 Imagination Technologies Ltd. */

#ifndef PVR_ROGUE_CR_DEFS_CLIENT_H
#define PVR_ROGUE_CR_DEFS_CLIENT_H

/* clang-format off */

/*
 * This register controls the anti-aliasing mode of the Tiling Co-Processor, independent control is
 * provided in both X & Y axis.
 * This register needs to be set based on the ISP Samples Per Pixel a core supports.
 *
 * When ISP Samples Per Pixel = 1:
 * 2xmsaa is achieved by enabling Y - TE does AA on Y plane only
 * 4xmsaa is achieved by enabling Y and X - TE does AA on X and Y plane
 * 8xmsaa not supported by XE cores
 *
 * When ISP Samples Per Pixel = 2:
 * 2xmsaa is achieved by enabling X2 - does not affect TE
 * 4xmsaa is achieved by enabling Y and X2 - TE does AA on Y plane only
 * 8xmsaa is achieved by enabling Y, X and X2 - TE does AA on X and Y plane
 * 8xmsaa not supported by XE cores
 *
 * When ISP Samples Per Pixel = 4:
 * 2xmsaa is achieved by enabling X2 - does not affect TE
 * 4xmsaa is achieved by enabling Y2 and X2 - TE does AA on Y plane only
 * 8xmsaa not supported by XE cores
 */
/* Register ROGUE_CR_TE_AA */
#define ROGUE_CR_TE_AA 0x0C00U
#define ROGUE_CR_TE_AA_MASKFULL 0x000000000000000Full
/* Y2
 * Indicates 4xmsaa when X2 and Y2 are set to 1. This does not affect TE and is only used within
 * TPW.
 */
#define ROGUE_CR_TE_AA_Y2_SHIFT 3
#define ROGUE_CR_TE_AA_Y2_CLRMSK 0xFFFFFFF7
#define ROGUE_CR_TE_AA_Y2_EN 0x00000008
/* Y
 * Anti-Aliasing in Y Plane Enabled
 */
#define ROGUE_CR_TE_AA_Y_SHIFT 2
#define ROGUE_CR_TE_AA_Y_CLRMSK 0xFFFFFFFB
#define ROGUE_CR_TE_AA_Y_EN 0x00000004
/* X
 * Anti-Aliasing in X Plane Enabled
 */
#define ROGUE_CR_TE_AA_X_SHIFT 1
#define ROGUE_CR_TE_AA_X_CLRMSK 0xFFFFFFFD
#define ROGUE_CR_TE_AA_X_EN 0x00000002
/* X2
 * 2x Anti-Aliasing Enabled, affects PPP only
 */
#define ROGUE_CR_TE_AA_X2_SHIFT                             (0U)
#define ROGUE_CR_TE_AA_X2_CLRMSK                            (0xFFFFFFFEU)
#define ROGUE_CR_TE_AA_X2_EN                                (0x00000001U)

/* MacroTile Boundaries X Plane */
/* Register ROGUE_CR_TE_MTILE1 */
#define ROGUE_CR_TE_MTILE1 0x0C08
#define ROGUE_CR_TE_MTILE1_MASKFULL 0x0000000007FFFFFFull
/* X1 default: 0x00000004
 * X1 MacroTile boundary, left tile X for second column of macrotiles (16MT mode) - 32 pixels across
 * tile
 */
#define ROGUE_CR_TE_MTILE1_X1_SHIFT 18
#define ROGUE_CR_TE_MTILE1_X1_CLRMSK 0xF803FFFF
/* X2 default: 0x00000008
 * X2 MacroTile boundary, left tile X for third(16MT) column of macrotiles - 32 pixels across tile
 */
#define ROGUE_CR_TE_MTILE1_X2_SHIFT 9U
#define ROGUE_CR_TE_MTILE1_X2_CLRMSK 0xFFFC01FF
/* X3 default: 0x0000000c
 * X3 MacroTile boundary, left tile X for fourth column of macrotiles (16MT) - 32 pixels across tile
 */
#define ROGUE_CR_TE_MTILE1_X3_SHIFT 0
#define ROGUE_CR_TE_MTILE1_X3_CLRMSK 0xFFFFFE00

/* MacroTile Boundaries Y Plane. */
/* Register ROGUE_CR_TE_MTILE2 */
#define ROGUE_CR_TE_MTILE2 0x0C10
#define ROGUE_CR_TE_MTILE2_MASKFULL 0x0000000007FFFFFFull
/* Y1 default: 0x00000004
 * X1 MacroTile boundary, ltop tile Y for second column of macrotiles (16MT mode) - 32 pixels tile
 * height
 */
#define ROGUE_CR_TE_MTILE2_Y1_SHIFT 18
#define ROGUE_CR_TE_MTILE2_Y1_CLRMSK 0xF803FFFF
/* Y2 default: 0x00000008
 * X2 MacroTile boundary, top tile Y for third(16MT) column of macrotiles - 32 pixels tile height
 */
#define ROGUE_CR_TE_MTILE2_Y2_SHIFT 9
#define ROGUE_CR_TE_MTILE2_Y2_CLRMSK 0xFFFC01FF
/* Y3 default: 0x0000000c
 * X3 MacroTile boundary, top tile Y for fourth column of macrotiles (16MT) - 32 pixels tile height
 */
#define ROGUE_CR_TE_MTILE2_Y3_SHIFT 0
#define ROGUE_CR_TE_MTILE2_Y3_CLRMSK 0xFFFFFE00

/*
 * In order to perform the tiling operation and generate the display list the maximum screen size
 * must be configured in terms of the number of tiles in X & Y axis.
 */

/* Register ROGUE_CR_TE_SCREEN */
#define ROGUE_CR_TE_SCREEN 0x0C18U
#define ROGUE_CR_TE_SCREEN_MASKFULL 0x00000000001FF1FFull
/* YMAX default: 0x00000010
 * Maximum Y tile address visible on screen, 32 pixel tile height, 16Kx16K max screen size
 */
#define ROGUE_CR_TE_SCREEN_YMAX_SHIFT 12
#define ROGUE_CR_TE_SCREEN_YMAX_CLRMSK 0xFFE00FFF
/* XMAX default: 0x00000010
 * Maximum X tile address visible on screen, 32 pixel tile width, 16Kx16K max screen size
 */
#define ROGUE_CR_TE_SCREEN_XMAX_SHIFT 0
#define ROGUE_CR_TE_SCREEN_XMAX_CLRMSK 0xFFFFFE00

/*
 * In order to perform the tiling operation and generate the display list the maximum screen size
 * must be configured in terms of the number of pixels in X & Y axis since this may not be the same
 * as the number of tiles defined in the RGX_CR_TE_SCREEN register.
 */
/* Register ROGUE_CR_PPP_SCREEN */
#define ROGUE_CR_PPP_SCREEN 0x0C98
#define ROGUE_CR_PPP_SCREEN_MASKFULL 0x000000007FFF7FFFull
/* PIXYMAX
 * Screen height in pixels. (16K x 16K max screen size)
 */
#define ROGUE_CR_PPP_SCREEN_PIXYMAX_SHIFT 16
#define ROGUE_CR_PPP_SCREEN_PIXYMAX_CLRMSK 0x8000FFFF
/* PIXXMAX
 * Screen width in pixels.(16K x 16K max screen size)
 */
#define ROGUE_CR_PPP_SCREEN_PIXXMAX_SHIFT 0
#define ROGUE_CR_PPP_SCREEN_PIXXMAX_CLRMSK 0xFFFF8000

/* Register ROGUE_CR_ISP_MTILE_SIZE */
#define ROGUE_CR_ISP_MTILE_SIZE 0x0F18
#define ROGUE_CR_ISP_MTILE_SIZE_MASKFULL 0x0000000003FF03FFull
/* X
 * Macrotile width, in tiles. A value of zero corresponds to the maximum size
 */
#define ROGUE_CR_ISP_MTILE_SIZE_X_SHIFT 16
#define ROGUE_CR_ISP_MTILE_SIZE_X_CLRMSK 0xFC00FFFF
#define ROGUE_CR_ISP_MTILE_SIZE_X_ALIGNSHIFT 0
#define ROGUE_CR_ISP_MTILE_SIZE_X_ALIGNSIZE 1
/* Y
 * Macrotile height, in tiles. A value of zero corresponds to the maximum size
 */
#define ROGUE_CR_ISP_MTILE_SIZE_Y_SHIFT 0
#define ROGUE_CR_ISP_MTILE_SIZE_Y_CLRMSK 0xFFFFFC00
#define ROGUE_CR_ISP_MTILE_SIZE_Y_ALIGNSHIFT 0
#define ROGUE_CR_ISP_MTILE_SIZE_Y_ALIGNSIZE 1

/* clang-format on */

#endif /* PVR_ROGUE_CR_DEFS_CLIENT_H */