1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * Copyright (C) 2019 Collabora, Ltd.
3*61046927SAndroid Build Coastguard Worker *
4*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker *
11*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker * paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker * Software.
14*61046927SAndroid Build Coastguard Worker *
15*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20*61046927SAndroid Build Coastguard Worker * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21*61046927SAndroid Build Coastguard Worker * SOFTWARE.
22*61046927SAndroid Build Coastguard Worker *
23*61046927SAndroid Build Coastguard Worker * Authors:
24*61046927SAndroid Build Coastguard Worker * Alyssa Rosenzweig <[email protected]>
25*61046927SAndroid Build Coastguard Worker */
26*61046927SAndroid Build Coastguard Worker
27*61046927SAndroid Build Coastguard Worker #ifndef PAN_PROPS_H
28*61046927SAndroid Build Coastguard Worker #define PAN_PROPS_H
29*61046927SAndroid Build Coastguard Worker
30*61046927SAndroid Build Coastguard Worker #include <stdbool.h>
31*61046927SAndroid Build Coastguard Worker #include <stdint.h>
32*61046927SAndroid Build Coastguard Worker
33*61046927SAndroid Build Coastguard Worker struct pan_kmod_dev;
34*61046927SAndroid Build Coastguard Worker struct pan_kmod_dev_props;
35*61046927SAndroid Build Coastguard Worker
36*61046927SAndroid Build Coastguard Worker /** Implementation-defined tiler features */
37*61046927SAndroid Build Coastguard Worker struct panfrost_tiler_features {
38*61046927SAndroid Build Coastguard Worker /** Number of bytes per tiler bin */
39*61046927SAndroid Build Coastguard Worker unsigned bin_size;
40*61046927SAndroid Build Coastguard Worker
41*61046927SAndroid Build Coastguard Worker /** Maximum number of levels that may be simultaneously enabled.
42*61046927SAndroid Build Coastguard Worker * Invariant: bitcount(hierarchy_mask) <= max_levels */
43*61046927SAndroid Build Coastguard Worker unsigned max_levels;
44*61046927SAndroid Build Coastguard Worker };
45*61046927SAndroid Build Coastguard Worker
46*61046927SAndroid Build Coastguard Worker struct panfrost_model {
47*61046927SAndroid Build Coastguard Worker /* GPU ID */
48*61046927SAndroid Build Coastguard Worker uint32_t gpu_id;
49*61046927SAndroid Build Coastguard Worker
50*61046927SAndroid Build Coastguard Worker /* GPU variant. */
51*61046927SAndroid Build Coastguard Worker uint32_t gpu_variant;
52*61046927SAndroid Build Coastguard Worker
53*61046927SAndroid Build Coastguard Worker /* Marketing name for the GPU, used as the GL_RENDERER */
54*61046927SAndroid Build Coastguard Worker const char *name;
55*61046927SAndroid Build Coastguard Worker
56*61046927SAndroid Build Coastguard Worker /* Set of associated performance counters */
57*61046927SAndroid Build Coastguard Worker const char *performance_counters;
58*61046927SAndroid Build Coastguard Worker
59*61046927SAndroid Build Coastguard Worker /* Minimum GPU revision required for anisotropic filtering. ~0 and 0
60*61046927SAndroid Build Coastguard Worker * means "no revisions support anisotropy" and "all revisions support
61*61046927SAndroid Build Coastguard Worker * anistropy" respectively -- so checking for anisotropy is simply
62*61046927SAndroid Build Coastguard Worker * comparing the reivsion.
63*61046927SAndroid Build Coastguard Worker */
64*61046927SAndroid Build Coastguard Worker uint32_t min_rev_anisotropic;
65*61046927SAndroid Build Coastguard Worker
66*61046927SAndroid Build Coastguard Worker /* Default tilebuffer size in bytes for the model. */
67*61046927SAndroid Build Coastguard Worker unsigned tilebuffer_size;
68*61046927SAndroid Build Coastguard Worker
69*61046927SAndroid Build Coastguard Worker struct {
70*61046927SAndroid Build Coastguard Worker /* The GPU lacks the capability for hierarchical tiling, without
71*61046927SAndroid Build Coastguard Worker * an "Advanced Tiling Unit", instead requiring a single bin
72*61046927SAndroid Build Coastguard Worker * size for the entire framebuffer be selected by the driver
73*61046927SAndroid Build Coastguard Worker */
74*61046927SAndroid Build Coastguard Worker bool no_hierarchical_tiling;
75*61046927SAndroid Build Coastguard Worker } quirks;
76*61046927SAndroid Build Coastguard Worker };
77*61046927SAndroid Build Coastguard Worker
78*61046927SAndroid Build Coastguard Worker const struct panfrost_model *panfrost_get_model(uint32_t gpu_id,
79*61046927SAndroid Build Coastguard Worker uint32_t gpu_variant);
80*61046927SAndroid Build Coastguard Worker
81*61046927SAndroid Build Coastguard Worker unsigned panfrost_query_l2_slices(const struct pan_kmod_dev_props *props);
82*61046927SAndroid Build Coastguard Worker
83*61046927SAndroid Build Coastguard Worker struct panfrost_tiler_features
84*61046927SAndroid Build Coastguard Worker panfrost_query_tiler_features(const struct pan_kmod_dev_props *props);
85*61046927SAndroid Build Coastguard Worker
86*61046927SAndroid Build Coastguard Worker unsigned
87*61046927SAndroid Build Coastguard Worker panfrost_query_thread_tls_alloc(const struct pan_kmod_dev_props *props);
88*61046927SAndroid Build Coastguard Worker
89*61046927SAndroid Build Coastguard Worker uint32_t
90*61046927SAndroid Build Coastguard Worker panfrost_query_compressed_formats(const struct pan_kmod_dev_props *props);
91*61046927SAndroid Build Coastguard Worker
92*61046927SAndroid Build Coastguard Worker unsigned panfrost_query_core_count(const struct pan_kmod_dev_props *props,
93*61046927SAndroid Build Coastguard Worker unsigned *core_id_range);
94*61046927SAndroid Build Coastguard Worker
95*61046927SAndroid Build Coastguard Worker bool panfrost_query_afbc(const struct pan_kmod_dev_props *props);
96*61046927SAndroid Build Coastguard Worker
97*61046927SAndroid Build Coastguard Worker bool panfrost_query_afrc(const struct pan_kmod_dev_props *props);
98*61046927SAndroid Build Coastguard Worker
99*61046927SAndroid Build Coastguard Worker unsigned panfrost_query_optimal_tib_size(const struct panfrost_model *model);
100*61046927SAndroid Build Coastguard Worker
101*61046927SAndroid Build Coastguard Worker uint64_t panfrost_clamp_to_usable_va_range(const struct pan_kmod_dev *dev,
102*61046927SAndroid Build Coastguard Worker uint64_t va);
103*61046927SAndroid Build Coastguard Worker
104*61046927SAndroid Build Coastguard Worker unsigned
105*61046927SAndroid Build Coastguard Worker panfrost_compute_max_thread_count(const struct pan_kmod_dev_props *props,
106*61046927SAndroid Build Coastguard Worker unsigned work_reg_count);
107*61046927SAndroid Build Coastguard Worker
108*61046927SAndroid Build Coastguard Worker /* Returns the architecture version given a GPU ID, either from a table for
109*61046927SAndroid Build Coastguard Worker * old-style Midgard versions or directly for new-style Bifrost/Valhall
110*61046927SAndroid Build Coastguard Worker * versions */
111*61046927SAndroid Build Coastguard Worker
112*61046927SAndroid Build Coastguard Worker static inline unsigned
pan_arch(unsigned gpu_id)113*61046927SAndroid Build Coastguard Worker pan_arch(unsigned gpu_id)
114*61046927SAndroid Build Coastguard Worker {
115*61046927SAndroid Build Coastguard Worker switch (gpu_id) {
116*61046927SAndroid Build Coastguard Worker case 0x600:
117*61046927SAndroid Build Coastguard Worker case 0x620:
118*61046927SAndroid Build Coastguard Worker case 0x720:
119*61046927SAndroid Build Coastguard Worker return 4;
120*61046927SAndroid Build Coastguard Worker case 0x750:
121*61046927SAndroid Build Coastguard Worker case 0x820:
122*61046927SAndroid Build Coastguard Worker case 0x830:
123*61046927SAndroid Build Coastguard Worker case 0x860:
124*61046927SAndroid Build Coastguard Worker case 0x880:
125*61046927SAndroid Build Coastguard Worker return 5;
126*61046927SAndroid Build Coastguard Worker default:
127*61046927SAndroid Build Coastguard Worker return gpu_id >> 12;
128*61046927SAndroid Build Coastguard Worker }
129*61046927SAndroid Build Coastguard Worker }
130*61046927SAndroid Build Coastguard Worker
131*61046927SAndroid Build Coastguard Worker #endif
132