18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2018 Etnaviv Project 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#include "etnaviv_gpu.h" 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_cistatic const struct etnaviv_chip_identity etnaviv_chip_identities[] = { 98c2ecf20Sopenharmony_ci { 108c2ecf20Sopenharmony_ci .model = 0x400, 118c2ecf20Sopenharmony_ci .revision = 0x4652, 128c2ecf20Sopenharmony_ci .product_id = 0x70001, 138c2ecf20Sopenharmony_ci .customer_id = 0x100, 148c2ecf20Sopenharmony_ci .eco_id = 0, 158c2ecf20Sopenharmony_ci .stream_count = 4, 168c2ecf20Sopenharmony_ci .register_max = 64, 178c2ecf20Sopenharmony_ci .thread_count = 128, 188c2ecf20Sopenharmony_ci .shader_core_count = 1, 198c2ecf20Sopenharmony_ci .vertex_cache_size = 8, 208c2ecf20Sopenharmony_ci .vertex_output_buffer_size = 1024, 218c2ecf20Sopenharmony_ci .pixel_pipes = 1, 228c2ecf20Sopenharmony_ci .instruction_count = 256, 238c2ecf20Sopenharmony_ci .num_constants = 320, 248c2ecf20Sopenharmony_ci .buffer_size = 0, 258c2ecf20Sopenharmony_ci .varyings_count = 8, 268c2ecf20Sopenharmony_ci .features = 0xa0e9e004, 278c2ecf20Sopenharmony_ci .minor_features0 = 0xe1299fff, 288c2ecf20Sopenharmony_ci .minor_features1 = 0xbe13b219, 298c2ecf20Sopenharmony_ci .minor_features2 = 0xce110010, 308c2ecf20Sopenharmony_ci .minor_features3 = 0x8000001, 318c2ecf20Sopenharmony_ci .minor_features4 = 0x20102, 328c2ecf20Sopenharmony_ci .minor_features5 = 0x120000, 338c2ecf20Sopenharmony_ci .minor_features6 = 0x0, 348c2ecf20Sopenharmony_ci .minor_features7 = 0x0, 358c2ecf20Sopenharmony_ci .minor_features8 = 0x0, 368c2ecf20Sopenharmony_ci .minor_features9 = 0x0, 378c2ecf20Sopenharmony_ci .minor_features10 = 0x0, 388c2ecf20Sopenharmony_ci .minor_features11 = 0x0, 398c2ecf20Sopenharmony_ci }, 408c2ecf20Sopenharmony_ci { 418c2ecf20Sopenharmony_ci .model = 0x7000, 428c2ecf20Sopenharmony_ci .revision = 0x6214, 438c2ecf20Sopenharmony_ci .product_id = ~0U, 448c2ecf20Sopenharmony_ci .customer_id = ~0U, 458c2ecf20Sopenharmony_ci .eco_id = ~0U, 468c2ecf20Sopenharmony_ci .stream_count = 16, 478c2ecf20Sopenharmony_ci .register_max = 64, 488c2ecf20Sopenharmony_ci .thread_count = 1024, 498c2ecf20Sopenharmony_ci .shader_core_count = 4, 508c2ecf20Sopenharmony_ci .vertex_cache_size = 16, 518c2ecf20Sopenharmony_ci .vertex_output_buffer_size = 1024, 528c2ecf20Sopenharmony_ci .pixel_pipes = 2, 538c2ecf20Sopenharmony_ci .instruction_count = 512, 548c2ecf20Sopenharmony_ci .num_constants = 320, 558c2ecf20Sopenharmony_ci .buffer_size = 0, 568c2ecf20Sopenharmony_ci .varyings_count = 16, 578c2ecf20Sopenharmony_ci .features = 0xe0287cad, 588c2ecf20Sopenharmony_ci .minor_features0 = 0xc1799eff, 598c2ecf20Sopenharmony_ci .minor_features1 = 0xfefbfad9, 608c2ecf20Sopenharmony_ci .minor_features2 = 0xeb9d4fbf, 618c2ecf20Sopenharmony_ci .minor_features3 = 0xedfffced, 628c2ecf20Sopenharmony_ci .minor_features4 = 0xdb0dafc7, 638c2ecf20Sopenharmony_ci .minor_features5 = 0xbb5ac333, 648c2ecf20Sopenharmony_ci .minor_features6 = 0xfc8ee200, 658c2ecf20Sopenharmony_ci .minor_features7 = 0x03fbfa6f, 668c2ecf20Sopenharmony_ci .minor_features8 = 0x00ef0ef0, 678c2ecf20Sopenharmony_ci .minor_features9 = 0x0edbf03c, 688c2ecf20Sopenharmony_ci .minor_features10 = 0x90044250, 698c2ecf20Sopenharmony_ci .minor_features11 = 0x00000024, 708c2ecf20Sopenharmony_ci }, 718c2ecf20Sopenharmony_ci}; 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_cibool etnaviv_fill_identity_from_hwdb(struct etnaviv_gpu *gpu) 748c2ecf20Sopenharmony_ci{ 758c2ecf20Sopenharmony_ci struct etnaviv_chip_identity *ident = &gpu->identity; 768c2ecf20Sopenharmony_ci int i; 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(etnaviv_chip_identities); i++) { 798c2ecf20Sopenharmony_ci if (etnaviv_chip_identities[i].model == ident->model && 808c2ecf20Sopenharmony_ci etnaviv_chip_identities[i].revision == ident->revision && 818c2ecf20Sopenharmony_ci (etnaviv_chip_identities[i].product_id == ident->product_id || 828c2ecf20Sopenharmony_ci etnaviv_chip_identities[i].product_id == ~0U) && 838c2ecf20Sopenharmony_ci (etnaviv_chip_identities[i].customer_id == ident->customer_id || 848c2ecf20Sopenharmony_ci etnaviv_chip_identities[i].customer_id == ~0U) && 858c2ecf20Sopenharmony_ci (etnaviv_chip_identities[i].eco_id == ident->eco_id || 868c2ecf20Sopenharmony_ci etnaviv_chip_identities[i].eco_id == ~0U)) { 878c2ecf20Sopenharmony_ci memcpy(ident, &etnaviv_chip_identities[i], 888c2ecf20Sopenharmony_ci sizeof(*ident)); 898c2ecf20Sopenharmony_ci return true; 908c2ecf20Sopenharmony_ci } 918c2ecf20Sopenharmony_ci } 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_ci return false; 948c2ecf20Sopenharmony_ci} 95