/* * Copyright © 2022 Imagination Technologies Ltd. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /* TODO: This file is currently hand-maintained. However, the intention is to * auto-generate it in the future based on the hwdefs. */ #include "assert.h" #include "errno.h" #include "pvr_device_info.h" const struct pvr_device_ident pvr_device_ident_4_V_2_51 = { .device_id = 0x6250, .series_name = "Rogue", .public_name = "GX6250", }; const struct pvr_device_features pvr_device_features_4_V_2_51 = { .has_astc = true, .has_cluster_grouping = true, .has_common_store_size_in_dwords = true, .has_compute = true, .has_compute_morton_capable = true, .has_compute_overlap = true, .has_eight_output_registers = true, .has_gs_rta_support = true, .has_isp_max_tiles_in_flight = true, .has_isp_samples_per_pixel = true, .has_max_instances_per_pds_task = true, .has_max_multisample = true, .has_max_partitions = true, .has_max_usc_tasks = true, .has_num_clusters = true, .has_num_raster_pipes = true, .has_num_user_clip_planes = true, .has_robust_buffer_access = true, .has_slc_cache_line_size_bits = true, .has_slc_mcu_cache_controls = true, .has_tf_bicubic_filter = true, .has_tile_size_x = true, .has_tile_size_y = true, .has_tpu_array_textures = true, .has_tpu_extended_integer_lookup = true, .has_tpu_image_state_v2 = true, .has_usc_f16sop_u8 = true, .has_usc_min_output_registers_per_pix = true, .has_usc_slots = true, .has_uvs_banks = true, .has_uvs_pba_entries = true, .has_uvs_vtx_entries = true, .has_vdm_cam_size = true, .has_xt_top_infrastructure = true, .has_zls_subtile = true, .common_store_size_in_dwords = 1280U * 4U * 4U, .isp_max_tiles_in_flight = 4U, .isp_samples_per_pixel = 2U, .max_instances_per_pds_task = 32U, .max_multisample = 8U, .max_partitions = 8U, .max_usc_tasks = 56U, .num_clusters = 2U, .num_raster_pipes = 1U, .num_user_clip_planes = 8U, .slc_cache_line_size_bits = 512U, .tile_size_x = 32U, .tile_size_y = 32U, .usc_min_output_registers_per_pix = 2U, .usc_slots = 32U, .uvs_banks = 8U, .uvs_pba_entries = 320U, .uvs_vtx_entries = 288U, .vdm_cam_size = 256U, }; const struct pvr_device_enhancements pvr_device_enhancements_4_40_2_51 = { .has_ern35421 = true, .has_ern38020 = true, .has_ern38748 = true, .has_ern42307 = true, }; const struct pvr_device_quirks pvr_device_quirks_4_40_2_51 = { .has_brn44079 = true, .has_brn47727 = true, .has_brn48492 = true, .has_brn48545 = true, .has_brn49032 = true, .has_brn49927 = true, .has_brn51025 = true, .has_brn51210 = true, .has_brn51764 = true, .has_brn52354 = true, .has_brn52942 = true, .has_brn56279 = true, .has_brn58839 = true, .has_brn62269 = true, .has_brn66011 = true, .has_brn70165 = true, }; const struct pvr_device_ident pvr_device_ident_33_V_11_3 = { .device_id = 0x33011003, .series_name = "A-Series", .public_name = "AXE-1-16M", }; const struct pvr_device_features pvr_device_features_33_V_11_3 = { .has_common_store_size_in_dwords = true, .has_compute = true, .has_isp_max_tiles_in_flight = true, .has_isp_samples_per_pixel = true, .has_max_instances_per_pds_task = true, .has_max_multisample = true, .has_max_partitions = true, .has_max_usc_tasks = true, .has_num_clusters = true, .has_num_raster_pipes = true, .has_num_user_clip_planes = true, .has_roguexe = true, .has_screen_size8K = true, .has_simple_internal_parameter_format = true, .has_simple_internal_parameter_format_v2 = true, .has_simple_parameter_format_version = true, .has_slc_cache_line_size_bits = true, .has_tile_size_16x16 = true, .has_tile_size_x = true, .has_tile_size_y = true, .has_tpu_extended_integer_lookup = true, .has_tpu_image_state_v2 = true, .has_usc_f16sop_u8 = true, .has_usc_min_output_registers_per_pix = true, .has_usc_pixel_partition_mask = true, .has_usc_slots = true, .has_uvs_banks = true, .has_uvs_pba_entries = true, .has_uvs_vtx_entries = true, .has_vdm_cam_size = true, .has_vdm_degenerate_culling = true, .common_store_size_in_dwords = 512U * 4U * 4U, .isp_max_tiles_in_flight = 1U, .isp_samples_per_pixel = 1U, .max_instances_per_pds_task = 32U, .max_multisample = 4U, .max_partitions = 4U, .max_usc_tasks = 24U, .num_clusters = 1U, .num_raster_pipes = 1U, .num_user_clip_planes = 8U, .simple_parameter_format_version = 2U, .slc_cache_line_size_bits = 512U, .tile_size_x = 16U, .tile_size_y = 16U, .usc_min_output_registers_per_pix = 1U, .usc_slots = 14U, .uvs_banks = 2U, .uvs_pba_entries = 320U, .uvs_vtx_entries = 288U, .vdm_cam_size = 32U, .has_s8xe = true, }; const struct pvr_device_enhancements pvr_device_enhancements_33_15_11_3 = { .has_ern35421 = true, .has_ern38748 = true, .has_ern42307 = true, .has_ern45493 = true, }; const struct pvr_device_quirks pvr_device_quirks_33_15_11_3 = { .has_brn70165 = true, }; const struct pvr_device_ident pvr_device_ident_36_V_104_796 = { .device_id = 0x36104796, .series_name = "B-Series", .public_name = "BXS-4-64", }; const struct pvr_device_features pvr_device_features_36_V_104_796 = { .has_astc = true, .has_common_store_size_in_dwords = true, .has_compute = true, .has_compute_overlap = true, .has_gpu_multicore_support = true, .has_gs_rta_support = true, .has_isp_max_tiles_in_flight = true, .has_isp_samples_per_pixel = true, .has_max_instances_per_pds_task = true, .has_max_multisample = true, .has_max_partitions = true, .has_max_usc_tasks = true, .has_num_clusters = true, .has_num_raster_pipes = true, .has_num_user_clip_planes = true, .has_paired_tiles = true, .has_pds_ddmadt = true, .has_roguexe = true, .has_screen_size8K = true, .has_simple_internal_parameter_format = true, .has_simple_internal_parameter_format_v2 = true, .has_simple_parameter_format_version = true, .has_slc_cache_line_size_bits = true, .has_tile_size_16x16 = true, .has_tile_size_x = true, .has_tile_size_y = true, .has_tpu_extended_integer_lookup = true, .has_tpu_image_state_v2 = true, .has_usc_f16sop_u8 = true, .has_usc_min_output_registers_per_pix = true, .has_usc_pixel_partition_mask = true, .has_usc_slots = true, .has_uvs_banks = true, .has_uvs_pba_entries = true, .has_uvs_vtx_entries = true, .has_vdm_cam_size = true, .has_vdm_degenerate_culling = true, .has_xpu_max_slaves = true, .common_store_size_in_dwords = 1344U * 4U * 4U, .isp_max_tiles_in_flight = 6U, .isp_samples_per_pixel = 4U, .max_instances_per_pds_task = 32U, .max_multisample = 4U, .max_partitions = 16U, .max_usc_tasks = 156U, .num_clusters = 1U, .num_raster_pipes = 1U, .num_user_clip_planes = 8U, .simple_parameter_format_version = 2U, .slc_cache_line_size_bits = 512U, .tile_size_x = 16U, .tile_size_y = 16U, .usc_min_output_registers_per_pix = 2U, .usc_slots = 64U, .uvs_banks = 8U, .uvs_pba_entries = 160U, .uvs_vtx_entries = 144U, .vdm_cam_size = 64U, .xpu_max_slaves = 3U, .has_s8xe = true, }; const struct pvr_device_enhancements pvr_device_enhancements_36_53_104_796 = { .has_ern35421 = true, .has_ern38748 = true, .has_ern42307 = true, .has_ern45493 = true, }; const struct pvr_device_quirks pvr_device_quirks_36_53_104_796 = { .has_brn44079 = true, .has_brn70165 = true, }; /** * Initialize PowerVR device information. * * \param info Device info structure to initialize. * \param bvnc Packed BVNC. * \return * * 0 on success, or * * -%ENODEV if the device is not supported. */ int pvr_device_info_init(struct pvr_device_info *info, uint64_t bvnc) { #define CASE_PACKED_BVNC_DEVICE_INFO(_b, _v, _n, _c) \ case PVR_BVNC_PACK(_b, _v, _n, _c): \ info->ident = pvr_device_ident_##_b##_V_##_n##_##_c; \ info->ident.b = _b; \ info->ident.n = _n; \ info->ident.v = _v; \ info->ident.c = _c; \ info->features = pvr_device_features_##_b##_V_##_n##_##_c; \ info->enhancements = pvr_device_enhancements_##_b##_##_v##_##_n##_##_c; \ info->quirks = pvr_device_quirks_##_b##_##_v##_##_n##_##_c; \ return 0 switch (bvnc) { CASE_PACKED_BVNC_DEVICE_INFO(4, 40, 2, 51); CASE_PACKED_BVNC_DEVICE_INFO(33, 15, 11, 3); } #undef CASE_PACKED_BVNC_DEVICE_INFO assert(!"Unsupported Device"); return -ENODEV; }