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