[Intel-gfx] [PATCH 18/21] drm/i915/gt: Add timeline "mode"
Matthew Brost
matthew.brost at intel.com
Thu Dec 10 19:28:06 UTC 2020
On Thu, Dec 10, 2020 at 08:02:37AM +0000, Chris Wilson wrote:
> Explicitly differentiate between the absolute and relative timelines,
> and the global HWSP and ppHWSP relative offsets. When using a timeline
> that is relative to a known status page, we can replace the absolute
> addressing in the commands with indexed variants.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
> drivers/gpu/drm/i915/gt/intel_timeline.c | 21 ++++++++++++++++---
> drivers/gpu/drm/i915/gt/intel_timeline.h | 2 +-
> .../gpu/drm/i915/gt/intel_timeline_types.h | 10 +++++++--
> 3 files changed, 27 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_timeline.c b/drivers/gpu/drm/i915/gt/intel_timeline.c
> index cb20fcbb326b..da0a9659557a 100644
> --- a/drivers/gpu/drm/i915/gt/intel_timeline.c
> +++ b/drivers/gpu/drm/i915/gt/intel_timeline.c
> @@ -229,7 +229,6 @@ static int intel_timeline_init(struct intel_timeline *timeline,
>
> timeline->gt = gt;
>
> - timeline->has_initial_breadcrumb = !hwsp;
> timeline->hwsp_cacheline = NULL;
>
> if (!hwsp) {
> @@ -246,13 +245,29 @@ static int intel_timeline_init(struct intel_timeline *timeline,
> return PTR_ERR(cl);
> }
>
> + timeline->mode = INTEL_TIMELINE_ABSOLUTE;
> timeline->hwsp_cacheline = cl;
> timeline->hwsp_offset = cacheline * CACHELINE_BYTES;
>
> vaddr = page_mask_bits(cl->vaddr);
> } else {
> - timeline->hwsp_offset = offset;
> - vaddr = i915_gem_object_pin_map(hwsp->obj, I915_MAP_WB);
> + int preferred;
> +
> + if (offset & INTEL_TIMELINE_CONTEXT) {
> + timeline->mode = INTEL_TIMELINE_CONTEXT;
> + timeline->hwsp_offset =
> + offset & ~INTEL_TIMELINE_CONTEXT;
> + preferred = i915_coherent_map_type(gt->i915);
> + } else {
> + timeline->mode = INTEL_TIMELINE_GLOBAL;
> + timeline->hwsp_offset = offset;
> + preferred = I915_MAP_WB;
> + }
> +
> + vaddr = i915_gem_object_pin_map(hwsp->obj,
> + preferred | I915_MAP_OVERRIDE);
> + if (IS_ERR(vaddr))
> + vaddr = i915_gem_object_pin_map(hwsp->obj, I915_MAP_WC);
> if (IS_ERR(vaddr))
> return PTR_ERR(vaddr);
> }
> diff --git a/drivers/gpu/drm/i915/gt/intel_timeline.h b/drivers/gpu/drm/i915/gt/intel_timeline.h
> index deb71a8dbd43..69250de3a814 100644
> --- a/drivers/gpu/drm/i915/gt/intel_timeline.h
> +++ b/drivers/gpu/drm/i915/gt/intel_timeline.h
> @@ -76,7 +76,7 @@ static inline void intel_timeline_put(struct intel_timeline *timeline)
> static inline bool
> intel_timeline_has_initial_breadcrumb(const struct intel_timeline *tl)
> {
> - return tl->has_initial_breadcrumb;
> + return tl->mode == INTEL_TIMELINE_ABSOLUTE;
> }
>
> static inline int __intel_timeline_sync_set(struct intel_timeline *tl,
> diff --git a/drivers/gpu/drm/i915/gt/intel_timeline_types.h b/drivers/gpu/drm/i915/gt/intel_timeline_types.h
> index f187c5aac11c..32c51425a0c4 100644
> --- a/drivers/gpu/drm/i915/gt/intel_timeline_types.h
> +++ b/drivers/gpu/drm/i915/gt/intel_timeline_types.h
> @@ -20,6 +20,12 @@ struct i915_syncmap;
> struct intel_gt;
> struct intel_timeline_hwsp;
>
> +enum intel_timeline_mode {
> + INTEL_TIMELINE_ABSOLUTE = 0,
> + INTEL_TIMELINE_CONTEXT = BIT(0),
> + INTEL_TIMELINE_GLOBAL = BIT(1),
> +};
> +
Not sure I like these names.
How about:
INTEL_TIMELINE_ABSOLUTE_GGTT
INTEL_TIMELINE_RELATIVE_PPGTT
INTEL_TIMELINE_RELATIVE_GGTT
Also not convinced we need the 'RELATIVE' modes. See my comments in 'Use
indices for writing into relative'.
Matt
> struct intel_timeline {
> u64 fence_context;
> u32 seqno;
> @@ -45,6 +51,8 @@ struct intel_timeline {
> atomic_t pin_count;
> atomic_t active_count;
>
> + enum intel_timeline_mode mode;
> +
> const u32 *hwsp_seqno;
> struct i915_vma *hwsp_ggtt;
> u32 hwsp_offset;
> @@ -52,8 +60,6 @@ struct intel_timeline {
>
> struct intel_timeline_cacheline *hwsp_cacheline;
>
> - bool has_initial_breadcrumb;
> -
> /**
> * List of breadcrumbs associated with GPU requests currently
> * outstanding.
> --
> 2.20.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
More information about the Intel-gfx
mailing list