Merge tag 'drm-intel-next-2020-04-30' of git://anongit.freedesktop.org/drm/drm-intel into drm-next
Driver Changes: - Fix GitLab #1698: Performance regression with Linux 5.7-rc1 on Iris Plus 655 and 4K screen (Chris) - Add Wa_14011059788 for Tigerlake (Matt A) - Add per ctx batchbuffer wa for timestamp for Gen12 (Mika) - Use indirect ctx bb to load cmd buffer control value from context image to avoid corruption (Mika) - Enable DP Display Audio WA (Uma, Jani) - Update forcewake firmware ranges for Icelake (Radhakrishna) - Add missing deinitialization cases of load failure for display (Jose) - Implement TC cold sequences for Icelake and Tigerlake (Jose) - Unbreak enable_dpcd_backlight modparam (Lyude) - Move the late flush_submission in retire to the end (Chris) - Demote "Reducing compressed framebufer size" message to info (Peter) - Push MST link retraining to the hotplug work (Ville) - Hold obj->vma.lock over for_each_ggtt_vma() (Chris) - Fix timeout handling during TypeC AUX power well enabling for ICL (Imre) - Fix skl+ non-scaled pfit modes (Ville) - Prefer soft-rc6 over RPS DOWN_TIMEOUT (Chris) - Sanitize GT first before poisoning HWSP (Chris) - Fix up clock RPS frequency readout (Chris) - Avoid reusing the same logical CCID (Chris) - Avoid dereferencing a dead context (Chris) - Always enable busy-stats for execlists (Chris) - Apply the aggressive downclocking to parking (Chris) - Restore aggressive post-boost downclocking (Chris) - Scrub execlists state on resume (Chris) - Add debugfs attributes for LPSP (Ansuman) - Improvements to kernel selftests (Chris, Mika) - Add tiled blits selftest (Zbigniew) - Fix error handling in __live_lrc_indirect_ctx_bb() (Dan) - Add pre/post plane updates for SAGV (Stanislav) - Add ICL PG3 PW ID for EHL (Anshuman) - Fix Sphinx build duplicate label warning (Jani) - Error log non-zero audio power refcount after unbind (Jani) - Remove object_is_locked assertion from unpin_from_display_plane (Chris) - Use single set of AUX powerwell ops for gen11+ (Matt R) - Prefer drm_WARN_ON over WARN_ON (Pankaj) - Poison residual state [HWSP] across resume (Chris, Tvrtko) - Convert request-before-CS assertion to debug (Chris) - Carefully order virtual_submission_tasklet (Chris) - Check carefully for an idle engine in wait-for-idle (Chris) - Only close vma we open (Chris) - Trace RPS events (Chris) - Use the RPM config register to determine clk frequencies (Chris) - Drop rq->ring->vma peeking from error capture (Chris) - Check preempt-timeout target before submit_ports (Chris) - Check HWSP cacheline is valid before acquiring (Chris) - Use proper fault mask in interrupt postinstall too (Matt R) - Keep a no-frills swappable copy of the default context state (Chris) - Add atomic helpers for bandwidth (Stanislav) - Refactor setting dma info to a common helper from device info (Michael) - Refactor DDI transcoder code for clairty (Ville) - Extend PG3 power well ID to ICL (Anshuman) - Refactor PFIT code for readability and future extensibility (Ville) - Clarify code split between intel_ddi.c and intel_dp.c (Ville) - Move out code to return the digital_port of the aux ch (Jose) - Move rps.enabled/active and use of RPS interrupts to flags (Chris) - Remove superfluous inlines and dead code (Jani) - Re-disable -Wframe-address from top-level Makefile (Nick) - Static checker and spelling fixes (Colin, Nathan) - Split long lines (Ville) Signed-off-by: Dave Airlie <airlied@redhat.com> From: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200430124904.GA100924@jlahtine-desk.ger.corp.intel.com
このコミットが含まれているのは:
@@ -228,14 +228,14 @@ static int i915_driver_modeset_probe_noirq(struct drm_i915_private *i915)
|
||||
ret = drm_vblank_init(&i915->drm,
|
||||
INTEL_NUM_PIPES(i915));
|
||||
if (ret)
|
||||
goto out;
|
||||
return ret;
|
||||
}
|
||||
|
||||
intel_bios_init(i915);
|
||||
|
||||
ret = intel_vga_register(i915);
|
||||
if (ret)
|
||||
goto out;
|
||||
goto cleanup_bios;
|
||||
|
||||
intel_power_domains_init_hw(i915, false);
|
||||
|
||||
@@ -243,13 +243,16 @@ static int i915_driver_modeset_probe_noirq(struct drm_i915_private *i915)
|
||||
|
||||
ret = intel_modeset_init_noirq(i915);
|
||||
if (ret)
|
||||
goto cleanup_vga_client;
|
||||
goto cleanup_vga_client_pw_domain_csr;
|
||||
|
||||
return 0;
|
||||
|
||||
cleanup_vga_client:
|
||||
cleanup_vga_client_pw_domain_csr:
|
||||
intel_csr_ucode_fini(i915);
|
||||
intel_power_domains_driver_remove(i915);
|
||||
intel_vga_unregister(i915);
|
||||
out:
|
||||
cleanup_bios:
|
||||
intel_bios_driver_remove(i915);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -308,13 +311,13 @@ static void i915_driver_modeset_remove(struct drm_i915_private *i915)
|
||||
/* part #2: call after irq uninstall */
|
||||
static void i915_driver_modeset_remove_noirq(struct drm_i915_private *i915)
|
||||
{
|
||||
intel_modeset_driver_remove_noirq(i915);
|
||||
intel_csr_ucode_fini(i915);
|
||||
|
||||
intel_bios_driver_remove(i915);
|
||||
intel_power_domains_driver_remove(i915);
|
||||
|
||||
intel_vga_unregister(i915);
|
||||
|
||||
intel_csr_ucode_fini(i915);
|
||||
intel_bios_driver_remove(i915);
|
||||
}
|
||||
|
||||
static void intel_init_dpio(struct drm_i915_private *dev_priv)
|
||||
@@ -566,6 +569,62 @@ static void intel_sanitize_options(struct drm_i915_private *dev_priv)
|
||||
intel_gvt_sanitize_options(dev_priv);
|
||||
}
|
||||
|
||||
/**
|
||||
* i915_set_dma_info - set all relevant PCI dma info as configured for the
|
||||
* platform
|
||||
* @i915: valid i915 instance
|
||||
*
|
||||
* Set the dma max segment size, device and coherent masks. The dma mask set
|
||||
* needs to occur before i915_ggtt_probe_hw.
|
||||
*
|
||||
* A couple of platforms have special needs. Address them as well.
|
||||
*
|
||||
*/
|
||||
static int i915_set_dma_info(struct drm_i915_private *i915)
|
||||
{
|
||||
struct pci_dev *pdev = i915->drm.pdev;
|
||||
unsigned int mask_size = INTEL_INFO(i915)->dma_mask_size;
|
||||
int ret;
|
||||
|
||||
GEM_BUG_ON(!mask_size);
|
||||
|
||||
/*
|
||||
* We don't have a max segment size, so set it to the max so sg's
|
||||
* debugging layer doesn't complain
|
||||
*/
|
||||
dma_set_max_seg_size(&pdev->dev, UINT_MAX);
|
||||
|
||||
ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(mask_size));
|
||||
if (ret)
|
||||
goto mask_err;
|
||||
|
||||
/* overlay on gen2 is broken and can't address above 1G */
|
||||
if (IS_GEN(i915, 2))
|
||||
mask_size = 30;
|
||||
|
||||
/*
|
||||
* 965GM sometimes incorrectly writes to hardware status page (HWS)
|
||||
* using 32bit addressing, overwriting memory if HWS is located
|
||||
* above 4GB.
|
||||
*
|
||||
* The documentation also mentions an issue with undefined
|
||||
* behaviour if any general state is accessed within a page above 4GB,
|
||||
* which also needs to be handled carefully.
|
||||
*/
|
||||
if (IS_I965G(i915) || IS_I965GM(i915))
|
||||
mask_size = 32;
|
||||
|
||||
ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(mask_size));
|
||||
if (ret)
|
||||
goto mask_err;
|
||||
|
||||
return 0;
|
||||
|
||||
mask_err:
|
||||
drm_err(&i915->drm, "Can't set DMA mask/consistent mask (%d)\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* i915_driver_hw_probe - setup state requiring device access
|
||||
* @dev_priv: device private
|
||||
@@ -611,6 +670,10 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
|
||||
/* needs to be done before ggtt probe */
|
||||
intel_dram_edram_detect(dev_priv);
|
||||
|
||||
ret = i915_set_dma_info(dev_priv);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
i915_perf_init(dev_priv);
|
||||
|
||||
ret = i915_ggtt_probe_hw(dev_priv);
|
||||
@@ -639,40 +702,6 @@ static int i915_driver_hw_probe(struct drm_i915_private *dev_priv)
|
||||
|
||||
pci_set_master(pdev);
|
||||
|
||||
/*
|
||||
* We don't have a max segment size, so set it to the max so sg's
|
||||
* debugging layer doesn't complain
|
||||
*/
|
||||
dma_set_max_seg_size(&pdev->dev, UINT_MAX);
|
||||
|
||||
/* overlay on gen2 is broken and can't address above 1G */
|
||||
if (IS_GEN(dev_priv, 2)) {
|
||||
ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(30));
|
||||
if (ret) {
|
||||
drm_err(&dev_priv->drm, "failed to set DMA mask\n");
|
||||
|
||||
goto err_mem_regions;
|
||||
}
|
||||
}
|
||||
|
||||
/* 965GM sometimes incorrectly writes to hardware status page (HWS)
|
||||
* using 32bit addressing, overwriting memory if HWS is located
|
||||
* above 4GB.
|
||||
*
|
||||
* The documentation also mentions an issue with undefined
|
||||
* behaviour if any general state is accessed within a page above 4GB,
|
||||
* which also needs to be handled carefully.
|
||||
*/
|
||||
if (IS_I965G(dev_priv) || IS_I965GM(dev_priv)) {
|
||||
ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
|
||||
|
||||
if (ret) {
|
||||
drm_err(&dev_priv->drm, "failed to set DMA mask\n");
|
||||
|
||||
goto err_mem_regions;
|
||||
}
|
||||
}
|
||||
|
||||
cpu_latency_qos_add_request(&dev_priv->pm_qos, PM_QOS_DEFAULT_VALUE);
|
||||
|
||||
intel_gt_init_workarounds(dev_priv);
|
||||
@@ -984,7 +1013,7 @@ int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
out_cleanup_irq:
|
||||
intel_irq_uninstall(i915);
|
||||
out_cleanup_modeset:
|
||||
/* FIXME */
|
||||
i915_driver_modeset_remove_noirq(i915);
|
||||
out_cleanup_hw:
|
||||
i915_driver_hw_remove(i915);
|
||||
intel_memory_regions_driver_release(i915);
|
||||
@@ -1020,12 +1049,12 @@ void i915_driver_remove(struct drm_i915_private *i915)
|
||||
|
||||
intel_irq_uninstall(i915);
|
||||
|
||||
i915_driver_modeset_remove_noirq(i915);
|
||||
intel_modeset_driver_remove_noirq(i915);
|
||||
|
||||
i915_reset_error_state(i915);
|
||||
i915_gem_driver_remove(i915);
|
||||
|
||||
intel_power_domains_driver_remove(i915);
|
||||
i915_driver_modeset_remove_noirq(i915);
|
||||
|
||||
i915_driver_hw_remove(i915);
|
||||
|
||||
|
新しいイシューから参照
ユーザーをブロックする