|
@@ -395,6 +395,36 @@ static const struct intel_device_info intel_broxton_info = {
|
|
|
IVB_CURSOR_OFFSETS,
|
|
|
};
|
|
|
|
|
|
+static const struct intel_device_info intel_kabylake_info = {
|
|
|
+ .is_preliminary = 1,
|
|
|
+ .is_kabylake = 1,
|
|
|
+ .gen = 9,
|
|
|
+ .num_pipes = 3,
|
|
|
+ .need_gfx_hws = 1, .has_hotplug = 1,
|
|
|
+ .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING,
|
|
|
+ .has_llc = 1,
|
|
|
+ .has_ddi = 1,
|
|
|
+ .has_fpga_dbg = 1,
|
|
|
+ .has_fbc = 1,
|
|
|
+ GEN_DEFAULT_PIPEOFFSETS,
|
|
|
+ IVB_CURSOR_OFFSETS,
|
|
|
+};
|
|
|
+
|
|
|
+static const struct intel_device_info intel_kabylake_gt3_info = {
|
|
|
+ .is_preliminary = 1,
|
|
|
+ .is_kabylake = 1,
|
|
|
+ .gen = 9,
|
|
|
+ .num_pipes = 3,
|
|
|
+ .need_gfx_hws = 1, .has_hotplug = 1,
|
|
|
+ .ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING,
|
|
|
+ .has_llc = 1,
|
|
|
+ .has_ddi = 1,
|
|
|
+ .has_fpga_dbg = 1,
|
|
|
+ .has_fbc = 1,
|
|
|
+ GEN_DEFAULT_PIPEOFFSETS,
|
|
|
+ IVB_CURSOR_OFFSETS,
|
|
|
+};
|
|
|
+
|
|
|
/*
|
|
|
* Make sure any device matches here are from most specific to most
|
|
|
* general. For example, since the Quanta match is based on the subsystem
|
|
@@ -461,7 +491,7 @@ static enum intel_pch intel_virt_detect_pch(struct drm_device *dev)
|
|
|
} else if (IS_HASWELL(dev) || IS_BROADWELL(dev)) {
|
|
|
ret = PCH_LPT;
|
|
|
DRM_DEBUG_KMS("Assuming LynxPoint PCH\n");
|
|
|
- } else if (IS_SKYLAKE(dev)) {
|
|
|
+ } else if (IS_SKYLAKE(dev) || IS_KABYLAKE(dev)) {
|
|
|
ret = PCH_SPT;
|
|
|
DRM_DEBUG_KMS("Assuming SunrisePoint PCH\n");
|
|
|
}
|
|
@@ -524,11 +554,13 @@ void intel_detect_pch(struct drm_device *dev)
|
|
|
} else if (id == INTEL_PCH_SPT_DEVICE_ID_TYPE) {
|
|
|
dev_priv->pch_type = PCH_SPT;
|
|
|
DRM_DEBUG_KMS("Found SunrisePoint PCH\n");
|
|
|
- WARN_ON(!IS_SKYLAKE(dev));
|
|
|
+ WARN_ON(!IS_SKYLAKE(dev) &&
|
|
|
+ !IS_KABYLAKE(dev));
|
|
|
} else if (id == INTEL_PCH_SPT_LP_DEVICE_ID_TYPE) {
|
|
|
dev_priv->pch_type = PCH_SPT;
|
|
|
DRM_DEBUG_KMS("Found SunrisePoint LP PCH\n");
|
|
|
- WARN_ON(!IS_SKYLAKE(dev));
|
|
|
+ WARN_ON(!IS_SKYLAKE(dev) &&
|
|
|
+ !IS_KABYLAKE(dev));
|
|
|
} else if (id == INTEL_PCH_P2X_DEVICE_ID_TYPE) {
|
|
|
dev_priv->pch_type = intel_virt_detect_pch(dev);
|
|
|
} else
|
|
@@ -836,7 +868,7 @@ static int i915_drm_resume_early(struct drm_device *dev)
|
|
|
|
|
|
if (IS_BROXTON(dev))
|
|
|
ret = bxt_resume_prepare(dev_priv);
|
|
|
- else if (IS_SKYLAKE(dev_priv))
|
|
|
+ else if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv))
|
|
|
ret = skl_resume_prepare(dev_priv);
|
|
|
else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
|
|
|
hsw_disable_pc8(dev_priv);
|
|
@@ -1583,7 +1615,7 @@ static int intel_runtime_resume(struct device *device)
|
|
|
|
|
|
if (IS_BROXTON(dev))
|
|
|
ret = bxt_resume_prepare(dev_priv);
|
|
|
- else if (IS_SKYLAKE(dev))
|
|
|
+ else if (IS_SKYLAKE(dev) || IS_KABYLAKE(dev))
|
|
|
ret = skl_resume_prepare(dev_priv);
|
|
|
else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
|
|
|
hsw_disable_pc8(dev_priv);
|
|
@@ -1627,7 +1659,7 @@ static int intel_suspend_complete(struct drm_i915_private *dev_priv)
|
|
|
|
|
|
if (IS_BROXTON(dev_priv))
|
|
|
ret = bxt_suspend_complete(dev_priv);
|
|
|
- else if (IS_SKYLAKE(dev_priv))
|
|
|
+ else if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv))
|
|
|
ret = skl_suspend_complete(dev_priv);
|
|
|
else if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
|
|
|
ret = hsw_suspend_complete(dev_priv);
|