diff mbox series

[v2,07/10] drm/i915/guc: Apply new uC status tracking to GuC submission as well

Message ID 20200203232838.14822-8-daniele.ceraolospurio@intel.com (mailing list archive)
State New, archived
Headers show
Series Commit early to GuC | expand

Commit Message

Daniele Ceraolo Spurio Feb. 3, 2020, 11:28 p.m. UTC
To be able to differentiate the before and after of our commitment to
GuC submission, which will be used in follow-up patches to early set-up
the submission structures.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/i915/gt/uc/intel_guc.c        | 12 ++++----
 drivers/gpu/drm/i915/gt/uc/intel_guc.h        | 17 +++++++++--
 .../gpu/drm/i915/gt/uc/intel_guc_submission.c |  9 ++----
 drivers/gpu/drm/i915/gt/uc/intel_uc.c         | 14 ++++-----
 drivers/gpu/drm/i915/gt/uc/intel_uc.h         | 29 +++++++------------
 drivers/gpu/drm/i915/gvt/scheduler.c          |  2 +-
 drivers/gpu/drm/i915/i915_drv.h               |  6 ----
 drivers/gpu/drm/i915/intel_gvt.c              |  2 +-
 8 files changed, 42 insertions(+), 49 deletions(-)

Comments

Michal Wajdeczko Feb. 4, 2020, 6:06 p.m. UTC | #1
On Tue, 04 Feb 2020 00:28:35 +0100, Daniele Ceraolo Spurio  
<daniele.ceraolospurio@intel.com> wrote:

