Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Matt Roper <matthew.d.roper@intel.com>
To: intel-xe@lists.freedesktop.org
Cc: matthew.d.roper@intel.com
Subject: [PATCH 00/43] Stop using xe_gt as a register MMIO target
Date: Tue,  3 Sep 2024 17:21:01 -0700	[thread overview]
Message-ID: <20240904002100.2023834-45-matthew.d.roper@intel.com> (raw)

A "GT" is just one subunit of an Intel GPU (i.e., the part that contains
the hardware engines, GuC, and programmable execution units).  It is not
directly related to register MMIO, although a subset of the registers
our driver interacts with are within the GT.  The driver also interacts
with, and programs, several other parts of the GPU that live outside the
GT (e.g., sgunit, pcode, display, etc.), so using an 'xe_gt' structure
in the driver as the target for all MMIO register operations causes a
lot of confusion and doesn't match how the hardware is actually
organized.

For register MMIO operations, the things that truly matter are:
 * Where the MMIO region is mapped for CPU access.
 * Any extra offset that should be "automatically" added to some
   xe_reg offsets.  (e.g., the 0x380000 offset for GSI registers in the
   media GT)
 * Extra metadata for size, valid/invalid subregions of the map, etc.
   that can be utilized by debug builds to perform extra checks and
   assertions to catch coding mistakes.

Let's add a dedicated 'xe_mmio' structure that encapsulates this
specific information and can be used as a target for MMIO operations.
For now an xe_mmio structure is present inside every xe_gt and xe_tile,
and can be used as the target for GT and non-GT operations respectively.
In the future additional xe_mmio substructures can be added for other
specific cases.

Note that there's a (currently unused) "mmio_ext" infrastructure in the
driver that appears to be an attempt to work around the GT-centric way
the driver has been doing register MMIO.  That infrastructure is simply
replaced with an additional instance of "struct xe_mmio" that lives at
the tile level.  This will allow standard register access logic for
accessing non-GT registers that exist in a very different BAR region
and/or reside in a different iomap.  Once code actually shows up to use
"mmio_ext" it will probably get renamed and accessed via "xe_foo->mmio"
or "xe_mmio_for_foo(xe)."

Once this general refactor lands, a follow-up will be add some extra
checking in debug builds to catch cases where the driver might be
performing MMIO accesses incorrectly (for example, accessing GT
registers through a non-GT MMIO which wouldn't apply proper GSI
offsets).

Since converting the entire driver from xe_gt to xe_mmio for register
access operations is a lot of churn, the original conversion includes
some _Generic compatibility defines to temporarily allow either xe_gt or
xe_mmio to be used.  This allows individual parts of the driver to be
converted in separate patches for ease of review.  The compatibility
macros are removed again at the end of the series.



