[PATCH 1/3] drm/i915/guc: Use FAST_REQUEST for non-blocking H2G calls

John Harrison john.c.harrison at intel.com
Tue May 30 21:02:07 UTC 2023


On 5/26/2023 16:55, John.C.Harrison at Intel.com wrote:
> From: Michal Wajdeczko <michal.wajdeczko at intel.com>
>
> In addition to the already defined REQUEST HXG message format,
> which is used when sender expects some confirmation or data,
> HXG protocol includes definition of the FAST REQUEST message,
> that may be used when sender does not expect any useful data
> to be returned.
>
> Using this instead of GUC_HXG_TYPE_EVENT for non-blocking CTB requests
> will allow GuC to send back GUC_HXG_TYPE_RESPONSE_FAILURE in case of
> errors.
>
> Note that it is not possible to return such errors to the caller,
> since this is for non-blocking calls and the related fence is not
> stored. Instead such messages are treated as unexpected, which will
> give an indication of potential GuC misprogramming that warrants extra
> debugging effort.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
> Signed-off-by: John Harrison <John.C.Harrison at Intel.com>
Reviewed-by: John Harrison <John.C.Harrison at Intel.com>

> ---
>   .../gpu/drm/i915/gt/uc/abi/guc_messages_abi.h | 30 +++++++++++++++++++
>   drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c     |  6 ++--
>   2 files changed, 33 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h b/drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h
> index 7d5ba4d97d708..98eb4f46572b9 100644
> --- a/drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h
> +++ b/drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h
> @@ -24,6 +24,7 @@
>    *  |   | 30:28 | **TYPE** - message type                                      |
>    *  |   |       |   - _`GUC_HXG_TYPE_REQUEST` = 0                              |
>    *  |   |       |   - _`GUC_HXG_TYPE_EVENT` = 1                                |
> + *  |   |       |   - _`GUC_HXG_TYPE_FAST_REQUEST` = 2                         |
>    *  |   |       |   - _`GUC_HXG_TYPE_NO_RESPONSE_BUSY` = 3                     |
>    *  |   |       |   - _`GUC_HXG_TYPE_NO_RESPONSE_RETRY` = 5                    |
>    *  |   |       |   - _`GUC_HXG_TYPE_RESPONSE_FAILURE` = 6                     |
> @@ -46,6 +47,7 @@
>   #define GUC_HXG_MSG_0_TYPE			(0x7 << 28)
>   #define   GUC_HXG_TYPE_REQUEST			0u
>   #define   GUC_HXG_TYPE_EVENT			1u
> +#define   GUC_HXG_TYPE_FAST_REQUEST		2u
>   #define   GUC_HXG_TYPE_NO_RESPONSE_BUSY		3u
>   #define   GUC_HXG_TYPE_NO_RESPONSE_RETRY	5u
>   #define   GUC_HXG_TYPE_RESPONSE_FAILURE		6u
> @@ -89,6 +91,34 @@
>   #define GUC_HXG_REQUEST_MSG_0_ACTION		(0xffff << 0)
>   #define GUC_HXG_REQUEST_MSG_n_DATAn		GUC_HXG_MSG_n_PAYLOAD
>   
> +/**
> + * DOC: HXG Fast Request
> + *
> + * The `HXG Request`_ message should be used to initiate asynchronous activity
> + * for which confirmation or return data is not expected.
> + *
> + * If confirmation is required then `HXG Request`_ shall be used instead.
> + *
> + * The recipient of this message may only use `HXG Failure`_ message if it was
> + * unable to accept this request (like invalid data).
> + *
> + * Format of `HXG Fast Request`_ message is same as `HXG Request`_ except @TYPE.
> + *
> + *  +---+-------+--------------------------------------------------------------+
> + *  |   | Bits  | Description                                                  |
> + *  +===+=======+==============================================================+
> + *  | 0 |    31 | ORIGIN - see `HXG Message`_                                  |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   | 30:28 | TYPE = `GUC_HXG_TYPE_FAST_REQUEST`_                          |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   | 27:16 | DATA0 - see `HXG Request`_                                   |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   |  15:0 | ACTION - see `HXG Request`_                                  |
> + *  +---+-------+--------------------------------------------------------------+
> + *  |...|       | DATAn - see `HXG Request`_                                   |
> + *  +---+-------+--------------------------------------------------------------+
> + */
> +
>   /**
>    * DOC: HXG Event
>    *
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
> index a22e33f37cae6..af52ed4ffc7fb 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c
> @@ -426,11 +426,11 @@ static int ct_write(struct intel_guc_ct *ct,
>   		 FIELD_PREP(GUC_CTB_MSG_0_NUM_DWORDS, len) |
>   		 FIELD_PREP(GUC_CTB_MSG_0_FENCE, fence);
>   
> -	type = (flags & INTEL_GUC_CT_SEND_NB) ? GUC_HXG_TYPE_EVENT :
> +	type = (flags & INTEL_GUC_CT_SEND_NB) ? GUC_HXG_TYPE_FAST_REQUEST :
>   		GUC_HXG_TYPE_REQUEST;
>   	hxg = FIELD_PREP(GUC_HXG_MSG_0_TYPE, type) |
> -		FIELD_PREP(GUC_HXG_EVENT_MSG_0_ACTION |
> -			   GUC_HXG_EVENT_MSG_0_DATA0, action[0]);
> +		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION |
> +			   GUC_HXG_REQUEST_MSG_0_DATA0, action[0]);
>   
>   	CT_DEBUG(ct, "writing (tail %u) %*ph %*ph %*ph\n",
>   		 tail, 4, &header, 4, &hxg, 4 * (len - 1), &action[1]);



More information about the dri-devel mailing list