> To be able to differentiate the before and after of our commitment to
> GuC submission, which will be used in follow-up patches to early set-up
> the submission structures.
>
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
> ---
>  drivers/gpu/drm/i915/gt/uc/intel_guc.c        | 12 ++++----
>  drivers/gpu/drm/i915/gt/uc/intel_guc.h        | 17 +++++++++--
>  .../gpu/drm/i915/gt/uc/intel_guc_submission.c |  9 ++----
>  drivers/gpu/drm/i915/gt/uc/intel_uc.c         | 14 ++++-----
>  drivers/gpu/drm/i915/gt/uc/intel_uc.h         | 29 +++++++------------
>  drivers/gpu/drm/i915/gvt/scheduler.c          |  2 +-
>  drivers/gpu/drm/i915/i915_drv.h               |  6 ----
>  drivers/gpu/drm/i915/intel_gvt.c              |  2 +-
>  8 files changed, 42 insertions(+), 49 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c  
> b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> index c4c1523da7a6..f96d1bdf4bf2 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
> @@ -207,7 +207,7 @@ static u32 guc_ctl_feature_flags(struct intel_guc  
> *guc)
>  {
>  	u32 flags = 0;
> -	if (!intel_guc_is_submission_supported(guc))
> +	if (!intel_guc_submission_is_used(guc))
>  		flags |= GUC_CTL_DISABLE_SCHEDULER;
> 	return flags;
> @@ -217,7 +217,7 @@ static u32 guc_ctl_ctxinfo_flags(struct intel_guc  
> *guc)
>  {
>  	u32 flags = 0;
> -	if (intel_guc_is_submission_supported(guc)) {
> +	if (intel_guc_submission_is_used(guc)) {
>  		u32 ctxnum, base;
> 		base = intel_guc_ggtt_offset(guc, guc->stage_desc_pool);
> @@ -348,7 +348,7 @@ int intel_guc_init(struct intel_guc *guc)
>  	if (ret)
>  		goto err_ads;
> -	if (intel_guc_is_submission_supported(guc)) {
> +	if (intel_guc_submission_is_used(guc)) {
>  		/*
>  		 * This is stuff we need to have available at fw load time
>  		 * if we are planning to enable submission later
> @@ -389,7 +389,7 @@ void intel_guc_fini(struct intel_guc *guc)
> 	i915_ggtt_disable_guc(gt->ggtt);
> -	if (intel_guc_is_submission_supported(guc))
> +	if (intel_guc_submission_is_used(guc))
>  		intel_guc_submission_fini(guc);
> 	intel_guc_ct_fini(&guc->ct);
> @@ -544,7 +544,7 @@ int intel_guc_suspend(struct intel_guc *guc)
>  	 * If GuC communication is enabled but submission is not supported,
>  	 * we do not need to suspend the GuC.
>  	 */
> -	if (!intel_guc_submission_is_enabled(guc))
> +	if (!intel_guc_submission_is_used(guc) || !intel_guc_is_ready(guc))
>  		return 0;
> 	/*
> @@ -609,7 +609,7 @@ int intel_guc_resume(struct intel_guc *guc)
>  	 * we do not need to resume the GuC but we do need to enable the
>  	 * GuC communication on resume (above).
>  	 */
> -	if (!intel_guc_submission_is_enabled(guc))
> +	if (!intel_guc_submission_is_used(guc) || !intel_guc_is_ready(guc))
>  		return 0;
> 	return intel_guc_send(guc, action, ARRAY_SIZE(action));
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.h  
> b/drivers/gpu/drm/i915/gt/uc/intel_guc.h
> index f6b33745ae0b..1aba4d2c15b3 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.h
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.h
> @@ -39,7 +39,7 @@ struct intel_guc {
>  		void (*disable)(struct intel_guc *guc);
>  	} interrupts;
> -	bool submission_supported;
> +	bool submission_selected;
> 	struct i915_vma *ads_vma;
>  	struct __guc_ads_blob *ads_blob;
> @@ -172,9 +172,20 @@ static inline int intel_guc_sanitize(struct  
> intel_guc *guc)
>  	return 0;
>  }
> -static inline bool intel_guc_is_submission_supported(struct intel_guc  
> *guc)
> +static inline bool intel_guc_submission_is_supported(struct intel_guc  
> *guc)
>  {
> -	return guc->submission_supported;
> +	/* XXX: GuC submission is unavailable for now */
> +	return false;
> +}
> +
> +static inline bool intel_guc_submission_is_wanted(struct intel_guc *guc)
> +{
> +	return guc->submission_selected;
> +}
> +
> +static inline bool intel_guc_submission_is_used(struct intel_guc *guc)
> +{
> +	return intel_guc_is_used(guc) && intel_guc_submission_is_wanted(guc);
>  }

can we keep all intel_guc_submission_xx() functions in  
intel_guc_submission.h?
or is it circular-dependency issue ? but these functions are not on  
hot-path so
maybe can be moved to .c to break that dependency ?

or is it due to auto generator changes below ?

> static inline void intel_guc_enable_msg(struct intel_guc *guc, u32 mask)
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c  
> b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> index 9e42324fdecd..1beaa77f9bb6 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
> @@ -660,12 +660,9 @@ void intel_guc_submission_disable(struct intel_guc  
> *guc)
>  	guc_proc_desc_fini(guc);
>  }
> -static bool __guc_submission_support(struct intel_guc *guc)
> +static bool __guc_submission_selected(struct intel_guc *guc)
>  {
> -	/* XXX: GuC submission is unavailable for now */
> -	return false;
> -
> -	if (!intel_guc_is_supported(guc))
> +	if (!intel_guc_submission_is_supported(guc))
>  		return false;
> 	return i915_modparams.enable_guc & ENABLE_GUC_SUBMISSION;
> @@ -673,7 +670,7 @@ static bool __guc_submission_support(struct  
> intel_guc *guc)
> void intel_guc_submission_init_early(struct intel_guc *guc)
>  {
> -	guc->submission_supported = __guc_submission_support(guc);
> +	guc->submission_selected = __guc_submission_selected(guc);
>  }
> bool intel_engine_in_guc_submission_mode(const struct intel_engine_cs  
> *engine)
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.c  
> b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
> index 654d7c0c757a..175fa6361ff2 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc.c
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
> @@ -49,7 +49,7 @@ static void __confirm_options(struct intel_uc *uc)
>  			     "enable_guc=%d (guc:%s submission:%s huc:%s)\n",
>  			     i915_modparams.enable_guc,
>  			     yesno(intel_uc_wants_guc(uc)),
> -			     yesno(intel_uc_uses_guc_submission(uc)),
> +			     yesno(intel_uc_wants_guc_submission(uc)),
>  			     yesno(intel_uc_wants_huc(uc)));
> 	if (i915_modparams.enable_guc == -1)
> @@ -57,7 +57,7 @@ static void __confirm_options(struct intel_uc *uc)
> 	if (i915_modparams.enable_guc == 0) {
>  		GEM_BUG_ON(intel_uc_wants_guc(uc));
> -		GEM_BUG_ON(intel_uc_uses_guc_submission(uc));
> +		GEM_BUG_ON(intel_uc_wants_guc_submission(uc));
>  		GEM_BUG_ON(intel_uc_wants_huc(uc));
>  		return;
>  	}
> @@ -285,7 +285,7 @@ static void __uc_init(struct intel_uc *uc)
>  		return;
> 	/* XXX: GuC submission is unavailable for now */
> -	GEM_BUG_ON(intel_uc_supports_guc_submission(uc));
> +	GEM_BUG_ON(intel_uc_uses_guc_submission(uc));
> 	ret = intel_guc_init(guc);
>  	if (ret) {
> @@ -410,7 +410,7 @@ static int __uc_init_hw(struct intel_uc *uc)
>  	if (!intel_uc_fw_is_available(&guc->fw)) {
>  		ret = __uc_check_hw(uc) ||
>  		      intel_uc_fw_is_overridden(&guc->fw) ||
> -		      intel_uc_supports_guc_submission(uc) ?
> +		      intel_uc_wants_guc_submission(uc) ?
>  		      intel_uc_fw_status_to_error(guc->fw.status) : 0;
>  		goto err_out;
>  	}
> @@ -462,14 +462,14 @@ static int __uc_init_hw(struct intel_uc *uc)
>  	if (ret)
>  		goto err_communication;
> -	if (intel_uc_supports_guc_submission(uc))
> +	if (intel_uc_uses_guc_submission(uc))
>  		intel_guc_submission_enable(guc);
> 	dev_info(i915->drm.dev, "%s firmware %s version %u.%u %s:%s\n",
>  		 intel_uc_fw_type_repr(INTEL_UC_FW_TYPE_GUC), guc->fw.path,
>  		 guc->fw.major_ver_found, guc->fw.minor_ver_found,
>  		 "submission",
> -		 enableddisabled(intel_uc_supports_guc_submission(uc)));
> +		 enableddisabled(intel_uc_uses_guc_submission(uc)));
> 	if (intel_uc_uses_huc(uc)) {
>  		dev_info(i915->drm.dev, "%s firmware %s version %u.%u %s:%s\n",
> @@ -511,7 +511,7 @@ static void __uc_fini_hw(struct intel_uc *uc)
>  	if (!intel_guc_is_fw_running(guc))
>  		return;
> -	if (intel_uc_supports_guc_submission(uc))
> +	if (intel_uc_uses_guc_submission(uc))
>  		intel_guc_submission_disable(guc);
> 	if (guc_communication_enabled(guc))
> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.h  
> b/drivers/gpu/drm/i915/gt/uc/intel_uc.h
> index a41aaf353f88..35ce8a6be88b 100644
> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc.h
> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.h
> @@ -61,33 +61,24 @@ int intel_uc_runtime_resume(struct intel_uc *uc);
>   * - In use: wanted + firmware found on the system and successfully  
> fetched.
>   */
> -#define __uc_state_checker(x, state, required) \
> -static inline bool intel_uc_##state##_##x(struct intel_uc *uc) \
> +#define __uc_state_checker(x, func, state, required) \
> +static inline bool intel_uc_##state##_##func(struct intel_uc *uc) \
>  { \
> -	return intel_##x##_is_##required(&uc->x); \
> +	return intel_##func##_is_##required(&uc->x); \
>  }
> -#define uc_state_checkers(x) \
> -__uc_state_checker(x, supports, supported) \
> -__uc_state_checker(x, wants, wanted) \
> -__uc_state_checker(x, uses, used)
> +#define uc_state_checkers(x, func) \
> +__uc_state_checker(x, func, supports, supported) \
> +__uc_state_checker(x, func, wants, wanted) \
> +__uc_state_checker(x, func, uses, used)
> -uc_state_checkers(guc);
> -uc_state_checkers(huc);
> +uc_state_checkers(guc, guc);
> +uc_state_checkers(huc, huc);
> +uc_state_checkers(guc, guc_submission);
> #undef uc_state_checkers
>  #undef __uc_state_checker
> -static inline bool intel_uc_supports_guc_submission(struct intel_uc *uc)
> -{
> -	return intel_guc_is_submission_supported(&uc->guc);
> -}
> -
> -static inline bool intel_uc_uses_guc_submission(struct intel_uc *uc)
> -{
> -	return intel_guc_is_submission_supported(&uc->guc);
> -}
> -
>  #define intel_uc_ops_function(_NAME, _OPS, _TYPE, _RET) \
>  static inline _TYPE intel_uc_##_NAME(struct intel_uc *uc) \
>  { \
> diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c  
> b/drivers/gpu/drm/i915/gvt/scheduler.c
> index 5fe00ee6bd1b..e8c0885df978 100644
> --- a/drivers/gpu/drm/i915/gvt/scheduler.c
> +++ b/drivers/gpu/drm/i915/gvt/scheduler.c
> @@ -1247,7 +1247,7 @@ int intel_vgpu_setup_submission(struct intel_vgpu  
> *vgpu)
>  		intel_context_set_single_submission(ce);
> 		/* Max ring buffer size */
> -		if (!intel_uc_uses_guc_submission(&engine->gt->uc)) {
> +		if (!intel_uc_wants_guc_submission(&engine->gt->uc)) {
>  			const unsigned int ring_size = 512 * SZ_4K;
> 			ce->ring = __intel_context_ring_size(ring_size);
> diff --git a/drivers/gpu/drm/i915/i915_drv.h  
> b/drivers/gpu/drm/i915/i915_drv.h
> index 0a45240af38d..d21039ba2b4f 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -2010,10 +2010,4 @@ i915_coherent_map_type(struct drm_i915_private  
> *i915)
>  	return HAS_LLC(i915) ? I915_MAP_WB : I915_MAP_WC;
>  }
> -static inline bool intel_guc_submission_is_enabled(struct intel_guc  
> *guc)
> -{
> -	return intel_guc_is_submission_supported(guc) &&
> -	       intel_guc_is_ready(guc);
> -}
> -
>  #endif
> diff --git a/drivers/gpu/drm/i915/intel_gvt.c  
> b/drivers/gpu/drm/i915/intel_gvt.c
> index 5c189bc31da5..e73fd752adef 100644
> --- a/drivers/gpu/drm/i915/intel_gvt.c
> +++ b/drivers/gpu/drm/i915/intel_gvt.c
> @@ -105,7 +105,7 @@ int intel_gvt_init(struct drm_i915_private *dev_priv)
>  		return 0;
>  	}
> -	if (intel_uc_uses_guc_submission(&dev_priv->gt.uc)) {
> +	if (intel_uc_wants_guc_submission(&dev_priv->gt.uc)) {
>  		drm_err(&dev_priv->drm,
>  			"i915 GVT-g loading failed due to Graphics virtualization is not yet  
> supported with GuC submission\n");
>  		return -EIO;
Daniele Ceraolo Spurio Feb. 4, 2020, 9:24 p.m. UTC | #2
On 2/4/20 10:06 AM, Michal Wajdeczko wrote:
> On Tue, 04 Feb 2020 00:28:35 +0100, Daniele Ceraolo Spurio 
> <daniele.ceraolospurio@intel.com> wrote:
> 
>> To be able to differentiate the before and after of our commitment to
>> GuC submission, which will be used in follow-up patches to early set-up
>> the submission structures.
>>
>> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
>> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
>> ---
>>  drivers/gpu/drm/i915/gt/uc/intel_guc.c        | 12 ++++----
>>  drivers/gpu/drm/i915/gt/uc/intel_guc.h        | 17 +++++++++--
>>  .../gpu/drm/i915/gt/uc/intel_guc_submission.c |  9 ++----
>>  drivers/gpu/drm/i915/gt/uc/intel_uc.c         | 14 ++++-----
>>  drivers/gpu/drm/i915/gt/uc/intel_uc.h         | 29 +++++++------------
>>  drivers/gpu/drm/i915/gvt/scheduler.c          |  2 +-
>>  drivers/gpu/drm/i915/i915_drv.h               |  6 ----
>>  drivers/gpu/drm/i915/intel_gvt.c              |  2 +-
>>  8 files changed, 42 insertions(+), 49 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c 
>> b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
>> index c4c1523da7a6..f96d1bdf4bf2 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
>> @@ -207,7 +207,7 @@ static u32 guc_ctl_feature_flags(struct intel_guc 
>> *guc)
>>  {
>>      u32 flags = 0;
>> -    if (!intel_guc_is_submission_supported(guc))
>> +    if (!intel_guc_submission_is_used(guc))
>>          flags |= GUC_CTL_DISABLE_SCHEDULER;
>>     return flags;
>> @@ -217,7 +217,7 @@ static u32 guc_ctl_ctxinfo_flags(struct intel_guc 
>> *guc)
>>  {
>>      u32 flags = 0;
>> -    if (intel_guc_is_submission_supported(guc)) {
>> +    if (intel_guc_submission_is_used(guc)) {
>>          u32 ctxnum, base;
>>         base = intel_guc_ggtt_offset(guc, guc->stage_desc_pool);
>> @@ -348,7 +348,7 @@ int intel_guc_init(struct intel_guc *guc)
>>      if (ret)
>>          goto err_ads;
>> -    if (intel_guc_is_submission_supported(guc)) {
>> +    if (intel_guc_submission_is_used(guc)) {
>>          /*
>>           * This is stuff we need to have available at fw load time
>>           * if we are planning to enable submission later
>> @@ -389,7 +389,7 @@ void intel_guc_fini(struct intel_guc *guc)
>>     i915_ggtt_disable_guc(gt->ggtt);
>> -    if (intel_guc_is_submission_supported(guc))
>> +    if (intel_guc_submission_is_used(guc))
>>          intel_guc_submission_fini(guc);
>>     intel_guc_ct_fini(&guc->ct);
>> @@ -544,7 +544,7 @@ int intel_guc_suspend(struct intel_guc *guc)
>>       * If GuC communication is enabled but submission is not supported,
>>       * we do not need to suspend the GuC.
>>       */
>> -    if (!intel_guc_submission_is_enabled(guc))
>> +    if (!intel_guc_submission_is_used(guc) || !intel_guc_is_ready(guc))
>>          return 0;
>>     /*
>> @@ -609,7 +609,7 @@ int intel_guc_resume(struct intel_guc *guc)
>>       * we do not need to resume the GuC but we do need to enable the
>>       * GuC communication on resume (above).
>>       */
>> -    if (!intel_guc_submission_is_enabled(guc))
>> +    if (!intel_guc_submission_is_used(guc) || !intel_guc_is_ready(guc))
>>          return 0;
>>     return intel_guc_send(guc, action, ARRAY_SIZE(action));
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.h 
>> b/drivers/gpu/drm/i915/gt/uc/intel_guc.h
>> index f6b33745ae0b..1aba4d2c15b3 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc.h
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.h
>> @@ -39,7 +39,7 @@ struct intel_guc {
>>          void (*disable)(struct intel_guc *guc);
>>      } interrupts;
>> -    bool submission_supported;
>> +    bool submission_selected;
>>     struct i915_vma *ads_vma;
>>      struct __guc_ads_blob *ads_blob;
>> @@ -172,9 +172,20 @@ static inline int intel_guc_sanitize(struct 
>> intel_guc *guc)
>>      return 0;
>>  }
>> -static inline bool intel_guc_is_submission_supported(struct intel_guc 
>> *guc)
>> +static inline bool intel_guc_submission_is_supported(struct intel_guc 
>> *guc)
>>  {
>> -    return guc->submission_supported;
>> +    /* XXX: GuC submission is unavailable for now */
>> +    return false;
>> +}
>> +
>> +static inline bool intel_guc_submission_is_wanted(struct intel_guc *guc)
>> +{
>> +    return guc->submission_selected;
>> +}
>> +
>> +static inline bool intel_guc_submission_is_used(struct intel_guc *guc)
>> +{
>> +    return intel_guc_is_used(guc) && 
>> intel_guc_submission_is_wanted(guc);
>>  }
> 
> can we keep all intel_guc_submission_xx() functions in 
> intel_guc_submission.h?
> or is it circular-dependency issue ? but these functions are not on 
> hot-path so
> maybe can be moved to .c to break that dependency ?
> 
> or is it due to auto generator changes below ?
> 

I haven't actually tried to move them to intel_guc_submission.h. 
intel_guc_is_submission_supported was here so I just kept the other 
related functions here as well. IMO including intel_guc.h from 
intel_guc_submission.h shouldn't be an issue given the close relation 
between the 2, so it should be ok to move the functions.

Daniele

>> static inline void intel_guc_enable_msg(struct intel_guc *guc, u32 mask)
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c 
>> b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
>> index 9e42324fdecd..1beaa77f9bb6 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
>> @@ -660,12 +660,9 @@ void intel_guc_submission_disable(struct 
>> intel_guc *guc)
>>      guc_proc_desc_fini(guc);
>>  }
>> -static bool __guc_submission_support(struct intel_guc *guc)
>> +static bool __guc_submission_selected(struct intel_guc *guc)
>>  {
>> -    /* XXX: GuC submission is unavailable for now */
>> -    return false;
>> -
>> -    if (!intel_guc_is_supported(guc))
>> +    if (!intel_guc_submission_is_supported(guc))
>>          return false;
>>     return i915_modparams.enable_guc & ENABLE_GUC_SUBMISSION;
>> @@ -673,7 +670,7 @@ static bool __guc_submission_support(struct 
>> intel_guc *guc)
>> void intel_guc_submission_init_early(struct intel_guc *guc)
>>  {
>> -    guc->submission_supported = __guc_submission_support(guc);
>> +    guc->submission_selected = __guc_submission_selected(guc);
>>  }
>> bool intel_engine_in_guc_submission_mode(const struct intel_engine_cs 
>> *engine)
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.c 
>> b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
>> index 654d7c0c757a..175fa6361ff2 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc.c
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
>> @@ -49,7 +49,7 @@ static void __confirm_options(struct intel_uc *uc)
>>                   "enable_guc=%d (guc:%s submission:%s huc:%s)\n",
>>                   i915_modparams.enable_guc,
>>                   yesno(intel_uc_wants_guc(uc)),
>> -                 yesno(intel_uc_uses_guc_submission(uc)),
>> +                 yesno(intel_uc_wants_guc_submission(uc)),
>>                   yesno(intel_uc_wants_huc(uc)));
>>     if (i915_modparams.enable_guc == -1)
>> @@ -57,7 +57,7 @@ static void __confirm_options(struct intel_uc *uc)
>>     if (i915_modparams.enable_guc == 0) {
>>          GEM_BUG_ON(intel_uc_wants_guc(uc));
>> -        GEM_BUG_ON(intel_uc_uses_guc_submission(uc));
>> +        GEM_BUG_ON(intel_uc_wants_guc_submission(uc));
>>          GEM_BUG_ON(intel_uc_wants_huc(uc));
>>          return;
>>      }
>> @@ -285,7 +285,7 @@ static void __uc_init(struct intel_uc *uc)
>>          return;
>>     /* XXX: GuC submission is unavailable for now */
>> -    GEM_BUG_ON(intel_uc_supports_guc_submission(uc));
>> +    GEM_BUG_ON(intel_uc_uses_guc_submission(uc));
>>     ret = intel_guc_init(guc);
>>      if (ret) {
>> @@ -410,7 +410,7 @@ static int __uc_init_hw(struct intel_uc *uc)
>>      if (!intel_uc_fw_is_available(&guc->fw)) {
>>          ret = __uc_check_hw(uc) ||
>>                intel_uc_fw_is_overridden(&guc->fw) ||
>> -              intel_uc_supports_guc_submission(uc) ?
>> +              intel_uc_wants_guc_submission(uc) ?
>>                intel_uc_fw_status_to_error(guc->fw.status) : 0;
>>          goto err_out;
>>      }
>> @@ -462,14 +462,14 @@ static int __uc_init_hw(struct intel_uc *uc)
>>      if (ret)
>>          goto err_communication;
>> -    if (intel_uc_supports_guc_submission(uc))
>> +    if (intel_uc_uses_guc_submission(uc))
>>          intel_guc_submission_enable(guc);
>>     dev_info(i915->drm.dev, "%s firmware %s version %u.%u %s:%s\n",
>>           intel_uc_fw_type_repr(INTEL_UC_FW_TYPE_GUC), guc->fw.path,
>>           guc->fw.major_ver_found, guc->fw.minor_ver_found,
>>           "submission",
>> -         enableddisabled(intel_uc_supports_guc_submission(uc)));
>> +         enableddisabled(intel_uc_uses_guc_submission(uc)));
>>     if (intel_uc_uses_huc(uc)) {
>>          dev_info(i915->drm.dev, "%s firmware %s version %u.%u %s:%s\n",
>> @@ -511,7 +511,7 @@ static void __uc_fini_hw(struct intel_uc *uc)
>>      if (!intel_guc_is_fw_running(guc))
>>          return;
>> -    if (intel_uc_supports_guc_submission(uc))
>> +    if (intel_uc_uses_guc_submission(uc))
>>          intel_guc_submission_disable(guc);
>>     if (guc_communication_enabled(guc))
>> diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.h 
>> b/drivers/gpu/drm/i915/gt/uc/intel_uc.h
>> index a41aaf353f88..35ce8a6be88b 100644
>> --- a/drivers/gpu/drm/i915/gt/uc/intel_uc.h
>> +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.h
>> @@ -61,33 +61,24 @@ int intel_uc_runtime_resume(struct intel_uc *uc);
>>   * - In use: wanted + firmware found on the system and successfully 
>> fetched.
>>   */
>> -#define __uc_state_checker(x, state, required) \
>> -static inline bool intel_uc_##state##_##x(struct intel_uc *uc) \
>> +#define __uc_state_checker(x, func, state, required) \
>> +static inline bool intel_uc_##state##_##func(struct intel_uc *uc) \
>>  { \
>> -    return intel_##x##_is_##required(&uc->x); \
>> +    return intel_##func##_is_##required(&uc->x); \
>>  }
>> -#define uc_state_checkers(x) \
>> -__uc_state_checker(x, supports, supported) \
>> -__uc_state_checker(x, wants, wanted) \
>> -__uc_state_checker(x, uses, used)
>> +#define uc_state_checkers(x, func) \
>> +__uc_state_checker(x, func, supports, supported) \
>> +__uc_state_checker(x, func, wants, wanted) \
>> +__uc_state_checker(x, func, uses, used)
>> -uc_state_checkers(guc);
>> -uc_state_checkers(huc);
>> +uc_state_checkers(guc, guc);
>> +uc_state_checkers(huc, huc);
>> +uc_state_checkers(guc, guc_submission);
>> #undef uc_state_checkers
>>  #undef __uc_state_checker
>> -static inline bool intel_uc_supports_guc_submission(struct intel_uc *uc)
>> -{
>> -    return intel_guc_is_submission_supported(&uc->guc);
>> -}
>> -
>> -static inline bool intel_uc_uses_guc_submission(struct intel_uc *uc)
>> -{
>> -    return intel_guc_is_submission_supported(&uc->guc);
>> -}
>> -
>>  #define intel_uc_ops_function(_NAME, _OPS, _TYPE, _RET) \
>>  static inline _TYPE intel_uc_##_NAME(struct intel_uc *uc) \
>>  { \
>> diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c 
>> b/drivers/gpu/drm/i915/gvt/scheduler.c
>> index 5fe00ee6bd1b..e8c0885df978 100644
>> --- a/drivers/gpu/drm/i915/gvt/scheduler.c
>> +++ b/drivers/gpu/drm/i915/gvt/scheduler.c
>> @@ -1247,7 +1247,7 @@ int intel_vgpu_setup_submission(struct 
>> intel_vgpu *vgpu)
>>          intel_context_set_single_submission(ce);
>>         /* Max ring buffer size */
>> -        if (!intel_uc_uses_guc_submission(&engine->gt->uc)) {
>> +        if (!intel_uc_wants_guc_submission(&engine->gt->uc)) {
>>              const unsigned int ring_size = 512 * SZ_4K;
>>             ce->ring = __intel_context_ring_size(ring_size);
>> diff --git a/drivers/gpu/drm/i915/i915_drv.h 
>> b/drivers/gpu/drm/i915/i915_drv.h
>> index 0a45240af38d..d21039ba2b4f 100644
>> --- a/drivers/gpu/drm/i915/i915_drv.h
>> +++ b/drivers/gpu/drm/i915/i915_drv.h
>> @@ -2010,10 +2010,4 @@ i915_coherent_map_type(struct drm_i915_private 
>> *i915)
>>      return HAS_LLC(i915) ? I915_MAP_WB : I915_MAP_WC;
>>  }
>> -static inline bool intel_guc_submission_is_enabled(struct intel_guc 
>> *guc)
>> -{
>> -    return intel_guc_is_submission_supported(guc) &&
>> -           intel_guc_is_ready(guc);
>> -}
>> -
>>  #endif
>> diff --git a/drivers/gpu/drm/i915/intel_gvt.c 
>> b/drivers/gpu/drm/i915/intel_gvt.c
>> index 5c189bc31da5..e73fd752adef 100644
>> --- a/drivers/gpu/drm/i915/intel_gvt.c
>> +++ b/drivers/gpu/drm/i915/intel_gvt.c
>> @@ -105,7 +105,7 @@ int intel_gvt_init(struct drm_i915_private *dev_priv)
>>          return 0;
>>      }
>> -    if (intel_uc_uses_guc_submission(&dev_priv->gt.uc)) {
>> +    if (intel_uc_wants_guc_submission(&dev_priv->gt.uc)) {
>>          drm_err(&dev_priv->drm,
>>              "i915 GVT-g loading failed due to Graphics virtualization 
>> is not yet supported with GuC submission\n");
>>          return -EIO;
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.c b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
index c4c1523da7a6..f96d1bdf4bf2 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.c
@@ -207,7 +207,7 @@  static u32 guc_ctl_feature_flags(struct intel_guc *guc)
 {
 	u32 flags = 0;
 
-	if (!intel_guc_is_submission_supported(guc))
+	if (!intel_guc_submission_is_used(guc))
 		flags |= GUC_CTL_DISABLE_SCHEDULER;
 
 	return flags;
@@ -217,7 +217,7 @@  static u32 guc_ctl_ctxinfo_flags(struct intel_guc *guc)
 {
 	u32 flags = 0;
 
-	if (intel_guc_is_submission_supported(guc)) {
+	if (intel_guc_submission_is_used(guc)) {
 		u32 ctxnum, base;
 
 		base = intel_guc_ggtt_offset(guc, guc->stage_desc_pool);
@@ -348,7 +348,7 @@  int intel_guc_init(struct intel_guc *guc)
 	if (ret)
 		goto err_ads;
 
-	if (intel_guc_is_submission_supported(guc)) {
+	if (intel_guc_submission_is_used(guc)) {
 		/*
 		 * This is stuff we need to have available at fw load time
 		 * if we are planning to enable submission later
@@ -389,7 +389,7 @@  void intel_guc_fini(struct intel_guc *guc)
 
 	i915_ggtt_disable_guc(gt->ggtt);
 
-	if (intel_guc_is_submission_supported(guc))
+	if (intel_guc_submission_is_used(guc))
 		intel_guc_submission_fini(guc);
 
 	intel_guc_ct_fini(&guc->ct);
@@ -544,7 +544,7 @@  int intel_guc_suspend(struct intel_guc *guc)
 	 * If GuC communication is enabled but submission is not supported,
 	 * we do not need to suspend the GuC.
 	 */
-	if (!intel_guc_submission_is_enabled(guc))
+	if (!intel_guc_submission_is_used(guc) || !intel_guc_is_ready(guc))
 		return 0;
 
 	/*
@@ -609,7 +609,7 @@  int intel_guc_resume(struct intel_guc *guc)
 	 * we do not need to resume the GuC but we do need to enable the
 	 * GuC communication on resume (above).
 	 */
-	if (!intel_guc_submission_is_enabled(guc))
+	if (!intel_guc_submission_is_used(guc) || !intel_guc_is_ready(guc))
 		return 0;
 
 	return intel_guc_send(guc, action, ARRAY_SIZE(action));
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc.h b/drivers/gpu/drm/i915/gt/uc/intel_guc.h
index f6b33745ae0b..1aba4d2c15b3 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc.h
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc.h
@@ -39,7 +39,7 @@  struct intel_guc {
 		void (*disable)(struct intel_guc *guc);
 	} interrupts;
 
-	bool submission_supported;
+	bool submission_selected;
 
 	struct i915_vma *ads_vma;
 	struct __guc_ads_blob *ads_blob;
@@ -172,9 +172,20 @@  static inline int intel_guc_sanitize(struct intel_guc *guc)
 	return 0;
 }
 
-static inline bool intel_guc_is_submission_supported(struct intel_guc *guc)
+static inline bool intel_guc_submission_is_supported(struct intel_guc *guc)
 {
-	return guc->submission_supported;
+	/* XXX: GuC submission is unavailable for now */
+	return false;
+}
+
+static inline bool intel_guc_submission_is_wanted(struct intel_guc *guc)
+{
+	return guc->submission_selected;
+}
+
+static inline bool intel_guc_submission_is_used(struct intel_guc *guc)
+{
+	return intel_guc_is_used(guc) && intel_guc_submission_is_wanted(guc);
 }
 
 static inline void intel_guc_enable_msg(struct intel_guc *guc, u32 mask)
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
index 9e42324fdecd..1beaa77f9bb6 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c
@@ -660,12 +660,9 @@  void intel_guc_submission_disable(struct intel_guc *guc)
 	guc_proc_desc_fini(guc);
 }
 
-static bool __guc_submission_support(struct intel_guc *guc)
+static bool __guc_submission_selected(struct intel_guc *guc)
 {
-	/* XXX: GuC submission is unavailable for now */
-	return false;
-
-	if (!intel_guc_is_supported(guc))
+	if (!intel_guc_submission_is_supported(guc))
 		return false;
 
 	return i915_modparams.enable_guc & ENABLE_GUC_SUBMISSION;
@@ -673,7 +670,7 @@  static bool __guc_submission_support(struct intel_guc *guc)
 
 void intel_guc_submission_init_early(struct intel_guc *guc)
 {
-	guc->submission_supported = __guc_submission_support(guc);
+	guc->submission_selected = __guc_submission_selected(guc);
 }
 
 bool intel_engine_in_guc_submission_mode(const struct intel_engine_cs *engine)
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.c b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
index 654d7c0c757a..175fa6361ff2 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc.c
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.c
@@ -49,7 +49,7 @@  static void __confirm_options(struct intel_uc *uc)
 			     "enable_guc=%d (guc:%s submission:%s huc:%s)\n",
 			     i915_modparams.enable_guc,
 			     yesno(intel_uc_wants_guc(uc)),
-			     yesno(intel_uc_uses_guc_submission(uc)),
+			     yesno(intel_uc_wants_guc_submission(uc)),
 			     yesno(intel_uc_wants_huc(uc)));
 
 	if (i915_modparams.enable_guc == -1)
@@ -57,7 +57,7 @@  static void __confirm_options(struct intel_uc *uc)
 
 	if (i915_modparams.enable_guc == 0) {
 		GEM_BUG_ON(intel_uc_wants_guc(uc));
-		GEM_BUG_ON(intel_uc_uses_guc_submission(uc));
+		GEM_BUG_ON(intel_uc_wants_guc_submission(uc));
 		GEM_BUG_ON(intel_uc_wants_huc(uc));
 		return;
 	}
@@ -285,7 +285,7 @@  static void __uc_init(struct intel_uc *uc)
 		return;
 
 	/* XXX: GuC submission is unavailable for now */
-	GEM_BUG_ON(intel_uc_supports_guc_submission(uc));
+	GEM_BUG_ON(intel_uc_uses_guc_submission(uc));
 
 	ret = intel_guc_init(guc);
 	if (ret) {
@@ -410,7 +410,7 @@  static int __uc_init_hw(struct intel_uc *uc)
 	if (!intel_uc_fw_is_available(&guc->fw)) {
 		ret = __uc_check_hw(uc) ||
 		      intel_uc_fw_is_overridden(&guc->fw) ||
-		      intel_uc_supports_guc_submission(uc) ?
+		      intel_uc_wants_guc_submission(uc) ?
 		      intel_uc_fw_status_to_error(guc->fw.status) : 0;
 		goto err_out;
 	}
@@ -462,14 +462,14 @@  static int __uc_init_hw(struct intel_uc *uc)
 	if (ret)
 		goto err_communication;
 
-	if (intel_uc_supports_guc_submission(uc))
+	if (intel_uc_uses_guc_submission(uc))
 		intel_guc_submission_enable(guc);
 
 	dev_info(i915->drm.dev, "%s firmware %s version %u.%u %s:%s\n",
 		 intel_uc_fw_type_repr(INTEL_UC_FW_TYPE_GUC), guc->fw.path,
 		 guc->fw.major_ver_found, guc->fw.minor_ver_found,
 		 "submission",
-		 enableddisabled(intel_uc_supports_guc_submission(uc)));
+		 enableddisabled(intel_uc_uses_guc_submission(uc)));
 
 	if (intel_uc_uses_huc(uc)) {
 		dev_info(i915->drm.dev, "%s firmware %s version %u.%u %s:%s\n",
@@ -511,7 +511,7 @@  static void __uc_fini_hw(struct intel_uc *uc)
 	if (!intel_guc_is_fw_running(guc))
 		return;
 
-	if (intel_uc_supports_guc_submission(uc))
+	if (intel_uc_uses_guc_submission(uc))
 		intel_guc_submission_disable(guc);
 
 	if (guc_communication_enabled(guc))
diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc.h b/drivers/gpu/drm/i915/gt/uc/intel_uc.h
index a41aaf353f88..35ce8a6be88b 100644
--- a/drivers/gpu/drm/i915/gt/uc/intel_uc.h
+++ b/drivers/gpu/drm/i915/gt/uc/intel_uc.h
@@ -61,33 +61,24 @@  int intel_uc_runtime_resume(struct intel_uc *uc);
  * - In use: wanted + firmware found on the system and successfully fetched.
  */
 
-#define __uc_state_checker(x, state, required) \
-static inline bool intel_uc_##state##_##x(struct intel_uc *uc) \
+#define __uc_state_checker(x, func, state, required) \
+static inline bool intel_uc_##state##_##func(struct intel_uc *uc) \
 { \
-	return intel_##x##_is_##required(&uc->x); \
+	return intel_##func##_is_##required(&uc->x); \
 }
 
-#define uc_state_checkers(x) \
-__uc_state_checker(x, supports, supported) \
-__uc_state_checker(x, wants, wanted) \
-__uc_state_checker(x, uses, used)
+#define uc_state_checkers(x, func) \
+__uc_state_checker(x, func, supports, supported) \
+__uc_state_checker(x, func, wants, wanted) \
+__uc_state_checker(x, func, uses, used)
 
-uc_state_checkers(guc);
-uc_state_checkers(huc);
+uc_state_checkers(guc, guc);
+uc_state_checkers(huc, huc);
+uc_state_checkers(guc, guc_submission);
 
 #undef uc_state_checkers
 #undef __uc_state_checker
 
-static inline bool intel_uc_supports_guc_submission(struct intel_uc *uc)
-{
-	return intel_guc_is_submission_supported(&uc->guc);
-}
-
-static inline bool intel_uc_uses_guc_submission(struct intel_uc *uc)
-{
-	return intel_guc_is_submission_supported(&uc->guc);
-}
-
 #define intel_uc_ops_function(_NAME, _OPS, _TYPE, _RET) \
 static inline _TYPE intel_uc_##_NAME(struct intel_uc *uc) \
 { \
diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c b/drivers/gpu/drm/i915/gvt/scheduler.c
index 5fe00ee6bd1b..e8c0885df978 100644
--- a/drivers/gpu/drm/i915/gvt/scheduler.c
+++ b/drivers/gpu/drm/i915/gvt/scheduler.c
@@ -1247,7 +1247,7 @@  int intel_vgpu_setup_submission(struct intel_vgpu *vgpu)
 		intel_context_set_single_submission(ce);
 
 		/* Max ring buffer size */
-		if (!intel_uc_uses_guc_submission(&engine->gt->uc)) {
+		if (!intel_uc_wants_guc_submission(&engine->gt->uc)) {
 			const unsigned int ring_size = 512 * SZ_4K;
 
 			ce->ring = __intel_context_ring_size(ring_size);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 0a45240af38d..d21039ba2b4f 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2010,10 +2010,4 @@  i915_coherent_map_type(struct drm_i915_private *i915)
 	return HAS_LLC(i915) ? I915_MAP_WB : I915_MAP_WC;
 }
 
-static inline bool intel_guc_submission_is_enabled(struct intel_guc *guc)
-{
-	return intel_guc_is_submission_supported(guc) &&
-	       intel_guc_is_ready(guc);
-}
-
 #endif
diff --git a/drivers/gpu/drm/i915/intel_gvt.c b/drivers/gpu/drm/i915/intel_gvt.c
index 5c189bc31da5..e73fd752adef 100644
--- a/drivers/gpu/drm/i915/intel_gvt.c
+++ b/drivers/gpu/drm/i915/intel_gvt.c
@@ -105,7 +105,7 @@  int intel_gvt_init(struct drm_i915_private *dev_priv)
 		return 0;
 	}
 
-	if (intel_uc_uses_guc_submission(&dev_priv->gt.uc)) {
+	if (intel_uc_wants_guc_submission(&dev_priv->gt.uc)) {
 		drm_err(&dev_priv->drm,
 			"i915 GVT-g loading failed due to Graphics virtualization is not yet supported with GuC submission\n");
 		return -EIO;