xref: /openbmc/linux/drivers/gpu/drm/etnaviv/etnaviv_hwdb.c (revision 1f5896ca6e930050e0f978a7ec7f6fc92ea15546)
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