xref: /aosp_15_r20/external/mesa3d/src/asahi/lib/agx_scratch.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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 #pragma once
7*61046927SAndroid Build Coastguard Worker 
8*61046927SAndroid Build Coastguard Worker #include "agx_device.h"
9*61046927SAndroid Build Coastguard Worker #include <agx_pack.h>
10*61046927SAndroid Build Coastguard Worker 
11*61046927SAndroid Build Coastguard Worker // #define SCRATCH_DEBUG
12*61046927SAndroid Build Coastguard Worker 
13*61046927SAndroid Build Coastguard Worker struct agx_scratch {
14*61046927SAndroid Build Coastguard Worker    struct agx_device *dev;
15*61046927SAndroid Build Coastguard Worker    struct agx_bo *buf;
16*61046927SAndroid Build Coastguard Worker    uint32_t max_core_id;
17*61046927SAndroid Build Coastguard Worker    uint32_t num_cores;
18*61046927SAndroid Build Coastguard Worker 
19*61046927SAndroid Build Coastguard Worker    uint32_t subgroups;
20*61046927SAndroid Build Coastguard Worker    uint32_t size_dwords;
21*61046927SAndroid Build Coastguard Worker 
22*61046927SAndroid Build Coastguard Worker    struct agx_helper_header *header;
23*61046927SAndroid Build Coastguard Worker 
24*61046927SAndroid Build Coastguard Worker #ifdef SCRATCH_DEBUG
25*61046927SAndroid Build Coastguard Worker    bool core_present[1024];
26*61046927SAndroid Build Coastguard Worker    struct agx_helper_block *blocklist;
27*61046927SAndroid Build Coastguard Worker    void *data;
28*61046927SAndroid Build Coastguard Worker    size_t core_size;
29*61046927SAndroid Build Coastguard Worker #endif
30*61046927SAndroid Build Coastguard Worker };
31*61046927SAndroid Build Coastguard Worker 
32*61046927SAndroid Build Coastguard Worker struct agx_bo *agx_build_helper(struct agx_device *dev);
33*61046927SAndroid Build Coastguard Worker 
34*61046927SAndroid Build Coastguard Worker void agx_scratch_init(struct agx_device *dev, struct agx_scratch *scratch);
35*61046927SAndroid Build Coastguard Worker void agx_scratch_fini(struct agx_scratch *scratch);
36*61046927SAndroid Build Coastguard Worker void agx_scratch_debug_pre(struct agx_scratch *scratch);
37*61046927SAndroid Build Coastguard Worker void agx_scratch_debug_post(struct agx_scratch *scratch);
38*61046927SAndroid Build Coastguard Worker 
39*61046927SAndroid Build Coastguard Worker uint32_t agx_scratch_get_bucket(uint32_t dwords);
40*61046927SAndroid Build Coastguard Worker void agx_scratch_alloc(struct agx_scratch *scratch, uint32_t dwords,
41*61046927SAndroid Build Coastguard Worker                        size_t subgroups);
42