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 { 10f56f1579SChristian Gmeiner .model = 0x400, 11f56f1579SChristian Gmeiner .revision = 0x4652, 12f56f1579SChristian Gmeiner .product_id = 0x70001, 13f56f1579SChristian Gmeiner .customer_id = 0x100, 14f56f1579SChristian Gmeiner .eco_id = 0, 15f56f1579SChristian Gmeiner .stream_count = 4, 16f56f1579SChristian Gmeiner .register_max = 64, 17f56f1579SChristian Gmeiner .thread_count = 128, 18f56f1579SChristian Gmeiner .shader_core_count = 1, 19f56f1579SChristian Gmeiner .vertex_cache_size = 8, 20f56f1579SChristian Gmeiner .vertex_output_buffer_size = 1024, 21f56f1579SChristian Gmeiner .pixel_pipes = 1, 22f56f1579SChristian Gmeiner .instruction_count = 256, 23f56f1579SChristian Gmeiner .num_constants = 320, 24f56f1579SChristian Gmeiner .buffer_size = 0, 25f56f1579SChristian Gmeiner .varyings_count = 8, 26f56f1579SChristian Gmeiner .features = 0xa0e9e004, 27f56f1579SChristian Gmeiner .minor_features0 = 0xe1299fff, 28f56f1579SChristian Gmeiner .minor_features1 = 0xbe13b219, 29f56f1579SChristian Gmeiner .minor_features2 = 0xce110010, 30f56f1579SChristian Gmeiner .minor_features3 = 0x8000001, 31f56f1579SChristian Gmeiner .minor_features4 = 0x20102, 32f56f1579SChristian Gmeiner .minor_features5 = 0x120000, 33f56f1579SChristian Gmeiner .minor_features6 = 0x0, 34f56f1579SChristian Gmeiner .minor_features7 = 0x0, 35f56f1579SChristian Gmeiner .minor_features8 = 0x0, 36f56f1579SChristian Gmeiner .minor_features9 = 0x0, 37f56f1579SChristian Gmeiner .minor_features10 = 0x0, 38f56f1579SChristian Gmeiner .minor_features11 = 0x0, 39f56f1579SChristian Gmeiner }, 40f56f1579SChristian Gmeiner { 41681c19c8SLucas Stach .model = 0x7000, 42*12495f4eSMichael Walle .revision = 0x6202, 43*12495f4eSMichael Walle .product_id = 0x70003, 44*12495f4eSMichael Walle .customer_id = 0, 45*12495f4eSMichael Walle .eco_id = 0, 46*12495f4eSMichael Walle .stream_count = 8, 47*12495f4eSMichael Walle .register_max = 64, 48*12495f4eSMichael Walle .thread_count = 512, 49*12495f4eSMichael Walle .shader_core_count = 2, 50*12495f4eSMichael Walle .vertex_cache_size = 16, 51*12495f4eSMichael Walle .vertex_output_buffer_size = 1024, 52*12495f4eSMichael Walle .pixel_pipes = 1, 53*12495f4eSMichael Walle .instruction_count = 512, 54*12495f4eSMichael Walle .num_constants = 320, 55*12495f4eSMichael Walle .buffer_size = 0, 56*12495f4eSMichael Walle .varyings_count = 16, 57*12495f4eSMichael Walle .features = 0xe0287cad, 58*12495f4eSMichael Walle .minor_features0 = 0xc1489eff, 59*12495f4eSMichael Walle .minor_features1 = 0xfefbfad9, 60*12495f4eSMichael Walle .minor_features2 = 0xeb9d4fbf, 61*12495f4eSMichael Walle .minor_features3 = 0xedfffced, 62*12495f4eSMichael Walle .minor_features4 = 0xdb0dafc7, 63*12495f4eSMichael Walle .minor_features5 = 0x3b5ac333, 64*12495f4eSMichael Walle .minor_features6 = 0xfccee201, 65*12495f4eSMichael Walle .minor_features7 = 0x03fffa6f, 66*12495f4eSMichael Walle .minor_features8 = 0x00e10ef0, 67*12495f4eSMichael Walle .minor_features9 = 0x0088003c, 68*12495f4eSMichael Walle .minor_features10 = 0x00004040, 69*12495f4eSMichael Walle .minor_features11 = 0x00000024, 70*12495f4eSMichael Walle }, 71*12495f4eSMichael Walle { 72*12495f4eSMichael Walle .model = 0x7000, 73989c9dadSSascha Hauer .revision = 0x6204, 74989c9dadSSascha Hauer .product_id = ~0U, 75989c9dadSSascha Hauer .customer_id = ~0U, 76989c9dadSSascha Hauer .eco_id = 0, 77989c9dadSSascha Hauer .stream_count = 16, 78989c9dadSSascha Hauer .register_max = 64, 79989c9dadSSascha Hauer .thread_count = 512, 80989c9dadSSascha Hauer .shader_core_count = 2, 81989c9dadSSascha Hauer .vertex_cache_size = 16, 82989c9dadSSascha Hauer .vertex_output_buffer_size = 1024, 83989c9dadSSascha Hauer .pixel_pipes = 1, 84989c9dadSSascha Hauer .instruction_count = 512, 85989c9dadSSascha Hauer .num_constants = 320, 86989c9dadSSascha Hauer .buffer_size = 0, 87989c9dadSSascha Hauer .varyings_count = 16, 88989c9dadSSascha Hauer .features = 0xe0287c8d, 89989c9dadSSascha Hauer .minor_features0 = 0xc1589eff, 90989c9dadSSascha Hauer .minor_features1 = 0xfefbfad9, 91989c9dadSSascha Hauer .minor_features2 = 0xeb9d4fbf, 92989c9dadSSascha Hauer .minor_features3 = 0xedfffced, 93989c9dadSSascha Hauer .minor_features4 = 0xdb0dafc7, 94989c9dadSSascha Hauer .minor_features5 = 0x3b5ac333, 95989c9dadSSascha Hauer .minor_features6 = 0xfcce6000, 96989c9dadSSascha Hauer .minor_features7 = 0xfffbfa6f, 97989c9dadSSascha Hauer .minor_features8 = 0x00e10ef3, 98989c9dadSSascha Hauer .minor_features9 = 0x04c8003c, 99989c9dadSSascha Hauer .minor_features10 = 0x00004060, 100989c9dadSSascha Hauer .minor_features11 = 0x00000024, 101989c9dadSSascha Hauer }, 102989c9dadSSascha Hauer { 103989c9dadSSascha Hauer .model = 0x7000, 104681c19c8SLucas Stach .revision = 0x6214, 105a51d1f37SChristian Gmeiner .product_id = ~0U, 106a51d1f37SChristian Gmeiner .customer_id = ~0U, 107a51d1f37SChristian Gmeiner .eco_id = ~0U, 108681c19c8SLucas Stach .stream_count = 16, 109681c19c8SLucas Stach .register_max = 64, 110681c19c8SLucas Stach .thread_count = 1024, 111681c19c8SLucas Stach .shader_core_count = 4, 112681c19c8SLucas Stach .vertex_cache_size = 16, 113681c19c8SLucas Stach .vertex_output_buffer_size = 1024, 114681c19c8SLucas Stach .pixel_pipes = 2, 115681c19c8SLucas Stach .instruction_count = 512, 116681c19c8SLucas Stach .num_constants = 320, 117681c19c8SLucas Stach .buffer_size = 0, 118681c19c8SLucas Stach .varyings_count = 16, 119681c19c8SLucas Stach .features = 0xe0287cad, 120681c19c8SLucas Stach .minor_features0 = 0xc1799eff, 121681c19c8SLucas Stach .minor_features1 = 0xfefbfad9, 122681c19c8SLucas Stach .minor_features2 = 0xeb9d4fbf, 123681c19c8SLucas Stach .minor_features3 = 0xedfffced, 124681c19c8SLucas Stach .minor_features4 = 0xdb0dafc7, 125681c19c8SLucas Stach .minor_features5 = 0xbb5ac333, 126681c19c8SLucas Stach .minor_features6 = 0xfc8ee200, 127681c19c8SLucas Stach .minor_features7 = 0x03fbfa6f, 128681c19c8SLucas Stach .minor_features8 = 0x00ef0ef0, 129681c19c8SLucas Stach .minor_features9 = 0x0edbf03c, 130681c19c8SLucas Stach .minor_features10 = 0x90044250, 131681c19c8SLucas Stach .minor_features11 = 0x00000024, 132681c19c8SLucas Stach }, 133681c19c8SLucas Stach }; 134681c19c8SLucas Stach 135681c19c8SLucas Stach bool etnaviv_fill_identity_from_hwdb(struct etnaviv_gpu *gpu) 136681c19c8SLucas Stach { 137681c19c8SLucas Stach struct etnaviv_chip_identity *ident = &gpu->identity; 138681c19c8SLucas Stach int i; 139681c19c8SLucas Stach 140681c19c8SLucas Stach for (i = 0; i < ARRAY_SIZE(etnaviv_chip_identities); i++) { 141681c19c8SLucas Stach if (etnaviv_chip_identities[i].model == ident->model && 1424078a118SChristian Gmeiner etnaviv_chip_identities[i].revision == ident->revision && 1434078a118SChristian Gmeiner (etnaviv_chip_identities[i].product_id == ident->product_id || 1444078a118SChristian Gmeiner etnaviv_chip_identities[i].product_id == ~0U) && 1454078a118SChristian Gmeiner (etnaviv_chip_identities[i].customer_id == ident->customer_id || 1464078a118SChristian Gmeiner etnaviv_chip_identities[i].customer_id == ~0U) && 1474078a118SChristian Gmeiner (etnaviv_chip_identities[i].eco_id == ident->eco_id || 1484078a118SChristian Gmeiner etnaviv_chip_identities[i].eco_id == ~0U)) { 149681c19c8SLucas Stach memcpy(ident, &etnaviv_chip_identities[i], 150681c19c8SLucas Stach sizeof(*ident)); 151681c19c8SLucas Stach return true; 152681c19c8SLucas Stach } 153681c19c8SLucas Stach } 154681c19c8SLucas Stach 155681c19c8SLucas Stach return false; 156681c19c8SLucas Stach } 157