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, 4212495f4eSMichael Walle .revision = 0x6202, 4312495f4eSMichael Walle .product_id = 0x70003, 4412495f4eSMichael Walle .customer_id = 0, 4512495f4eSMichael Walle .eco_id = 0, 4612495f4eSMichael Walle .stream_count = 8, 4712495f4eSMichael Walle .register_max = 64, 4812495f4eSMichael Walle .thread_count = 512, 4912495f4eSMichael Walle .shader_core_count = 2, 5012495f4eSMichael Walle .vertex_cache_size = 16, 5112495f4eSMichael Walle .vertex_output_buffer_size = 1024, 5212495f4eSMichael Walle .pixel_pipes = 1, 5312495f4eSMichael Walle .instruction_count = 512, 5412495f4eSMichael Walle .num_constants = 320, 5512495f4eSMichael Walle .buffer_size = 0, 5612495f4eSMichael Walle .varyings_count = 16, 5712495f4eSMichael Walle .features = 0xe0287cad, 5812495f4eSMichael Walle .minor_features0 = 0xc1489eff, 5912495f4eSMichael Walle .minor_features1 = 0xfefbfad9, 6012495f4eSMichael Walle .minor_features2 = 0xeb9d4fbf, 6112495f4eSMichael Walle .minor_features3 = 0xedfffced, 6212495f4eSMichael Walle .minor_features4 = 0xdb0dafc7, 6312495f4eSMichael Walle .minor_features5 = 0x3b5ac333, 6412495f4eSMichael Walle .minor_features6 = 0xfccee201, 6512495f4eSMichael Walle .minor_features7 = 0x03fffa6f, 6612495f4eSMichael Walle .minor_features8 = 0x00e10ef0, 6712495f4eSMichael Walle .minor_features9 = 0x0088003c, 6812495f4eSMichael Walle .minor_features10 = 0x00004040, 6912495f4eSMichael Walle .minor_features11 = 0x00000024, 7012495f4eSMichael Walle }, 7112495f4eSMichael Walle { 7212495f4eSMichael Walle .model = 0x7000, 73*1f5896caSMarco Felsch .revision = 0x6203, 74*1f5896caSMarco Felsch .product_id = 0x70003, 75*1f5896caSMarco Felsch .customer_id = 0x4, 76*1f5896caSMarco Felsch .eco_id = 0, 77*1f5896caSMarco Felsch .stream_count = 16, 78*1f5896caSMarco Felsch .register_max = 64, 79*1f5896caSMarco Felsch .thread_count = 512, 80*1f5896caSMarco Felsch .shader_core_count = 2, 81*1f5896caSMarco Felsch .vertex_cache_size = 16, 82*1f5896caSMarco Felsch .vertex_output_buffer_size = 1024, 83*1f5896caSMarco Felsch .pixel_pipes = 1, 84*1f5896caSMarco Felsch .instruction_count = 512, 85*1f5896caSMarco Felsch .num_constants = 320, 86*1f5896caSMarco Felsch .buffer_size = 0, 87*1f5896caSMarco Felsch .varyings_count = 16, 88*1f5896caSMarco Felsch .features = 0xe0287c8d, 89*1f5896caSMarco Felsch .minor_features0 = 0xc1589eff, 90*1f5896caSMarco Felsch .minor_features1 = 0xfefbfad9, 91*1f5896caSMarco Felsch .minor_features2 = 0xeb9d4fbf, 92*1f5896caSMarco Felsch .minor_features3 = 0xedfffced, 93*1f5896caSMarco Felsch .minor_features4 = 0xdb0dafc7, 94*1f5896caSMarco Felsch .minor_features5 = 0x3b5ac333, 95*1f5896caSMarco Felsch .minor_features6 = 0xfcce6000, 96*1f5896caSMarco Felsch .minor_features7 = 0xfffbfa6f, 97*1f5896caSMarco Felsch .minor_features8 = 0x00e10ef3, 98*1f5896caSMarco Felsch .minor_features9 = 0x00c8003c, 99*1f5896caSMarco Felsch .minor_features10 = 0x00004040, 100*1f5896caSMarco Felsch .minor_features11 = 0x00000024, 101*1f5896caSMarco Felsch }, 102*1f5896caSMarco Felsch { 103*1f5896caSMarco Felsch .model = 0x7000, 104989c9dadSSascha Hauer .revision = 0x6204, 105989c9dadSSascha Hauer .product_id = ~0U, 106989c9dadSSascha Hauer .customer_id = ~0U, 107989c9dadSSascha Hauer .eco_id = 0, 108989c9dadSSascha Hauer .stream_count = 16, 109989c9dadSSascha Hauer .register_max = 64, 110989c9dadSSascha Hauer .thread_count = 512, 111989c9dadSSascha Hauer .shader_core_count = 2, 112989c9dadSSascha Hauer .vertex_cache_size = 16, 113989c9dadSSascha Hauer .vertex_output_buffer_size = 1024, 114989c9dadSSascha Hauer .pixel_pipes = 1, 115989c9dadSSascha Hauer .instruction_count = 512, 116989c9dadSSascha Hauer .num_constants = 320, 117989c9dadSSascha Hauer .buffer_size = 0, 118989c9dadSSascha Hauer .varyings_count = 16, 119989c9dadSSascha Hauer .features = 0xe0287c8d, 120989c9dadSSascha Hauer .minor_features0 = 0xc1589eff, 121989c9dadSSascha Hauer .minor_features1 = 0xfefbfad9, 122989c9dadSSascha Hauer .minor_features2 = 0xeb9d4fbf, 123989c9dadSSascha Hauer .minor_features3 = 0xedfffced, 124989c9dadSSascha Hauer .minor_features4 = 0xdb0dafc7, 125989c9dadSSascha Hauer .minor_features5 = 0x3b5ac333, 126989c9dadSSascha Hauer .minor_features6 = 0xfcce6000, 127989c9dadSSascha Hauer .minor_features7 = 0xfffbfa6f, 128989c9dadSSascha Hauer .minor_features8 = 0x00e10ef3, 129989c9dadSSascha Hauer .minor_features9 = 0x04c8003c, 130989c9dadSSascha Hauer .minor_features10 = 0x00004060, 131989c9dadSSascha Hauer .minor_features11 = 0x00000024, 132989c9dadSSascha Hauer }, 133989c9dadSSascha Hauer { 134989c9dadSSascha Hauer .model = 0x7000, 135681c19c8SLucas Stach .revision = 0x6214, 136a51d1f37SChristian Gmeiner .product_id = ~0U, 137a51d1f37SChristian Gmeiner .customer_id = ~0U, 138a51d1f37SChristian Gmeiner .eco_id = ~0U, 139681c19c8SLucas Stach .stream_count = 16, 140681c19c8SLucas Stach .register_max = 64, 141681c19c8SLucas Stach .thread_count = 1024, 142681c19c8SLucas Stach .shader_core_count = 4, 143681c19c8SLucas Stach .vertex_cache_size = 16, 144681c19c8SLucas Stach .vertex_output_buffer_size = 1024, 145681c19c8SLucas Stach .pixel_pipes = 2, 146681c19c8SLucas Stach .instruction_count = 512, 147681c19c8SLucas Stach .num_constants = 320, 148681c19c8SLucas Stach .buffer_size = 0, 149681c19c8SLucas Stach .varyings_count = 16, 150681c19c8SLucas Stach .features = 0xe0287cad, 151681c19c8SLucas Stach .minor_features0 = 0xc1799eff, 152681c19c8SLucas Stach .minor_features1 = 0xfefbfad9, 153681c19c8SLucas Stach .minor_features2 = 0xeb9d4fbf, 154681c19c8SLucas Stach .minor_features3 = 0xedfffced, 155681c19c8SLucas Stach .minor_features4 = 0xdb0dafc7, 156681c19c8SLucas Stach .minor_features5 = 0xbb5ac333, 157681c19c8SLucas Stach .minor_features6 = 0xfc8ee200, 158681c19c8SLucas Stach .minor_features7 = 0x03fbfa6f, 159681c19c8SLucas Stach .minor_features8 = 0x00ef0ef0, 160681c19c8SLucas Stach .minor_features9 = 0x0edbf03c, 161681c19c8SLucas Stach .minor_features10 = 0x90044250, 162681c19c8SLucas Stach .minor_features11 = 0x00000024, 163681c19c8SLucas Stach }, 164681c19c8SLucas Stach }; 165681c19c8SLucas Stach 166681c19c8SLucas Stach bool etnaviv_fill_identity_from_hwdb(struct etnaviv_gpu *gpu) 167681c19c8SLucas Stach { 168681c19c8SLucas Stach struct etnaviv_chip_identity *ident = &gpu->identity; 169681c19c8SLucas Stach int i; 170681c19c8SLucas Stach 171681c19c8SLucas Stach for (i = 0; i < ARRAY_SIZE(etnaviv_chip_identities); i++) { 172681c19c8SLucas Stach if (etnaviv_chip_identities[i].model == ident->model && 1734078a118SChristian Gmeiner etnaviv_chip_identities[i].revision == ident->revision && 1744078a118SChristian Gmeiner (etnaviv_chip_identities[i].product_id == ident->product_id || 1754078a118SChristian Gmeiner etnaviv_chip_identities[i].product_id == ~0U) && 1764078a118SChristian Gmeiner (etnaviv_chip_identities[i].customer_id == ident->customer_id || 1774078a118SChristian Gmeiner etnaviv_chip_identities[i].customer_id == ~0U) && 1784078a118SChristian Gmeiner (etnaviv_chip_identities[i].eco_id == ident->eco_id || 1794078a118SChristian Gmeiner etnaviv_chip_identities[i].eco_id == ~0U)) { 180681c19c8SLucas Stach memcpy(ident, &etnaviv_chip_identities[i], 181681c19c8SLucas Stach sizeof(*ident)); 182681c19c8SLucas Stach return true; 183681c19c8SLucas Stach } 184681c19c8SLucas Stach } 185681c19c8SLucas Stach 186681c19c8SLucas Stach return false; 187681c19c8SLucas Stach } 188