blob: aae2632b0ec8fa07ffbb6d6327e023a9d6ad6fe6 [file] [edit]
/*
* Copyright 2023 Asahi Lina
* SPDX-License-Identifier: MIT
*/
#ifndef LIBAGX_HELPER_H
#define LIBAGX_HELPER_H
#include "agx_pack.h"
#include "libagx.h"
// Enable this to debug core mappings.
// #define SCRATCH_DEBUG_CORES 512
#define AGX_SPILL_SIZE_BUCKETS 16
#define AGX_MAX_CORES_PER_CLUSTER 16
#define AGX_MAX_CLUSTERS 8
#ifdef SCRATCH_DEBUG_CORES
#define AGX_MAX_CORE_ID SCRATCH_DEBUG_CORES
#else
#define AGX_MAX_CORE_ID (AGX_MAX_CLUSTERS * AGX_MAX_CORES_PER_CLUSTER)
#endif
struct agx_helper_block {
uint32_t blocks[4];
} PACKED;
AGX_STATIC_ASSERT(sizeof(struct agx_helper_block) == 16);
struct agx_helper_core {
GLOBAL(struct agx_helper_block) blocklist;
uint32_t alloc_cur;
uint32_t alloc_max;
uint32_t alloc_failed;
uint32_t _pad;
uint32_t alloc_count[AGX_SPILL_SIZE_BUCKETS];
} PACKED;
AGX_STATIC_ASSERT(sizeof(struct agx_helper_core) ==
(8 + 3 * 4 + AGX_SPILL_SIZE_BUCKETS * 4 + 4));
struct agx_helper_header {
uint32_t subgroups;
uint32_t _pad;
struct agx_helper_core cores[AGX_MAX_CORE_ID];
} PACKED;
AGX_STATIC_ASSERT(sizeof(struct agx_helper_header) ==
(4 + 4 + AGX_MAX_CORE_ID * sizeof(struct agx_helper_core)));
#endif