On Fri, Sep 02, 2022 at 03:10:54PM -0700, Radhakrishna Sripada wrote: > Future platforms can read the IP version from a register and the > IP version numbers need not be hard coded in device info. Move the > ip version for media and display to runtime info. > > On platforms where hard coding of IP version is required, update > the IP version in __runtime under device_info. > > v2: > - Avoid name collision for ip versions(Jani) > v4.1: > - Fix build error in mock_gem_device.c > > Suggested-by: Jani Nikula <jani.nikula@xxxxxxxxx> > Cc: Matt Roper <matthew.d.roper@xxxxxxxxx> > Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@xxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_drv.h | 14 +++---- > drivers/gpu/drm/i915/i915_pci.c | 38 +++++++++---------- > drivers/gpu/drm/i915/intel_device_info.c | 28 +++++++++----- > drivers/gpu/drm/i915/intel_device_info.h | 15 +++++--- > .../gpu/drm/i915/selftests/mock_gem_device.c | 2 +- > 5 files changed, 54 insertions(+), 43 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > index c9cca165bf5d..f85a470397a5 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -469,19 +469,19 @@ static inline struct intel_gt *to_gt(struct drm_i915_private *i915) > > #define IP_VER(ver, rel) ((ver) << 8 | (rel)) > > -#define GRAPHICS_VER(i915) (RUNTIME_INFO(i915)->graphics.ver) > -#define GRAPHICS_VER_FULL(i915) IP_VER(RUNTIME_INFO(i915)->graphics.ver, \ > - RUNTIME_INFO(i915)->graphics.rel) > +#define GRAPHICS_VER(i915) (RUNTIME_INFO(i915)->graphics.version.ver) > +#define GRAPHICS_VER_FULL(i915) IP_VER(RUNTIME_INFO(i915)->graphics.version.ver, \ > + RUNTIME_INFO(i915)->graphics.version.rel) > #define IS_GRAPHICS_VER(i915, from, until) \ > (GRAPHICS_VER(i915) >= (from) && GRAPHICS_VER(i915) <= (until)) > > -#define MEDIA_VER(i915) (INTEL_INFO(i915)->media.ver) > -#define MEDIA_VER_FULL(i915) IP_VER(INTEL_INFO(i915)->media.ver, \ > - INTEL_INFO(i915)->media.rel) > +#define MEDIA_VER(i915) (RUNTIME_INFO(i915)->media.version.ver) > +#define MEDIA_VER_FULL(i915) IP_VER(RUNTIME_INFO(i915)->media.version.ver, \ > + RUNTIME_INFO(i915)->media.version.rel) > #define IS_MEDIA_VER(i915, from, until) \ > (MEDIA_VER(i915) >= (from) && MEDIA_VER(i915) <= (until)) > > -#define DISPLAY_VER(i915) (INTEL_INFO(i915)->display.ver) > +#define DISPLAY_VER(i915) (RUNTIME_INFO(i915)->display.version.ver) > #define IS_DISPLAY_VER(i915, from, until) \ > (DISPLAY_VER(i915) >= (from) && DISPLAY_VER(i915) <= (until)) > > diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c > index 26b25d9434d6..f6aaf938c53c 100644 > --- a/drivers/gpu/drm/i915/i915_pci.c > +++ b/drivers/gpu/drm/i915/i915_pci.c > @@ -34,9 +34,9 @@ > > #define PLATFORM(x) .platform = (x) > #define GEN(x) \ > - .__runtime.graphics.ver = (x), \ > - .media.ver = (x), \ > - .display.ver = (x) > + .__runtime.graphics.version.ver = (x), \ > + .__runtime.media.version.ver = (x), \ > + .__runtime.display.version.ver = (x) > > #define I845_PIPE_OFFSETS \ > .display.pipe_offsets = { \ > @@ -740,7 +740,7 @@ static const struct intel_device_info bxt_info = { > static const struct intel_device_info glk_info = { > GEN9_LP_FEATURES, > PLATFORM(INTEL_GEMINILAKE), > - .display.ver = 10, > + .__runtime.display.version.ver = 10, > .display.dbuf.size = 1024 - 4, /* 4 blocks for bypass path allocation */ > GLK_COLORS, > }; > @@ -919,7 +919,7 @@ static const struct intel_device_info rkl_info = { > static const struct intel_device_info dg1_info = { > GEN12_FEATURES, > DGFX_FEATURES, > - .__runtime.graphics.rel = 10, > + .__runtime.graphics.version.rel = 10, > PLATFORM(INTEL_DG1), > .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D), > .require_force_probe = 1, > @@ -962,7 +962,7 @@ static const struct intel_device_info adl_s_info = { > .display.has_hotplug = 1, \ > .display.has_ipc = 1, \ > .display.has_psr = 1, \ > - .display.ver = 13, \ > + .__runtime.display.version.ver = 13, \ > .__runtime.pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D), \ > .display.pipe_offsets = { \ > [TRANSCODER_A] = PIPE_A_OFFSET, \ > @@ -1006,8 +1006,8 @@ static const struct intel_device_info adl_p_info = { > I915_GTT_PAGE_SIZE_2M > > #define XE_HP_FEATURES \ > - .__runtime.graphics.ver = 12, \ > - .__runtime.graphics.rel = 50, \ > + .__runtime.graphics.version.ver = 12, \ > + .__runtime.graphics.version.rel = 50, \ > XE_HP_PAGE_SIZES, \ > .dma_mask_size = 46, \ > .has_3d_pipeline = 1, \ > @@ -1027,8 +1027,8 @@ static const struct intel_device_info adl_p_info = { > .__runtime.ppgtt_type = INTEL_PPGTT_FULL > > #define XE_HPM_FEATURES \ > - .media.ver = 12, \ > - .media.rel = 50 > + .__runtime.media.version.ver = 12, \ > + .__runtime.media.version.rel = 50 > > __maybe_unused > static const struct intel_device_info xehpsdv_info = { > @@ -1053,8 +1053,8 @@ static const struct intel_device_info xehpsdv_info = { > XE_HP_FEATURES, \ > XE_HPM_FEATURES, \ > DGFX_FEATURES, \ > - .__runtime.graphics.rel = 55, \ > - .media.rel = 55, \ > + .__runtime.graphics.version.rel = 55, \ > + .__runtime.media.version.rel = 55, \ > PLATFORM(INTEL_DG2), \ > .has_4tile = 1, \ > .has_64k_pages = 1, \ > @@ -1097,8 +1097,8 @@ static const struct intel_device_info pvc_info = { > XE_HPC_FEATURES, > XE_HPM_FEATURES, > DGFX_FEATURES, > - .__runtime.graphics.rel = 60, > - .media.rel = 60, > + .__runtime.graphics.version.rel = 60, > + .__runtime.media.version.rel = 60, > PLATFORM(INTEL_PONTEVECCHIO), > .display = { 0 }, > .has_flat_ccs = 0, > @@ -1111,7 +1111,7 @@ static const struct intel_device_info pvc_info = { > > #define XE_LPDP_FEATURES \ > XE_LPD_FEATURES, \ > - .display.ver = 14, \ > + .__runtime.display.version.ver = 14, \ > .display.has_cdclk_crawl = 1, \ > .__runtime.fbc_mask = BIT(INTEL_FBC_A) | BIT(INTEL_FBC_B) > > @@ -1123,9 +1123,9 @@ static const struct intel_device_info mtl_info = { > * Real graphics IP version will be obtained from hardware GMD_ID > * register. Value provided here is just for sanity checking. > */ > - .__runtime.graphics.ver = 12, > - .__runtime.graphics.rel = 70, > - .media.ver = 13, > + .__runtime.graphics.version.ver = 12, > + .__runtime.graphics.version.rel = 70, > + .__runtime.media.version.ver = 13, > PLATFORM(INTEL_METEORLAKE), > .display.has_modular_fia = 1, > .has_flat_ccs = 0, > @@ -1281,7 +1281,7 @@ bool i915_pci_resource_valid(struct pci_dev *pdev, int bar) > > static bool intel_mmio_bar_valid(struct pci_dev *pdev, struct intel_device_info *intel_info) > { > - int gttmmaddr_bar = intel_info->__runtime.graphics.ver == 2 ? GEN2_GTTMMADR_BAR : GTTMMADR_BAR; > + int gttmmaddr_bar = intel_info->__runtime.graphics.version.ver == 2 ? GEN2_GTTMMADR_BAR : GTTMMADR_BAR; > > return i915_pci_resource_valid(pdev, gttmmaddr_bar); > } > diff --git a/drivers/gpu/drm/i915/intel_device_info.c b/drivers/gpu/drm/i915/intel_device_info.c > index 0a1f97b35f2b..56f19683dd55 100644 > --- a/drivers/gpu/drm/i915/intel_device_info.c > +++ b/drivers/gpu/drm/i915/intel_device_info.c > @@ -92,21 +92,29 @@ void intel_device_info_print(const struct intel_device_info *info, > const struct intel_runtime_info *runtime, > struct drm_printer *p) > { > - if (runtime->graphics.rel) > - drm_printf(p, "graphics version: %u.%02u\n", runtime->graphics.ver, > - runtime->graphics.rel); > + if (runtime->graphics.version.rel) > + drm_printf(p, "graphics version: %u.%02u\n", > + runtime->graphics.version.ver, > + runtime->graphics.version.rel); > else > - drm_printf(p, "graphics version: %u\n", runtime->graphics.ver); > + drm_printf(p, "graphics version: %u\n", > + runtime->graphics.version.ver); > > - if (info->media.rel) > - drm_printf(p, "media version: %u.%02u\n", info->media.ver, info->media.rel); > + if (runtime->media.version.rel) > + drm_printf(p, "media version: %u.%02u\n", > + runtime->media.version.ver, > + runtime->media.version.rel); > else > - drm_printf(p, "media version: %u\n", info->media.ver); > + drm_printf(p, "media version: %u\n", > + runtime->media.version.ver); > > - if (info->display.rel) > - drm_printf(p, "display version: %u.%02u\n", info->display.ver, info->display.rel); > + if (runtime->display.version.rel) > + drm_printf(p, "display version: %u.%02u\n", > + runtime->display.version.ver, > + runtime->display.version.rel); > else > - drm_printf(p, "display version: %u\n", info->display.ver); > + drm_printf(p, "display version: %u\n", > + runtime->display.version.ver); > > drm_printf(p, "gt: %d\n", info->gt); > drm_printf(p, "memory-regions: %x\n", runtime->memory_regions); > diff --git a/drivers/gpu/drm/i915/intel_device_info.h b/drivers/gpu/drm/i915/intel_device_info.h > index 6904ad03ca19..d36cf25f1d5f 100644 > --- a/drivers/gpu/drm/i915/intel_device_info.h > +++ b/drivers/gpu/drm/i915/intel_device_info.h > @@ -200,7 +200,15 @@ struct ip_version { > }; > > struct intel_runtime_info { > - struct ip_version graphics; > + struct { > + struct ip_version version; Bikeshed: It might be more natural to name these inner structures 'ip' rather than 'version' so that elsewhere in the code we'll be dealing with things like runtime->graphics.ip.ver and runtime->graphics.ip.rel. Up to you though. Either way, Reviewed-by: Matt Roper <matthew.d.roper@xxxxxxxxx> > + } graphics; > + struct { > + struct ip_version version; > + } media; > + struct { > + struct ip_version version; > + } display; > > /* > * Platform mask is used for optimizing or-ed IS_PLATFORM calls into > @@ -246,8 +254,6 @@ struct intel_runtime_info { > }; > > struct intel_device_info { > - struct ip_version media; > - > enum intel_platform platform; > > unsigned int dma_mask_size; /* available DMA address bits */ > @@ -259,9 +265,6 @@ struct intel_device_info { > #undef DEFINE_FLAG > > struct { > - u8 ver; > - u8 rel; > - > u8 abox_mask; > > struct { > diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c > index f5904e659ef2..869b952c13a0 100644 > --- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c > +++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c > @@ -172,7 +172,7 @@ struct drm_i915_private *mock_gem_device(void) > /* Using the global GTT may ask questions about KMS users, so prepare */ > drm_mode_config_init(&i915->drm); > > - RUNTIME_INFO(i915)->graphics.ver = -1; > + RUNTIME_INFO(i915)->graphics.version.ver = -1; > > RUNTIME_INFO(i915)->page_sizes = > I915_GTT_PAGE_SIZE_4K | > -- > 2.34.1 > -- Matt Roper Graphics Software Engineer VTT-OSGC Platform Enablement Intel Corporation