18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (C) 2018 Etnaviv Project
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#include "etnaviv_gpu.h"
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_cistatic const struct etnaviv_chip_identity etnaviv_chip_identities[] = {
98c2ecf20Sopenharmony_ci	{
108c2ecf20Sopenharmony_ci		.model = 0x400,
118c2ecf20Sopenharmony_ci		.revision = 0x4652,
128c2ecf20Sopenharmony_ci		.product_id = 0x70001,
138c2ecf20Sopenharmony_ci		.customer_id = 0x100,
148c2ecf20Sopenharmony_ci		.eco_id = 0,
158c2ecf20Sopenharmony_ci		.stream_count = 4,
168c2ecf20Sopenharmony_ci		.register_max = 64,
178c2ecf20Sopenharmony_ci		.thread_count = 128,
188c2ecf20Sopenharmony_ci		.shader_core_count = 1,
198c2ecf20Sopenharmony_ci		.vertex_cache_size = 8,
208c2ecf20Sopenharmony_ci		.vertex_output_buffer_size = 1024,
218c2ecf20Sopenharmony_ci		.pixel_pipes = 1,
228c2ecf20Sopenharmony_ci		.instruction_count = 256,
238c2ecf20Sopenharmony_ci		.num_constants = 320,
248c2ecf20Sopenharmony_ci		.buffer_size = 0,
258c2ecf20Sopenharmony_ci		.varyings_count = 8,
268c2ecf20Sopenharmony_ci		.features = 0xa0e9e004,
278c2ecf20Sopenharmony_ci		.minor_features0 = 0xe1299fff,
288c2ecf20Sopenharmony_ci		.minor_features1 = 0xbe13b219,
298c2ecf20Sopenharmony_ci		.minor_features2 = 0xce110010,
308c2ecf20Sopenharmony_ci		.minor_features3 = 0x8000001,
318c2ecf20Sopenharmony_ci		.minor_features4 = 0x20102,
328c2ecf20Sopenharmony_ci		.minor_features5 = 0x120000,
338c2ecf20Sopenharmony_ci		.minor_features6 = 0x0,
348c2ecf20Sopenharmony_ci		.minor_features7 = 0x0,
358c2ecf20Sopenharmony_ci		.minor_features8 = 0x0,
368c2ecf20Sopenharmony_ci		.minor_features9 = 0x0,
378c2ecf20Sopenharmony_ci		.minor_features10 = 0x0,
388c2ecf20Sopenharmony_ci		.minor_features11 = 0x0,
398c2ecf20Sopenharmony_ci	},
408c2ecf20Sopenharmony_ci	{
418c2ecf20Sopenharmony_ci		.model = 0x7000,
428c2ecf20Sopenharmony_ci		.revision = 0x6214,
438c2ecf20Sopenharmony_ci		.product_id = ~0U,
448c2ecf20Sopenharmony_ci		.customer_id = ~0U,
458c2ecf20Sopenharmony_ci		.eco_id = ~0U,
468c2ecf20Sopenharmony_ci		.stream_count = 16,
478c2ecf20Sopenharmony_ci		.register_max = 64,
488c2ecf20Sopenharmony_ci		.thread_count = 1024,
498c2ecf20Sopenharmony_ci		.shader_core_count = 4,
508c2ecf20Sopenharmony_ci		.vertex_cache_size = 16,
518c2ecf20Sopenharmony_ci		.vertex_output_buffer_size = 1024,
528c2ecf20Sopenharmony_ci		.pixel_pipes = 2,
538c2ecf20Sopenharmony_ci		.instruction_count = 512,
548c2ecf20Sopenharmony_ci		.num_constants = 320,
558c2ecf20Sopenharmony_ci		.buffer_size = 0,
568c2ecf20Sopenharmony_ci		.varyings_count = 16,
578c2ecf20Sopenharmony_ci		.features = 0xe0287cad,
588c2ecf20Sopenharmony_ci		.minor_features0 = 0xc1799eff,
598c2ecf20Sopenharmony_ci		.minor_features1 = 0xfefbfad9,
608c2ecf20Sopenharmony_ci		.minor_features2 = 0xeb9d4fbf,
618c2ecf20Sopenharmony_ci		.minor_features3 = 0xedfffced,
628c2ecf20Sopenharmony_ci		.minor_features4 = 0xdb0dafc7,
638c2ecf20Sopenharmony_ci		.minor_features5 = 0xbb5ac333,
648c2ecf20Sopenharmony_ci		.minor_features6 = 0xfc8ee200,
658c2ecf20Sopenharmony_ci		.minor_features7 = 0x03fbfa6f,
668c2ecf20Sopenharmony_ci		.minor_features8 = 0x00ef0ef0,
678c2ecf20Sopenharmony_ci		.minor_features9 = 0x0edbf03c,
688c2ecf20Sopenharmony_ci		.minor_features10 = 0x90044250,
698c2ecf20Sopenharmony_ci		.minor_features11 = 0x00000024,
708c2ecf20Sopenharmony_ci	},
718c2ecf20Sopenharmony_ci};
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_cibool etnaviv_fill_identity_from_hwdb(struct etnaviv_gpu *gpu)
748c2ecf20Sopenharmony_ci{
758c2ecf20Sopenharmony_ci	struct etnaviv_chip_identity *ident = &gpu->identity;
768c2ecf20Sopenharmony_ci	int i;
778c2ecf20Sopenharmony_ci
788c2ecf20Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(etnaviv_chip_identities); i++) {
798c2ecf20Sopenharmony_ci		if (etnaviv_chip_identities[i].model == ident->model &&
808c2ecf20Sopenharmony_ci		    etnaviv_chip_identities[i].revision == ident->revision &&
818c2ecf20Sopenharmony_ci		    (etnaviv_chip_identities[i].product_id == ident->product_id ||
828c2ecf20Sopenharmony_ci			 etnaviv_chip_identities[i].product_id == ~0U) &&
838c2ecf20Sopenharmony_ci		    (etnaviv_chip_identities[i].customer_id == ident->customer_id ||
848c2ecf20Sopenharmony_ci			 etnaviv_chip_identities[i].customer_id == ~0U) &&
858c2ecf20Sopenharmony_ci		    (etnaviv_chip_identities[i].eco_id == ident->eco_id ||
868c2ecf20Sopenharmony_ci			 etnaviv_chip_identities[i].eco_id == ~0U)) {
878c2ecf20Sopenharmony_ci			memcpy(ident, &etnaviv_chip_identities[i],
888c2ecf20Sopenharmony_ci			       sizeof(*ident));
898c2ecf20Sopenharmony_ci			return true;
908c2ecf20Sopenharmony_ci		}
918c2ecf20Sopenharmony_ci	}
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_ci	return false;
948c2ecf20Sopenharmony_ci}
95