xref: /openbmc/linux/drivers/gpu/drm/etnaviv/etnaviv_hwdb.c (revision 989c9dad613155a60f15747e3f1db210a6304ecf)
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*989c9dadSSascha Hauer 		.revision = 0x6204,
43*989c9dadSSascha Hauer 		.product_id = ~0U,
44*989c9dadSSascha Hauer 		.customer_id = ~0U,
45*989c9dadSSascha Hauer 		.eco_id = 0,
46*989c9dadSSascha Hauer 		.stream_count = 16,
47*989c9dadSSascha Hauer 		.register_max = 64,
48*989c9dadSSascha Hauer 		.thread_count = 512,
49*989c9dadSSascha Hauer 		.shader_core_count = 2,
50*989c9dadSSascha Hauer 		.vertex_cache_size = 16,
51*989c9dadSSascha Hauer 		.vertex_output_buffer_size = 1024,
52*989c9dadSSascha Hauer 		.pixel_pipes = 1,
53*989c9dadSSascha Hauer 		.instruction_count = 512,
54*989c9dadSSascha Hauer 		.num_constants = 320,
55*989c9dadSSascha Hauer 		.buffer_size = 0,
56*989c9dadSSascha Hauer 		.varyings_count = 16,
57*989c9dadSSascha Hauer 		.features = 0xe0287c8d,
58*989c9dadSSascha Hauer 		.minor_features0 = 0xc1589eff,
59*989c9dadSSascha Hauer 		.minor_features1 = 0xfefbfad9,
60*989c9dadSSascha Hauer 		.minor_features2 = 0xeb9d4fbf,
61*989c9dadSSascha Hauer 		.minor_features3 = 0xedfffced,
62*989c9dadSSascha Hauer 		.minor_features4 = 0xdb0dafc7,
63*989c9dadSSascha Hauer 		.minor_features5 = 0x3b5ac333,
64*989c9dadSSascha Hauer 		.minor_features6 = 0xfcce6000,
65*989c9dadSSascha Hauer 		.minor_features7 = 0xfffbfa6f,
66*989c9dadSSascha Hauer 		.minor_features8 = 0x00e10ef3,
67*989c9dadSSascha Hauer 		.minor_features9 = 0x04c8003c,
68*989c9dadSSascha Hauer 		.minor_features10 = 0x00004060,
69*989c9dadSSascha Hauer 		.minor_features11 = 0x00000024,
70*989c9dadSSascha Hauer 	},
71*989c9dadSSascha Hauer 	{
72*989c9dadSSascha Hauer 		.model = 0x7000,
73681c19c8SLucas Stach 		.revision = 0x6214,
74a51d1f37SChristian Gmeiner 		.product_id = ~0U,
75a51d1f37SChristian Gmeiner 		.customer_id = ~0U,
76a51d1f37SChristian Gmeiner 		.eco_id = ~0U,
77681c19c8SLucas Stach 		.stream_count = 16,
78681c19c8SLucas Stach 		.register_max = 64,
79681c19c8SLucas Stach 		.thread_count = 1024,
80681c19c8SLucas Stach 		.shader_core_count = 4,
81681c19c8SLucas Stach 		.vertex_cache_size = 16,
82681c19c8SLucas Stach 		.vertex_output_buffer_size = 1024,
83681c19c8SLucas Stach 		.pixel_pipes = 2,
84681c19c8SLucas Stach 		.instruction_count = 512,
85681c19c8SLucas Stach 		.num_constants = 320,
86681c19c8SLucas Stach 		.buffer_size = 0,
87681c19c8SLucas Stach 		.varyings_count = 16,
88681c19c8SLucas Stach 		.features = 0xe0287cad,
89681c19c8SLucas Stach 		.minor_features0 = 0xc1799eff,
90681c19c8SLucas Stach 		.minor_features1 = 0xfefbfad9,
91681c19c8SLucas Stach 		.minor_features2 = 0xeb9d4fbf,
92681c19c8SLucas Stach 		.minor_features3 = 0xedfffced,
93681c19c8SLucas Stach 		.minor_features4 = 0xdb0dafc7,
94681c19c8SLucas Stach 		.minor_features5 = 0xbb5ac333,
95681c19c8SLucas Stach 		.minor_features6 = 0xfc8ee200,
96681c19c8SLucas Stach 		.minor_features7 = 0x03fbfa6f,
97681c19c8SLucas Stach 		.minor_features8 = 0x00ef0ef0,
98681c19c8SLucas Stach 		.minor_features9 = 0x0edbf03c,
99681c19c8SLucas Stach 		.minor_features10 = 0x90044250,
100681c19c8SLucas Stach 		.minor_features11 = 0x00000024,
101681c19c8SLucas Stach 	},
102681c19c8SLucas Stach };
103681c19c8SLucas Stach 
104681c19c8SLucas Stach bool etnaviv_fill_identity_from_hwdb(struct etnaviv_gpu *gpu)
105681c19c8SLucas Stach {
106681c19c8SLucas Stach 	struct etnaviv_chip_identity *ident = &gpu->identity;
107681c19c8SLucas Stach 	int i;
108681c19c8SLucas Stach 
109681c19c8SLucas Stach 	for (i = 0; i < ARRAY_SIZE(etnaviv_chip_identities); i++) {
110681c19c8SLucas Stach 		if (etnaviv_chip_identities[i].model == ident->model &&
1114078a118SChristian Gmeiner 		    etnaviv_chip_identities[i].revision == ident->revision &&
1124078a118SChristian Gmeiner 		    (etnaviv_chip_identities[i].product_id == ident->product_id ||
1134078a118SChristian Gmeiner 			 etnaviv_chip_identities[i].product_id == ~0U) &&
1144078a118SChristian Gmeiner 		    (etnaviv_chip_identities[i].customer_id == ident->customer_id ||
1154078a118SChristian Gmeiner 			 etnaviv_chip_identities[i].customer_id == ~0U) &&
1164078a118SChristian Gmeiner 		    (etnaviv_chip_identities[i].eco_id == ident->eco_id ||
1174078a118SChristian Gmeiner 			 etnaviv_chip_identities[i].eco_id == ~0U)) {
118681c19c8SLucas Stach 			memcpy(ident, &etnaviv_chip_identities[i],
119681c19c8SLucas Stach 			       sizeof(*ident));
120681c19c8SLucas Stach 			return true;
121681c19c8SLucas Stach 		}
122681c19c8SLucas Stach 	}
123681c19c8SLucas Stach 
124681c19c8SLucas Stach 	return false;
125681c19c8SLucas Stach }
126