Commit 202c98e7 authored by Daniele Ceraolo Spurio's avatar Daniele Ceraolo Spurio Committed by Chris Wilson

drm/i915/guc: Apply new uC status tracking to GuC submission as well

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.

v2: move functions to guc_submission.h (Michal)
Signed-off-by: default avatarDaniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: default avatarJohn Harrison <John.C.Harrison@Intel.com>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20200218223327.11058-7-daniele.ceraolospurio@intel.com
parent bfe5a40a
......@@ -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));
......
......@@ -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;
......@@ -173,11 +173,6 @@ static inline int intel_guc_sanitize(struct intel_guc *guc)
return 0;
}
static inline bool intel_guc_is_submission_supported(struct intel_guc *guc)
{
return guc->submission_supported;
}
static inline void intel_guc_enable_msg(struct intel_guc *guc, u32 mask)
{
spin_lock_irq(&guc->irq_lock);
......
......@@ -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)
......
......@@ -8,7 +8,8 @@
#include <linux/types.h>
struct intel_guc;
#include "intel_guc.h"
struct intel_engine_cs;
void intel_guc_submission_init_early(struct intel_guc *guc);
......@@ -20,4 +21,20 @@ int intel_guc_preempt_work_create(struct intel_guc *guc);
void intel_guc_preempt_work_destroy(struct intel_guc *guc);
bool intel_engine_in_guc_submission_mode(const struct intel_engine_cs *engine);
static inline bool intel_guc_submission_is_supported(struct intel_guc *guc)
{
/* 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);
}
#endif
......@@ -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))
......
......@@ -7,6 +7,7 @@
#define _INTEL_UC_H_
#include "intel_guc.h"
#include "intel_guc_submission.h"
#include "intel_huc.h"
#include "i915_params.h"
......@@ -61,33 +62,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) \
{ \
......
......@@ -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);
......
......@@ -2000,10 +2000,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
......@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment