mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	 f99f5f3ea7
			
		
	
	
		f99f5f3ea7
		
			
		
	
	
	
	
		
			
			Read the GPU ID register at probe time and select the correct
features/quirks/enhancements. Use the GPU ID to form the firmware
file name and load the firmware.
The features/quirks/enhancements arrays are currently hardcoded in
the driver for the supported GPUs. We are looking at moving this
information to the firmware image.
Changes since v8:
- Corrected license identifiers
Changes since v7:
- Fix kerneldoc for pvr_device_info_set_enhancements()
Changes since v5:
- Add BRN 71242 to device info
Changes since v4:
- Retrieve device information from firmware header
- Pull forward firmware header parsing from FW infrastructure patch
- Use devm_add_action_or_reset to release firmware
Changes since v3:
- Use drm_dev_{enter,exit}
Co-developed-by: Frank Binns <frank.binns@imgtec.com>
Signed-off-by: Frank Binns <frank.binns@imgtec.com>
Co-developed-by: Matt Coster <matt.coster@imgtec.com>
Signed-off-by: Matt Coster <matt.coster@imgtec.com>
Co-developed-by: Donald Robson <donald.robson@imgtec.com>
Signed-off-by: Donald Robson <donald.robson@imgtec.com>
Signed-off-by: Sarah Walker <sarah.walker@imgtec.com>
Link: https://lore.kernel.org/r/1ff76f7a5b45c742279c78910f8491b8a5e7f6e6.1700668843.git.donald.robson@imgtec.com
Signed-off-by: Maxime Ripard <mripard@kernel.org>
		
	
			
		
			
				
	
	
		
			186 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			186 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0-only OR MIT */
 | |
| /* Copyright (c) 2023 Imagination Technologies Ltd. */
 | |
| 
 | |
| #ifndef PVR_DEVICE_INFO_H
 | |
| #define PVR_DEVICE_INFO_H
 | |
| 
 | |
| #include <linux/types.h>
 | |
| 
 | |
| struct pvr_device;
 | |
| 
 | |
| /*
 | |
|  * struct pvr_device_features - Hardware feature information
 | |
|  */
 | |
