[PATCH v2 7/7] drm/xe: Simplify setting release info in xe->info

Matt Roper matthew.d.roper at intel.com
Fri Feb 21 21:52:03 UTC 2025


On Fri, Feb 21, 2025 at 03:51:46PM -0300, Gustavo Sousa wrote:
> Now that we have all IPs being described via struct xe_ip, where release
> information (version and name) is represented in a single struct type,
> we can extract duplicated logic from handle_pre_gmdid() and
> handle_gmdid() and apply it in the body of xe_info_init().
> 
> With this change, there is no point in keeping handle_pre_gmdid()
> anymore, so we just remove it and inline the assignment of
> {graphics,media}_ip.
> 
> Signed-off-by: Gustavo Sousa <gustavo.sousa at intel.com>

Reviewed-by: Matt Roper <matthew.d.roper at intel.com>

> ---
>  drivers/gpu/drm/xe/xe_pci.c | 71 ++++++++++++++++++---------------------------
>  1 file changed, 29 insertions(+), 42 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
> index 55162296e01873681af006c3102a188ee9a9d100..f010c9471a01fadb7ff2206ec20b1aa1072f6767 100644
> --- a/drivers/gpu/drm/xe/xe_pci.c
> +++ b/drivers/gpu/drm/xe/xe_pci.c
> @@ -515,62 +515,35 @@ static void read_gmdid(struct xe_device *xe, enum xe_gmdid_type type, u32 *ver,
>  }
>  
>  /*
> - * Pre-GMD_ID platform: device descriptor already points to the appropriate
> - * graphics descriptor. Simply forward the description and calculate the version
> - * appropriately. "graphics" should be present in all such platforms, while
> - * media is optional.
> - */
> -static void handle_pre_gmdid(struct xe_device *xe,
> -			     const struct xe_device_desc *desc,
> -			     const struct xe_graphics_desc **graphics,
> -			     const struct xe_media_desc **media)
> -{
> -	xe->info.graphics_verx100 = desc->pre_gmdid_graphics_ip->verx100;
> -	xe->info.graphics_name = desc->pre_gmdid_graphics_ip->name;
> -	*graphics = desc->pre_gmdid_graphics_ip->desc;
> -
> -	if (desc->pre_gmdid_media_ip) {
> -		xe->info.media_verx100 = desc->pre_gmdid_media_ip->verx100;
> -		xe->info.media_name = desc->pre_gmdid_media_ip->name;
> -		*media = desc->pre_gmdid_media_ip->desc;
> -	} else {
> -		xe->info.media_name = "none";
> -		*media = NULL;
> -	}
> -
> -}
> -
> -/*
> - * GMD_ID platform: read IP version from hardware and select graphics descriptor
> + * Read IP version from hardware and select graphics/media IP descriptors
>   * based on the result.
>   */
>  static void handle_gmdid(struct xe_device *xe,
> -			 const struct xe_graphics_desc **graphics,
> -			 const struct xe_media_desc **media,
> +			 const struct xe_ip **graphics_ip,
> +			 const struct xe_ip **media_ip,
>  			 u32 *graphics_revid,
>  			 u32 *media_revid)
>  {
>  	u32 ver;
>  
> +	*graphics_ip = NULL;
> +	*media_ip = NULL;
> +
>  	read_gmdid(xe, GMDID_GRAPHICS, &ver, graphics_revid);
>  
>  	for (int i = 0; i < ARRAY_SIZE(graphics_ips); i++) {
>  		if (ver == graphics_ips[i].verx100) {
> -			xe->info.graphics_verx100 = ver;
> -			xe->info.graphics_name = graphics_ips[i].name;
> -			*graphics = graphics_ips[i].desc;
> +			*graphics_ip = &graphics_ips[i];
>  
>  			break;
>  		}
>  	}
>  
> -	if (!xe->info.graphics_verx100) {
> +	if (!*graphics_ip) {
>  		drm_err(&xe->drm, "Hardware reports unknown graphics version %u.%02u\n",
>  			ver / 100, ver % 100);
>  	}
>  
> -	xe->info.media_name = "none";
> -
>  	read_gmdid(xe, GMDID_MEDIA, &ver, media_revid);
>  	/* Media may legitimately be fused off / not present */
>  	if (ver == 0)
> @@ -578,15 +551,13 @@ static void handle_gmdid(struct xe_device *xe,
>  
>  	for (int i = 0; i < ARRAY_SIZE(media_ips); i++) {
>  		if (ver == media_ips[i].verx100) {
> -			xe->info.media_verx100 = ver;
> -			xe->info.media_name = media_ips[i].name;
> -			*media = media_ips[i].desc;
> +			*media_ip = &media_ips[i];
>  
>  			break;
>  		}
>  	}
>  
> -	if (!xe->info.media_verx100) {
> +	if (!*media_ip) {
>  		drm_err(&xe->drm, "Hardware reports unknown media version %u.%02u\n",
>  			ver / 100, ver % 100);
>  	}
> @@ -640,6 +611,8 @@ static int xe_info_init(struct xe_device *xe,
>  			const struct xe_device_desc *desc)
>  {
>  	u32 graphics_gmdid_revid = 0, media_gmdid_revid = 0;
> +	const struct xe_ip *graphics_ip;
> +	const struct xe_ip *media_ip;
>  	const struct xe_graphics_desc *graphics_desc;
>  	const struct xe_media_desc *media_desc;
>  	struct xe_tile *tile;
> @@ -654,11 +627,12 @@ static int xe_info_init(struct xe_device *xe,
>  	 * versions are simply derived from that.
>  	 */
>  	if (desc->pre_gmdid_graphics_ip) {
> -		handle_pre_gmdid(xe, desc, &graphics_desc, &media_desc);
> +		graphics_ip = desc->pre_gmdid_graphics_ip;
> +		media_ip = desc->pre_gmdid_media_ip;
>  		xe->info.step = xe_step_pre_gmdid_get(xe);
>  	} else {
>  		xe_assert(xe, !desc->pre_gmdid_media_ip);
> -		handle_gmdid(xe, &graphics_desc, &media_desc,
> +		handle_gmdid(xe, &graphics_ip, &media_ip,
>  			     &graphics_gmdid_revid, &media_gmdid_revid);
>  		xe->info.step = xe_step_gmdid_get(xe,
>  						  graphics_gmdid_revid,
> @@ -670,9 +644,22 @@ static int xe_info_init(struct xe_device *xe,
>  	 * error and we should abort driver load.  Failing to detect media
>  	 * IP is non-fatal; we'll just proceed without enabling media support.
>  	 */
> -	if (!graphics_desc)
> +	if (!graphics_ip)
>  		return -ENODEV;
>  
> +	xe->info.graphics_verx100 = graphics_ip->verx100;
> +	xe->info.graphics_name = graphics_ip->name;
> +	graphics_desc = graphics_ip->desc;
> +
> +	if (media_ip) {
> +		xe->info.media_verx100 = media_ip->verx100;
> +		xe->info.media_name = media_ip->name;
> +		media_desc = media_ip->desc;
> +	} else {
> +		xe->info.media_name = "none";
> +		media_desc = NULL;
> +	}
> +
>  	xe->info.vram_flags = graphics_desc->vram_flags;
>  	xe->info.va_bits = graphics_desc->va_bits;
>  	xe->info.vm_max_level = graphics_desc->vm_max_level;
> 
> -- 
> 2.48.1
> 

-- 
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation


More information about the Intel-xe mailing list