2 * Copyright © 2020 Google, Inc.
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 #include "freedreno_gmem.c"
26 /* NOTE, non-interesting gmem keys (ie. things that are small enough to fit
27 * in a single bin) are commented out, but retained for posterity.
29 static const struct gmem_key keys
[] = {
31 { .minx
=0, .miny
=0, .width
=1920, .height
=1080, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {4,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {0,0,}},
32 { .minx
=0, .miny
=0, .width
=1920, .height
=1080, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {4,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {4,0,}},
33 // { .minx=0, .miny=0, .width=64, .height=64, .gmem_page_align=1, .nr_cbufs=1, .cbuf_cpp = {4,0,0,0,0,0,0,0,}, .zsbuf_cpp = {0,0,}},
34 // { .minx=0, .miny=0, .width=32, .height=32, .gmem_page_align=1, .nr_cbufs=1, .cbuf_cpp = {4,0,0,0,0,0,0,0,}, .zsbuf_cpp = {0,0,}},
35 // { .minx=0, .miny=0, .width=16, .height=16, .gmem_page_align=1, .nr_cbufs=1, .cbuf_cpp = {4,0,0,0,0,0,0,0,}, .zsbuf_cpp = {0,0,}},
36 // { .minx=0, .miny=0, .width=8, .height=8, .gmem_page_align=1, .nr_cbufs=1, .cbuf_cpp = {4,0,0,0,0,0,0,0,}, .zsbuf_cpp = {0,0,}},
37 // { .minx=0, .miny=0, .width=4, .height=4, .gmem_page_align=1, .nr_cbufs=1, .cbuf_cpp = {4,0,0,0,0,0,0,0,}, .zsbuf_cpp = {0,0,}},
38 // { .minx=0, .miny=0, .width=2, .height=2, .gmem_page_align=1, .nr_cbufs=1, .cbuf_cpp = {4,0,0,0,0,0,0,0,}, .zsbuf_cpp = {0,0,}},
39 // { .minx=0, .miny=0, .width=1, .height=1, .gmem_page_align=1, .nr_cbufs=1, .cbuf_cpp = {4,0,0,0,0,0,0,0,}, .zsbuf_cpp = {0,0,}},
40 { .minx
=0, .miny
=0, .width
=1920, .height
=1080, .gmem_page_align
=1, .nr_cbufs
=4, .cbuf_cpp
= {4,4,4,4,0,0,0,0,}, .zsbuf_cpp
= {4,0,}},
41 // { .minx=0, .miny=0, .width=64, .height=64, .gmem_page_align=1, .nr_cbufs=1, .cbuf_cpp = {2,0,0,0,0,0,0,0,}, .zsbuf_cpp = {0,0,}},
42 { .minx
=0, .miny
=0, .width
=1024, .height
=1024, .gmem_page_align
=1, .nr_cbufs
=0, .cbuf_cpp
= {0,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {2,0,}},
43 { .minx
=0, .miny
=0, .width
=1920, .height
=1080, .gmem_page_align
=1, .nr_cbufs
=0, .cbuf_cpp
= {0,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {4,0,}},
44 { .minx
=0, .miny
=0, .width
=960, .height
=540, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {4,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {0,0,}},
45 { .minx
=0, .miny
=0, .width
=480, .height
=270, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {4,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {0,0,}},
46 // { .minx=0, .miny=0, .width=240, .height=135, .gmem_page_align=1, .nr_cbufs=1, .cbuf_cpp = {4,0,0,0,0,0,0,0,}, .zsbuf_cpp = {0,0,}},
47 // { .minx=0, .miny=0, .width=120, .height=67, .gmem_page_align=1, .nr_cbufs=1, .cbuf_cpp = {4,0,0,0,0,0,0,0,}, .zsbuf_cpp = {0,0,}},
50 { .minx
=0, .miny
=0, .width
=1920, .height
=1080, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {4,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {0,0,}},
51 { .minx
=0, .miny
=0, .width
=1920, .height
=1080, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {4,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {4,0,}},
52 { .minx
=0, .miny
=0, .width
=1920, .height
=1080, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {4,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {2,0,}},
53 { .minx
=0, .miny
=0, .width
=960, .height
=540, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {2,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {2,0,}},
54 { .minx
=0, .miny
=0, .width
=1024, .height
=1024, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {4,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {2,0,}},
55 // { .minx=0, .miny=0, .width=64, .height=64, .gmem_page_align=1, .nr_cbufs=1, .cbuf_cpp = {2,0,0,0,0,0,0,0,}, .zsbuf_cpp = {0,0,}},
58 { .minx
=0, .miny
=0, .width
=1920, .height
=1080, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {4,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {0,0,}},
59 { .minx
=0, .miny
=0, .width
=1920, .height
=1080, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {4,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {2,0,}},
60 { .minx
=0, .miny
=0, .width
=810, .height
=810, .gmem_page_align
=1, .nr_cbufs
=2, .cbuf_cpp
= {4,4,0,0,0,0,0,0,}, .zsbuf_cpp
= {4,0,}},
61 // { .minx=0, .miny=0, .width=405, .height=405, .gmem_page_align=1, .nr_cbufs=1, .cbuf_cpp = {2,0,0,0,0,0,0,0,}, .zsbuf_cpp = {0,0,}},
62 { .minx
=0, .miny
=0, .width
=405, .height
=405, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {8,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {0,0,}},
63 { .minx
=0, .miny
=0, .width
=810, .height
=810, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {8,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {4,0,}},
64 { .minx
=0, .miny
=0, .width
=810, .height
=810, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {4,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {4,0,}},
65 { .minx
=0, .miny
=0, .width
=810, .height
=810, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {4,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {0,0,}},
66 { .minx
=0, .miny
=0, .width
=960, .height
=540, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {2,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {0,0,}},
67 { .minx
=0, .miny
=0, .width
=1920, .height
=1080, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {8,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {0,0,}},
68 { .minx
=0, .miny
=0, .width
=960, .height
=540, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {8,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {0,0,}},
69 { .minx
=0, .miny
=0, .width
=1920, .height
=1080, .gmem_page_align
=1, .nr_cbufs
=2, .cbuf_cpp
= {4,4,0,0,0,0,0,0,}, .zsbuf_cpp
= {4,0,}},
70 { .minx
=0, .miny
=0, .width
=1920, .height
=1080, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {8,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {4,0,}},
71 { .minx
=0, .miny
=0, .width
=1920, .height
=1080, .gmem_page_align
=1, .nr_cbufs
=1, .cbuf_cpp
= {4,0,0,0,0,0,0,0,}, .zsbuf_cpp
= {4,0,}},
79 uint32_t num_vsc_pipes
;
80 uint32_t gmemsize_bytes
;
83 #define SZ_128K 0x00020000
84 #define SZ_256K 0x00040000
85 #define SZ_512K 0x00080000
86 #define SZ_1M 0x00100000
88 /* keep sorted by gpu name: */
89 static const struct gpu_info gpu_infos
[] = {
90 { "a306", 307, 32, 32, 8, SZ_128K
},
91 { "a530", 530, 64, 32, 16, SZ_1M
},
92 { "a618", 618, 32, 32, 32, SZ_512K
},
93 { "a630", 630, 32, 32, 32, SZ_1M
},
97 main(int argc
, char **argv
)
100 printf("usage: gmemtest GPU_NAME\n");
104 const char *gpu_name
= argv
[1];
105 const struct gpu_info
*gpu_info
= NULL
;
107 for (int i
= 0; i
< ARRAY_SIZE(gpu_infos
); i
++) {
108 if (strcmp(gpu_name
, gpu_infos
[i
].name
) == 0) {
109 gpu_info
= &gpu_infos
[i
];
115 printf("unrecognized gpu name: %s\n", gpu_name
);
116 printf("supported gpus:\n");
117 for (int i
= 0; i
< ARRAY_SIZE(gpu_infos
); i
++)
118 printf("\t%s\n", gpu_infos
[i
].name
);
122 /* Setup a fake screen with enough GMEM related configuration
123 * to make gmem_stateobj_init() happy:
125 struct fd_screen screen
= {
126 .gpu_id
= gpu_info
->gpu_id
,
127 .gmem_alignw
= gpu_info
->gmem_alignw
,
128 .gmem_alignh
= gpu_info
->gmem_alignh
,
129 .num_vsc_pipes
= gpu_info
->num_vsc_pipes
,
130 .gmemsize_bytes
= gpu_info
->gmemsize_bytes
,
133 /* And finally run thru all the GMEM keys: */
134 for (int i
= 0; i
< ARRAY_SIZE(keys
); i
++) {
135 struct fd_gmem_stateobj
*gmem
=
136 gmem_stateobj_init(&screen
, (void *)&keys
[i
]);
137 dump_gmem_state(gmem
);