[PATCH 1/2] drm/xe/guc: Return CTB HXG response DATA0 if no buffer provided

Matthew Brost matthew.brost at intel.com
Fri Jan 12 23:10:22 UTC 2024


On Fri, Jan 12, 2024 at 11:25:53AM +0100, Michal Wajdeczko wrote:
> Most of the synchronous GuC HXG action responses are defined in
> such a way that only mandatory DATA0 from the HXG header is used
> and only in few cases it is more than MBZ (must be zero).
> 
> For those cases where HXG action returns just DATA0, return that
> value if caller didn't provide buffer for the full response.
> 
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
> Cc: Matthew Brost <matthew.brost at intel.com>

Reviewed-by: Matthew Brost <matthew.brost at intel.com>

> ---
>  drivers/gpu/drm/xe/xe_guc_ct.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
> index b2cc3f993eb6..4ae1a0cd9537 100644
> --- a/drivers/gpu/drm/xe/xe_guc_ct.c
> +++ b/drivers/gpu/drm/xe/xe_guc_ct.c
> @@ -33,6 +33,7 @@
>  struct g2h_fence {
>  	u32 *response_buffer;
>  	u32 seqno;
> +	u32 response_data;
>  	u16 response_len;
>  	u16 error;
>  	u16 hint;
> @@ -45,6 +46,7 @@ struct g2h_fence {
>  static void g2h_fence_init(struct g2h_fence *g2h_fence, u32 *response_buffer)
>  {
>  	g2h_fence->response_buffer = response_buffer;
> +	g2h_fence->response_data = 0;
>  	g2h_fence->response_len = 0;
>  	g2h_fence->fail = false;
>  	g2h_fence->retry = false;
> @@ -780,7 +782,7 @@ static int guc_ct_send_recv(struct xe_guc_ct *ct, const u32 *action, u32 len,
>  		ret = -EIO;
>  	}
>  
> -	return ret > 0 ? response_buffer ? g2h_fence.response_len : 0 : ret;
> +	return ret > 0 ? response_buffer ? g2h_fence.response_len : g2h_fence.response_data : ret;
>  }
>  
>  int xe_guc_ct_send_recv(struct xe_guc_ct *ct, const u32 *action, u32 len,
> @@ -877,6 +879,8 @@ static int parse_g2h_response(struct xe_guc_ct *ct, u32 *msg, u32 len)
>  	} else if (g2h_fence->response_buffer) {
>  		g2h_fence->response_len = hxg_len;
>  		memcpy(g2h_fence->response_buffer, hxg, hxg_len * sizeof(u32));
> +	} else {
> +		g2h_fence->response_data = FIELD_GET(GUC_HXG_RESPONSE_MSG_0_DATA0, hxg[0]);
>  	}
>  
>  	g2h_release_space(ct, GUC_CTB_HXG_MSG_MAX_LEN);
> 
> base-commit: 10923212b018be3edb1c21b75f432c6cf3f50c6b
> -- 
> 2.25.1
> 


More information about the Intel-xe mailing list