| struct pvr_device_features {
 | |
| 	bool has_axi_acelite;
 | |
| 	bool has_cdm_control_stream_format;
 | |
| 	bool has_cluster_grouping;
 | |
| 	bool has_common_store_size_in_dwords;
 | |
| 	bool has_compute;
 | |
| 	bool has_compute_morton_capable;
 | |
| 	bool has_compute_overlap;
 | |
| 	bool has_coreid_per_os;
 | |
| 	bool has_dynamic_dust_power;
 | |
| 	bool has_ecc_rams;
 | |
| 	bool has_fb_cdc_v4;
 | |
| 	bool has_fbc_max_default_descriptors;
 | |
| 	bool has_fbc_max_large_descriptors;
 | |
| 	bool has_fbcdc;
 | |
| 	bool has_fbcdc_algorithm;
 | |
| 	bool has_fbcdc_architecture;
 | |
| 	bool has_gpu_multicore_support;
 | |
| 	bool has_gpu_virtualisation;
 | |
| 	bool has_gs_rta_support;
 | |
| 	bool has_irq_per_os;
 | |
| 	bool has_isp_max_tiles_in_flight;
 | |
| 	bool has_isp_samples_per_pixel;
 | |
| 	bool has_isp_zls_d24_s8_packing_ogl_mode;
 | |
| 	bool has_layout_mars;
 | |
| 	bool has_max_partitions;
 | |
| 	bool has_meta;
 | |
| 	bool has_meta_coremem_size;
 | |
| 	bool has_mips;
 | |
| 	bool has_num_clusters;
 | |
| 	bool has_num_isp_ipp_pipes;
 | |
| 	bool has_num_osids;
 | |
| 	bool has_num_raster_pipes;
 | |
| 	bool has_pbe2_in_xe;
 | |
| 	bool has_pbvnc_coreid_reg;
 | |
| 	bool has_perfbus;
 | |
| 	bool has_perf_counter_batch;
 | |
| 	bool has_phys_bus_width;
 | |
| 	bool has_riscv_fw_processor;
 | |
| 	bool has_roguexe;
 | |
| 	bool has_s7_top_infrastructure;
 | |
| 	bool has_simple_internal_parameter_format;
 | |
| 	bool has_simple_internal_parameter_format_v2;
 | |
| 	bool has_simple_parameter_format_version;
 | |
| 	bool has_slc_banks;
 | |
| 	bool has_slc_cache_line_size_bits;
 | |
| 	bool has_slc_size_configurable;
 | |
| 	bool has_slc_size_in_kilobytes;
 | |
| 	bool has_soc_timer;
 | |
| 	bool has_sys_bus_secure_reset;
 | |
| 	bool has_tessellation;
 | |
| 	bool has_tile_region_protection;
 | |
| 	bool has_tile_size_x;
 | |
| 	bool has_tile_size_y;
 | |
| 	bool has_tla;
 | |
| 	bool has_tpu_cem_datamaster_global_registers;
 | |
| 	bool has_tpu_dm_global_registers;
 | |
| 	bool has_tpu_filtering_mode_control;
 | |
| 	bool has_usc_min_output_registers_per_pix;
 | |
| 	bool has_vdm_drawindirect;
 | |
| 	bool has_vdm_object_level_lls;
 | |
| 	bool has_virtual_address_space_bits;
 | |
| 	bool has_watchdog_timer;
 | |
| 	bool has_workgroup_protection;
 | |
| 	bool has_xe_architecture;
 | |
| 	bool has_xe_memory_hierarchy;
 | |
| 	bool has_xe_tpu2;
 | |
| 	bool has_xpu_max_regbanks_addr_width;
 | |
| 	bool has_xpu_max_slaves;
 | |
| 	bool has_xpu_register_broadcast;
 | |
| 	bool has_xt_top_infrastructure;
 | |
| 	bool has_zls_subtile;
 | |
| 
 | |
| 	u64 cdm_control_stream_format;
 | |
| 	u64 common_store_size_in_dwords;
 | |
| 	u64 ecc_rams;
 | |
| 	u64 fbc_max_default_descriptors;
 | |
| 	u64 fbc_max_large_descriptors;
 | |
| 	u64 fbcdc;
 | |
| 	u64 fbcdc_algorithm;
 | |
| 	u64 fbcdc_architecture;
 | |
| 	u64 isp_max_tiles_in_flight;
 | |
| 	u64 isp_samples_per_pixel;
 | |
| 	u64 layout_mars;
 | |
| 	u64 max_partitions;
 | |
| 	u64 meta;
 | |
| 	u64 meta_coremem_size;
 | |
| 	u64 num_clusters;
 | |
| 	u64 num_isp_ipp_pipes;
 | |
| 	u64 num_osids;
 | |
| 	u64 num_raster_pipes;
 | |
| 	u64 phys_bus_width;
 | |
| 	u64 simple_parameter_format_version;
 | |
| 	u64 slc_banks;
 | |
| 	u64 slc_cache_line_size_bits;
 | |
| 	u64 slc_size_in_kilobytes;
 | |
| 	u64 tile_size_x;
 | |
| 	u64 tile_size_y;
 | |
| 	u64 usc_min_output_registers_per_pix;
 | |
| 	u64 virtual_address_space_bits;
 | |
| 	u64 xe_architecture;
 | |
| 	u64 xpu_max_regbanks_addr_width;
 | |
| 	u64 xpu_max_slaves;
 | |
| 	u64 xpu_register_broadcast;
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * struct pvr_device_quirks - Hardware quirk information
 | |
|  */
 | |
| struct pvr_device_quirks {
 | |
| 	bool has_brn44079;
 | |
| 	bool has_brn47217;
 | |
| 	bool has_brn48492;
 | |
| 	bool has_brn48545;
 | |
| 	bool has_brn49927;
 | |
| 	bool has_brn50767;
 | |
| 	bool has_brn51764;
 | |
| 	bool has_brn62269;
 | |
| 	bool has_brn63142;
 | |
| 	bool has_brn63553;
 | |
| 	bool has_brn66011;
 | |
| 	bool has_brn71242;
 | |
| };
 | |
| 
 | |
| /*
 | |
|  * struct pvr_device_enhancements - Hardware enhancement information
 | |
|  */
 | |
| struct pvr_device_enhancements {
 | |
| 	bool has_ern35421;
 | |
| 	bool has_ern38020;
 | |
| 	bool has_ern38748;
 | |
| 	bool has_ern42064;
 | |
| 	bool has_ern42290;
 | |
| 	bool has_ern42606;
 | |
| 	bool has_ern47025;
 | |
| 	bool has_ern57596;
 | |
| };
 | |
| 
 | |
| void pvr_device_info_set_quirks(struct pvr_device *pvr_dev, const u64 *bitmask,
 | |
| 				u32 bitmask_len);
 | |
| void pvr_device_info_set_enhancements(struct pvr_device *pvr_dev, const u64 *bitmask,
 | |
| 				      u32 bitmask_len);
 | |
| int pvr_device_info_set_features(struct pvr_device *pvr_dev, const u64 *features, u32 features_size,
 | |
| 				 u32 feature_param_size);
 | |
| 
 | |
| /*
 | |
|  * Meta cores
 | |
|  *
 | |
|  * These are the values for the 'meta' feature when the feature is present
 | |
|  * (as per &struct pvr_device_features)/
 | |
|  */
 | |
| #define PVR_META_MTP218 (1)
 | |
| #define PVR_META_MTP219 (2)
 | |
| #define PVR_META_LTP218 (3)
 | |
| #define PVR_META_LTP217 (4)
 | |
| 
 | |
| enum {
 | |
| 	PVR_FEATURE_CDM_USER_MODE_QUEUE,
 | |
| 	PVR_FEATURE_CLUSTER_GROUPING,
 | |
| 	PVR_FEATURE_COMPUTE_MORTON_CAPABLE,
 | |
| 	PVR_FEATURE_FB_CDC_V4,
 | |
| 	PVR_FEATURE_GPU_MULTICORE_SUPPORT,
 | |
| 	PVR_FEATURE_ISP_ZLS_D24_S8_PACKING_OGL_MODE,
 | |
| 	PVR_FEATURE_REQUIRES_FB_CDC_ZLS_SETUP,
 | |
| 	PVR_FEATURE_S7_TOP_INFRASTRUCTURE,
 | |
| 	PVR_FEATURE_TESSELLATION,
 | |
| 	PVR_FEATURE_TPU_DM_GLOBAL_REGISTERS,
 | |
| 	PVR_FEATURE_VDM_DRAWINDIRECT,
 | |
| 	PVR_FEATURE_VDM_OBJECT_LEVEL_LLS,
 | |
| 	PVR_FEATURE_ZLS_SUBTILE,
 | |
| };
 | |
| 
 | |
| #endif /* PVR_DEVICE_INFO_H */
 |