Skip to content

Commit 5cebdea

Browse files
committed
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 <[email protected]> From: Rodrigo Vivi <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/YOXDp/+CFDgJ2/[email protected]
2 parents 0d3a1b3 + 3dd6c11 commit 5cebdea

File tree

8 files changed

+29
-16
lines changed

8 files changed

+29
-16
lines changed

drivers/gpu/drm/i915/display/intel_ddi.c

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1791,10 +1791,23 @@ static struct intel_shared_dpll *dg1_ddi_get_pll(struct intel_encoder *encoder)
17911791
{
17921792
struct drm_i915_private *i915 = to_i915(encoder->base.dev);
17931793
enum phy phy = intel_port_to_phy(i915, encoder->port);
1794+
enum intel_dpll_id id;
1795+
u32 val;
17941796

1795-
return _cnl_ddi_get_pll(i915, DG1_DPCLKA_CFGCR0(phy),
1796-
DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy),
1797-
DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy));
1797+
val = intel_de_read(i915, DG1_DPCLKA_CFGCR0(phy));
1798+
val &= DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy);
1799+
val >>= DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy);
1800+
id = val;
1801+
1802+
/*
1803+
* _DG1_DPCLKA0_CFGCR0 maps between DPLL 0 and 1 with one bit for phy A
1804+
* and B while _DG1_DPCLKA1_CFGCR0 maps between DPLL 2 and 3 with one
1805+
* bit for phy C and D.
1806+
*/
1807+
if (phy >= PHY_C)
1808+
id += DPLL_ID_DG1_DPLL2;
1809+
1810+
return intel_get_shared_dpll_by_id(i915, id);
17981811
}
17991812

18001813
static void icl_ddi_combo_enable_clock(struct intel_encoder *encoder,

drivers/gpu/drm/i915/display/intel_dp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2868,7 +2868,7 @@ static int intel_dp_vsc_sdp_unpack(struct drm_dp_vsc_sdp *vsc,
28682868
if (size < sizeof(struct dp_sdp))
28692869
return -EINVAL;
28702870

2871-
memset(vsc, 0, size);
2871+
memset(vsc, 0, sizeof(*vsc));
28722872

28732873
if (sdp->sdp_header.HB0 != 0)
28742874
return -EINVAL;

drivers/gpu/drm/i915/gt/intel_engine_cs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1279,7 +1279,7 @@ bool intel_engine_is_idle(struct intel_engine_cs *engine)
12791279
return true;
12801280

12811281
/* Waiting to drain ELSP? */
1282-
synchronize_hardirq(to_pci_dev(engine->i915->drm.dev)->irq);
1282+
intel_synchronize_hardirq(engine->i915);
12831283
intel_engine_flush_submission(engine);
12841284

12851285
/* ELSP is empty, but there are ready requests? E.g. after reset */

drivers/gpu/drm/i915/gt/intel_ring_submission.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,11 @@ static int xcs_resume(struct intel_engine_cs *engine)
184184
ENGINE_TRACE(engine, "ring:{HEAD:%04x, TAIL:%04x}\n",
185185
ring->head, ring->tail);
186186

187-
/* Double check the ring is empty & disabled before we resume */
188-
synchronize_hardirq(engine->i915->drm.irq);
187+
/*
188+
* Double check the ring is empty & disabled before we resume. Called
189+
* from atomic context during PCI probe, so _hardirq().
190+
*/
191+
intel_synchronize_hardirq(engine->i915);
189192
if (!stop_ring(engine))
190193
goto err;
191194

drivers/gpu/drm/i915/i915_drv.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
#include <drm/drm_aperture.h>
4343
#include <drm/drm_atomic_helper.h>
4444
#include <drm/drm_ioctl.h>
45-
#include <drm/drm_irq.h>
4645
#include <drm/drm_managed.h>
4746
#include <drm/drm_probe_helper.h>
4847

drivers/gpu/drm/i915/i915_irq.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
#include <linux/sysrq.h>
3434

3535
#include <drm/drm_drv.h>
36-
#include <drm/drm_irq.h>
3736

3837
#include "display/intel_de.h"
3938
#include "display/intel_display_types.h"
@@ -4564,14 +4563,15 @@ void intel_runtime_pm_enable_interrupts(struct drm_i915_private *dev_priv)
45644563

45654564
bool intel_irqs_enabled(struct drm_i915_private *dev_priv)
45664565
{
4567-
/*
4568-
* We only use drm_irq_uninstall() at unload and VT switch, so
4569-
* this is the only thing we need to check.
4570-
*/
45714566
return dev_priv->runtime_pm.irqs_enabled;
45724567
}
45734568

45744569
void intel_synchronize_irq(struct drm_i915_private *i915)
45754570
{
45764571
synchronize_irq(to_pci_dev(i915->drm.dev)->irq);
45774572
}
4573+
4574+
void intel_synchronize_hardirq(struct drm_i915_private *i915)
4575+
{
4576+
synchronize_hardirq(to_pci_dev(i915->drm.dev)->irq);
4577+
}

drivers/gpu/drm/i915/i915_irq.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ void intel_runtime_pm_disable_interrupts(struct drm_i915_private *dev_priv);
9494
void intel_runtime_pm_enable_interrupts(struct drm_i915_private *dev_priv);
9595
bool intel_irqs_enabled(struct drm_i915_private *dev_priv);
9696
void intel_synchronize_irq(struct drm_i915_private *i915);
97+
void intel_synchronize_hardirq(struct drm_i915_private *i915);
9798

9899
int intel_get_crtc_scanline(struct intel_crtc *crtc);
99100
void gen8_irq_power_well_post_enable(struct drm_i915_private *dev_priv,

drivers/gpu/drm/i915/i915_reg.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10513,16 +10513,13 @@ enum skl_power_gate {
1051310513
#define _DG1_DPCLKA1_CFGCR0 0x16C280
1051410514
#define _DG1_DPCLKA_PHY_IDX(phy) ((phy) % 2)
1051510515
#define _DG1_DPCLKA_PLL_IDX(pll) ((pll) % 2)
10516-
#define _DG1_PHY_DPLL_MAP(phy) ((phy) >= PHY_C ? DPLL_ID_DG1_DPLL2 : DPLL_ID_DG1_DPLL0)
1051710516
#define DG1_DPCLKA_CFGCR0(phy) _MMIO_PHY((phy) / 2, \
1051810517
_DG1_DPCLKA_CFGCR0, \
1051910518
_DG1_DPCLKA1_CFGCR0)
1052010519
#define DG1_DPCLKA_CFGCR0_DDI_CLK_OFF(phy) REG_BIT(_DG1_DPCLKA_PHY_IDX(phy) + 10)
1052110520
#define DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy) (_DG1_DPCLKA_PHY_IDX(phy) * 2)
1052210521
#define DG1_DPCLKA_CFGCR0_DDI_CLK_SEL(pll, phy) (_DG1_DPCLKA_PLL_IDX(pll) << DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy))
1052310522
#define DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(phy) (0x3 << DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy))
10524-
#define DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_DPLL_MAP(clk_sel, phy) \
10525-
(((clk_sel) >> DG1_DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(phy)) + _DG1_PHY_DPLL_MAP(phy))
1052610523

1052710524
/* ADLS Clocks */
1052810525
#define _ADLS_DPCLKA_CFGCR0 0x164280

0 commit comments

Comments
 (0)