| 1 | // SPDX-License-Identifier: GPL-2.0 |
| 2 | /* |
| 3 | * Copyright (C) 2018 Etnaviv Project |
| 4 | */ |
| 5 | |
| 6 | #include "etnaviv_gpu.h" |
| 7 | |
| 8 | static const struct etnaviv_chip_identity etnaviv_chip_identities[] = { |
| 9 | { |
| 10 | .model = 0x400, |
| 11 | .revision = 0x4652, |
| 12 | .product_id = 0x70001, |
| 13 | .customer_id = 0x100, |
| 14 | .eco_id = 0, |
| 15 | .stream_count = 4, |
| 16 | .register_max = 64, |
| 17 | .thread_count = 128, |
| 18 | .shader_core_count = 1, |
| 19 | .nn_core_count = 0, |
| 20 | .vertex_cache_size = 8, |
| 21 | .vertex_output_buffer_size = 1024, |
| 22 | .pixel_pipes = 1, |
| 23 | .instruction_count = 256, |
| 24 | .num_constants = 320, |
| 25 | .buffer_size = 0, |
| 26 | .varyings_count = 8, |
| 27 | .features = 0xa0e9e004, |
| 28 | .minor_features0 = 0xe1299fff, |
| 29 | .minor_features1 = 0xbe13b219, |
| 30 | .minor_features2 = 0xce110010, |
| 31 | .minor_features3 = 0x8000001, |
| 32 | .minor_features4 = 0x20102, |
| 33 | .minor_features5 = 0x120000, |
| 34 | .minor_features6 = 0x0, |
| 35 | .minor_features7 = 0x0, |
| 36 | .minor_features8 = 0x0, |
| 37 | .minor_features9 = 0x0, |
| 38 | .minor_features10 = 0x0, |
| 39 | .minor_features11 = 0x0, |
| 40 | }, |
| 41 | { |
| 42 | .model = 0x520, |
| 43 | .revision = 0x5341, |
| 44 | .product_id = 0x5202, |
| 45 | .customer_id = 0x204, |
| 46 | .eco_id = 0, |
| 47 | .stream_count = 1, |
| 48 | .register_max = 64, |
| 49 | .thread_count = 256, |
| 50 | .shader_core_count = 1, |
| 51 | .vertex_cache_size = 8, |
| 52 | .vertex_output_buffer_size = 512, |
| 53 | .pixel_pipes = 1, |
| 54 | .instruction_count = 256, |
| 55 | .num_constants = 168, |
| 56 | .buffer_size = 0, |
| 57 | .varyings_count = 8, |
| 58 | .features = 0xe02c7eca, |
| 59 | .minor_features0 = 0xe9399eff, |
| 60 | .minor_features1 = 0xfe1fb2db, |
| 61 | .minor_features2 = 0xcedf0080, |
| 62 | .minor_features3 = 0x10800005, |
| 63 | .minor_features4 = 0x20000000, |
| 64 | .minor_features5 = 0x00020880, |
| 65 | .minor_features6 = 0x00000000, |
| 66 | .minor_features7 = 0x00001000, |
| 67 | .minor_features8 = 0x00000000, |
| 68 | .minor_features9 = 0x00000000, |
| 69 | .minor_features10 = 0x00000000, |
| 70 | .minor_features11 = 0x00000000, |
| 71 | }, |
| 72 | { |
| 73 | .model = 0x7000, |
| 74 | .revision = 0x6202, |
| 75 | .product_id = 0x70003, |
| 76 | .customer_id = 0, |
| 77 | .eco_id = 0, |
| 78 | .stream_count = 8, |
| 79 | .register_max = 64, |
| 80 | .thread_count = 512, |
| 81 | .shader_core_count = 2, |
| 82 | .nn_core_count = 0, |
| 83 | .vertex_cache_size = 16, |
| 84 | .vertex_output_buffer_size = 1024, |
| 85 | .pixel_pipes = 1, |
| 86 | .instruction_count = 512, |
| 87 | .num_constants = 320, |
| 88 | .buffer_size = 0, |
| 89 | .varyings_count = 16, |
| 90 | .features = 0xe0287cad, |
| 91 | .minor_features0 = 0xc1489eff, |
| 92 | .minor_features1 = 0xfefbfad9, |
| 93 | .minor_features2 = 0xeb9d4fbf, |
| 94 | .minor_features3 = 0xedfffced, |
| 95 | .minor_features4 = 0xdb0dafc7, |
| 96 | .minor_features5 = 0x3b5ac333, |
| 97 | .minor_features6 = 0xfccee201, |
| 98 | .minor_features7 = 0x03fffa6f, |
| 99 | .minor_features8 = 0x00e10ef0, |
| 100 | .minor_features9 = 0x0088003c, |
| 101 | .minor_features10 = 0x00004040, |
| 102 | .minor_features11 = 0x00000024, |
| 103 | }, |
| 104 | { |
| 105 | .model = 0x7000, |
| 106 | .revision = 0x6203, |
| 107 | .product_id = 0x70003, |
| 108 | .customer_id = 0x4, |
| 109 | .eco_id = 0, |
| 110 | .stream_count = 16, |
| 111 | .register_max = 64, |
| 112 | .thread_count = 512, |
| 113 | .shader_core_count = 2, |
| 114 | .nn_core_count = 0, |
| 115 | .vertex_cache_size = 16, |
| 116 | .vertex_output_buffer_size = 1024, |
| 117 | .pixel_pipes = 1, |
| 118 | .instruction_count = 512, |
| 119 | .num_constants = 320, |
| 120 | .buffer_size = 0, |
| 121 | .varyings_count = 16, |
| 122 | .features = 0xe0287c8d, |
| 123 | .minor_features0 = 0xc1589eff, |
| 124 | .minor_features1 = 0xfefbfad9, |
| 125 | .minor_features2 = 0xeb9d4fbf, |
| 126 | .minor_features3 = 0xedfffced, |
| 127 | .minor_features4 = 0xdb0dafc7, |
| 128 | .minor_features5 = 0x3b5ac333, |
| 129 | .minor_features6 = 0xfcce6000, |
| 130 | .minor_features7 = 0xfffbfa6f, |
| 131 | .minor_features8 = 0x00e10ef3, |
| 132 | .minor_features9 = 0x00c8003c, |
| 133 | .minor_features10 = 0x00004040, |
| 134 | .minor_features11 = 0x00000024, |
| 135 | }, |
| 136 | { |
| 137 | .model = 0x7000, |
| 138 | .revision = 0x6204, |
| 139 | .product_id = ~0U, |
| 140 | .customer_id = ~0U, |
| 141 | .eco_id = 0, |
| 142 | .stream_count = 16, |
| 143 | .register_max = 64, |
| 144 | .thread_count = 512, |
| 145 | .shader_core_count = 2, |
| 146 | .vertex_cache_size = 16, |
| 147 | .vertex_output_buffer_size = 1024, |
| 148 | .pixel_pipes = 1, |
| 149 | .instruction_count = 512, |
| 150 | .num_constants = 320, |
| 151 | .buffer_size = 0, |
| 152 | .varyings_count = 16, |
| 153 | .features = 0xe0287c8d, |
| 154 | .minor_features0 = 0xc1589eff, |
| 155 | .minor_features1 = 0xfefbfad9, |
| 156 | .minor_features2 = 0xeb9d4fbf, |
| 157 | .minor_features3 = 0xedfffced, |
| 158 | .minor_features4 = 0xdb0dafc7, |
| 159 | .minor_features5 = 0x3b5ac333, |
| 160 | .minor_features6 = 0xfcce6000, |
| 161 | .minor_features7 = 0xfffbfa6f, |
| 162 | .minor_features8 = 0x00e10ef3, |
| 163 | .minor_features9 = 0x04c8003c, |
| 164 | .minor_features10 = 0x00004060, |
| 165 | .minor_features11 = 0x00000024, |
| 166 | }, |
| 167 | { |
| 168 | .model = 0x7000, |
| 169 | .revision = 0x6214, |
| 170 | .product_id = ~0U, |
| 171 | .customer_id = ~0U, |
| 172 | .eco_id = ~0U, |
| 173 | .stream_count = 16, |
| 174 | .register_max = 64, |
| 175 | .thread_count = 1024, |
| 176 | .shader_core_count = 4, |
| 177 | .nn_core_count = 0, |
| 178 | .vertex_cache_size = 16, |
| 179 | .vertex_output_buffer_size = 1024, |
| 180 | .pixel_pipes = 2, |
| 181 | .instruction_count = 512, |
| 182 | .num_constants = 320, |
| 183 | .buffer_size = 0, |
| 184 | .varyings_count = 16, |
| 185 | .features = 0xe0287cad, |
| 186 | .minor_features0 = 0xc1799eff, |
| 187 | .minor_features1 = 0xfefbfad9, |
| 188 | .minor_features2 = 0xeb9d4fbf, |
| 189 | .minor_features3 = 0xedfffced, |
| 190 | .minor_features4 = 0xdb0dafc7, |
| 191 | .minor_features5 = 0xbb5ac333, |
| 192 | .minor_features6 = 0xfc8ee200, |
| 193 | .minor_features7 = 0x03fbfa6f, |
| 194 | .minor_features8 = 0x00ef0ef0, |
| 195 | .minor_features9 = 0x0edbf03c, |
| 196 | .minor_features10 = 0x90044250, |
| 197 | .minor_features11 = 0x00000024, |
| 198 | }, |
| 199 | { |
| 200 | .model = 0x8000, |
| 201 | .revision = 0x6205, |
| 202 | .product_id = 0x80003, |
| 203 | .customer_id = 0x15, |
| 204 | .eco_id = 0, |
| 205 | .stream_count = 16, |
| 206 | .register_max = 64, |
| 207 | .thread_count = 512, |
| 208 | .shader_core_count = 2, |
| 209 | .nn_core_count = 2, |
| 210 | .vertex_cache_size = 16, |
| 211 | .vertex_output_buffer_size = 1024, |
| 212 | .pixel_pipes = 1, |
| 213 | .instruction_count = 512, |
| 214 | .num_constants = 320, |
| 215 | .buffer_size = 0, |
| 216 | .varyings_count = 16, |
| 217 | .features = 0xe0287c8d, |
| 218 | .minor_features0 = 0xc1799eff, |
| 219 | .minor_features1 = 0xfefbfad9, |
| 220 | .minor_features2 = 0xeb9d4fbf, |
| 221 | .minor_features3 = 0xedfffced, |
| 222 | .minor_features4 = 0xdb0dafc7, |
| 223 | .minor_features5 = 0x7b5ac333, |
| 224 | .minor_features6 = 0xfcce6000, |
| 225 | .minor_features7 = 0x03fbfa6f, |
| 226 | .minor_features8 = 0x00ef0ef0, |
| 227 | .minor_features9 = 0x0eca703c, |
| 228 | .minor_features10 = 0x898048f0, |
| 229 | .minor_features11 = 0x00000034, |
| 230 | }, |
| 231 | { |
| 232 | .model = 0x8000, |
| 233 | .revision = 0x7120, |
| 234 | .product_id = 0x45080009, |
| 235 | .customer_id = 0x88, |
| 236 | .eco_id = 0, |
| 237 | .stream_count = 8, |
| 238 | .register_max = 64, |
| 239 | .thread_count = 256, |
| 240 | .shader_core_count = 1, |
| 241 | .nn_core_count = 8, |
| 242 | .vertex_cache_size = 16, |
| 243 | .vertex_output_buffer_size = 1024, |
| 244 | .pixel_pipes = 1, |
| 245 | .instruction_count = 512, |
| 246 | .num_constants = 320, |
| 247 | .buffer_size = 0, |
| 248 | .varyings_count = 16, |
| 249 | .features = 0xe0287cac, |
| 250 | .minor_features0 = 0xc1799eff, |
| 251 | .minor_features1 = 0xfefbfadb, |
| 252 | .minor_features2 = 0xeb9d6fbf, |
| 253 | .minor_features3 = 0xedfffced, |
| 254 | .minor_features4 = 0xd30dafc7, |
| 255 | .minor_features5 = 0x7b5ac333, |
| 256 | .minor_features6 = 0xfc8ee200, |
| 257 | .minor_features7 = 0x03fffa6f, |
| 258 | .minor_features8 = 0x00fe0ef0, |
| 259 | .minor_features9 = 0x0088003c, |
| 260 | .minor_features10 = 0x108048c0, |
| 261 | .minor_features11 = 0x00000010, |
| 262 | }, |
| 263 | { |
| 264 | .model = 0x8000, |
| 265 | .revision = 0x8002, |
| 266 | .product_id = 0x5080009, |
| 267 | .customer_id = 0x9f, |
| 268 | .eco_id = 0x6000000, |
| 269 | .stream_count = 8, |
| 270 | .register_max = 64, |
| 271 | .thread_count = 256, |
| 272 | .shader_core_count = 1, |
| 273 | .nn_core_count = 6, |
| 274 | .vertex_cache_size = 16, |
| 275 | .vertex_output_buffer_size = 1024, |
| 276 | .pixel_pipes = 1, |
| 277 | .instruction_count = 512, |
| 278 | .num_constants = 320, |
| 279 | .buffer_size = 0, |
| 280 | .varyings_count = 16, |
| 281 | .features = 0xe0287cac, |
| 282 | .minor_features0 = 0xc1799eff, |
| 283 | .minor_features1 = 0xfefbfadb, |
| 284 | .minor_features2 = 0xeb9d6fbf, |
| 285 | .minor_features3 = 0xedfffced, |
| 286 | .minor_features4 = 0xd30dafc7, |
| 287 | .minor_features5 = 0x7b5ac333, |
| 288 | .minor_features6 = 0xfc8ee200, |
| 289 | .minor_features7 = 0x03fffa6f, |
| 290 | .minor_features8 = 0x00fe0ef0, |
| 291 | .minor_features9 = 0x0088003c, |
| 292 | .minor_features10 = 0x108048c0, |
| 293 | .minor_features11 = 0x00000010, |
| 294 | }, |
| 295 | }; |
| 296 | |
| 297 | bool etnaviv_fill_identity_from_hwdb(struct etnaviv_gpu *gpu) |
| 298 | { |
| 299 | struct etnaviv_chip_identity *ident = &gpu->identity; |
| 300 | const u32 product_id = ident->product_id; |
| 301 | const u32 customer_id = ident->customer_id; |
| 302 | const u32 eco_id = ident->eco_id; |
| 303 | int i; |
| 304 | |
| 305 | for (i = 0; i < ARRAY_SIZE(etnaviv_chip_identities); i++) { |
| 306 | if (etnaviv_chip_identities[i].model == ident->model && |
| 307 | etnaviv_chip_identities[i].revision == ident->revision && |
| 308 | (etnaviv_chip_identities[i].product_id == ident->product_id || |
| 309 | etnaviv_chip_identities[i].product_id == ~0U) && |
| 310 | (etnaviv_chip_identities[i].customer_id == ident->customer_id || |
| 311 | etnaviv_chip_identities[i].customer_id == ~0U) && |
| 312 | (etnaviv_chip_identities[i].eco_id == ident->eco_id || |
| 313 | etnaviv_chip_identities[i].eco_id == ~0U)) { |
| 314 | memcpy(ident, &etnaviv_chip_identities[i], |
| 315 | sizeof(*ident)); |
| 316 | |
| 317 | /* Restore some id values as ~0U aka 'don't care' might been used. */ |
| 318 | ident->product_id = product_id; |
| 319 | ident->customer_id = customer_id; |
| 320 | ident->eco_id = eco_id; |
| 321 | |
| 322 | return true; |
| 323 | } |
| 324 | } |
| 325 | |
| 326 | return false; |
| 327 | } |
| 328 | |