drm/i915: Move display and media IP version to runtime info
authorRadhakrishna Sripada <radhakrishna.sripada@intel.com>
Fri, 2 Sep 2022 22:10:54 +0000 (15:10 -0700)
committerRadhakrishna Sripada <radhakrishna.sripada@intel.com>
Mon, 12 Sep 2022 21:52:34 +0000 (14:52 -0700)
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
v4.2:
 - Use ip instead of version for ip_vesion member.(MattR)

Suggested-by: Jani Nikula <jani.nikula@intel.com>
Cc: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220902221054.173524-1-radhakrishna.sripada@intel.com
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_pci.c
drivers/gpu/drm/i915/intel_device_info.c
drivers/gpu/drm/i915/intel_device_info.h
drivers/gpu/drm/i915/selftests/mock_gem_device.c

index 19682c47b79cea3cdb9b0928e30b0daedf706b5a..48f1ce9362a5fdb7fb872f34b35a7fd6a7db4d9a 100644 (file)
@@ -466,19 +466,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.ip.ver)
+#define GRAPHICS_VER_FULL(i915)                IP_VER(RUNTIME_INFO(i915)->graphics.ip.ver, \
+                                              RUNTIME_INFO(i915)->graphics.ip.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.ip.ver)
+#define MEDIA_VER_FULL(i915)           IP_VER(RUNTIME_INFO(i915)->media.ip.ver, \
+                                              RUNTIME_INFO(i915)->media.ip.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.ip.ver)
 #define IS_DISPLAY_VER(i915, from, until) \
        (DISPLAY_VER(i915) >= (from) && DISPLAY_VER(i915) <= (until))
 
index 857e8bb6865c560ccc547880b5f61e907c117d79..1576cbcf2254350d255f99d816593ace54a2c384 100644 (file)
@@ -34,9 +34,9 @@
 
 #define PLATFORM(x) .platform = (x)
 #define GEN(x) \
-       .__runtime.graphics.ver = (x), \
-       .media.ver = (x), \
-       .display.ver = (x)
+       .__runtime.graphics.ip.ver = (x), \
+       .__runtime.media.ip.ver = (x), \
+       .__runtime.display.ip.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.ip.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.ip.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.ip.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.ip.ver = 12, \
+       .__runtime.graphics.ip.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.ip.ver = 12, \
+       .__runtime.media.ip.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.ip.rel = 55, \
+       .__runtime.media.ip.rel = 55, \
        PLATFORM(INTEL_DG2), \
        .has_4tile = 1, \
        .has_64k_pages = 1, \
@@ -1096,8 +1096,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.ip.rel = 60,
+       .__runtime.media.ip.rel = 60,
        PLATFORM(INTEL_PONTEVECCHIO),
        .display = { 0 },
        .has_flat_ccs = 0,
@@ -1110,7 +1110,7 @@ static const struct intel_device_info pvc_info = {
 
 #define XE_LPDP_FEATURES       \
        XE_LPD_FEATURES,        \
-       .display.ver = 14,      \
+       .__runtime.display.ip.ver = 14, \
        .display.has_cdclk_crawl = 1, \
        .__runtime.fbc_mask = BIT(INTEL_FBC_A) | BIT(INTEL_FBC_B)
 
@@ -1122,9 +1122,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.ip.ver = 12,
+       .__runtime.graphics.ip.rel = 70,
+       .__runtime.media.ip.ver = 13,
        PLATFORM(INTEL_METEORLAKE),
        .display.has_modular_fia = 1,
        .has_flat_ccs = 0,
@@ -1280,7 +1280,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.ip.ver == 2 ? GEN2_GTTMMADR_BAR : GTTMMADR_BAR;
 
        return i915_pci_resource_valid(pdev, gttmmaddr_bar);
 }
index 0a1f97b35f2bb7c637d468e36d7eb9c05f8e3c03..1434dc33cf49aeb095feec300821f5c037bd8723 100644 (file)
@@ -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.ip.rel)
+               drm_printf(p, "graphics version: %u.%02u\n",
+                          runtime->graphics.ip.ver,
+                          runtime->graphics.ip.rel);
        else
-               drm_printf(p, "graphics version: %u\n", runtime->graphics.ver);
+               drm_printf(p, "graphics version: %u\n",
+                          runtime->graphics.ip.ver);
 
-       if (info->media.rel)
-               drm_printf(p, "media version: %u.%02u\n", info->media.ver, info->media.rel);
+       if (runtime->media.ip.rel)
+               drm_printf(p, "media version: %u.%02u\n",
+                          runtime->media.ip.ver,
+                          runtime->media.ip.rel);
        else
-               drm_printf(p, "media version: %u\n", info->media.ver);
+               drm_printf(p, "media version: %u\n",
+                          runtime->media.ip.ver);
 
-       if (info->display.rel)
-               drm_printf(p, "display version: %u.%02u\n", info->display.ver, info->display.rel);
+       if (runtime->display.ip.rel)
+               drm_printf(p, "display version: %u.%02u\n",
+                          runtime->display.ip.ver,
+                          runtime->display.ip.rel);
        else
-               drm_printf(p, "display version: %u\n", info->display.ver);
+               drm_printf(p, "display version: %u\n",
+                          runtime->display.ip.ver);
 
        drm_printf(p, "gt: %d\n", info->gt);
        drm_printf(p, "memory-regions: %x\n", runtime->memory_regions);
index 0ccde94b225ff90501050ef62879e65b3b0040bc..b6b971606727c06ad98d59be238ed5dd8d1c0fcb 100644 (file)
@@ -199,7 +199,15 @@ struct ip_version {
 };
 
 struct intel_runtime_info {
-       struct ip_version graphics;
+       struct {
+               struct ip_version ip;
+       } graphics;
+       struct {
+               struct ip_version ip;
+       } media;
+       struct {
+               struct ip_version ip;
+       } display;
 
        /*
         * Platform mask is used for optimizing or-ed IS_PLATFORM calls into
@@ -245,8 +253,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 */
@@ -258,9 +264,6 @@ struct intel_device_info {
 #undef DEFINE_FLAG
 
        struct {
-               u8 ver;
-               u8 rel;
-
                u8 abox_mask;
 
                struct {
index f5904e659ef265ca8e616feca421f90dd0dc0161..1fef5e233436e75baf82e64ce6709d90f89e8854 100644 (file)
@@ -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.ip.ver = -1;
 
        RUNTIME_INFO(i915)->page_sizes =
                I915_GTT_PAGE_SIZE_4K |