Matt Roper (43):
  drm/xe: Move forcewake to 'gt.pm' substructure
  drm/xe: Create dedicated xe_mmio structure
  drm/xe: Clarify size of MMIO region
  drm/xe: Move GSI offset adjustment fields into 'struct xe_mmio'
  drm/xe: Populate GT's mmio iomap from tile during init
  drm/xe: Switch mmio_ext to use 'struct xe_mmio'
  drm/xe: Add xe_device backpointer to xe_mmio
  drm/xe: Adjust mmio code to pass VF substructure to SRIOV code
  drm/xe: Switch MMIO interface to take xe_mmio instead of xe_gt
  drm/xe/irq: Convert register access to use xe_mmio
  drm/xe/pcode: Convert register access to use xe_mmio
  drm/xe/hwmon: Convert register access to use xe_mmio
  drm/xe/vram: Convert register access to use xe_mmio
  drm/xe/compat-i915: Convert register access to use xe_mmio
  drm/xe/lmtt: Convert register access to use xe_mmio
  drm/xe/stolen: Convert register access to use xe_mmio
  drm/xe/device: Convert register access to use xe_mmio
  drm/xe/pci: Convert register access to use xe_mmio
  drm/xe/wa: Convert register access to use xe_mmio
  drm/xe/uc: Convert register access to use xe_mmio
  drm/xe/guc: Convert register access to use xe_mmio
  drm/xe/huc: Convert register access to use xe_mmio
  drm/xe/gsc: Convert register access to use xe_mmio
  drm/xe/query: Convert register access to use xe_mmio
  drm/xe/mcr: Convert register access to use xe_mmio
  drm/xe/mocs: Convert register access to use xe_mmio
  drm/xe/hw_engine: Convert register access to use xe_mmio
  drm/xe/gt_throttle: Convert register access to use xe_mmio
  drm/xe/pat: Convert register access to use xe_mmio
  drm/xe/wopcm: Convert register access to use xe_mmio
  drm/xe/oa: Convert register access to use xe_mmio
  drm/xe/topology: Convert register access to use xe_mmio
  drm/xe/execlist: Convert register access to use xe_mmio
  drm/xe/gt_clock: Convert register access to use xe_mmio
  drm/xe/reg_sr: Convert register access to use xe_mmio
  drm/xe/gt: Convert register access to use xe_mmio
  drm/xe/sriov: Convert register access to use xe_mmio
  drm/xe/tlb: Convert register access to use xe_mmio
  drm/xe/gt_idle: Convert register access to use xe_mmio
  drm/xe/forcewake: Convert register access to use xe_mmio
  drm/xe/ggtt: Convert register access to use xe_mmio
  drm/xe/ccs_mode: Convert register access to use xe_mmio
  drm/xe/mmio: Drop compatibility macros

 .../drm/xe/compat-i915-headers/intel_uncore.h |  36 ++---
 drivers/gpu/drm/xe/tests/xe_mocs.c            |   4 +-
 drivers/gpu/drm/xe/xe_assert.h                |   2 +-
 drivers/gpu/drm/xe/xe_device.c                |  37 +++--
 drivers/gpu/drm/xe/xe_device.h                |   3 +-
 drivers/gpu/drm/xe/xe_device_types.h          |  51 +++++--
 drivers/gpu/drm/xe/xe_execlist.c              |  19 +--
 drivers/gpu/drm/xe/xe_force_wake.c            |   4 +-
 drivers/gpu/drm/xe/xe_ggtt.c                  |   8 +-
 drivers/gpu/drm/xe/xe_gsc.c                   |  23 +--
 drivers/gpu/drm/xe/xe_gsc_proxy.c             |   4 +-
 drivers/gpu/drm/xe/xe_gt.c                    |  10 +-
 drivers/gpu/drm/xe/xe_gt_ccs_mode.c           |   2 +-
 drivers/gpu/drm/xe/xe_gt_clock.c              |   6 +-
 drivers/gpu/drm/xe/xe_gt_freq.c               |   2 +-
 drivers/gpu/drm/xe/xe_gt_idle.c               |  17 +--
 drivers/gpu/drm/xe/xe_gt_mcr.c                |  39 ++---
 drivers/gpu/drm/xe/xe_gt_printk.h             |   2 +-
 drivers/gpu/drm/xe/xe_gt_sriov_pf.c           |   2 +-
 drivers/gpu/drm/xe/xe_gt_sriov_pf_service.c   |   6 +-
 drivers/gpu/drm/xe/xe_gt_sriov_vf.c           |  10 +-
 drivers/gpu/drm/xe/xe_gt_sriov_vf.h           |   5 +-
 drivers/gpu/drm/xe/xe_gt_throttle.c           |   4 +-
 drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c   |   8 +-
 drivers/gpu/drm/xe/xe_gt_topology.c           |   8 +-
 drivers/gpu/drm/xe/xe_gt_types.h              |  20 +--
 drivers/gpu/drm/xe/xe_guc.c                   |  60 ++++----
 drivers/gpu/drm/xe/xe_guc_ads.c               |   2 +-
 drivers/gpu/drm/xe/xe_guc_pc.c                |  34 ++---
 drivers/gpu/drm/xe/xe_huc.c                   |   6 +-
 drivers/gpu/drm/xe/xe_hw_engine.c             |  29 ++--
 drivers/gpu/drm/xe/xe_hwmon.c                 |  16 +--
 drivers/gpu/drm/xe/xe_irq.c                   |  63 ++++----
 drivers/gpu/drm/xe/xe_lmtt.c                  |   2 +-
 drivers/gpu/drm/xe/xe_mmio.c                  | 134 +++++++++---------
 drivers/gpu/drm/xe/xe_mmio.h                  |  35 +++--
 drivers/gpu/drm/xe/xe_mocs.c                  |  16 +--
 drivers/gpu/drm/xe/xe_oa.c                    |  48 ++++---
 drivers/gpu/drm/xe/xe_pat.c                   |  14 +-
 drivers/gpu/drm/xe/xe_pci.c                   |  24 +++-
 drivers/gpu/drm/xe/xe_pcode.c                 |   4 +-
 drivers/gpu/drm/xe/xe_query.c                 |   7 +-
 drivers/gpu/drm/xe/xe_reg_sr.c                |  17 +--
 drivers/gpu/drm/xe/xe_sriov.c                 |   2 +-
 drivers/gpu/drm/xe/xe_trace.h                 |   6 +-
 drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c        |   8 +-
 drivers/gpu/drm/xe/xe_uc_fw.c                 |  17 +--
 drivers/gpu/drm/xe/xe_vram.c                  |   7 +-
 drivers/gpu/drm/xe/xe_wa.c                    |   4 +-
 drivers/gpu/drm/xe/xe_wopcm.c                 |  12 +-
 50 files changed, 486 insertions(+), 413 deletions(-)

