• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright © 2022 Imagination Technologies Ltd.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21  * SOFTWARE.
22  */
23 
24 /* This file is based on rgxdefs.h and should only contain object-like macros.
25  * Any function-like macros or inline functions should instead appear in
26  * rogue_hw_utils.h.
27  */
28 
29 #ifndef ROGUE_HW_DEFS_H
30 #define ROGUE_HW_DEFS_H
31 
32 #include <stdint.h>
33 
34 #include "util/macros.h"
35 
36 #define ROGUE_BIF_PM_PHYSICAL_PAGE_SHIFT 12U
37 #define ROGUE_BIF_PM_PHYSICAL_PAGE_SIZE \
38    BITFIELD_BIT(ROGUE_BIF_PM_PHYSICAL_PAGE_SHIFT)
39 
40 /* ISP triangle merging constants. */
41 /* tan(15) (0x3E8930A3) */
42 #define ROGUE_ISP_MERGE_LOWER_LIMIT_NUMERATOR 0.267949f
43 /* tan(60) (0x3FDDB3D7) */
44 #define ROGUE_ISP_MERGE_UPPER_LIMIT_NUMERATOR 1.732051f
45 #define ROGUE_ISP_MERGE_SCALE_FACTOR 16.0f
46 
47 #define ROGUE_MAX_INSTR_BYTES 32U
48 
49 #define ROGUE_ICACHE_ALIGN 8U
50 
51 #define ROGUE_MAX_ALU_INPUTS 6U
52 #define ROGUE_ALU_INPUT_GROUP_SIZE (ROGUE_MAX_ALU_INPUTS / 2)
53 #define ROGUE_MAX_ALU_OUTPUTS 2U
54 #define ROGUE_MAX_ALU_INTERNAL_SOURCES 6U
55 
56 /* MList entry stride in bytes */
57 #define ROGUE_MLIST_ENTRY_STRIDE 4U
58 
59 /* VCE & TE share virtual space and Alist. */
60 #define ROGUE_NUM_PM_ADDRESS_SPACES 2U
61 
62 /* PM Maximum addressable limit (as determined by the size field of the
63  * PM_*_FSTACK registers).
64  */
65 #define ROGUE_PM_MAX_PB_VIRT_ADDR_SPACE UINT64_C(0x400000000)
66 
67 /* Vheap entry size in bytes. */
68 #define ROGUE_PM_VHEAP_ENTRY_SIZE 4U
69 
70 #define ROGUE_RTC_SIZE_IN_BYTES 256U
71 
72 #define ROGUE_NUM_VCE 1U
73 
74 #define ROGUE_NUM_TEAC 1U
75 
76 #define ROGUE_NUM_TE 1U
77 
78 /* Tail pointer size in bytes. */
79 #define ROGUE_TAIL_POINTER_SIZE 8U
80 
81 /* Tail pointer cache line size. */
82 #define ROGUE_TE_TPC_CACHE_LINE_SIZE 64U
83 
84 #define ROGUE_MAX_VERTEX_SHARED_REGISTERS 1024U
85 
86 #define ROGUE_MAX_PIXEL_SHARED_REGISTERS 1024U
87 
88 /* Number of CR_PDS_BGRND values that need setting up. */
89 #define ROGUE_NUM_CR_PDS_BGRND_WORDS 3U
90 
91 /* Number of PBESTATE_REG_WORD values that need setting up. */
92 #define ROGUE_NUM_PBESTATE_REG_WORDS 3U
93 
94 /* Number of PBESTATE_REG_WORD used in transfer.
95  * The last word is not used.
96  */
97 #define ROGUE_NUM_PBESTATE_REG_WORDS_FOR_TRANSFER 2U
98 
99 /* Number of PBESTATE_STATE_WORD values that need setting up. */
100 #define ROGUE_NUM_PBESTATE_STATE_WORDS 2U
101 
102 /* Number of TEXSTATE_IMAGE_WORD values that need setting up. */
103 #define ROGUE_NUM_TEXSTATE_IMAGE_WORDS 2U
104 
105 /* Number of TEXSTATE_SAMPLER state words that need setting up. */
106 #define ROGUE_NUM_TEXSTATE_SAMPLER_WORDS 2U
107 
108 /* 12 dwords reserved for shared register management. The first dword is the
109  * number of shared register blocks to reload. Should be a multiple of 4 dwords,
110  * size in bytes.
111  */
112 #define ROGUE_LLS_SHARED_REGS_RESERVE_SIZE 48U
113 
114 #define ROGUE_USC_TASK_PROGRAM_SIZE 512U
115 
116 #define ROGUE_CSRM_LINE_SIZE_IN_DWORDS (64U * 4U * 4U)
117 
118 /* The maximum amount of local memory which can be allocated by a single kernel
119  * (in dwords/32-bit registers).
120  *
121  * ROGUE_CDMCTRL_USC_COMMON_SIZE_UNIT_SIZE is in bytes so we divide by four.
122  */
123 #define ROGUE_MAX_PER_KERNEL_LOCAL_MEM_SIZE_REGS        \
124    ((ROGUE_CDMCTRL_KERNEL0_USC_COMMON_SIZE_UNIT_SIZE *  \
125      ROGUE_CDMCTRL_KERNEL0_USC_COMMON_SIZE_MAX_SIZE) >> \
126     2)
127 
128 #define ROGUE_MAX_INSTANCES_PER_TASK \
129    (ROGUE_CDMCTRL_KERNEL8_MAX_INSTANCES_MAX_SIZE + 1U)
130 
131 /* Optimal number for packing work groups into a slot. */
132 #define ROGUE_CDM_MAX_PACKED_WORKGROUPS_PER_TASK 8U
133 
134 /* The maximum number of pixel task instances which might be running overlapped
135  * with compute. Once we have 8 pixel task instances we have a complete set and
136  * task will be able to run and allocations will be freed.
137  */
138 #define ROGUE_MAX_OVERLAPPED_PIXEL_TASK_INSTANCES 7U
139 
140 /* Size of the image state in 64-bit units. */
141 #define ROGUE_MAXIMUM_IMAGE_STATE_SIZE_IN_ULONGLONGS 2U
142 
143 /* Size of the image state in dwords. The last 64-bit word is optional for
144  * non-YUV textures.
145  */
146 #define ROGUE_MAXIMUM_IMAGE_STATE_SIZE             \
147    (ROGUE_MAXIMUM_IMAGE_STATE_SIZE_IN_ULONGLONGS * \
148     (sizeof(uint64_t) / sizeof(uint32_t)))
149 
150 #define PVR_NUM_PBE_EMIT_REGS 8U
151 
152 #define ROGUE_USRM_GRANULARITY_IN_REGISTERS 4U
153 
154 #define ROGUE_RESERVED_USRM_LINES 2U
155 
156 #define ROGUE_USC_NUM_UNIFIED_STORE_BANKS 8U
157 
158 #define ROGUE_PDS_US_REGISTER_ALLOCATION_GRANULARITY 8U
159 
160 #define ROGUE_PDS_US_TEMP_ALLOCATION_GRANULARITY \
161    ROGUE_PDS_US_REGISTER_ALLOCATION_GRANULARITY
162 
163 #define ROGUE_USRM_LINE_SIZE 16U
164 
165 #define ROGUE_USRM_LINE_SIZE_PER_INSTANCE \
166    (ROGUE_PDS_US_TEMP_ALLOCATION_GRANULARITY * ROGUE_USRM_LINE_SIZE)
167 
168 #define ROGUE_USC_COEFFICIENT_SET_SIZE 4U
169 
170 #endif /* ROGUE_HW_DEFS_H */
171