[PATCH 11/11] f2
Chris Wilson
chris at chris-wilson.co.uk
Sun Nov 5 12:23:12 UTC 2017
---
drivers/gpu/drm/i915/i915_drv.c | 37 ++++++++++++++++++++++--------
drivers/gpu/drm/i915/i915_gem.c | 2 --
drivers/gpu/drm/i915/i915_gem_gtt.c | 14 ++++--------
drivers/gpu/drm/i915/i915_gem_stolen.c | 4 ++--
drivers/gpu/drm/i915/intel_display.c | 12 ----------
drivers/gpu/drm/i915/intel_pm.c | 42 ++++++++++++++--------------------
6 files changed, 51 insertions(+), 60 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index fe9e539b6c29..5195206de3a1 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -632,8 +632,6 @@ static void i915_gem_fini(struct drm_i915_private *dev_priv)
i915_gem_drain_freed_objects(dev_priv);
WARN_ON(!list_empty(&dev_priv->contexts.list));
-
- intel_cleanup_gt_powersave(dev_priv);
}
static int i915_load_modeset_init(struct drm_device *dev)
@@ -1004,6 +1002,17 @@ static void i915_mmio_cleanup(struct drm_i915_private *dev_priv)
pci_iounmap(pdev, dev_priv->regs);
}
+static void intel_init_czclk(struct drm_i915_private *dev_priv)
+{
+ if (!(IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)))
+ return;
+
+ dev_priv->czclk_freq = vlv_get_cck_clock_hpll(dev_priv, "czclk",
+ CCK_CZ_CLOCK_CONTROL);
+
+ DRM_DEBUG_DRIVER("CZ clock rate: %d kHz\n", dev_priv->czclk_freq);
+}
+
/**
* i915_driver_init_mmio - setup device MMIO
* @dev_priv: device private
@@ -1028,19 +1037,31 @@ static int i915_driver_init_mmio(struct drm_i915_private *dev_priv)
goto err_bridge;
intel_uncore_init(dev_priv);
+ intel_device_info_runtime_init(dev_priv);
+ intel_init_czclk(dev_priv);
+
+ ret = i915_ggtt_probe_hw(dev_priv);
+ if (ret)
+ goto err_uncore;
+
+ intel_init_gt_powersave(dev_priv);
intel_uc_init_mmio(dev_priv);
ret = intel_engines_init_mmio(dev_priv);
if (ret)
- goto err_uncore;
+ goto err_gt;
i915_gem_init_mmio(dev_priv);
return 0;
+err_gt:
+ intel_cleanup_gt_powersave(dev_priv);
+ i915_ggtt_cleanup_hw(dev_priv);
err_uncore:
intel_uncore_fini(dev_priv);
+ i915_mmio_cleanup(dev_priv);
err_bridge:
pci_dev_put(dev_priv->bridge_dev);
@@ -1053,6 +1074,8 @@ static int i915_driver_init_mmio(struct drm_i915_private *dev_priv)
*/
static void i915_driver_cleanup_mmio(struct drm_i915_private *dev_priv)
{
+ intel_cleanup_gt_powersave(dev_priv);
+ i915_ggtt_cleanup_hw(dev_priv);
intel_uncore_fini(dev_priv);
i915_mmio_cleanup(dev_priv);
pci_dev_put(dev_priv->bridge_dev);
@@ -1100,14 +1123,8 @@ static int i915_driver_init_hw(struct drm_i915_private *dev_priv)
if (i915_inject_load_failure())
return -ENODEV;
- intel_device_info_runtime_init(dev_priv);
-
intel_sanitize_options(dev_priv);
- ret = i915_ggtt_probe_hw(dev_priv);
- if (ret)
- return ret;
-
/* WARNING: Apparently we must kick fbdev drivers before vgacon,
* otherwise the vga fbdev driver falls over. */
ret = i915_kick_out_firmware_fb(dev_priv);
@@ -1126,6 +1143,7 @@ static int i915_driver_init_hw(struct drm_i915_private *dev_priv)
if (ret)
return ret;
+
ret = i915_ggtt_enable_hw(dev_priv);
if (ret) {
DRM_ERROR("failed to enable GGTT\n");
@@ -1213,7 +1231,6 @@ static void i915_driver_cleanup_hw(struct drm_i915_private *dev_priv)
pci_disable_msi(pdev);
pm_qos_remove_request(&dev_priv->pm_qos);
- i915_ggtt_cleanup_hw(dev_priv);
}
/**
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 74f230652029..4075f7d1867f 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -5134,8 +5134,6 @@ int i915_gem_init(struct drm_i915_private *dev_priv)
if (ret)
goto out_unlock;
- intel_init_gt_powersave(dev_priv);
-
ret = i915_gem_init_hw(dev_priv);
if (ret)
goto out_unlock;
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 0684d5df97d9..30c9d858adab 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -3503,7 +3503,11 @@ int i915_ggtt_probe_hw(struct drm_i915_private *dev_priv)
if (intel_vtd_active())
DRM_INFO("VT-d active for gfx access\n");
- return 0;
+ /*
+ * Initialise stolen early so that we may reserve preallocated
+ * objects for the BIOS to KMS transition.
+ */
+ return i915_gem_init_stolen(dev_priv);
}
/**
@@ -3537,14 +3541,6 @@ int i915_ggtt_init_hw(struct drm_i915_private *dev_priv)
ggtt->mtrr = arch_phys_wc_add(ggtt->mappable_base, ggtt->mappable_end);
- /*
- * Initialise stolen early so that we may reserve preallocated
- * objects for the BIOS to KMS transition.
- */
- ret = i915_gem_init_stolen(dev_priv);
- if (ret)
- goto out_gtt_cleanup;
-
return 0;
out_gtt_cleanup:
diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c b/drivers/gpu/drm/i915/i915_gem_stolen.c
index 03e7abc7e043..a6f89be75195 100644
--- a/drivers/gpu/drm/i915/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
@@ -657,8 +657,6 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_i915_private *dev_priv
if (!drm_mm_initialized(&dev_priv->mm.stolen))
return NULL;
- lockdep_assert_held(&dev_priv->drm.struct_mutex);
-
DRM_DEBUG_KMS("creating preallocated stolen object: stolen_offset=%x, gtt_offset=%x, size=%x\n",
stolen_offset, gtt_offset, size);
@@ -695,6 +693,8 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_i915_private *dev_priv
if (gtt_offset == I915_GTT_OFFSET_NONE)
return obj;
+ lockdep_assert_held(&dev_priv->drm.struct_mutex);
+
ret = i915_gem_object_pin_pages(obj);
if (ret)
goto err;
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index de91a17c9a47..e88c65e98b4f 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -202,17 +202,6 @@ int vlv_get_cck_clock_hpll(struct drm_i915_private *dev_priv,
dev_priv->hpll_freq);
}
-static void intel_update_czclk(struct drm_i915_private *dev_priv)
-{
- if (!(IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)))
- return;
-
- dev_priv->czclk_freq = vlv_get_cck_clock_hpll(dev_priv, "czclk",
- CCK_CZ_CLOCK_CONTROL);
-
- DRM_DEBUG_DRIVER("CZ clock rate: %d kHz\n", dev_priv->czclk_freq);
-}
-
static inline u32 /* units of 100MHz */
intel_fdi_link_freq(struct drm_i915_private *dev_priv,
const struct intel_crtc_state *pipe_config)
@@ -14542,7 +14531,6 @@ int intel_modeset_init(struct drm_device *dev)
intel_shared_dpll_init(dev);
- intel_update_czclk(dev_priv);
intel_modeset_init_hw(dev);
if (dev_priv->max_cdclk_freq == 0)
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 3d9b0b7c4a5e..4d402ad0130d 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -7028,24 +7028,6 @@ static int valleyview_rps_min_freq(struct drm_i915_private *dev_priv)
return max_t(u32, val, 0xc0);
}
-/* Check that the pctx buffer wasn't move under us. */
-static void valleyview_check_pctx(struct drm_i915_private *dev_priv)
-{
- unsigned long pctx_addr = I915_READ(VLV_PCBR) & ~4095;
-
- WARN_ON(pctx_addr != dev_priv->mm.stolen_base +
- dev_priv->gt_pm.rc6.pctx->stolen->start);
-}
-
-
-/* Check that the pcbr address is not empty. */
-static void cherryview_check_pctx(struct drm_i915_private *dev_priv)
-{
- unsigned long pctx_addr = I915_READ(VLV_PCBR) & ~4095;
-
- WARN_ON((pctx_addr >> VLV_PCBR_ADDR_SHIFT) == 0);
-}
-
static void vlv_reserve_pctx(struct drm_i915_private *dev_priv, int pctx_size)
{
struct drm_i915_gem_object *pctx;
@@ -7054,13 +7036,12 @@ static void vlv_reserve_pctx(struct drm_i915_private *dev_priv, int pctx_size)
pcbr = I915_READ(VLV_PCBR);
if (pcbr) {
/* BIOS set it up already, grab the pre-alloc'd space */
- u32 start = round_down(pcbr, 4096);
- u32 end = round_up(pcbr + pctx_size, 4096);
+ u32 offset = round_down(pcbr, 4096) - dev_priv->mm.stolen_base;
pctx = i915_gem_object_create_stolen_for_preallocated(dev_priv,
- start - dev_priv->mm.stolen_base,
+ offset,
I915_GTT_OFFSET_NONE,
- end - start);
+ pctx_size);
} else {
DRM_DEBUG_DRIVER("BIOS didn't set up PCBR, fixing up\n");
@@ -7075,7 +7056,7 @@ static void vlv_reserve_pctx(struct drm_i915_private *dev_priv, int pctx_size)
pctx = i915_gem_object_create_stolen(dev_priv, pctx_size);
if (!pctx) {
DRM_DEBUG("not enough stolen space for PCTX, disabling\n");
- return;
+ goto out;
}
I915_WRITE(VLV_PCBR,
@@ -7083,9 +7064,20 @@ static void vlv_reserve_pctx(struct drm_i915_private *dev_priv, int pctx_size)
}
DRM_DEBUG_DRIVER("PCBR: 0x%08x [0x%08x]\n", I915_READ(VLV_PCBR), pcbr);
+out:
+ if (!pctx)
+ DRM_ERROR("Failed to reserve memory for the power context; (PCBR: 0x%08x, size %d KiB; stolen base 0x%08x)\n", pcbr, pctx_size >> 10, (u32)dev_priv->mm.stolen_base);
dev_priv->gt_pm.rc6.pctx = pctx;
}
+static void vlv_check_pctx(struct drm_i915_private *dev_priv)
+{
+ u32 pctx_addr = I915_READ(VLV_PCBR) & ~4095;
+
+ WARN_ON(pctx_addr - dev_priv->mm.stolen_base !=
+ dev_priv->gt_pm.rc6.pctx->stolen->start);
+}
+
static void valleyview_setup_pctx(struct drm_i915_private *dev_priv)
{
vlv_reserve_pctx(dev_priv, 24 << 10);
@@ -7216,7 +7208,7 @@ static void cherryview_enable_rc6(struct drm_i915_private *dev_priv)
I915_WRITE(GTFIFODBG, gtfifodbg);
}
- cherryview_check_pctx(dev_priv);
+ vlv_check_pctx(dev_priv);
/* 1a & 1b: Get forcewake during program sequence. Although the driver
* hasn't enabled a state yet where we need forcewake, BIOS may have.*/
@@ -7304,7 +7296,7 @@ static void valleyview_enable_rc6(struct drm_i915_private *dev_priv)
enum intel_engine_id id;
u32 gtfifodbg, rc6_mode = 0;
- valleyview_check_pctx(dev_priv);
+ vlv_check_pctx(dev_priv);
gtfifodbg = I915_READ(GTFIFODBG);
if (gtfifodbg) {
--
2.15.0
More information about the Intel-gfx-trybot
mailing list