-- 
2.45.2


             reply	other threads:[~2024-09-04  0:21 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-04  0:21 Matt Roper [this message]
2024-09-04  0:21 ` [PATCH 01/43] drm/xe: Move forcewake to 'gt.pm' substructure Matt Roper
2024-09-05 20:03   ` Lucas De Marchi
2024-09-04  0:21 ` [PATCH 02/43] drm/xe: Create dedicated xe_mmio structure Matt Roper
2024-09-05 20:08   ` Lucas De Marchi
2024-09-06 13:49   ` Michal Wajdeczko
2024-09-04  0:21 ` [PATCH 03/43] drm/xe: Clarify size of MMIO region Matt Roper
2024-09-05 21:19   ` Lucas De Marchi
2024-09-04  0:21 ` [PATCH 04/43] drm/xe: Move GSI offset adjustment fields into 'struct xe_mmio' Matt Roper
2024-09-05 21:53   ` Lucas De Marchi
2024-09-04  0:21 ` [PATCH 05/43] drm/xe: Populate GT's mmio iomap from tile during init Matt Roper
2024-09-05 21:58   ` Lucas De Marchi
2024-09-04  0:21 ` [PATCH 06/43] drm/xe: Switch mmio_ext to use 'struct xe_mmio' Matt Roper
2024-09-06  1:47   ` Lucas De Marchi
2024-09-04  0:21 ` [PATCH 07/43] drm/xe: Add xe_device backpointer to xe_mmio Matt Roper
2024-09-06  1:51   ` Lucas De Marchi
2024-09-06 14:15   ` Michal Wajdeczko
2024-09-04  0:21 ` [PATCH 08/43] drm/xe: Adjust mmio code to pass VF substructure to SRIOV code Matt Roper
2024-09-06  3:32   ` Lucas De Marchi
2024-09-06 15:28   ` Michal Wajdeczko
2024-09-06 19:44     ` Matt Roper
2024-09-04  0:21 ` [PATCH 09/43] drm/xe: Switch MMIO interface to take xe_mmio instead of xe_gt Matt Roper
2024-09-06  3:44   ` Lucas De Marchi
2024-09-06 22:44     ` Matt Roper
2024-09-04  0:21 ` [PATCH 10/43] drm/xe/irq: Convert register access to use xe_mmio Matt Roper
2024-09-06  3:47   ` Lucas De Marchi
2024-09-04  0:21 ` [PATCH 11/43] drm/xe/pcode: " Matt Roper
2024-09-06 21:40   ` Lucas De Marchi
2024-09-04  0:21 ` [PATCH 12/43] drm/xe/hwmon: " Matt Roper
2024-09-06 21:41   ` Lucas De Marchi
2024-09-04  0:21 ` [PATCH 13/43] drm/xe/vram: " Matt Roper
2024-09-06 21:46   ` Lucas De Marchi
2024-09-04  0:21 ` [PATCH 14/43] drm/xe/compat-i915: " Matt Roper
2024-09-06  9:02   ` Jani Nikula
2024-09-06 21:51     ` Lucas De Marchi
2024-09-06 23:17       ` Matt Roper
2024-09-04  0:21 ` [PATCH 15/43] drm/xe/lmtt: " Matt Roper
2024-09-06 21:52   ` Lucas De Marchi
2024-09-04  0:21 ` [PATCH 16/43] drm/xe/stolen: " Matt Roper
2024-09-06 23:17   ` Lucas De Marchi
2024-09-04  0:21 ` [PATCH 17/43] drm/xe/device: " Matt Roper
2024-09-04  0:21 ` [PATCH 18/43] drm/xe/pci: " Matt Roper
2024-09-04  0:21 ` [PATCH 19/43] drm/xe/wa: " Matt Roper
2024-09-04  0:21 ` [PATCH 20/43] drm/xe/uc: " Matt Roper
2024-09-04  0:21 ` [PATCH 21/43] drm/xe/guc: " Matt Roper
2024-09-04  0:21 ` [PATCH 22/43] drm/xe/huc: " Matt Roper
2024-09-04  0:21 ` [PATCH 23/43] drm/xe/gsc: " Matt Roper
2024-09-04  0:21 ` [PATCH 24/43] drm/xe/query: " Matt Roper
2024-09-04  0:21 ` [PATCH 25/43] drm/xe/mcr: " Matt Roper
2024-09-04  0:21 ` [PATCH 26/43] drm/xe/mocs: " Matt Roper
2024-09-04  0:21 ` [PATCH 27/43] drm/xe/hw_engine: " Matt Roper
2024-09-04  0:21 ` [PATCH 28/43] drm/xe/gt_throttle: " Matt Roper
2024-09-04  0:21 ` [PATCH 29/43] drm/xe/pat: " Matt Roper
2024-09-04  0:21 ` [PATCH 30/43] drm/xe/wopcm: " Matt Roper
2024-09-04  0:21 ` [PATCH 31/43] drm/xe/oa: " Matt Roper
2024-09-04  0:21 ` [PATCH 32/43] drm/xe/topology: " Matt Roper
2024-09-04  0:21 ` [PATCH 33/43] drm/xe/execlist: " Matt Roper
2024-09-04  0:21 ` [PATCH 34/43] drm/xe/gt_clock: " Matt Roper
2024-09-04  0:21 ` [PATCH 35/43] drm/xe/reg_sr: " Matt Roper
2024-09-04  0:21 ` [PATCH 36/43] drm/xe/gt: " Matt Roper
2024-09-04  0:21 ` [PATCH 37/43] drm/xe/sriov: " Matt Roper
2024-09-04  0:21 ` [PATCH 38/43] drm/xe/tlb: " Matt Roper
2024-09-04  0:21 ` [PATCH 39/43] drm/xe/gt_idle: " Matt Roper
2024-09-04  0:21 ` [PATCH 40/43] drm/xe/forcewake: " Matt Roper
2024-09-04  0:21 ` [PATCH 41/43] drm/xe/ggtt: " Matt Roper
2024-09-04  0:21 ` [PATCH 42/43] drm/xe/ccs_mode: " Matt Roper
2024-09-04  0:21 ` [PATCH 43/43] drm/xe/mmio: Drop compatibility macros Matt Roper
2024-09-04  0:27 ` ✓ CI.Patch_applied: success for Stop using xe_gt as a register MMIO target Patchwork
2024-09-04  0:28 ` ✗ CI.checkpatch: warning " Patchwork
2024-09-04  0:29 ` ✓ CI.KUnit: success " Patchwork
2024-09-04  0:41 ` ✓ CI.Build: " Patchwork
2024-09-04  0:43 ` ✗ CI.Hooks: failure " Patchwork
2024-09-04  0:44 ` ✓ CI.checksparse: success " Patchwork
2024-09-04  1:03 ` ✓ CI.BAT: " Patchwork
2024-09-04  5:33 ` ✗ CI.FULL: failure " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240904002100.2023834-45-matthew.d.roper@intel.com \
    --to=matthew.d.roper@intel.com \
    --cc=intel-xe@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox