mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 01:34:14 +08:00
One fix targeting stable for display DP VSC, plus DG1 display fix and
a bug fix of IRQs usages and cleanup references to the DRM IRQ midlayer. -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEbSBwaO7dZQkcLOKj+mJfZA7rE8oFAmDlw5EACgkQ+mJfZA7r E8opywf/TlQC3hwWhOEfit2Sr3YbJVtqVR/1AmTPW+/5PoothXor2tuWpIijAj9L UGgVcFjCCJ22uC9GQQewW8E9BGM8P6+0QLrNp9EwrjlzuEjLXz3UYjdoTuXROYQu Czquux2HXohrL/wSA6lyWqKyPS/vgajengbR9A7WSreq1c5nkZC6EIklQawM2DsK fa45WrCu9kPo9FPjcEI5KpL68DzStazfA4nDrNve7R6hEV05ouUGo7t5qDq2yPFf wZm/+KjTfLfPQ8ab+RTsccEc2fFP+pcpy2iq2n7FVHLjCzZUhVnrBeDPKX1H35yX vx7xM7y2S7MaT0bLmkiU+b6ISVyExA== =Ew6e -----END PGP SIGNATURE----- Merge tag 'drm-intel-next-fixes-2021-07-07' of git://anongit.freedesktop.org/drm/drm-intel into drm-next One fix targeting stable for display DP VSC, plus DG1 display fix and a bug fix of IRQs usages and cleanup references to the DRM IRQ midlayer. Signed-off-by: Dave Airlie <airlied@redhat.com> From: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/YOXDp/+CFDgJ2/7f@intel.com
This commit is contained in:
commit
5cebdea6f8
@ -1791,10 +1791,23 @@ static struct intel_shared_dpll *dg1_ddi_get_pll(struct intel_encoder *encoder)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(encoder->base.dev);
|
||||
enum phy phy = intel_port_to_phy(i915, encoder->port);
|
||||
enum intel_dpll_id id;
|
||||
u32 val;
|
||||
|
||||
return _cnl_ddi_get_pll(i915, DG1_DPCLKA_CFGCR0(phy),
|
||||
DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy),
|
||||
DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy));
|
||||
val = intel_de_read(i915, DG1_DPCLKA_CFGCR0(phy));
|
||||
val &= DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy);
|
||||
val >>= DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy);
|
||||
id = val;
|
||||
|
||||
/*
|
||||
* _DG1_DPCLKA0_CFGCR0 maps between DPLL 0 and 1 with one bit for phy A
|
||||
* and B while _DG1_DPCLKA1_CFGCR0 maps between DPLL 2 and 3 with one
|
||||
* bit for phy C and D.
|
||||
*/
|
||||
if (phy >= PHY_C)
|
||||
id += DPLL_ID_DG1_DPLL2;
|
||||
|
||||
return intel_get_shared_dpll_by_id(i915, id);
|
||||
}
|
||||
|
||||
static void icl_ddi_combo_enable_clock(struct intel_encoder *encoder,
|
||||
|
@ -2868,7 +2868,7 @@ static int intel_dp_vsc_sdp_unpack(struct drm_dp_vsc_sdp *vsc,
|
||||
if (size < sizeof(struct dp_sdp))
|
||||
return -EINVAL;
|
||||
|
||||
memset(vsc, 0, size);
|
||||
memset(vsc, 0, sizeof(*vsc));
|
||||
|
||||
if (sdp->sdp_header.HB0 != 0)
|
||||
return -EINVAL;
|
||||
|
@ -1279,7 +1279,7 @@ bool intel_engine_is_idle(struct intel_engine_cs *engine)
|
||||
return true;
|
||||
|
||||
/* Waiting to drain ELSP? */
|
||||
synchronize_hardirq(to_pci_dev(engine->i915->drm.dev)->irq);
|
||||
intel_synchronize_hardirq(engine->i915);
|
||||
intel_engine_flush_submission(engine);
|
||||
|
||||
/* ELSP is empty, but there are ready requests? E.g. after reset */
|
||||
|
@ -184,8 +184,11 @@ static int xcs_resume(struct intel_engine_cs *engine)
|
||||
ENGINE_TRACE(engine, "ring:{HEAD:%04x, TAIL:%04x}\n",
|
||||
ring->head, ring->tail);
|
||||
|
||||
/* Double check the ring is empty & disabled before we resume */
|
||||
synchronize_hardirq(engine->i915->drm.irq);
|
||||
/*
|
||||
* Double check the ring is empty & disabled before we resume. Called
|
||||
* from atomic context during PCI probe, so _hardirq().
|
||||
*/
|
||||
intel_synchronize_hardirq(engine->i915);
|
||||
if (!stop_ring(engine))
|
||||
goto err;
|
||||
|
||||
|
@ -42,7 +42,6 @@
|
||||
#include <drm/drm_aperture.h>
|
||||
#include <drm/drm_atomic_helper.h>
|
||||
#include <drm/drm_ioctl.h>
|
||||
#include <drm/drm_irq.h>
|
||||
#include <drm/drm_managed.h>
|
||||
#include <drm/drm_probe_helper.h>
|
||||
|
||||
|
@ -33,7 +33,6 @@
|
||||
#include <linux/sysrq.h>
|
||||
|
||||
#include <drm/drm_drv.h>
|
||||
#include <drm/drm_irq.h>
|
||||
|
||||
#include "display/intel_de.h"
|
||||
#include "display/intel_display_types.h"
|
||||
@ -4564,10 +4563,6 @@ void intel_runtime_pm_enable_interrupts(struct drm_i915_private *dev_priv)
|
||||
|
||||
bool intel_irqs_enabled(struct drm_i915_private *dev_priv)
|
||||
{
|
||||
/*
|
||||
* We only use drm_irq_uninstall() at unload and VT switch, so
|
||||
* this is the only thing we need to check.
|
||||
*/
|
||||
return dev_priv->runtime_pm.irqs_enabled;
|
||||
}
|
||||
|
||||
@ -4575,3 +4570,8 @@ void intel_synchronize_irq(struct drm_i915_private *i915)
|
||||
{
|
||||
synchronize_irq(to_pci_dev(i915->drm.dev)->irq);
|
||||
}
|
||||
|
||||
void intel_synchronize_hardirq(struct drm_i915_private *i915)
|
||||
{
|
||||
synchronize_hardirq(to_pci_dev(i915->drm.dev)->irq);
|
||||
}
|
||||
|
@ -94,6 +94,7 @@ void intel_runtime_pm_disable_interrupts(struct drm_i915_private *dev_priv);
|
||||
void intel_runtime_pm_enable_interrupts(struct drm_i915_private *dev_priv);
|
||||
bool intel_irqs_enabled(struct drm_i915_private *dev_priv);
|
||||
void intel_synchronize_irq(struct drm_i915_private *i915);
|
||||
void intel_synchronize_hardirq(struct drm_i915_private *i915);
|
||||
|
||||
int intel_get_crtc_scanline(struct intel_crtc *crtc);
|
||||
void gen8_irq_power_well_post_enable(struct drm_i915_private *dev_priv,
|
||||
|
@ -10513,7 +10513,6 @@ enum skl_power_gate {
|
||||
#define _DG1_DPCLKA1_CFGCR0 0x16C280
|
||||
#define _DG1_DPCLKA_PHY_IDX(phy) ((phy) % 2)
|
||||
#define _DG1_DPCLKA_PLL_IDX(pll) ((pll) % 2)
|
||||
#define _DG1_PHY_DPLL_MAP(phy) ((phy) >= PHY_C ? DPLL_ID_DG1_DPLL2 : DPLL_ID_DG1_DPLL0)
|
||||
#define DG1_DPCLKA_CFGCR0(phy) _MMIO_PHY((phy) / 2, \
|
||||
_DG1_DPCLKA_CFGCR0, \
|
||||
_DG1_DPCLKA1_CFGCR0)
|
||||
@ -10521,8 +10520,6 @@ enum skl_power_gate {
|
||||
#define DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy) (_DG1_DPCLKA_PHY_IDX(phy) * 2)
|
||||
#define DG1_DPCLKA_CFGCR0_DDI_CLK_SEL(pll, phy) (_DG1_DPCLKA_PLL_IDX(pll) << DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy))
|
||||
#define DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy) (0x3 << DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy))
|
||||
#define DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_DPLL_MAP(clk_sel, phy) \
|
||||
(((clk_sel) >> DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy)) + _DG1_PHY_DPLL_MAP(phy))
|
||||
|
||||
/* ADLS Clocks */
|
||||
#define _ADLS_DPCLKA_CFGCR0 0x164280
|
||||
|
Loading…
Reference in New Issue
Block a user