1/* SPDX-License-Identifier: GPL-2.0-only OR MIT */ 2/* Copyright (c) 2023 Imagination Technologies Ltd. */ 3 4#ifndef PVR_ROGUE_DEFS_H 5#define PVR_ROGUE_DEFS_H 6 7#include "pvr_rogue_cr_defs.h" 8 9#include <linux/bits.h> 10 11/* 12 ****************************************************************************** 13 * ROGUE Defines 14 ****************************************************************************** 15 */ 16 17#define ROGUE_FW_MAX_NUM_OS (8U) 18#define ROGUE_FW_HOST_OS (0U) 19#define ROGUE_FW_GUEST_OSID_START (1U) 20 21#define ROGUE_FW_THREAD_0 (0U) 22#define ROGUE_FW_THREAD_1 (1U) 23 24#define GET_ROGUE_CACHE_LINE_SIZE(x) ((((s32)(x)) > 0) ? ((x) / 8) : (0)) 25 26#define MAX_HW_GEOM_FRAG_CONTEXTS 2U 27 28#define ROGUE_CR_CLK_CTRL_ALL_ON \ 29 (0x5555555555555555ull & ROGUE_CR_CLK_CTRL_MASKFULL) 30#define ROGUE_CR_CLK_CTRL_ALL_AUTO \ 31 (0xaaaaaaaaaaaaaaaaull & ROGUE_CR_CLK_CTRL_MASKFULL) 32#define ROGUE_CR_CLK_CTRL2_ALL_ON \ 33 (0x5555555555555555ull & ROGUE_CR_CLK_CTRL2_MASKFULL) 34#define ROGUE_CR_CLK_CTRL2_ALL_AUTO \ 35 (0xaaaaaaaaaaaaaaaaull & ROGUE_CR_CLK_CTRL2_MASKFULL) 36 37#define ROGUE_CR_SOFT_RESET_DUST_n_CORE_EN \ 38 (ROGUE_CR_SOFT_RESET_DUST_A_CORE_EN | \ 39 ROGUE_CR_SOFT_RESET_DUST_B_CORE_EN | \ 40 ROGUE_CR_SOFT_RESET_DUST_C_CORE_EN | \ 41 ROGUE_CR_SOFT_RESET_DUST_D_CORE_EN | \ 42 ROGUE_CR_SOFT_RESET_DUST_E_CORE_EN | \ 43 ROGUE_CR_SOFT_RESET_DUST_F_CORE_EN | \ 44 ROGUE_CR_SOFT_RESET_DUST_G_CORE_EN | \ 45 ROGUE_CR_SOFT_RESET_DUST_H_CORE_EN) 46 47/* SOFT_RESET Rascal and DUSTs bits */ 48#define ROGUE_CR_SOFT_RESET_RASCALDUSTS_EN \ 49 (ROGUE_CR_SOFT_RESET_RASCAL_CORE_EN | \ 50 ROGUE_CR_SOFT_RESET_DUST_n_CORE_EN) 51 52/* SOFT_RESET steps as defined in the TRM */ 53#define ROGUE_S7_SOFT_RESET_DUSTS (ROGUE_CR_SOFT_RESET_DUST_n_CORE_EN) 54 55#define ROGUE_S7_SOFT_RESET_JONES \ 56 (ROGUE_CR_SOFT_RESET_PM_EN | ROGUE_CR_SOFT_RESET_VDM_EN | \ 57 ROGUE_CR_SOFT_RESET_ISP_EN) 58 59#define ROGUE_S7_SOFT_RESET_JONES_ALL \ 60 (ROGUE_S7_SOFT_RESET_JONES | ROGUE_CR_SOFT_RESET_BIF_EN | \ 61 ROGUE_CR_SOFT_RESET_SLC_EN | ROGUE_CR_SOFT_RESET_GARTEN_EN) 62 63#define ROGUE_S7_SOFT_RESET2 \ 64 (ROGUE_CR_SOFT_RESET2_BLACKPEARL_EN | ROGUE_CR_SOFT_RESET2_PIXEL_EN | \ 65 ROGUE_CR_SOFT_RESET2_CDM_EN | ROGUE_CR_SOFT_RESET2_VERTEX_EN) 66 67#define ROGUE_BIF_PM_PHYSICAL_PAGE_ALIGNSHIFT (12U) 68#define ROGUE_BIF_PM_PHYSICAL_PAGE_SIZE \ 69 BIT(ROGUE_BIF_PM_PHYSICAL_PAGE_ALIGNSHIFT) 70 71#define ROGUE_BIF_PM_VIRTUAL_PAGE_ALIGNSHIFT (14U) 72#define ROGUE_BIF_PM_VIRTUAL_PAGE_SIZE BIT(ROGUE_BIF_PM_VIRTUAL_PAGE_ALIGNSHIFT) 73 74#define ROGUE_BIF_PM_FREELIST_BASE_ADDR_ALIGNSIZE (16U) 75 76/* 77 * To get the number of required Dusts, divide the number of 78 * clusters by 2 and round up 79 */ 80#define ROGUE_REQ_NUM_DUSTS(CLUSTERS) (((CLUSTERS) + 1U) / 2U) 81 82/* 83 * To get the number of required Bernado/Phantom(s), divide 84 * the number of clusters by 4 and round up 85 */ 86#define ROGUE_REQ_NUM_PHANTOMS(CLUSTERS) (((CLUSTERS) + 3U) / 4U) 87#define ROGUE_REQ_NUM_BERNADOS(CLUSTERS) (((CLUSTERS) + 3U) / 4U) 88#define ROGUE_REQ_NUM_BLACKPEARLS(CLUSTERS) (((CLUSTERS) + 3U) / 4U) 89 90/* 91 * FW MMU contexts 92 */ 93#define MMU_CONTEXT_MAPPING_FWPRIV (0x0) /* FW code/private data */ 94#define MMU_CONTEXT_MAPPING_FWIF (0x0) /* Host/FW data */ 95 96/* 97 * Utility macros to calculate CAT_BASE register addresses 98 */ 99#define BIF_CAT_BASEX(n) \ 100 (ROGUE_CR_BIF_CAT_BASE0 + \ 101 (n) * (ROGUE_CR_BIF_CAT_BASE1 - ROGUE_CR_BIF_CAT_BASE0)) 102 103#define FWCORE_MEM_CAT_BASEX(n) \ 104 (ROGUE_CR_FWCORE_MEM_CAT_BASE0 + \ 105 (n) * (ROGUE_CR_FWCORE_MEM_CAT_BASE1 - \ 106 ROGUE_CR_FWCORE_MEM_CAT_BASE0)) 107 108/* 109 * FWCORE wrapper register defines 110 */ 111#define FWCORE_ADDR_REMAP_CONFIG0_MMU_CONTEXT_SHIFT \ 112 ROGUE_CR_FWCORE_ADDR_REMAP_CONFIG0_CBASE_SHIFT 113#define FWCORE_ADDR_REMAP_CONFIG0_MMU_CONTEXT_CLRMSK \ 114 ROGUE_CR_FWCORE_ADDR_REMAP_CONFIG0_CBASE_CLRMSK 115#define FWCORE_ADDR_REMAP_CONFIG0_SIZE_ALIGNSHIFT (12U) 116 117#define ROGUE_MAX_COMPUTE_SHARED_REGISTERS (2 * 1024) 118#define ROGUE_MAX_VERTEX_SHARED_REGISTERS 1024 119#define ROGUE_MAX_PIXEL_SHARED_REGISTERS 1024 120#define ROGUE_CSRM_LINE_SIZE_IN_DWORDS (64 * 4 * 4) 121 122#define ROGUE_CDMCTRL_USC_COMMON_SIZE_ALIGNSIZE 64 123#define ROGUE_CDMCTRL_USC_COMMON_SIZE_UPPER 256 124 125/* 126 * The maximum amount of local memory which can be allocated by a single kernel 127 * (in dwords/32-bit registers). 128 * 129 * ROGUE_CDMCTRL_USC_COMMON_SIZE_ALIGNSIZE is in bytes so we divide by four. 130 */ 131#define ROGUE_MAX_PER_KERNEL_LOCAL_MEM_SIZE_REGS ((ROGUE_CDMCTRL_USC_COMMON_SIZE_ALIGNSIZE * \ 132 ROGUE_CDMCTRL_USC_COMMON_SIZE_UPPER) >> 2) 133 134/* 135 ****************************************************************************** 136 * WA HWBRNs 137 ****************************************************************************** 138 */ 139 140/* GPU CR timer tick in GPU cycles */ 141#define ROGUE_CRTIME_TICK_IN_CYCLES (256U) 142 143/* for nohw multicore return max cores possible to client */ 144#define ROGUE_MULTICORE_MAX_NOHW_CORES (4U) 145 146/* 147 * If the size of the SLC is less than this value then the TPU bypasses the SLC. 148 */ 149#define ROGUE_TPU_CACHED_SLC_SIZE_THRESHOLD (128U * 1024U) 150 151/* 152 * If the size of the SLC is bigger than this value then the TCU must not be 153 * bypassed in the SLC. 154 * In XE_MEMORY_HIERARCHY cores, the TCU is bypassed by default. 155 */ 156#define ROGUE_TCU_CACHED_SLC_SIZE_THRESHOLD (32U * 1024U) 157 158/* 159 * Register used by the FW to track the current boot stage (not used in MIPS) 160 */ 161#define ROGUE_FW_BOOT_STAGE_REGISTER (ROGUE_CR_POWER_ESTIMATE_RESULT) 162 163/* 164 * Virtualisation definitions 165 */ 166#define ROGUE_VIRTUALISATION_REG_SIZE_PER_OS \ 167 (ROGUE_CR_MTS_SCHEDULE1 - ROGUE_CR_MTS_SCHEDULE) 168 169/* 170 * Macro used to indicate which version of HWPerf is active 171 */ 172#define ROGUE_FEATURE_HWPERF_ROGUE 173 174/* 175 * Maximum number of cores supported by TRP 176 */ 177#define ROGUE_TRP_MAX_NUM_CORES (4U) 178 179#endif /* PVR_ROGUE_DEFS_H */ 180