1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright 2023 Asahi Lina 3*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT 4*61046927SAndroid Build Coastguard Worker */ 5*61046927SAndroid Build Coastguard Worker 6*61046927SAndroid Build Coastguard Worker #ifndef LIBAGX_HELPER_H 7*61046927SAndroid Build Coastguard Worker #define LIBAGX_HELPER_H 8*61046927SAndroid Build Coastguard Worker 9*61046927SAndroid Build Coastguard Worker #include "agx_pack.h" 10*61046927SAndroid Build Coastguard Worker #include "libagx.h" 11*61046927SAndroid Build Coastguard Worker 12*61046927SAndroid Build Coastguard Worker // Enable this to debug core mappings. 13*61046927SAndroid Build Coastguard Worker // #define SCRATCH_DEBUG_CORES 512 14*61046927SAndroid Build Coastguard Worker 15*61046927SAndroid Build Coastguard Worker #define AGX_SPILL_SIZE_BUCKETS 16 16*61046927SAndroid Build Coastguard Worker 17*61046927SAndroid Build Coastguard Worker #define AGX_MAX_CORES_PER_CLUSTER 16 18*61046927SAndroid Build Coastguard Worker #define AGX_MAX_CLUSTERS 8 19*61046927SAndroid Build Coastguard Worker 20*61046927SAndroid Build Coastguard Worker #ifdef SCRATCH_DEBUG_CORES 21*61046927SAndroid Build Coastguard Worker #define AGX_MAX_CORE_ID SCRATCH_DEBUG_CORES 22*61046927SAndroid Build Coastguard Worker #else 23*61046927SAndroid Build Coastguard Worker #define AGX_MAX_CORE_ID (AGX_MAX_CLUSTERS * AGX_MAX_CORES_PER_CLUSTER) 24*61046927SAndroid Build Coastguard Worker #endif 25*61046927SAndroid Build Coastguard Worker 26*61046927SAndroid Build Coastguard Worker struct agx_helper_block { 27*61046927SAndroid Build Coastguard Worker uint32_t blocks[4]; 28*61046927SAndroid Build Coastguard Worker } PACKED; 29*61046927SAndroid Build Coastguard Worker AGX_STATIC_ASSERT(sizeof(struct agx_helper_block) == 16); 30*61046927SAndroid Build Coastguard Worker 31*61046927SAndroid Build Coastguard Worker struct agx_helper_core { 32*61046927SAndroid Build Coastguard Worker GLOBAL(struct agx_helper_block) blocklist; 33*61046927SAndroid Build Coastguard Worker uint32_t alloc_cur; 34*61046927SAndroid Build Coastguard Worker uint32_t alloc_max; 35*61046927SAndroid Build Coastguard Worker uint32_t alloc_failed; 36*61046927SAndroid Build Coastguard Worker uint32_t _pad; 37*61046927SAndroid Build Coastguard Worker uint32_t alloc_count[AGX_SPILL_SIZE_BUCKETS]; 38*61046927SAndroid Build Coastguard Worker } PACKED; 39*61046927SAndroid Build Coastguard Worker AGX_STATIC_ASSERT(sizeof(struct agx_helper_core) == 40*61046927SAndroid Build Coastguard Worker (8 + 3 * 4 + AGX_SPILL_SIZE_BUCKETS * 4 + 4)); 41*61046927SAndroid Build Coastguard Worker 42*61046927SAndroid Build Coastguard Worker struct agx_helper_header { 43*61046927SAndroid Build Coastguard Worker uint32_t subgroups; 44*61046927SAndroid Build Coastguard Worker uint32_t _pad; 45*61046927SAndroid Build Coastguard Worker struct agx_helper_core cores[AGX_MAX_CORE_ID]; 46*61046927SAndroid Build Coastguard Worker } PACKED; 47*61046927SAndroid Build Coastguard Worker AGX_STATIC_ASSERT(sizeof(struct agx_helper_header) == 48*61046927SAndroid Build Coastguard Worker (4 + 4 + AGX_MAX_CORE_ID * sizeof(struct agx_helper_core))); 49*61046927SAndroid Build Coastguard Worker 50*61046927SAndroid Build Coastguard Worker #endif 51