There is no way to differentiate TGL-U from TGL-Y by the PCI ids as
some ids are available in both SKUs.
So here using the root device id in the PCI bus that iGPU is in
to differentiate between U and Y.

BSpec: 44455
Reviewed-by: Swathi Dhanavanthri <swathi.dhanavant...@intel.com>
Signed-off-by: José Roberto de Souza <jose.so...@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h          |  6 ++++++
 drivers/gpu/drm/i915/i915_reg.h          |  6 ++++++
 drivers/gpu/drm/i915/intel_device_info.c | 19 +++++++++++++++++++
 3 files changed, 31 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 05a2624116a1..bacb4c762f5b 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1487,6 +1487,12 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
 #define IS_ICL_WITH_PORT_F(dev_priv) \
        IS_SUBPLATFORM(dev_priv, INTEL_ICELAKE, INTEL_SUBPLATFORM_PORTF)
 
+#define IS_TGL_U(dev_priv) \
+       IS_SUBPLATFORM(dev_priv, INTEL_TIGERLAKE, INTEL_SUBPLATFORM_ULT)
+
+#define IS_TGL_Y(dev_priv) \
+       IS_SUBPLATFORM(dev_priv, INTEL_TIGERLAKE, INTEL_SUBPLATFORM_ULX)
+
 #define SKL_REVID_A0           0x0
 #define SKL_REVID_B0           0x1
 #define SKL_REVID_C0           0x2
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index e85c6fc1f3cb..14d8c3fbcc0d 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -12353,4 +12353,10 @@ enum skl_power_gate {
 #define   DSB_ENABLE                   (1 << 31)
 #define   DSB_STATUS                   (1 << 0)
 
+#define TGL_ROOT_DEVICE_ID             0x9A00
+#define TGL_ROOT_DEVICE_MASK           0xFF00
+#define TGL_ROOT_DEVICE_SKU_MASK       0xF
+#define TGL_ROOT_DEVICE_SKU_ULX                0x2
+#define TGL_ROOT_DEVICE_SKU_ULT                0x4
+
 #endif /* _I915_REG_H_ */
diff --git a/drivers/gpu/drm/i915/intel_device_info.c 
b/drivers/gpu/drm/i915/intel_device_info.c
index 40c590db3c76..e2aa5bc3a6e0 100644
--- a/drivers/gpu/drm/i915/intel_device_info.c
+++ b/drivers/gpu/drm/i915/intel_device_info.c
@@ -346,6 +346,25 @@ void intel_device_info_subplatform_init(struct 
drm_i915_private *i915)
                mask = BIT(INTEL_SUBPLATFORM_PORTF);
        }
 
+       if (IS_TIGERLAKE(i915)) {
+               struct pci_dev *root, *pdev = i915->drm.pdev;
+
+               root = list_first_entry(&pdev->bus->devices, typeof(*root), 
bus_list);
+
+               drm_WARN_ON(&i915->drm, mask);
+               drm_WARN_ON(&i915->drm, (root->device & TGL_ROOT_DEVICE_MASK) !=
+                           TGL_ROOT_DEVICE_ID);
+
+               switch (root->device & TGL_ROOT_DEVICE_SKU_MASK) {
+               case TGL_ROOT_DEVICE_SKU_ULX:
+                       mask = BIT(INTEL_SUBPLATFORM_ULX);
+                       break;
+               case TGL_ROOT_DEVICE_SKU_ULT:
+                       mask = BIT(INTEL_SUBPLATFORM_ULT);
+                       break;
+               }
+       }
+
        GEM_BUG_ON(mask & ~INTEL_SUBPLATFORM_BITS);
 
        RUNTIME_INFO(i915)->platform_mask[pi] |= mask;
-- 
2.28.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to