1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * Copyright © 2024 Igalia S.L.
3*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker */
5*61046927SAndroid Build Coastguard Worker
6*61046927SAndroid Build Coastguard Worker #include "etna_hwdb.h"
7*61046927SAndroid Build Coastguard Worker
8*61046927SAndroid Build Coastguard Worker #include "etna_core_info.h"
9*61046927SAndroid Build Coastguard Worker #include "hwdb.h"
10*61046927SAndroid Build Coastguard Worker
11*61046927SAndroid Build Coastguard Worker /* clang-format off */
12*61046927SAndroid Build Coastguard Worker #define ETNA_FEATURE(member, feature) \
13*61046927SAndroid Build Coastguard Worker if (db->member) \
14*61046927SAndroid Build Coastguard Worker etna_core_enable_feature(info, ETNA_FEATURE_##feature)
15*61046927SAndroid Build Coastguard Worker /* clang-format on */
16*61046927SAndroid Build Coastguard Worker
17*61046927SAndroid Build Coastguard Worker bool
etna_query_feature_db(struct etna_core_info * info)18*61046927SAndroid Build Coastguard Worker etna_query_feature_db(struct etna_core_info *info)
19*61046927SAndroid Build Coastguard Worker {
20*61046927SAndroid Build Coastguard Worker gcsFEATURE_DATABASE *db = gcQueryFeatureDB(info->model, info->revision, info->product_id,
21*61046927SAndroid Build Coastguard Worker info->eco_id, info->customer_id);
22*61046927SAndroid Build Coastguard Worker
23*61046927SAndroid Build Coastguard Worker if (!db)
24*61046927SAndroid Build Coastguard Worker return false;
25*61046927SAndroid Build Coastguard Worker
26*61046927SAndroid Build Coastguard Worker if (db->NNCoreCount)
27*61046927SAndroid Build Coastguard Worker info->type = ETNA_CORE_NPU;
28*61046927SAndroid Build Coastguard Worker else
29*61046927SAndroid Build Coastguard Worker info->type = ETNA_CORE_GPU;
30*61046927SAndroid Build Coastguard Worker
31*61046927SAndroid Build Coastguard Worker /* Features: */
32*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_FastClear, FAST_CLEAR);
33*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_Pipe3D, PIPE_3D);
34*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_FE20BitIndex, 32_BIT_INDICES);
35*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_MSAA, MSAA);
36*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_DXTTextureCompression, DXT_TEXTURE_COMPRESSION);
37*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_ETC1TextureCompression, ETC1_TEXTURE_COMPRESSION);
38*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_NoEZ, NO_EARLY_Z);
39*61046927SAndroid Build Coastguard Worker
40*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_MC20, MC20);
41*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_Render8K, RENDERTARGET_8K);
42*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_Texture8K, TEXTURE_8K);
43*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_ExtraShaderInstructions0, HAS_SIGN_FLOOR_CEIL);
44*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_ExtraShaderInstructions1, HAS_SQRT_TRIG);
45*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_TileStatus2Bits, 2BITPERTILE);
46*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_SuperTiled32x32, SUPER_TILED);
47*61046927SAndroid Build Coastguard Worker
48*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_CorrectAutoDisable1, AUTO_DISABLE);
49*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_TextureHorizontalAlignmentSelect, TEXTURE_HALIGN);
50*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_MMU, MMU_VERSION);
51*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_HalfFloatPipe, HALF_FLOAT);
52*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_WideLine, WIDE_LINE);
53*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_Halti0, HALTI0);
54*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_NonPowerOfTwo, NON_POWER_OF_TWO);
55*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_LinearTextureSupport, LINEAR_TEXTURE_SUPPORT);
56*61046927SAndroid Build Coastguard Worker
57*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_LinearPE, LINEAR_PE);
58*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_SuperTiledTexture, SUPERTILED_TEXTURE);
59*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_LogicOp, LOGIC_OP);
60*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_Halti1, HALTI1);
61*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_SeamlessCubeMap, SEAMLESS_CUBE_MAP);
62*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_LineLoop, LINE_LOOP);
63*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_TextureTileStatus, TEXTURE_TILED_READ);
64*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_BugFixes8, BUG_FIXES8);
65*61046927SAndroid Build Coastguard Worker
66*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_BugFixes15, PE_DITHER_FIX);
67*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_InstructionCache, INSTRUCTION_CACHE);
68*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_ExtraShaderInstructions2, HAS_FAST_TRANSCENDENTALS);
69*61046927SAndroid Build Coastguard Worker
70*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_SmallMSAA, SMALL_MSAA);
71*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_BugFixes18, BUG_FIXES18);
72*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_TXEnhancements4, TEXTURE_ASTC);
73*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_PEEnhancements3, SINGLE_BUFFER);
74*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_Halti2, HALTI2);
75*61046927SAndroid Build Coastguard Worker
76*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_BltEngine, BLT_ENGINE);
77*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_Halti3, HALTI3);
78*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_Halti4, HALTI4);
79*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_Halti5, HALTI5);
80*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(REG_RAWriteDepth, RA_WRITE_DEPTH);
81*61046927SAndroid Build Coastguard Worker
82*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(CACHE128B256BPERLINE, CACHE128B256BPERLINE);
83*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(NEW_GPIPE, NEW_GPIPE);
84*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(NO_ASTC, NO_ASTC);
85*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(V4Compression, V4_COMPRESSION);
86*61046927SAndroid Build Coastguard Worker
87*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(RS_NEW_BASEADDR, RS_NEW_BASEADDR);
88*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(PE_NO_ALPHA_TEST, PE_NO_ALPHA_TEST);
89*61046927SAndroid Build Coastguard Worker
90*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(SH_NO_ONECONST_LIMIT, SH_NO_ONECONST_LIMIT);
91*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(COMPUTE_ONLY, COMPUTE_ONLY);
92*61046927SAndroid Build Coastguard Worker
93*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(DEC400, DEC400);
94*61046927SAndroid Build Coastguard Worker
95*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(VIP_V7, VIP_V7);
96*61046927SAndroid Build Coastguard Worker ETNA_FEATURE(NN_XYDP0, NN_XYDP0);
97*61046927SAndroid Build Coastguard Worker
98*61046927SAndroid Build Coastguard Worker /* Limits: */
99*61046927SAndroid Build Coastguard Worker if (info->type == ETNA_CORE_GPU) {
100*61046927SAndroid Build Coastguard Worker info->gpu.max_instructions = db->InstructionCount;
101*61046927SAndroid Build Coastguard Worker info->gpu.vertex_output_buffer_size = db->VertexOutputBufferSize;
102*61046927SAndroid Build Coastguard Worker info->gpu.vertex_cache_size = db->VertexCacheSize;
103*61046927SAndroid Build Coastguard Worker info->gpu.shader_core_count = db->NumShaderCores;
104*61046927SAndroid Build Coastguard Worker info->gpu.stream_count = db->Streams;
105*61046927SAndroid Build Coastguard Worker info->gpu.max_registers = db->TempRegisters;
106*61046927SAndroid Build Coastguard Worker info->gpu.pixel_pipes = db->NumPixelPipes;
107*61046927SAndroid Build Coastguard Worker info->gpu.max_varyings = db->VaryingCount;
108*61046927SAndroid Build Coastguard Worker info->gpu.num_constants = db->NumberOfConstants;
109*61046927SAndroid Build Coastguard Worker } else {
110*61046927SAndroid Build Coastguard Worker info->npu.nn_core_count = db->NNCoreCount;
111*61046927SAndroid Build Coastguard Worker info->npu.nn_mad_per_core = db->NNMadPerCore;
112*61046927SAndroid Build Coastguard Worker info->npu.tp_core_count = db->TPEngine_CoreCount;
113*61046927SAndroid Build Coastguard Worker info->npu.on_chip_sram_size = db->VIP_SRAM_SIZE;
114*61046927SAndroid Build Coastguard Worker info->npu.axi_sram_size = db->AXI_SRAM_SIZE;
115*61046927SAndroid Build Coastguard Worker info->npu.nn_zrl_bits = db->NN_ZRL_BITS;
116*61046927SAndroid Build Coastguard Worker info->npu.nn_accum_buffer_depth = db->NNAccumBufferDepth;
117*61046927SAndroid Build Coastguard Worker info->npu.nn_input_buffer_depth = db->NNInputBufferDepth;
118*61046927SAndroid Build Coastguard Worker }
119*61046927SAndroid Build Coastguard Worker
120*61046927SAndroid Build Coastguard Worker return true;
121*61046927SAndroid Build Coastguard Worker }
122