1f6ffbd4fSLucas Stach // SPDX-License-Identifier: GPL-2.0 2681c19c8SLucas Stach /* 3681c19c8SLucas Stach * Copyright (C) 2018 Etnaviv Project 4681c19c8SLucas Stach */ 5681c19c8SLucas Stach 6681c19c8SLucas Stach #include "etnaviv_gpu.h" 7681c19c8SLucas Stach 8681c19c8SLucas Stach static const struct etnaviv_chip_identity etnaviv_chip_identities[] = { 9681c19c8SLucas Stach { 10*f56f1579SChristian Gmeiner .model = 0x400, 11*f56f1579SChristian Gmeiner .revision = 0x4652, 12*f56f1579SChristian Gmeiner .product_id = 0x70001, 13*f56f1579SChristian Gmeiner .customer_id = 0x100, 14*f56f1579SChristian Gmeiner .eco_id = 0, 15*f56f1579SChristian Gmeiner .stream_count = 4, 16*f56f1579SChristian Gmeiner .register_max = 64, 17*f56f1579SChristian Gmeiner .thread_count = 128, 18*f56f1579SChristian Gmeiner .shader_core_count = 1, 19*f56f1579SChristian Gmeiner .vertex_cache_size = 8, 20*f56f1579SChristian Gmeiner .vertex_output_buffer_size = 1024, 21*f56f1579SChristian Gmeiner .pixel_pipes = 1, 22*f56f1579SChristian Gmeiner .instruction_count = 256, 23*f56f1579SChristian Gmeiner .num_constants = 320, 24*f56f1579SChristian Gmeiner .buffer_size = 0, 25*f56f1579SChristian Gmeiner .varyings_count = 8, 26*f56f1579SChristian Gmeiner .features = 0xa0e9e004, 27*f56f1579SChristian Gmeiner .minor_features0 = 0xe1299fff, 28*f56f1579SChristian Gmeiner .minor_features1 = 0xbe13b219, 29*f56f1579SChristian Gmeiner .minor_features2 = 0xce110010, 30*f56f1579SChristian Gmeiner .minor_features3 = 0x8000001, 31*f56f1579SChristian Gmeiner .minor_features4 = 0x20102, 32*f56f1579SChristian Gmeiner .minor_features5 = 0x120000, 33*f56f1579SChristian Gmeiner .minor_features6 = 0x0, 34*f56f1579SChristian Gmeiner .minor_features7 = 0x0, 35*f56f1579SChristian Gmeiner .minor_features8 = 0x0, 36*f56f1579SChristian Gmeiner .minor_features9 = 0x0, 37*f56f1579SChristian Gmeiner .minor_features10 = 0x0, 38*f56f1579SChristian Gmeiner .minor_features11 = 0x0, 39*f56f1579SChristian Gmeiner }, 40*f56f1579SChristian Gmeiner { 41681c19c8SLucas Stach .model = 0x7000, 42681c19c8SLucas Stach .revision = 0x6214, 43a51d1f37SChristian Gmeiner .product_id = ~0U, 44a51d1f37SChristian Gmeiner .customer_id = ~0U, 45a51d1f37SChristian Gmeiner .eco_id = ~0U, 46681c19c8SLucas Stach .stream_count = 16, 47681c19c8SLucas Stach .register_max = 64, 48681c19c8SLucas Stach .thread_count = 1024, 49681c19c8SLucas Stach .shader_core_count = 4, 50681c19c8SLucas Stach .vertex_cache_size = 16, 51681c19c8SLucas Stach .vertex_output_buffer_size = 1024, 52681c19c8SLucas Stach .pixel_pipes = 2, 53681c19c8SLucas Stach .instruction_count = 512, 54681c19c8SLucas Stach .num_constants = 320, 55681c19c8SLucas Stach .buffer_size = 0, 56681c19c8SLucas Stach .varyings_count = 16, 57681c19c8SLucas Stach .features = 0xe0287cad, 58681c19c8SLucas Stach .minor_features0 = 0xc1799eff, 59681c19c8SLucas Stach .minor_features1 = 0xfefbfad9, 60681c19c8SLucas Stach .minor_features2 = 0xeb9d4fbf, 61681c19c8SLucas Stach .minor_features3 = 0xedfffced, 62681c19c8SLucas Stach .minor_features4 = 0xdb0dafc7, 63681c19c8SLucas Stach .minor_features5 = 0xbb5ac333, 64681c19c8SLucas Stach .minor_features6 = 0xfc8ee200, 65681c19c8SLucas Stach .minor_features7 = 0x03fbfa6f, 66681c19c8SLucas Stach .minor_features8 = 0x00ef0ef0, 67681c19c8SLucas Stach .minor_features9 = 0x0edbf03c, 68681c19c8SLucas Stach .minor_features10 = 0x90044250, 69681c19c8SLucas Stach .minor_features11 = 0x00000024, 70681c19c8SLucas Stach }, 71681c19c8SLucas Stach }; 72681c19c8SLucas Stach 73681c19c8SLucas Stach bool etnaviv_fill_identity_from_hwdb(struct etnaviv_gpu *gpu) 74681c19c8SLucas Stach { 75681c19c8SLucas Stach struct etnaviv_chip_identity *ident = &gpu->identity; 76681c19c8SLucas Stach int i; 77681c19c8SLucas Stach 78681c19c8SLucas Stach for (i = 0; i < ARRAY_SIZE(etnaviv_chip_identities); i++) { 79681c19c8SLucas Stach if (etnaviv_chip_identities[i].model == ident->model && 804078a118SChristian Gmeiner etnaviv_chip_identities[i].revision == ident->revision && 814078a118SChristian Gmeiner (etnaviv_chip_identities[i].product_id == ident->product_id || 824078a118SChristian Gmeiner etnaviv_chip_identities[i].product_id == ~0U) && 834078a118SChristian Gmeiner (etnaviv_chip_identities[i].customer_id == ident->customer_id || 844078a118SChristian Gmeiner etnaviv_chip_identities[i].customer_id == ~0U) && 854078a118SChristian Gmeiner (etnaviv_chip_identities[i].eco_id == ident->eco_id || 864078a118SChristian Gmeiner etnaviv_chip_identities[i].eco_id == ~0U)) { 87681c19c8SLucas Stach memcpy(ident, &etnaviv_chip_identities[i], 88681c19c8SLucas Stach sizeof(*ident)); 89681c19c8SLucas Stach return true; 90681c19c8SLucas Stach } 91681c19c8SLucas Stach } 92681c19c8SLucas Stach 93681c19c8SLucas Stach return false; 94681c19c8SLucas Stach } 95