* Supporting fused display configurations v2
@ 2013-12-12 11:20 Damien Lespiau
2013-12-12 11:20 ` [PATCH 1/6] drm/i915: Make the intel_device_info structure kept in dev_priv writable Damien Lespiau
` (5 more replies)
0 siblings, 6 replies; 9+ messages in thread
From: Damien Lespiau @ 2013-12-12 11:20 UTC (permalink / raw)
To: intel-gfx
The previous series (and cover letter) can be found at:
http://lists.freedesktop.org/archives/intel-gfx/2013-December/036949.html
Changes:
- Use SFUSE_STRAP bit 7 in addition to FUSE_STRAP bit 30 to detect fused off
display,
- Remove pipe C test for now as we don't know of any device that uses it,
- Add a note in patch 5 that it needs testing before applying,
- Add a note on how the first patch was done to help reviewing it.
--
Damien
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/6] drm/i915: Make the intel_device_info structure kept in dev_priv writable
2013-12-12 11:20 Supporting fused display configurations v2 Damien Lespiau
@ 2013-12-12 11:20 ` Damien Lespiau
2013-12-12 11:42 ` Ville Syrjälä
2013-12-12 11:20 ` [PATCH 2/6] drm/i915: Move num_plane to the intel_device_info structure Damien Lespiau
` (4 subsequent siblings)
5 siblings, 1 reply; 9+ messages in thread
From: Damien Lespiau @ 2013-12-12 11:20 UTC (permalink / raw)
To: intel-gfx
Turns out it'd be nice to change some device information at run-time or
simply have some code to fill in the info struct instead of having to
declare the values in 30+ structures.
What prompted this change is handling fused out display/pipe and
tweaking num_pipes at run-time, but I'm quite sure we'll find other
flags/limits to stick into dev_priv->info.
Most of the changes were done with a sed:
sed -i -e 's/dev_priv->info->/dev_priv->info./g' drivers/gpu/drm/i915/*[ch]
with a few tweaks to make it all work:
- Change the field definition in struct drm_i915_private
- adjust i915_dump_device_info()
- adjust i915_driver_load()
- adjust the INTEL_INFO() macro
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
---
drivers/gpu/drm/i915/i915_dma.c | 4 +-
drivers/gpu/drm/i915/i915_drv.h | 4 +-
drivers/gpu/drm/i915/i915_gem.c | 2 +-
drivers/gpu/drm/i915/i915_irq.c | 4 +-
drivers/gpu/drm/i915/i915_reg.h | 228 +++++++++++++++++------------------
drivers/gpu/drm/i915/intel_display.c | 20 +--
drivers/gpu/drm/i915/intel_pm.c | 12 +-
7 files changed, 137 insertions(+), 137 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index bfbf9fc..332d5b6 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1442,7 +1442,7 @@ static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
static void i915_dump_device_info(struct drm_i915_private *dev_priv)
{
- const struct intel_device_info *info = dev_priv->info;
+ const struct intel_device_info *info = &dev_priv->info;
#define PRINT_S(name) "%s"
#define SEP_EMPTY
@@ -1492,7 +1492,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
dev->dev_private = (void *)dev_priv;
dev_priv->dev = dev;
- dev_priv->info = info;
+ memcpy(&dev_priv->info, info, sizeof(*info));
spin_lock_init(&dev_priv->irq_lock);
spin_lock_init(&dev_priv->gpu_error.lock);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 46072b9..6a7844c 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1327,7 +1327,7 @@ typedef struct drm_i915_private {
struct drm_device *dev;
struct kmem_cache *slab;
- const struct intel_device_info *info;
+ struct intel_device_info info;
int relative_constants_mode;
@@ -1751,7 +1751,7 @@ struct drm_i915_file_private {
atomic_t rps_wait_boost;
};
-#define INTEL_INFO(dev) (to_i915(dev)->info)
+#define INTEL_INFO(dev) (&to_i915(dev)->info)
#define IS_I830(dev) ((dev)->pdev->device == 0x3577)
#define IS_845G(dev) ((dev)->pdev->device == 0x2562)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 4ecfbf7..8ea7b53 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1027,7 +1027,7 @@ static int __wait_seqno(struct intel_ring_buffer *ring, u32 seqno,
timeout_jiffies = timeout ? timespec_to_jiffies_timeout(timeout) : 1;
- if (dev_priv->info->gen >= 6 && can_wait_boost(file_priv)) {
+ if (dev_priv->info.gen >= 6 && can_wait_boost(file_priv)) {
gen6_rps_boost(dev_priv);
if (file_priv)
mod_delayed_work(dev_priv->wq,
diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
index 1d44c79..eb4adbc 100644
--- a/drivers/gpu/drm/i915/i915_irq.c
+++ b/drivers/gpu/drm/i915/i915_irq.c
@@ -2209,7 +2209,7 @@ static int i915_enable_vblank(struct drm_device *dev, int pipe)
PIPE_VBLANK_INTERRUPT_ENABLE);
/* maintain vblank delivery even in deep C-states */
- if (dev_priv->info->gen == 3)
+ if (dev_priv->info.gen == 3)
I915_WRITE(INSTPM, _MASKED_BIT_DISABLE(INSTPM_AGPBUSY_DIS));
spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
@@ -2281,7 +2281,7 @@ static void i915_disable_vblank(struct drm_device *dev, int pipe)
unsigned long irqflags;
spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
- if (dev_priv->info->gen == 3)
+ if (dev_priv->info.gen == 3)
I915_WRITE(INSTPM, _MASKED_BIT_ENABLE(INSTPM_AGPBUSY_DIS));
i915_disable_pipestat(dev_priv, pipe,
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index e8cc27c..67e9673 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -1213,8 +1213,8 @@
#define VGA1_PD_P1_DIV_2 (1 << 13)
#define VGA1_PD_P1_SHIFT 8
#define VGA1_PD_P1_MASK (0x1f << 8)
-#define _DPLL_A (dev_priv->info->display_mmio_offset + 0x6014)
-#define _DPLL_B (dev_priv->info->display_mmio_offset + 0x6018)
+#define _DPLL_A (dev_priv->info.display_mmio_offset + 0x6014)
+#define _DPLL_B (dev_priv->info.display_mmio_offset + 0x6018)
#define DPLL(pipe) _PIPE(pipe, _DPLL_A, _DPLL_B)
#define DPLL_VCO_ENABLE (1 << 31)
#define DPLL_SDVO_HIGH_SPEED (1 << 30)
@@ -1277,7 +1277,7 @@
#define SDVO_MULTIPLIER_MASK 0x000000ff
#define SDVO_MULTIPLIER_SHIFT_HIRES 4
#define SDVO_MULTIPLIER_SHIFT_VGA 0
-#define _DPLL_A_MD (dev_priv->info->display_mmio_offset + 0x601c) /* 965+ only */
+#define _DPLL_A_MD (dev_priv->info.display_mmio_offset + 0x601c) /* 965+ only */
/*
* UDI pixel divider, controlling how many pixels are stuffed into a packet.
*
@@ -1314,7 +1314,7 @@
*/
#define DPLL_MD_VGA_UDI_MULTIPLIER_MASK 0x0000003f
#define DPLL_MD_VGA_UDI_MULTIPLIER_SHIFT 0
-#define _DPLL_B_MD (dev_priv->info->display_mmio_offset + 0x6020) /* 965+ only */
+#define _DPLL_B_MD (dev_priv->info.display_mmio_offset + 0x6020) /* 965+ only */
#define DPLL_MD(pipe) _PIPE(pipe, _DPLL_A_MD, _DPLL_B_MD)
#define _FPA0 0x06040
@@ -1347,7 +1347,7 @@
#define DSTATE_PLL_D3_OFF (1<<3)
#define DSTATE_GFX_CLOCK_GATING (1<<1)
#define DSTATE_DOT_CLOCK_GATING (1<<0)
-#define DSPCLK_GATE_D (dev_priv->info->display_mmio_offset + 0x6200)
+#define DSPCLK_GATE_D (dev_priv->info.display_mmio_offset + 0x6200)
# define DPUNIT_B_CLOCK_GATE_DISABLE (1 << 30) /* 965 */
# define VSUNIT_CLOCK_GATE_DISABLE (1 << 29) /* 965 */
# define VRHUNIT_CLOCK_GATE_DISABLE (1 << 28) /* 965 */
@@ -1472,8 +1472,8 @@
* Palette regs
*/
-#define _PALETTE_A (dev_priv->info->display_mmio_offset + 0xa000)
-#define _PALETTE_B (dev_priv->info->display_mmio_offset + 0xa800)
+#define _PALETTE_A (dev_priv->info.display_mmio_offset + 0xa000)
+#define _PALETTE_B (dev_priv->info.display_mmio_offset + 0xa800)
#define PALETTE(pipe) _PIPE(pipe, _PALETTE_A, _PALETTE_B)
/* MCH MMIO space */
@@ -1861,7 +1861,7 @@
*/
/* Pipe A CRC regs */
-#define _PIPE_CRC_CTL_A (dev_priv->info->display_mmio_offset + 0x60050)
+#define _PIPE_CRC_CTL_A (dev_priv->info.display_mmio_offset + 0x60050)
#define PIPE_CRC_ENABLE (1 << 31)
/* ivb+ source selection */
#define PIPE_CRC_SOURCE_PRIMARY_IVB (0 << 29)
@@ -1901,11 +1901,11 @@
#define _PIPE_CRC_RES_4_A_IVB 0x60070
#define _PIPE_CRC_RES_5_A_IVB 0x60074
-#define _PIPE_CRC_RES_RED_A (dev_priv->info->display_mmio_offset + 0x60060)
-#define _PIPE_CRC_RES_GREEN_A (dev_priv->info->display_mmio_offset + 0x60064)
-#define _PIPE_CRC_RES_BLUE_A (dev_priv->info->display_mmio_offset + 0x60068)
-#define _PIPE_CRC_RES_RES1_A_I915 (dev_priv->info->display_mmio_offset + 0x6006c)
-#define _PIPE_CRC_RES_RES2_A_G4X (dev_priv->info->display_mmio_offset + 0x60080)
+#define _PIPE_CRC_RES_RED_A (dev_priv->info.display_mmio_offset + 0x60060)
+#define _PIPE_CRC_RES_GREEN_A (dev_priv->info.display_mmio_offset + 0x60064)
+#define _PIPE_CRC_RES_BLUE_A (dev_priv->info.display_mmio_offset + 0x60068)
+#define _PIPE_CRC_RES_RES1_A_I915 (dev_priv->info.display_mmio_offset + 0x6006c)
+#define _PIPE_CRC_RES_RES2_A_G4X (dev_priv->info.display_mmio_offset + 0x60080)
/* Pipe B CRC regs */
#define _PIPE_CRC_RES_1_B_IVB 0x61064
@@ -1938,26 +1938,26 @@
_PIPE_INC(pipe, _PIPE_CRC_RES_RES2_A_G4X, 0x01000)
/* Pipe A timing regs */
-#define _HTOTAL_A (dev_priv->info->display_mmio_offset + 0x60000)
-#define _HBLANK_A (dev_priv->info->display_mmio_offset + 0x60004)
-#define _HSYNC_A (dev_priv->info->display_mmio_offset + 0x60008)
-#define _VTOTAL_A (dev_priv->info->display_mmio_offset + 0x6000c)
-#define _VBLANK_A (dev_priv->info->display_mmio_offset + 0x60010)
-#define _VSYNC_A (dev_priv->info->display_mmio_offset + 0x60014)
-#define _PIPEASRC (dev_priv->info->display_mmio_offset + 0x6001c)
-#define _BCLRPAT_A (dev_priv->info->display_mmio_offset + 0x60020)
-#define _VSYNCSHIFT_A (dev_priv->info->display_mmio_offset + 0x60028)
+#define _HTOTAL_A (dev_priv->info.display_mmio_offset + 0x60000)
+#define _HBLANK_A (dev_priv->info.display_mmio_offset + 0x60004)
+#define _HSYNC_A (dev_priv->info.display_mmio_offset + 0x60008)
+#define _VTOTAL_A (dev_priv->info.display_mmio_offset + 0x6000c)
+#define _VBLANK_A (dev_priv->info.display_mmio_offset + 0x60010)
+#define _VSYNC_A (dev_priv->info.display_mmio_offset + 0x60014)
+#define _PIPEASRC (dev_priv->info.display_mmio_offset + 0x6001c)
+#define _BCLRPAT_A (dev_priv->info.display_mmio_offset + 0x60020)
+#define _VSYNCSHIFT_A (dev_priv->info.display_mmio_offset + 0x60028)
/* Pipe B timing regs */
-#define _HTOTAL_B (dev_priv->info->display_mmio_offset + 0x61000)
-#define _HBLANK_B (dev_priv->info->display_mmio_offset + 0x61004)
-#define _HSYNC_B (dev_priv->info->display_mmio_offset + 0x61008)
-#define _VTOTAL_B (dev_priv->info->display_mmio_offset + 0x6100c)
-#define _VBLANK_B (dev_priv->info->display_mmio_offset + 0x61010)
-#define _VSYNC_B (dev_priv->info->display_mmio_offset + 0x61014)
-#define _PIPEBSRC (dev_priv->info->display_mmio_offset + 0x6101c)
-#define _BCLRPAT_B (dev_priv->info->display_mmio_offset + 0x61020)
-#define _VSYNCSHIFT_B (dev_priv->info->display_mmio_offset + 0x61028)
+#define _HTOTAL_B (dev_priv->info.display_mmio_offset + 0x61000)
+#define _HBLANK_B (dev_priv->info.display_mmio_offset + 0x61004)
+#define _HSYNC_B (dev_priv->info.display_mmio_offset + 0x61008)
+#define _VTOTAL_B (dev_priv->info.display_mmio_offset + 0x6100c)
+#define _VBLANK_B (dev_priv->info.display_mmio_offset + 0x61010)
+#define _VSYNC_B (dev_priv->info.display_mmio_offset + 0x61014)
+#define _PIPEBSRC (dev_priv->info.display_mmio_offset + 0x6101c)
+#define _BCLRPAT_B (dev_priv->info.display_mmio_offset + 0x61020)
+#define _VSYNCSHIFT_B (dev_priv->info.display_mmio_offset + 0x61028)
#define HTOTAL(trans) _TRANSCODER(trans, _HTOTAL_A, _HTOTAL_B)
#define HBLANK(trans) _TRANSCODER(trans, _HBLANK_A, _HBLANK_B)
@@ -2083,7 +2083,7 @@
/* Hotplug control (945+ only) */
-#define PORT_HOTPLUG_EN (dev_priv->info->display_mmio_offset + 0x61110)
+#define PORT_HOTPLUG_EN (dev_priv->info.display_mmio_offset + 0x61110)
#define PORTB_HOTPLUG_INT_EN (1 << 29)
#define PORTC_HOTPLUG_INT_EN (1 << 28)
#define PORTD_HOTPLUG_INT_EN (1 << 27)
@@ -2113,7 +2113,7 @@
#define CRT_HOTPLUG_DETECT_VOLTAGE_325MV (0 << 2)
#define CRT_HOTPLUG_DETECT_VOLTAGE_475MV (1 << 2)
-#define PORT_HOTPLUG_STAT (dev_priv->info->display_mmio_offset + 0x61114)
+#define PORT_HOTPLUG_STAT (dev_priv->info.display_mmio_offset + 0x61114)
/*
* HDMI/DP bits are gen4+
*
@@ -2385,7 +2385,7 @@
#define PP_DIVISOR 0x61210
/* Panel fitting */
-#define PFIT_CONTROL (dev_priv->info->display_mmio_offset + 0x61230)
+#define PFIT_CONTROL (dev_priv->info.display_mmio_offset + 0x61230)
#define PFIT_ENABLE (1 << 31)
#define PFIT_PIPE_MASK (3 << 29)
#define PFIT_PIPE_SHIFT 29
@@ -2403,7 +2403,7 @@
#define PFIT_SCALING_PROGRAMMED (1 << 26)
#define PFIT_SCALING_PILLAR (2 << 26)
#define PFIT_SCALING_LETTER (3 << 26)
-#define PFIT_PGM_RATIOS (dev_priv->info->display_mmio_offset + 0x61234)
+#define PFIT_PGM_RATIOS (dev_priv->info.display_mmio_offset + 0x61234)
/* Pre-965 */
#define PFIT_VERT_SCALE_SHIFT 20
#define PFIT_VERT_SCALE_MASK 0xfff00000
@@ -2415,25 +2415,25 @@
#define PFIT_HORIZ_SCALE_SHIFT_965 0
#define PFIT_HORIZ_SCALE_MASK_965 0x00001fff
-#define PFIT_AUTO_RATIOS (dev_priv->info->display_mmio_offset + 0x61238)
+#define PFIT_AUTO_RATIOS (dev_priv->info.display_mmio_offset + 0x61238)
-#define _VLV_BLC_PWM_CTL2_A (dev_priv->info->display_mmio_offset + 0x61250)
-#define _VLV_BLC_PWM_CTL2_B (dev_priv->info->display_mmio_offset + 0x61350)
+#define _VLV_BLC_PWM_CTL2_A (dev_priv->info.display_mmio_offset + 0x61250)
+#define _VLV_BLC_PWM_CTL2_B (dev_priv->info.display_mmio_offset + 0x61350)
#define VLV_BLC_PWM_CTL2(pipe) _PIPE(pipe, _VLV_BLC_PWM_CTL2_A, \
_VLV_BLC_PWM_CTL2_B)
-#define _VLV_BLC_PWM_CTL_A (dev_priv->info->display_mmio_offset + 0x61254)
-#define _VLV_BLC_PWM_CTL_B (dev_priv->info->display_mmio_offset + 0x61354)
+#define _VLV_BLC_PWM_CTL_A (dev_priv->info.display_mmio_offset + 0x61254)
+#define _VLV_BLC_PWM_CTL_B (dev_priv->info.display_mmio_offset + 0x61354)
#define VLV_BLC_PWM_CTL(pipe) _PIPE(pipe, _VLV_BLC_PWM_CTL_A, \
_VLV_BLC_PWM_CTL_B)
-#define _VLV_BLC_HIST_CTL_A (dev_priv->info->display_mmio_offset + 0x61260)
-#define _VLV_BLC_HIST_CTL_B (dev_priv->info->display_mmio_offset + 0x61360)
+#define _VLV_BLC_HIST_CTL_A (dev_priv->info.display_mmio_offset + 0x61260)
+#define _VLV_BLC_HIST_CTL_B (dev_priv->info.display_mmio_offset + 0x61360)
#define VLV_BLC_HIST_CTL(pipe) _PIPE(pipe, _VLV_BLC_HIST_CTL_A, \
_VLV_BLC_HIST_CTL_B)
/* Backlight control */
-#define BLC_PWM_CTL2 (dev_priv->info->display_mmio_offset + 0x61250) /* 965+ only */
+#define BLC_PWM_CTL2 (dev_priv->info.display_mmio_offset + 0x61250) /* 965+ only */
#define BLM_PWM_ENABLE (1 << 31)
#define BLM_COMBINATION_MODE (1 << 30) /* gen4 only */
#define BLM_PIPE_SELECT (1 << 29)
@@ -2456,7 +2456,7 @@
#define BLM_PHASE_IN_COUNT_MASK (0xff << 8)
#define BLM_PHASE_IN_INCR_SHIFT (0)
#define BLM_PHASE_IN_INCR_MASK (0xff << 0)
-#define BLC_PWM_CTL (dev_priv->info->display_mmio_offset + 0x61254)
+#define BLC_PWM_CTL (dev_priv->info.display_mmio_offset + 0x61254)
/*
* This is the most significant 15 bits of the number of backlight cycles in a
* complete cycle of the modulated backlight control.
@@ -2478,7 +2478,7 @@
#define BACKLIGHT_DUTY_CYCLE_MASK_PNV (0xfffe)
#define BLM_POLARITY_PNV (1 << 0) /* pnv only */
-#define BLC_HIST_CTL (dev_priv->info->display_mmio_offset + 0x61260)
+#define BLC_HIST_CTL (dev_priv->info.display_mmio_offset + 0x61260)
/* New registers for PCH-split platforms. Safe where new bits show up, the
* register layout machtes with gen4 BLC_PWM_CTL[12]. */
@@ -3172,10 +3172,10 @@
/* Display & cursor control */
/* Pipe A */
-#define _PIPEADSL (dev_priv->info->display_mmio_offset + 0x70000)
+#define _PIPEADSL (dev_priv->info.display_mmio_offset + 0x70000)
#define DSL_LINEMASK_GEN2 0x00000fff
#define DSL_LINEMASK_GEN3 0x00001fff
-#define _PIPEACONF (dev_priv->info->display_mmio_offset + 0x70008)
+#define _PIPEACONF (dev_priv->info.display_mmio_offset + 0x70008)
#define PIPECONF_ENABLE (1<<31)
#define PIPECONF_DISABLE 0
#define PIPECONF_DOUBLE_WIDE (1<<30)
@@ -3218,7 +3218,7 @@
#define PIPECONF_DITHER_TYPE_ST1 (1<<2)
#define PIPECONF_DITHER_TYPE_ST2 (2<<2)
#define PIPECONF_DITHER_TYPE_TEMP (3<<2)
-#define _PIPEASTAT (dev_priv->info->display_mmio_offset + 0x70024)
+#define _PIPEASTAT (dev_priv->info.display_mmio_offset + 0x70024)
#define PIPE_FIFO_UNDERRUN_STATUS (1UL<<31)
#define SPRITE1_FLIPDONE_INT_EN_VLV (1UL<<30)
#define PIPE_CRC_ERROR_ENABLE (1UL<<29)
@@ -3317,7 +3317,7 @@
#define DSPARB_BEND_SHIFT 9 /* on 855 */
#define DSPARB_AEND_SHIFT 0
-#define DSPFW1 (dev_priv->info->display_mmio_offset + 0x70034)
+#define DSPFW1 (dev_priv->info.display_mmio_offset + 0x70034)
#define DSPFW_SR_SHIFT 23
#define DSPFW_SR_MASK (0x1ff<<23)
#define DSPFW_CURSORB_SHIFT 16
@@ -3325,11 +3325,11 @@
#define DSPFW_PLANEB_SHIFT 8
#define DSPFW_PLANEB_MASK (0x7f<<8)
#define DSPFW_PLANEA_MASK (0x7f)
-#define DSPFW2 (dev_priv->info->display_mmio_offset + 0x70038)
+#define DSPFW2 (dev_priv->info.display_mmio_offset + 0x70038)
#define DSPFW_CURSORA_MASK 0x00003f00
#define DSPFW_CURSORA_SHIFT 8
#define DSPFW_PLANEC_MASK (0x7f)
-#define DSPFW3 (dev_priv->info->display_mmio_offset + 0x7003c)
+#define DSPFW3 (dev_priv->info.display_mmio_offset + 0x7003c)
#define DSPFW_HPLL_SR_EN (1<<31)
#define DSPFW_CURSOR_SR_SHIFT 24
#define PINEVIEW_SELF_REFRESH_EN (1<<30)
@@ -3337,8 +3337,8 @@
#define DSPFW_HPLL_CURSOR_SHIFT 16
#define DSPFW_HPLL_CURSOR_MASK (0x3f<<16)
#define DSPFW_HPLL_SR_MASK (0x1ff)
-#define DSPFW4 (dev_priv->info->display_mmio_offset + 0x70070)
-#define DSPFW7 (dev_priv->info->display_mmio_offset + 0x7007c)
+#define DSPFW4 (dev_priv->info.display_mmio_offset + 0x70070)
+#define DSPFW7 (dev_priv->info.display_mmio_offset + 0x7007c)
/* drain latency register values*/
#define DRAIN_LATENCY_PRECISION_32 32
@@ -3498,12 +3498,12 @@
#define PIPE_PIXEL_MASK 0x00ffffff
#define PIPE_PIXEL_SHIFT 0
/* GM45+ just has to be different */
-#define _PIPEA_FRMCOUNT_GM45 (dev_priv->info->display_mmio_offset + 0x70040)
-#define _PIPEA_FLIPCOUNT_GM45 (dev_priv->info->display_mmio_offset + 0x70044)
+#define _PIPEA_FRMCOUNT_GM45 (dev_priv->info.display_mmio_offset + 0x70040)
+#define _PIPEA_FLIPCOUNT_GM45 (dev_priv->info.display_mmio_offset + 0x70044)
#define PIPE_FRMCOUNT_GM45(pipe) _PIPE(pipe, _PIPEA_FRMCOUNT_GM45, _PIPEB_FRMCOUNT_GM45)
/* Cursor A & B regs */
-#define _CURACNTR (dev_priv->info->display_mmio_offset + 0x70080)
+#define _CURACNTR (dev_priv->info.display_mmio_offset + 0x70080)
/* Old style CUR*CNTR flags (desktop 8xx) */
#define CURSOR_ENABLE 0x80000000
#define CURSOR_GAMMA_ENABLE 0x40000000
@@ -3526,16 +3526,16 @@
#define MCURSOR_PIPE_B (1 << 28)
#define MCURSOR_GAMMA_ENABLE (1 << 26)
#define CURSOR_TRICKLE_FEED_DISABLE (1 << 14)
-#define _CURABASE (dev_priv->info->display_mmio_offset + 0x70084)
-#define _CURAPOS (dev_priv->info->display_mmio_offset + 0x70088)
+#define _CURABASE (dev_priv->info.display_mmio_offset + 0x70084)
+#define _CURAPOS (dev_priv->info.display_mmio_offset + 0x70088)
#define CURSOR_POS_MASK 0x007FF
#define CURSOR_POS_SIGN 0x8000
#define CURSOR_X_SHIFT 0
#define CURSOR_Y_SHIFT 16
#define CURSIZE 0x700a0
-#define _CURBCNTR (dev_priv->info->display_mmio_offset + 0x700c0)
-#define _CURBBASE (dev_priv->info->display_mmio_offset + 0x700c4)
-#define _CURBPOS (dev_priv->info->display_mmio_offset + 0x700c8)
+#define _CURBCNTR (dev_priv->info.display_mmio_offset + 0x700c0)
+#define _CURBBASE (dev_priv->info.display_mmio_offset + 0x700c4)
+#define _CURBPOS (dev_priv->info.display_mmio_offset + 0x700c8)
#define _CURBCNTR_IVB 0x71080
#define _CURBBASE_IVB 0x71084
@@ -3550,7 +3550,7 @@
#define CURPOS_IVB(pipe) _PIPE(pipe, _CURAPOS, _CURBPOS_IVB)
/* Display A control */
-#define _DSPACNTR (dev_priv->info->display_mmio_offset + 0x70180)
+#define _DSPACNTR (dev_priv->info.display_mmio_offset + 0x70180)
#define DISPLAY_PLANE_ENABLE (1<<31)
#define DISPLAY_PLANE_DISABLE 0
#define DISPPLANE_GAMMA_ENABLE (1<<30)
@@ -3584,14 +3584,14 @@
#define DISPPLANE_STEREO_POLARITY_SECOND (1<<18)
#define DISPPLANE_TRICKLE_FEED_DISABLE (1<<14) /* Ironlake */
#define DISPPLANE_TILED (1<<10)
-#define _DSPAADDR (dev_priv->info->display_mmio_offset + 0x70184)
-#define _DSPASTRIDE (dev_priv->info->display_mmio_offset + 0x70188)
-#define _DSPAPOS (dev_priv->info->display_mmio_offset + 0x7018C) /* reserved */
-#define _DSPASIZE (dev_priv->info->display_mmio_offset + 0x70190)
-#define _DSPASURF (dev_priv->info->display_mmio_offset + 0x7019C) /* 965+ only */
-#define _DSPATILEOFF (dev_priv->info->display_mmio_offset + 0x701A4) /* 965+ only */
-#define _DSPAOFFSET (dev_priv->info->display_mmio_offset + 0x701A4) /* HSW */
-#define _DSPASURFLIVE (dev_priv->info->display_mmio_offset + 0x701AC)
+#define _DSPAADDR (dev_priv->info.display_mmio_offset + 0x70184)
+#define _DSPASTRIDE (dev_priv->info.display_mmio_offset + 0x70188)
+#define _DSPAPOS (dev_priv->info.display_mmio_offset + 0x7018C) /* reserved */
+#define _DSPASIZE (dev_priv->info.display_mmio_offset + 0x70190)
+#define _DSPASURF (dev_priv->info.display_mmio_offset + 0x7019C) /* 965+ only */
+#define _DSPATILEOFF (dev_priv->info.display_mmio_offset + 0x701A4) /* 965+ only */
+#define _DSPAOFFSET (dev_priv->info.display_mmio_offset + 0x701A4) /* HSW */
+#define _DSPASURFLIVE (dev_priv->info.display_mmio_offset + 0x701AC)
#define DSPCNTR(plane) _PIPE(plane, _DSPACNTR, _DSPBCNTR)
#define DSPADDR(plane) _PIPE(plane, _DSPAADDR, _DSPBADDR)
@@ -3612,44 +3612,44 @@
(I915_WRITE((reg), (gfx_addr) | I915_LO_DISPBASE(I915_READ(reg))))
/* VBIOS flags */
-#define SWF00 (dev_priv->info->display_mmio_offset + 0x71410)
-#define SWF01 (dev_priv->info->display_mmio_offset + 0x71414)
-#define SWF02 (dev_priv->info->display_mmio_offset + 0x71418)
-#define SWF03 (dev_priv->info->display_mmio_offset + 0x7141c)
-#define SWF04 (dev_priv->info->display_mmio_offset + 0x71420)
-#define SWF05 (dev_priv->info->display_mmio_offset + 0x71424)
-#define SWF06 (dev_priv->info->display_mmio_offset + 0x71428)
-#define SWF10 (dev_priv->info->display_mmio_offset + 0x70410)
-#define SWF11 (dev_priv->info->display_mmio_offset + 0x70414)
-#define SWF14 (dev_priv->info->display_mmio_offset + 0x71420)
-#define SWF30 (dev_priv->info->display_mmio_offset + 0x72414)
-#define SWF31 (dev_priv->info->display_mmio_offset + 0x72418)
-#define SWF32 (dev_priv->info->display_mmio_offset + 0x7241c)
+#define SWF00 (dev_priv->info.display_mmio_offset + 0x71410)
+#define SWF01 (dev_priv->info.display_mmio_offset + 0x71414)
+#define SWF02 (dev_priv->info.display_mmio_offset + 0x71418)
+#define SWF03 (dev_priv->info.display_mmio_offset + 0x7141c)
+#define SWF04 (dev_priv->info.display_mmio_offset + 0x71420)
+#define SWF05 (dev_priv->info.display_mmio_offset + 0x71424)
+#define SWF06 (dev_priv->info.display_mmio_offset + 0x71428)
+#define SWF10 (dev_priv->info.display_mmio_offset + 0x70410)
+#define SWF11 (dev_priv->info.display_mmio_offset + 0x70414)
+#define SWF14 (dev_priv->info.display_mmio_offset + 0x71420)
+#define SWF30 (dev_priv->info.display_mmio_offset + 0x72414)
+#define SWF31 (dev_priv->info.display_mmio_offset + 0x72418)
+#define SWF32 (dev_priv->info.display_mmio_offset + 0x7241c)
/* Pipe B */
-#define _PIPEBDSL (dev_priv->info->display_mmio_offset + 0x71000)
-#define _PIPEBCONF (dev_priv->info->display_mmio_offset + 0x71008)
-#define _PIPEBSTAT (dev_priv->info->display_mmio_offset + 0x71024)
+#define _PIPEBDSL (dev_priv->info.display_mmio_offset + 0x71000)
+#define _PIPEBCONF (dev_priv->info.display_mmio_offset + 0x71008)
+#define _PIPEBSTAT (dev_priv->info.display_mmio_offset + 0x71024)
#define _PIPEBFRAMEHIGH 0x71040
#define _PIPEBFRAMEPIXEL 0x71044
-#define _PIPEB_FRMCOUNT_GM45 (dev_priv->info->display_mmio_offset + 0x71040)
-#define _PIPEB_FLIPCOUNT_GM45 (dev_priv->info->display_mmio_offset + 0x71044)
+#define _PIPEB_FRMCOUNT_GM45 (dev_priv->info.display_mmio_offset + 0x71040)
+#define _PIPEB_FLIPCOUNT_GM45 (dev_priv->info.display_mmio_offset + 0x71044)
/* Display B control */
-#define _DSPBCNTR (dev_priv->info->display_mmio_offset + 0x71180)
+#define _DSPBCNTR (dev_priv->info.display_mmio_offset + 0x71180)
#define DISPPLANE_ALPHA_TRANS_ENABLE (1<<15)
#define DISPPLANE_ALPHA_TRANS_DISABLE 0
#define DISPPLANE_SPRITE_ABOVE_DISPLAY 0
#define DISPPLANE_SPRITE_ABOVE_OVERLAY (1)
-#define _DSPBADDR (dev_priv->info->display_mmio_offset + 0x71184)
-#define _DSPBSTRIDE (dev_priv->info->display_mmio_offset + 0x71188)
-#define _DSPBPOS (dev_priv->info->display_mmio_offset + 0x7118C)
-#define _DSPBSIZE (dev_priv->info->display_mmio_offset + 0x71190)
-#define _DSPBSURF (dev_priv->info->display_mmio_offset + 0x7119C)
-#define _DSPBTILEOFF (dev_priv->info->display_mmio_offset + 0x711A4)
-#define _DSPBOFFSET (dev_priv->info->display_mmio_offset + 0x711A4)
-#define _DSPBSURFLIVE (dev_priv->info->display_mmio_offset + 0x711AC)
+#define _DSPBADDR (dev_priv->info.display_mmio_offset + 0x71184)
+#define _DSPBSTRIDE (dev_priv->info.display_mmio_offset + 0x71188)
+#define _DSPBPOS (dev_priv->info.display_mmio_offset + 0x7118C)
+#define _DSPBSIZE (dev_priv->info.display_mmio_offset + 0x71190)
+#define _DSPBSURF (dev_priv->info.display_mmio_offset + 0x7119C)
+#define _DSPBTILEOFF (dev_priv->info.display_mmio_offset + 0x711A4)
+#define _DSPBOFFSET (dev_priv->info.display_mmio_offset + 0x711A4)
+#define _DSPBSURFLIVE (dev_priv->info.display_mmio_offset + 0x711AC)
/* Sprite A control */
#define _DVSACNTR 0x72180
@@ -3898,39 +3898,39 @@
#define FDI_PLL_FREQ_DISABLE_COUNT_LIMIT_MASK 0xff
-#define _PIPEA_DATA_M1 (dev_priv->info->display_mmio_offset + 0x60030)
+#define _PIPEA_DATA_M1 (dev_priv->info.display_mmio_offset + 0x60030)
#define PIPE_DATA_M1_OFFSET 0
-#define _PIPEA_DATA_N1 (dev_priv->info->display_mmio_offset + 0x60034)
+#define _PIPEA_DATA_N1 (dev_priv->info.display_mmio_offset + 0x60034)
#define PIPE_DATA_N1_OFFSET 0
-#define _PIPEA_DATA_M2 (dev_priv->info->display_mmio_offset + 0x60038)
+#define _PIPEA_DATA_M2 (dev_priv->info.display_mmio_offset + 0x60038)
#define PIPE_DATA_M2_OFFSET 0
-#define _PIPEA_DATA_N2 (dev_priv->info->display_mmio_offset + 0x6003c)
+#define _PIPEA_DATA_N2 (dev_priv->info.display_mmio_offset + 0x6003c)
#define PIPE_DATA_N2_OFFSET 0
-#define _PIPEA_LINK_M1 (dev_priv->info->display_mmio_offset + 0x60040)
+#define _PIPEA_LINK_M1 (dev_priv->info.display_mmio_offset + 0x60040)
#define PIPE_LINK_M1_OFFSET 0
-#define _PIPEA_LINK_N1 (dev_priv->info->display_mmio_offset + 0x60044)
+#define _PIPEA_LINK_N1 (dev_priv->info.display_mmio_offset + 0x60044)
#define PIPE_LINK_N1_OFFSET 0
-#define _PIPEA_LINK_M2 (dev_priv->info->display_mmio_offset + 0x60048)
+#define _PIPEA_LINK_M2 (dev_priv->info.display_mmio_offset + 0x60048)
#define PIPE_LINK_M2_OFFSET 0
-#define _PIPEA_LINK_N2 (dev_priv->info->display_mmio_offset + 0x6004c)
+#define _PIPEA_LINK_N2 (dev_priv->info.display_mmio_offset + 0x6004c)
#define PIPE_LINK_N2_OFFSET 0
/* PIPEB timing regs are same start from 0x61000 */
-#define _PIPEB_DATA_M1 (dev_priv->info->display_mmio_offset + 0x61030)
-#define _PIPEB_DATA_N1 (dev_priv->info->display_mmio_offset + 0x61034)
+#define _PIPEB_DATA_M1 (dev_priv->info.display_mmio_offset + 0x61030)
+#define _PIPEB_DATA_N1 (dev_priv->info.display_mmio_offset + 0x61034)
-#define _PIPEB_DATA_M2 (dev_priv->info->display_mmio_offset + 0x61038)
-#define _PIPEB_DATA_N2 (dev_priv->info->display_mmio_offset + 0x6103c)
+#define _PIPEB_DATA_M2 (dev_priv->info.display_mmio_offset + 0x61038)
+#define _PIPEB_DATA_N2 (dev_priv->info.display_mmio_offset + 0x6103c)
-#define _PIPEB_LINK_M1 (dev_priv->info->display_mmio_offset + 0x61040)
-#define _PIPEB_LINK_N1 (dev_priv->info->display_mmio_offset + 0x61044)
+#define _PIPEB_LINK_M1 (dev_priv->info.display_mmio_offset + 0x61040)
+#define _PIPEB_LINK_N1 (dev_priv->info.display_mmio_offset + 0x61044)
-#define _PIPEB_LINK_M2 (dev_priv->info->display_mmio_offset + 0x61048)
-#define _PIPEB_LINK_N2 (dev_priv->info->display_mmio_offset + 0x6104c)
+#define _PIPEB_LINK_M2 (dev_priv->info.display_mmio_offset + 0x61048)
+#define _PIPEB_LINK_N2 (dev_priv->info.display_mmio_offset + 0x6104c)
#define PIPE_DATA_M1(tran) _TRANSCODER(tran, _PIPEA_DATA_M1, _PIPEB_DATA_M1)
#define PIPE_DATA_N1(tran) _TRANSCODER(tran, _PIPEA_DATA_N1, _PIPEB_DATA_N1)
@@ -5041,7 +5041,7 @@
#define GEN8_CENTROID_PIXEL_OPT_DIS (1<<8)
#define GEN8_SAMPLER_POWER_BYPASS_DIS (1<<1)
-#define G4X_AUD_VID_DID (dev_priv->info->display_mmio_offset + 0x62020)
+#define G4X_AUD_VID_DID (dev_priv->info.display_mmio_offset + 0x62020)
#define INTEL_AUDIO_DEVCL 0x808629FB
#define INTEL_AUDIO_DEVBLC 0x80862801
#define INTEL_AUDIO_DEVCTG 0x80862802
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 5c4c3ca..71876d9 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -1030,7 +1030,7 @@ static void assert_fdi_tx_pll_enabled(struct drm_i915_private *dev_priv,
u32 val;
/* ILK FDI PLL is always enabled */
- if (dev_priv->info->gen == 5)
+ if (dev_priv->info.gen == 5)
return;
/* On Haswell, DDI ports are responsible for the FDI PLL setup */
@@ -1433,7 +1433,7 @@ static void i9xx_enable_pll(struct intel_crtc *crtc)
assert_pipe_disabled(dev_priv, crtc->pipe);
/* No really, not for ILK+ */
- BUG_ON(dev_priv->info->gen >= 5);
+ BUG_ON(dev_priv->info.gen >= 5);
/* PLL is protected by panel, make sure we can write it */
if (IS_MOBILE(dev) && !IS_I830(dev))
@@ -1540,7 +1540,7 @@ static void ironlake_enable_shared_dpll(struct intel_crtc *crtc)
struct intel_shared_dpll *pll = intel_crtc_to_shared_dpll(crtc);
/* PCH PLLs only available on ILK, SNB and IVB */
- BUG_ON(dev_priv->info->gen < 5);
+ BUG_ON(dev_priv->info.gen < 5);
if (WARN_ON(pll == NULL))
return;
@@ -1569,7 +1569,7 @@ static void intel_disable_shared_dpll(struct intel_crtc *crtc)
struct intel_shared_dpll *pll = intel_crtc_to_shared_dpll(crtc);
/* PCH only available on ILK+ */
- BUG_ON(dev_priv->info->gen < 5);
+ BUG_ON(dev_priv->info.gen < 5);
if (WARN_ON(pll == NULL))
return;
@@ -1604,7 +1604,7 @@ static void ironlake_enable_pch_transcoder(struct drm_i915_private *dev_priv,
uint32_t reg, val, pipeconf_val;
/* PCH only available on ILK+ */
- BUG_ON(dev_priv->info->gen < 5);
+ BUG_ON(dev_priv->info.gen < 5);
/* Make sure PCH DPLL is enabled */
assert_shared_dpll_enabled(dev_priv,
@@ -1657,7 +1657,7 @@ static void lpt_enable_pch_transcoder(struct drm_i915_private *dev_priv,
u32 val, pipeconf_val;
/* PCH only available on ILK+ */
- BUG_ON(dev_priv->info->gen < 5);
+ BUG_ON(dev_priv->info.gen < 5);
/* FDI must be feeding us bits for PCH ports */
assert_fdi_tx_enabled(dev_priv, (enum pipe) cpu_transcoder);
@@ -1838,7 +1838,7 @@ static void intel_disable_pipe(struct drm_i915_private *dev_priv,
void intel_flush_primary_plane(struct drm_i915_private *dev_priv,
enum plane plane)
{
- u32 reg = dev_priv->info->gen >= 4 ? DSPSURF(plane) : DSPADDR(plane);
+ u32 reg = dev_priv->info.gen >= 4 ? DSPSURF(plane) : DSPADDR(plane);
I915_WRITE(reg, I915_READ(reg));
POSTING_READ(reg);
@@ -7532,7 +7532,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
/* we only need to pin inside GTT if cursor is non-phy */
mutex_lock(&dev->struct_mutex);
- if (!dev_priv->info->cursor_needs_physical) {
+ if (!dev_priv->info.cursor_needs_physical) {
unsigned alignment;
if (obj->tiling_mode) {
@@ -7580,7 +7580,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
finish:
if (intel_crtc->cursor_bo) {
- if (dev_priv->info->cursor_needs_physical) {
+ if (dev_priv->info.cursor_needs_physical) {
if (intel_crtc->cursor_bo != obj)
i915_gem_detach_phys_object(dev, intel_crtc->cursor_bo);
} else
@@ -8163,7 +8163,7 @@ void intel_mark_idle(struct drm_device *dev)
intel_decrease_pllclock(crtc);
}
- if (dev_priv->info->gen >= 6)
+ if (dev_priv->info.gen >= 6)
gen6_rps_idle(dev->dev_private);
}
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index c01d08d..74b72a3 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -3586,7 +3586,7 @@ void gen6_rps_idle(struct drm_i915_private *dev_priv)
{
mutex_lock(&dev_priv->rps.hw_lock);
if (dev_priv->rps.enabled) {
- if (dev_priv->info->is_valleyview)
+ if (dev_priv->info.is_valleyview)
valleyview_set_rps(dev_priv->dev, dev_priv->rps.min_delay);
else
gen6_set_rps(dev_priv->dev, dev_priv->rps.min_delay);
@@ -3599,7 +3599,7 @@ void gen6_rps_boost(struct drm_i915_private *dev_priv)
{
mutex_lock(&dev_priv->rps.hw_lock);
if (dev_priv->rps.enabled) {
- if (dev_priv->info->is_valleyview)
+ if (dev_priv->info.is_valleyview)
valleyview_set_rps(dev_priv->dev, dev_priv->rps.max_delay);
else
gen6_set_rps(dev_priv->dev, dev_priv->rps.max_delay);
@@ -4368,7 +4368,7 @@ unsigned long i915_chipset_val(struct drm_i915_private *dev_priv)
{
unsigned long val;
- if (dev_priv->info->gen != 5)
+ if (dev_priv->info.gen != 5)
return 0;
spin_lock_irq(&mchdev_lock);
@@ -4530,7 +4530,7 @@ static u16 pvid_to_extvid(struct drm_i915_private *dev_priv, u8 pxvid)
{ 16000, 14875, },
{ 16125, 15000, },
};
- if (dev_priv->info->is_mobile)
+ if (dev_priv->info.is_mobile)
return v_table[pxvid].vm;
else
return v_table[pxvid].vd;
@@ -4573,7 +4573,7 @@ static void __i915_update_gfx_val(struct drm_i915_private *dev_priv)
void i915_update_gfx_val(struct drm_i915_private *dev_priv)
{
- if (dev_priv->info->gen != 5)
+ if (dev_priv->info.gen != 5)
return;
spin_lock_irq(&mchdev_lock);
@@ -4624,7 +4624,7 @@ unsigned long i915_gfx_val(struct drm_i915_private *dev_priv)
{
unsigned long val;
- if (dev_priv->info->gen != 5)
+ if (dev_priv->info.gen != 5)
return 0;
spin_lock_irq(&mchdev_lock);
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/6] drm/i915: Move num_plane to the intel_device_info structure
2013-12-12 11:20 Supporting fused display configurations v2 Damien Lespiau
2013-12-12 11:20 ` [PATCH 1/6] drm/i915: Make the intel_device_info structure kept in dev_priv writable Damien Lespiau
@ 2013-12-12 11:20 ` Damien Lespiau
2013-12-12 11:40 ` Ville Syrjälä
2013-12-12 11:21 ` [PATCH 3/6] drm/i915: Consolidate FUSE_STRAP in one set of defines Damien Lespiau
` (3 subsequent siblings)
5 siblings, 1 reply; 9+ messages in thread
From: Damien Lespiau @ 2013-12-12 11:20 UTC (permalink / raw)
To: intel-gfx
And rename it to num_planes to match num_pipes.
This limit lives with num_pipes really, and now that dev_priv->info is
writable we can put it there instead.
While at it, introduce a intel_device_info_runtime_init() where we'll be
able to gather the device info fields at run-time.
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
---
drivers/gpu/drm/i915/i915_dma.c | 21 ++++++++++++++++++---
drivers/gpu/drm/i915/i915_drv.h | 5 ++---
drivers/gpu/drm/i915/intel_display.c | 4 ++--
3 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 332d5b6..0f75d5c7 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1459,6 +1459,23 @@ static void i915_dump_device_info(struct drm_i915_private *dev_priv)
#undef SEP_COMMA
}
+/*
+ * Determine various intel_device_info fields at runtime.
+ *
+ * Use it when either:
+ * - it's judged too laborious to fill n static structures with the limit
+ * when a simple if statement does the job,
+ * - run-time checks (eg read fuse/strap registers) are needed.
+ */
+static void intel_device_info_runtime_init(struct drm_device *dev)
+{
+ struct intel_device_info *info = INTEL_INFO(dev);
+
+ info->num_planes = 1;
+ if (IS_VALLEYVIEW(dev))
+ info->num_planes = 2;
+}
+
/**
* i915_driver_load - setup chip and create an initial config
* @dev: DRM device
@@ -1631,9 +1648,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
if (!IS_I945G(dev) && !IS_I945GM(dev))
pci_enable_msi(dev->pdev);
- dev_priv->num_plane = 1;
- if (IS_VALLEYVIEW(dev))
- dev_priv->num_plane = 2;
+ intel_device_info_runtime_init(dev);
if (INTEL_INFO(dev)->num_pipes) {
ret = drm_vblank_init(dev, INTEL_INFO(dev)->num_pipes);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 6a7844c..704dc7d 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -77,7 +77,7 @@ enum plane {
};
#define plane_name(p) ((p) + 'A')
-#define sprite_name(p, s) ((p) * dev_priv->num_plane + (s) + 'A')
+#define sprite_name(p, s) ((p) * INTEL_INFO(dev)->num_planes + (s) + 'A')
enum port {
PORT_A = 0,
@@ -503,6 +503,7 @@ struct intel_uncore {
struct intel_device_info {
u32 display_mmio_offset;
u8 num_pipes:3;
+ u8 num_planes:2;
u8 gen;
u8 ring_mask; /* Rings supported by the HW */
DEV_INFO_FOR_EACH_FLAG(DEFINE_FLAG, SEP_SEMICOLON);
@@ -1389,8 +1390,6 @@ typedef struct drm_i915_private {
u32 hpd_event_bits;
struct timer_list hotplug_reenable_timer;
- int num_plane;
-
struct i915_fbc fbc;
struct intel_opregion opregion;
struct intel_vbt_data vbt;
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 71876d9..25cbe36 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -1189,7 +1189,7 @@ static void assert_sprites_disabled(struct drm_i915_private *dev_priv,
u32 val;
if (IS_VALLEYVIEW(dev)) {
- for (i = 0; i < dev_priv->num_plane; i++) {
+ for (i = 0; i < INTEL_INFO(dev)->num_planes; i++) {
reg = SPCNTR(pipe, i);
val = I915_READ(reg);
WARN((val & SP_ENABLE),
@@ -10862,7 +10862,7 @@ void intel_modeset_init(struct drm_device *dev)
for_each_pipe(i) {
intel_crtc_init(dev, i);
- for (j = 0; j < dev_priv->num_plane; j++) {
+ for (j = 0; j < INTEL_INFO(dev)->num_planes; j++) {
ret = intel_plane_init(dev, i, j);
if (ret)
DRM_DEBUG_KMS("pipe %c sprite %c init failed: %d\n",
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 3/6] drm/i915: Consolidate FUSE_STRAP in one set of defines
2013-12-12 11:20 Supporting fused display configurations v2 Damien Lespiau
2013-12-12 11:20 ` [PATCH 1/6] drm/i915: Make the intel_device_info structure kept in dev_priv writable Damien Lespiau
2013-12-12 11:20 ` [PATCH 2/6] drm/i915: Move num_plane to the intel_device_info structure Damien Lespiau
@ 2013-12-12 11:21 ` Damien Lespiau
2013-12-12 11:21 ` [PATCH 4/6] drm/i915: Disable display when fused off Damien Lespiau
` (2 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Damien Lespiau @ 2013-12-12 11:21 UTC (permalink / raw)
To: intel-gfx
We had 2 set of defines for the same register, so make it one.
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
---
drivers/gpu/drm/i915/i915_reg.h | 18 ++++++++----------
drivers/gpu/drm/i915/intel_ddi.c | 2 +-
drivers/gpu/drm/i915/intel_display.c | 3 +--
3 files changed, 10 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index 67e9673..c6d9ba5 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -4116,13 +4116,14 @@
#define ILK_ELPIN_409_SELECT (1 << 25)
#define ILK_DPARB_GATE (1<<22)
#define ILK_VSDPFD_FULL (1<<21)
-#define ILK_DISPLAY_CHICKEN_FUSES 0x42014
-#define ILK_INTERNAL_GRAPHICS_DISABLE (1<<31)
-#define ILK_INTERNAL_DISPLAY_DISABLE (1<<30)
-#define ILK_DISPLAY_DEBUG_DISABLE (1<<29)
-#define ILK_HDCP_DISABLE (1<<25)
-#define ILK_eDP_A_DISABLE (1<<24)
-#define ILK_DESKTOP (1<<23)
+#define FUSE_STRAP 0x42014
+#define ILK_INTERNAL_GRAPHICS_DISABLE (1 << 31)
+#define ILK_INTERNAL_DISPLAY_DISABLE (1 << 30)
+#define ILK_DISPLAY_DEBUG_DISABLE (1 << 29)
+#define ILK_HDCP_DISABLE (1 << 25)
+#define ILK_eDP_A_DISABLE (1 << 24)
+#define HSW_CDCLK_LIMIT (1 << 24)
+#define ILK_DESKTOP (1 << 23)
#define ILK_DSPCLK_GATE_D 0x42020
#define ILK_VRHUNIT_CLOCK_GATE_DISABLE (1 << 28)
@@ -4174,9 +4175,6 @@
#define HSW_SCRATCH1 0xb038
#define HSW_SCRATCH1_L3_DATA_ATOMICS_DISABLE (1<<27)
-#define HSW_FUSE_STRAP 0x42014
-#define HSW_CDCLK_LIMIT (1 << 24)
-
/* PCH */
/* south display engine interrupt: IBX */
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 3a14d99..24f49b6 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -1246,7 +1246,7 @@ int intel_ddi_get_cdclk_freq(struct drm_i915_private *dev_priv)
if (lcpll & LCPLL_CD_SOURCE_FCLK) {
return 800000;
- } else if (I915_READ(HSW_FUSE_STRAP) & HSW_CDCLK_LIMIT) {
+ } else if (I915_READ(FUSE_STRAP) & HSW_CDCLK_LIMIT) {
return 450000;
} else if (freq == LCPLL_CLK_FREQ_450) {
return 450000;
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 25cbe36..1151d39 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -10232,8 +10232,7 @@ static bool has_edp_a(struct drm_device *dev)
if ((I915_READ(DP_A) & DP_DETECTED) == 0)
return false;
- if (IS_GEN5(dev) &&
- (I915_READ(ILK_DISPLAY_CHICKEN_FUSES) & ILK_eDP_A_DISABLE))
+ if (IS_GEN5(dev) && (I915_READ(FUSE_STRAP) & ILK_eDP_A_DISABLE))
return false;
return true;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 4/6] drm/i915: Disable display when fused off
2013-12-12 11:20 Supporting fused display configurations v2 Damien Lespiau
` (2 preceding siblings ...)
2013-12-12 11:21 ` [PATCH 3/6] drm/i915: Consolidate FUSE_STRAP in one set of defines Damien Lespiau
@ 2013-12-12 11:21 ` Damien Lespiau
2013-12-12 11:21 ` [PATCH 5/6] drm/i915: Remove the Quanta special case Damien Lespiau
2013-12-12 11:21 ` [PATCH 6/6] drm/i915: Use I915_MAX_PIPES in the pipe/plane_to_crtc_mapping definitions Damien Lespiau
5 siblings, 0 replies; 9+ messages in thread
From: Damien Lespiau @ 2013-12-12 11:21 UTC (permalink / raw)
To: intel-gfx
FUSE_STRAP has a bit to inform us that the display has been fused off.
Use it to setup the definitive number of pipes at run-time.
v2: actually tweak num_pipes, not num_planes
v3: also tests SFUSE_STRAP bit 7
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
---
drivers/gpu/drm/i915/i915_dma.c | 18 +++++++++++++++++-
drivers/gpu/drm/i915/i915_reg.h | 1 +
2 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
index 0f75d5c7..a95a1c0 100644
--- a/drivers/gpu/drm/i915/i915_dma.c
+++ b/drivers/gpu/drm/i915/i915_dma.c
@@ -1466,14 +1466,30 @@ static void i915_dump_device_info(struct drm_i915_private *dev_priv)
* - it's judged too laborious to fill n static structures with the limit
* when a simple if statement does the job,
* - run-time checks (eg read fuse/strap registers) are needed.
+ *
+ * This function needs to be called after the MMIO has been setup as we are
+ * reading registers, and before the first usage of the fields it can tweak.
*/
static void intel_device_info_runtime_init(struct drm_device *dev)
{
- struct intel_device_info *info = INTEL_INFO(dev);
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_device_info *info = &dev_priv->info;
info->num_planes = 1;
if (IS_VALLEYVIEW(dev))
info->num_planes = 2;
+
+ if ((INTEL_INFO(dev)->gen == 7 || INTEL_INFO(dev)->gen == 8) &&
+ !IS_VALLEYVIEW(dev)) {
+ u32 fuse_strap = I915_READ(FUSE_STRAP);
+ u32 sfuse_strap = I915_READ(SFUSE_STRAP);
+
+ if (fuse_strap & ILK_INTERNAL_DISPLAY_DISABLE ||
+ sfuse_strap & SFUSE_STRAP_DISPLAY_DISABLED) {
+ DRM_DEBUG_DRIVER("Display fused off, disabling\n");
+ info->num_pipes = 0;
+ }
+ }
}
/**
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index c6d9ba5..85e53ed 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -5411,6 +5411,7 @@
/* SFUSE_STRAP */
#define SFUSE_STRAP 0xc2014
+#define SFUSE_STRAP_DISPLAY_DISABLED (1<<7)
#define SFUSE_STRAP_DDIB_DETECTED (1<<2)
#define SFUSE_STRAP_DDIC_DETECTED (1<<1)
#define SFUSE_STRAP_DDID_DETECTED (1<<0)
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 5/6] drm/i915: Remove the Quanta special case
2013-12-12 11:20 Supporting fused display configurations v2 Damien Lespiau
` (3 preceding siblings ...)
2013-12-12 11:21 ` [PATCH 4/6] drm/i915: Disable display when fused off Damien Lespiau
@ 2013-12-12 11:21 ` Damien Lespiau
2013-12-12 11:21 ` [PATCH 6/6] drm/i915: Use I915_MAX_PIPES in the pipe/plane_to_crtc_mapping definitions Damien Lespiau
5 siblings, 0 replies; 9+ messages in thread
From: Damien Lespiau @ 2013-12-12 11:21 UTC (permalink / raw)
To: intel-gfx; +Cc: Ben Widawsky
We now read out the FUSE_STRAP and SFUSE_STRAP registers, looking for
configurations with display fused off. Let's remove the Quanta special
case and rely on the programmed fuses to set num_pipes to 0.
This patch is untested and needs a good soul with such a device to give
it a go.
Cc: Ben Widawsky <benjamin.widawsky@intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
---
drivers/gpu/drm/i915/i915_drv.c | 13 -------------
include/drm/i915_pciids.h | 9 ---------
2 files changed, 22 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index a13b8ed..7717030 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -295,12 +295,6 @@ static const struct intel_device_info intel_ivybridge_m_info = {
.is_mobile = 1,
};
-static const struct intel_device_info intel_ivybridge_q_info = {
- GEN7_FEATURES,
- .is_ivybridge = 1,
- .num_pipes = 0, /* legal, last one wins */
-};
-
static const struct intel_device_info intel_valleyview_m_info = {
GEN7_FEATURES,
.is_mobile = 1,
@@ -355,12 +349,6 @@ static const struct intel_device_info intel_broadwell_m_info = {
.has_ddi = 1,
};
-/*
- * Make sure any device matches here are from most specific to most
- * general. For example, since the Quanta match is based on the subsystem
- * and subvendor IDs, we need it to come before the more general IVB
- * PCI ID matches, otherwise we'll use the wrong info struct above.
- */
#define INTEL_PCI_IDS \
INTEL_I830_IDS(&intel_i830_info), \
INTEL_I845G_IDS(&intel_845g_info), \
@@ -380,7 +368,6 @@ static const struct intel_device_info intel_broadwell_m_info = {
INTEL_IRONLAKE_M_IDS(&intel_ironlake_m_info), \
INTEL_SNB_D_IDS(&intel_sandybridge_d_info), \
INTEL_SNB_M_IDS(&intel_sandybridge_m_info), \
- INTEL_IVB_Q_IDS(&intel_ivybridge_q_info), /* must be first IVB */ \
INTEL_IVB_M_IDS(&intel_ivybridge_m_info), \
INTEL_IVB_D_IDS(&intel_ivybridge_d_info), \
INTEL_HSW_D_IDS(&intel_haswell_d_info), \
diff --git a/include/drm/i915_pciids.h b/include/drm/i915_pciids.h
index 940ece4..02ebb67 100644
--- a/include/drm/i915_pciids.h
+++ b/include/drm/i915_pciids.h
@@ -41,12 +41,6 @@
0x030000, 0xff0000, \
(unsigned long) info }
-#define INTEL_QUANTA_VGA_DEVICE(info) { \
- 0x8086, 0x16a, \
- 0x152d, 0x8990, \
- 0x030000, 0xff0000, \
- (unsigned long) info }
-
#define INTEL_I830_IDS(info) \
INTEL_VGA_DEVICE(0x3577, info)
@@ -131,9 +125,6 @@
INTEL_VGA_DEVICE(0x015a, info), /* GT1 server */ \
INTEL_VGA_DEVICE(0x016a, info) /* GT2 server */
-#define INTEL_IVB_Q_IDS(info) \
- INTEL_QUANTA_VGA_DEVICE(info) /* Quanta transcode */
-
#define INTEL_HSW_D_IDS(info) \
INTEL_VGA_DEVICE(0x0402, info), /* GT1 desktop */ \
INTEL_VGA_DEVICE(0x0412, info), /* GT2 desktop */ \
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 6/6] drm/i915: Use I915_MAX_PIPES in the pipe/plane_to_crtc_mapping definitions
2013-12-12 11:20 Supporting fused display configurations v2 Damien Lespiau
` (4 preceding siblings ...)
2013-12-12 11:21 ` [PATCH 5/6] drm/i915: Remove the Quanta special case Damien Lespiau
@ 2013-12-12 11:21 ` Damien Lespiau
5 siblings, 0 replies; 9+ messages in thread
From: Damien Lespiau @ 2013-12-12 11:21 UTC (permalink / raw)
To: intel-gfx
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
---
drivers/gpu/drm/i915/i915_drv.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 704dc7d..ac1d691 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1440,8 +1440,8 @@ typedef struct drm_i915_private {
struct sdvo_device_mapping sdvo_mappings[2];
- struct drm_crtc *plane_to_crtc_mapping[3];
- struct drm_crtc *pipe_to_crtc_mapping[3];
+ struct drm_crtc *plane_to_crtc_mapping[I915_MAX_PIPES];
+ struct drm_crtc *pipe_to_crtc_mapping[I915_MAX_PIPES];
wait_queue_head_t pending_flip_queue;
#ifdef CONFIG_DEBUG_FS
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/6] drm/i915: Move num_plane to the intel_device_info structure
2013-12-12 11:20 ` [PATCH 2/6] drm/i915: Move num_plane to the intel_device_info structure Damien Lespiau
@ 2013-12-12 11:40 ` Ville Syrjälä
0 siblings, 0 replies; 9+ messages in thread
From: Ville Syrjälä @ 2013-12-12 11:40 UTC (permalink / raw)
To: Damien Lespiau; +Cc: intel-gfx
On Thu, Dec 12, 2013 at 11:20:59AM +0000, Damien Lespiau wrote:
> And rename it to num_planes to match num_pipes.
It should really be num_sprites, or even more accurately
num_sprites_per_pipe but that's a bit of a mouthful.
>
> This limit lives with num_pipes really, and now that dev_priv->info is
> writable we can put it there instead.
>
> While at it, introduce a intel_device_info_runtime_init() where we'll be
> able to gather the device info fields at run-time.
>
> Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
> ---
> drivers/gpu/drm/i915/i915_dma.c | 21 ++++++++++++++++++---
> drivers/gpu/drm/i915/i915_drv.h | 5 ++---
> drivers/gpu/drm/i915/intel_display.c | 4 ++--
> 3 files changed, 22 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
> index 332d5b6..0f75d5c7 100644
> --- a/drivers/gpu/drm/i915/i915_dma.c
> +++ b/drivers/gpu/drm/i915/i915_dma.c
> @@ -1459,6 +1459,23 @@ static void i915_dump_device_info(struct drm_i915_private *dev_priv)
> #undef SEP_COMMA
> }
>
> +/*
> + * Determine various intel_device_info fields at runtime.
> + *
> + * Use it when either:
> + * - it's judged too laborious to fill n static structures with the limit
> + * when a simple if statement does the job,
> + * - run-time checks (eg read fuse/strap registers) are needed.
> + */
> +static void intel_device_info_runtime_init(struct drm_device *dev)
> +{
> + struct intel_device_info *info = INTEL_INFO(dev);
> +
> + info->num_planes = 1;
> + if (IS_VALLEYVIEW(dev))
> + info->num_planes = 2;
> +}
It's constant so you could just initialize it in the struct
initialization.
> +
> /**
> * i915_driver_load - setup chip and create an initial config
> * @dev: DRM device
> @@ -1631,9 +1648,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
> if (!IS_I945G(dev) && !IS_I945GM(dev))
> pci_enable_msi(dev->pdev);
>
> - dev_priv->num_plane = 1;
> - if (IS_VALLEYVIEW(dev))
> - dev_priv->num_plane = 2;
> + intel_device_info_runtime_init(dev);
>
> if (INTEL_INFO(dev)->num_pipes) {
> ret = drm_vblank_init(dev, INTEL_INFO(dev)->num_pipes);
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 6a7844c..704dc7d 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -77,7 +77,7 @@ enum plane {
> };
> #define plane_name(p) ((p) + 'A')
>
> -#define sprite_name(p, s) ((p) * dev_priv->num_plane + (s) + 'A')
> +#define sprite_name(p, s) ((p) * INTEL_INFO(dev)->num_planes + (s) + 'A')
>
> enum port {
> PORT_A = 0,
> @@ -503,6 +503,7 @@ struct intel_uncore {
> struct intel_device_info {
> u32 display_mmio_offset;
> u8 num_pipes:3;
> + u8 num_planes:2;
> u8 gen;
> u8 ring_mask; /* Rings supported by the HW */
> DEV_INFO_FOR_EACH_FLAG(DEFINE_FLAG, SEP_SEMICOLON);
> @@ -1389,8 +1390,6 @@ typedef struct drm_i915_private {
> u32 hpd_event_bits;
> struct timer_list hotplug_reenable_timer;
>
> - int num_plane;
> -
> struct i915_fbc fbc;
> struct intel_opregion opregion;
> struct intel_vbt_data vbt;
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 71876d9..25cbe36 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -1189,7 +1189,7 @@ static void assert_sprites_disabled(struct drm_i915_private *dev_priv,
> u32 val;
>
> if (IS_VALLEYVIEW(dev)) {
> - for (i = 0; i < dev_priv->num_plane; i++) {
> + for (i = 0; i < INTEL_INFO(dev)->num_planes; i++) {
> reg = SPCNTR(pipe, i);
> val = I915_READ(reg);
> WARN((val & SP_ENABLE),
> @@ -10862,7 +10862,7 @@ void intel_modeset_init(struct drm_device *dev)
>
> for_each_pipe(i) {
> intel_crtc_init(dev, i);
> - for (j = 0; j < dev_priv->num_plane; j++) {
> + for (j = 0; j < INTEL_INFO(dev)->num_planes; j++) {
> ret = intel_plane_init(dev, i, j);
> if (ret)
> DRM_DEBUG_KMS("pipe %c sprite %c init failed: %d\n",
> --
> 1.8.3.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Ville Syrjälä
Intel OTC
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/6] drm/i915: Make the intel_device_info structure kept in dev_priv writable
2013-12-12 11:20 ` [PATCH 1/6] drm/i915: Make the intel_device_info structure kept in dev_priv writable Damien Lespiau
@ 2013-12-12 11:42 ` Ville Syrjälä
0 siblings, 0 replies; 9+ messages in thread
From: Ville Syrjälä @ 2013-12-12 11:42 UTC (permalink / raw)
To: Damien Lespiau; +Cc: intel-gfx
On Thu, Dec 12, 2013 at 11:20:58AM +0000, Damien Lespiau wrote:
> Turns out it'd be nice to change some device information at run-time or
> simply have some code to fill in the info struct instead of having to
> declare the values in 30+ structures.
>
> What prompted this change is handling fused out display/pipe and
> tweaking num_pipes at run-time, but I'm quite sure we'll find other
> flags/limits to stick into dev_priv->info.
>
> Most of the changes were done with a sed:
> sed -i -e 's/dev_priv->info->/dev_priv->info./g' drivers/gpu/drm/i915/*[ch]
>
> with a few tweaks to make it all work:
> - Change the field definition in struct drm_i915_private
> - adjust i915_dump_device_info()
> - adjust i915_driver_load()
> - adjust the INTEL_INFO() macro
>
> Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
> ---
> drivers/gpu/drm/i915/i915_dma.c | 4 +-
> drivers/gpu/drm/i915/i915_drv.h | 4 +-
> drivers/gpu/drm/i915/i915_gem.c | 2 +-
> drivers/gpu/drm/i915/i915_irq.c | 4 +-
> drivers/gpu/drm/i915/i915_reg.h | 228 +++++++++++++++++------------------
> drivers/gpu/drm/i915/intel_display.c | 20 +--
> drivers/gpu/drm/i915/intel_pm.c | 12 +-
> 7 files changed, 137 insertions(+), 137 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
> index bfbf9fc..332d5b6 100644
> --- a/drivers/gpu/drm/i915/i915_dma.c
> +++ b/drivers/gpu/drm/i915/i915_dma.c
> @@ -1442,7 +1442,7 @@ static void i915_kick_out_firmware_fb(struct drm_i915_private *dev_priv)
>
> static void i915_dump_device_info(struct drm_i915_private *dev_priv)
> {
> - const struct intel_device_info *info = dev_priv->info;
> + const struct intel_device_info *info = &dev_priv->info;
>
> #define PRINT_S(name) "%s"
> #define SEP_EMPTY
> @@ -1492,7 +1492,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
>
> dev->dev_private = (void *)dev_priv;
> dev_priv->dev = dev;
> - dev_priv->info = info;
> + memcpy(&dev_priv->info, info, sizeof(*info));
>
> spin_lock_init(&dev_priv->irq_lock);
> spin_lock_init(&dev_priv->gpu_error.lock);
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 46072b9..6a7844c 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1327,7 +1327,7 @@ typedef struct drm_i915_private {
> struct drm_device *dev;
> struct kmem_cache *slab;
>
> - const struct intel_device_info *info;
> + struct intel_device_info info;
>
> int relative_constants_mode;
>
> @@ -1751,7 +1751,7 @@ struct drm_i915_file_private {
> atomic_t rps_wait_boost;
> };
>
> -#define INTEL_INFO(dev) (to_i915(dev)->info)
> +#define INTEL_INFO(dev) (&to_i915(dev)->info)
Maybe cast it to const to avoid some accidental modifications. Even
better if we'd always use the macro to access it, then everything would
get the const protection.
>
> #define IS_I830(dev) ((dev)->pdev->device == 0x3577)
> #define IS_845G(dev) ((dev)->pdev->device == 0x2562)
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 4ecfbf7..8ea7b53 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -1027,7 +1027,7 @@ static int __wait_seqno(struct intel_ring_buffer *ring, u32 seqno,
>
> timeout_jiffies = timeout ? timespec_to_jiffies_timeout(timeout) : 1;
>
> - if (dev_priv->info->gen >= 6 && can_wait_boost(file_priv)) {
> + if (dev_priv->info.gen >= 6 && can_wait_boost(file_priv)) {
> gen6_rps_boost(dev_priv);
> if (file_priv)
> mod_delayed_work(dev_priv->wq,
> diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
> index 1d44c79..eb4adbc 100644
> --- a/drivers/gpu/drm/i915/i915_irq.c
> +++ b/drivers/gpu/drm/i915/i915_irq.c
> @@ -2209,7 +2209,7 @@ static int i915_enable_vblank(struct drm_device *dev, int pipe)
> PIPE_VBLANK_INTERRUPT_ENABLE);
>
> /* maintain vblank delivery even in deep C-states */
> - if (dev_priv->info->gen == 3)
> + if (dev_priv->info.gen == 3)
> I915_WRITE(INSTPM, _MASKED_BIT_DISABLE(INSTPM_AGPBUSY_DIS));
> spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
>
> @@ -2281,7 +2281,7 @@ static void i915_disable_vblank(struct drm_device *dev, int pipe)
> unsigned long irqflags;
>
> spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
> - if (dev_priv->info->gen == 3)
> + if (dev_priv->info.gen == 3)
> I915_WRITE(INSTPM, _MASKED_BIT_ENABLE(INSTPM_AGPBUSY_DIS));
>
> i915_disable_pipestat(dev_priv, pipe,
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index e8cc27c..67e9673 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -1213,8 +1213,8 @@
> #define VGA1_PD_P1_DIV_2 (1 << 13)
> #define VGA1_PD_P1_SHIFT 8
> #define VGA1_PD_P1_MASK (0x1f << 8)
> -#define _DPLL_A (dev_priv->info->display_mmio_offset + 0x6014)
> -#define _DPLL_B (dev_priv->info->display_mmio_offset + 0x6018)
> +#define _DPLL_A (dev_priv->info.display_mmio_offset + 0x6014)
> +#define _DPLL_B (dev_priv->info.display_mmio_offset + 0x6018)
> #define DPLL(pipe) _PIPE(pipe, _DPLL_A, _DPLL_B)
> #define DPLL_VCO_ENABLE (1 << 31)
> #define DPLL_SDVO_HIGH_SPEED (1 << 30)
> @@ -1277,7 +1277,7 @@
> #define SDVO_MULTIPLIER_MASK 0x000000ff
> #define SDVO_MULTIPLIER_SHIFT_HIRES 4
> #define SDVO_MULTIPLIER_SHIFT_VGA 0
> -#define _DPLL_A_MD (dev_priv->info->display_mmio_offset + 0x601c) /* 965+ only */
> +#define _DPLL_A_MD (dev_priv->info.display_mmio_offset + 0x601c) /* 965+ only */
> /*
> * UDI pixel divider, controlling how many pixels are stuffed into a packet.
> *
> @@ -1314,7 +1314,7 @@
> */
> #define DPLL_MD_VGA_UDI_MULTIPLIER_MASK 0x0000003f
> #define DPLL_MD_VGA_UDI_MULTIPLIER_SHIFT 0
> -#define _DPLL_B_MD (dev_priv->info->display_mmio_offset + 0x6020) /* 965+ only */
> +#define _DPLL_B_MD (dev_priv->info.display_mmio_offset + 0x6020) /* 965+ only */
> #define DPLL_MD(pipe) _PIPE(pipe, _DPLL_A_MD, _DPLL_B_MD)
>
> #define _FPA0 0x06040
> @@ -1347,7 +1347,7 @@
> #define DSTATE_PLL_D3_OFF (1<<3)
> #define DSTATE_GFX_CLOCK_GATING (1<<1)
> #define DSTATE_DOT_CLOCK_GATING (1<<0)
> -#define DSPCLK_GATE_D (dev_priv->info->display_mmio_offset + 0x6200)
> +#define DSPCLK_GATE_D (dev_priv->info.display_mmio_offset + 0x6200)
> # define DPUNIT_B_CLOCK_GATE_DISABLE (1 << 30) /* 965 */
> # define VSUNIT_CLOCK_GATE_DISABLE (1 << 29) /* 965 */
> # define VRHUNIT_CLOCK_GATE_DISABLE (1 << 28) /* 965 */
> @@ -1472,8 +1472,8 @@
> * Palette regs
> */
>
> -#define _PALETTE_A (dev_priv->info->display_mmio_offset + 0xa000)
> -#define _PALETTE_B (dev_priv->info->display_mmio_offset + 0xa800)
> +#define _PALETTE_A (dev_priv->info.display_mmio_offset + 0xa000)
> +#define _PALETTE_B (dev_priv->info.display_mmio_offset + 0xa800)
> #define PALETTE(pipe) _PIPE(pipe, _PALETTE_A, _PALETTE_B)
>
> /* MCH MMIO space */
> @@ -1861,7 +1861,7 @@
> */
>
> /* Pipe A CRC regs */
> -#define _PIPE_CRC_CTL_A (dev_priv->info->display_mmio_offset + 0x60050)
> +#define _PIPE_CRC_CTL_A (dev_priv->info.display_mmio_offset + 0x60050)
> #define PIPE_CRC_ENABLE (1 << 31)
> /* ivb+ source selection */
> #define PIPE_CRC_SOURCE_PRIMARY_IVB (0 << 29)
> @@ -1901,11 +1901,11 @@
> #define _PIPE_CRC_RES_4_A_IVB 0x60070
> #define _PIPE_CRC_RES_5_A_IVB 0x60074
>
> -#define _PIPE_CRC_RES_RED_A (dev_priv->info->display_mmio_offset + 0x60060)
> -#define _PIPE_CRC_RES_GREEN_A (dev_priv->info->display_mmio_offset + 0x60064)
> -#define _PIPE_CRC_RES_BLUE_A (dev_priv->info->display_mmio_offset + 0x60068)
> -#define _PIPE_CRC_RES_RES1_A_I915 (dev_priv->info->display_mmio_offset + 0x6006c)
> -#define _PIPE_CRC_RES_RES2_A_G4X (dev_priv->info->display_mmio_offset + 0x60080)
> +#define _PIPE_CRC_RES_RED_A (dev_priv->info.display_mmio_offset + 0x60060)
> +#define _PIPE_CRC_RES_GREEN_A (dev_priv->info.display_mmio_offset + 0x60064)
> +#define _PIPE_CRC_RES_BLUE_A (dev_priv->info.display_mmio_offset + 0x60068)
> +#define _PIPE_CRC_RES_RES1_A_I915 (dev_priv->info.display_mmio_offset + 0x6006c)
> +#define _PIPE_CRC_RES_RES2_A_G4X (dev_priv->info.display_mmio_offset + 0x60080)
>
> /* Pipe B CRC regs */
> #define _PIPE_CRC_RES_1_B_IVB 0x61064
> @@ -1938,26 +1938,26 @@
> _PIPE_INC(pipe, _PIPE_CRC_RES_RES2_A_G4X, 0x01000)
>
> /* Pipe A timing regs */
> -#define _HTOTAL_A (dev_priv->info->display_mmio_offset + 0x60000)
> -#define _HBLANK_A (dev_priv->info->display_mmio_offset + 0x60004)
> -#define _HSYNC_A (dev_priv->info->display_mmio_offset + 0x60008)
> -#define _VTOTAL_A (dev_priv->info->display_mmio_offset + 0x6000c)
> -#define _VBLANK_A (dev_priv->info->display_mmio_offset + 0x60010)
> -#define _VSYNC_A (dev_priv->info->display_mmio_offset + 0x60014)
> -#define _PIPEASRC (dev_priv->info->display_mmio_offset + 0x6001c)
> -#define _BCLRPAT_A (dev_priv->info->display_mmio_offset + 0x60020)
> -#define _VSYNCSHIFT_A (dev_priv->info->display_mmio_offset + 0x60028)
> +#define _HTOTAL_A (dev_priv->info.display_mmio_offset + 0x60000)
> +#define _HBLANK_A (dev_priv->info.display_mmio_offset + 0x60004)
> +#define _HSYNC_A (dev_priv->info.display_mmio_offset + 0x60008)
> +#define _VTOTAL_A (dev_priv->info.display_mmio_offset + 0x6000c)
> +#define _VBLANK_A (dev_priv->info.display_mmio_offset + 0x60010)
> +#define _VSYNC_A (dev_priv->info.display_mmio_offset + 0x60014)
> +#define _PIPEASRC (dev_priv->info.display_mmio_offset + 0x6001c)
> +#define _BCLRPAT_A (dev_priv->info.display_mmio_offset + 0x60020)
> +#define _VSYNCSHIFT_A (dev_priv->info.display_mmio_offset + 0x60028)
>
> /* Pipe B timing regs */
> -#define _HTOTAL_B (dev_priv->info->display_mmio_offset + 0x61000)
> -#define _HBLANK_B (dev_priv->info->display_mmio_offset + 0x61004)
> -#define _HSYNC_B (dev_priv->info->display_mmio_offset + 0x61008)
> -#define _VTOTAL_B (dev_priv->info->display_mmio_offset + 0x6100c)
> -#define _VBLANK_B (dev_priv->info->display_mmio_offset + 0x61010)
> -#define _VSYNC_B (dev_priv->info->display_mmio_offset + 0x61014)
> -#define _PIPEBSRC (dev_priv->info->display_mmio_offset + 0x6101c)
> -#define _BCLRPAT_B (dev_priv->info->display_mmio_offset + 0x61020)
> -#define _VSYNCSHIFT_B (dev_priv->info->display_mmio_offset + 0x61028)
> +#define _HTOTAL_B (dev_priv->info.display_mmio_offset + 0x61000)
> +#define _HBLANK_B (dev_priv->info.display_mmio_offset + 0x61004)
> +#define _HSYNC_B (dev_priv->info.display_mmio_offset + 0x61008)
> +#define _VTOTAL_B (dev_priv->info.display_mmio_offset + 0x6100c)
> +#define _VBLANK_B (dev_priv->info.display_mmio_offset + 0x61010)
> +#define _VSYNC_B (dev_priv->info.display_mmio_offset + 0x61014)
> +#define _PIPEBSRC (dev_priv->info.display_mmio_offset + 0x6101c)
> +#define _BCLRPAT_B (dev_priv->info.display_mmio_offset + 0x61020)
> +#define _VSYNCSHIFT_B (dev_priv->info.display_mmio_offset + 0x61028)
>
> #define HTOTAL(trans) _TRANSCODER(trans, _HTOTAL_A, _HTOTAL_B)
> #define HBLANK(trans) _TRANSCODER(trans, _HBLANK_A, _HBLANK_B)
> @@ -2083,7 +2083,7 @@
>
>
> /* Hotplug control (945+ only) */
> -#define PORT_HOTPLUG_EN (dev_priv->info->display_mmio_offset + 0x61110)
> +#define PORT_HOTPLUG_EN (dev_priv->info.display_mmio_offset + 0x61110)
> #define PORTB_HOTPLUG_INT_EN (1 << 29)
> #define PORTC_HOTPLUG_INT_EN (1 << 28)
> #define PORTD_HOTPLUG_INT_EN (1 << 27)
> @@ -2113,7 +2113,7 @@
> #define CRT_HOTPLUG_DETECT_VOLTAGE_325MV (0 << 2)
> #define CRT_HOTPLUG_DETECT_VOLTAGE_475MV (1 << 2)
>
> -#define PORT_HOTPLUG_STAT (dev_priv->info->display_mmio_offset + 0x61114)
> +#define PORT_HOTPLUG_STAT (dev_priv->info.display_mmio_offset + 0x61114)
> /*
> * HDMI/DP bits are gen4+
> *
> @@ -2385,7 +2385,7 @@
> #define PP_DIVISOR 0x61210
>
> /* Panel fitting */
> -#define PFIT_CONTROL (dev_priv->info->display_mmio_offset + 0x61230)
> +#define PFIT_CONTROL (dev_priv->info.display_mmio_offset + 0x61230)
> #define PFIT_ENABLE (1 << 31)
> #define PFIT_PIPE_MASK (3 << 29)
> #define PFIT_PIPE_SHIFT 29
> @@ -2403,7 +2403,7 @@
> #define PFIT_SCALING_PROGRAMMED (1 << 26)
> #define PFIT_SCALING_PILLAR (2 << 26)
> #define PFIT_SCALING_LETTER (3 << 26)
> -#define PFIT_PGM_RATIOS (dev_priv->info->display_mmio_offset + 0x61234)
> +#define PFIT_PGM_RATIOS (dev_priv->info.display_mmio_offset + 0x61234)
> /* Pre-965 */
> #define PFIT_VERT_SCALE_SHIFT 20
> #define PFIT_VERT_SCALE_MASK 0xfff00000
> @@ -2415,25 +2415,25 @@
> #define PFIT_HORIZ_SCALE_SHIFT_965 0
> #define PFIT_HORIZ_SCALE_MASK_965 0x00001fff
>
> -#define PFIT_AUTO_RATIOS (dev_priv->info->display_mmio_offset + 0x61238)
> +#define PFIT_AUTO_RATIOS (dev_priv->info.display_mmio_offset + 0x61238)
>
> -#define _VLV_BLC_PWM_CTL2_A (dev_priv->info->display_mmio_offset + 0x61250)
> -#define _VLV_BLC_PWM_CTL2_B (dev_priv->info->display_mmio_offset + 0x61350)
> +#define _VLV_BLC_PWM_CTL2_A (dev_priv->info.display_mmio_offset + 0x61250)
> +#define _VLV_BLC_PWM_CTL2_B (dev_priv->info.display_mmio_offset + 0x61350)
> #define VLV_BLC_PWM_CTL2(pipe) _PIPE(pipe, _VLV_BLC_PWM_CTL2_A, \
> _VLV_BLC_PWM_CTL2_B)
>
> -#define _VLV_BLC_PWM_CTL_A (dev_priv->info->display_mmio_offset + 0x61254)
> -#define _VLV_BLC_PWM_CTL_B (dev_priv->info->display_mmio_offset + 0x61354)
> +#define _VLV_BLC_PWM_CTL_A (dev_priv->info.display_mmio_offset + 0x61254)
> +#define _VLV_BLC_PWM_CTL_B (dev_priv->info.display_mmio_offset + 0x61354)
> #define VLV_BLC_PWM_CTL(pipe) _PIPE(pipe, _VLV_BLC_PWM_CTL_A, \
> _VLV_BLC_PWM_CTL_B)
>
> -#define _VLV_BLC_HIST_CTL_A (dev_priv->info->display_mmio_offset + 0x61260)
> -#define _VLV_BLC_HIST_CTL_B (dev_priv->info->display_mmio_offset + 0x61360)
> +#define _VLV_BLC_HIST_CTL_A (dev_priv->info.display_mmio_offset + 0x61260)
> +#define _VLV_BLC_HIST_CTL_B (dev_priv->info.display_mmio_offset + 0x61360)
> #define VLV_BLC_HIST_CTL(pipe) _PIPE(pipe, _VLV_BLC_HIST_CTL_A, \
> _VLV_BLC_HIST_CTL_B)
>
> /* Backlight control */
> -#define BLC_PWM_CTL2 (dev_priv->info->display_mmio_offset + 0x61250) /* 965+ only */
> +#define BLC_PWM_CTL2 (dev_priv->info.display_mmio_offset + 0x61250) /* 965+ only */
> #define BLM_PWM_ENABLE (1 << 31)
> #define BLM_COMBINATION_MODE (1 << 30) /* gen4 only */
> #define BLM_PIPE_SELECT (1 << 29)
> @@ -2456,7 +2456,7 @@
> #define BLM_PHASE_IN_COUNT_MASK (0xff << 8)
> #define BLM_PHASE_IN_INCR_SHIFT (0)
> #define BLM_PHASE_IN_INCR_MASK (0xff << 0)
> -#define BLC_PWM_CTL (dev_priv->info->display_mmio_offset + 0x61254)
> +#define BLC_PWM_CTL (dev_priv->info.display_mmio_offset + 0x61254)
> /*
> * This is the most significant 15 bits of the number of backlight cycles in a
> * complete cycle of the modulated backlight control.
> @@ -2478,7 +2478,7 @@
> #define BACKLIGHT_DUTY_CYCLE_MASK_PNV (0xfffe)
> #define BLM_POLARITY_PNV (1 << 0) /* pnv only */
>
> -#define BLC_HIST_CTL (dev_priv->info->display_mmio_offset + 0x61260)
> +#define BLC_HIST_CTL (dev_priv->info.display_mmio_offset + 0x61260)
>
> /* New registers for PCH-split platforms. Safe where new bits show up, the
> * register layout machtes with gen4 BLC_PWM_CTL[12]. */
> @@ -3172,10 +3172,10 @@
> /* Display & cursor control */
>
> /* Pipe A */
> -#define _PIPEADSL (dev_priv->info->display_mmio_offset + 0x70000)
> +#define _PIPEADSL (dev_priv->info.display_mmio_offset + 0x70000)
> #define DSL_LINEMASK_GEN2 0x00000fff
> #define DSL_LINEMASK_GEN3 0x00001fff
> -#define _PIPEACONF (dev_priv->info->display_mmio_offset + 0x70008)
> +#define _PIPEACONF (dev_priv->info.display_mmio_offset + 0x70008)
> #define PIPECONF_ENABLE (1<<31)
> #define PIPECONF_DISABLE 0
> #define PIPECONF_DOUBLE_WIDE (1<<30)
> @@ -3218,7 +3218,7 @@
> #define PIPECONF_DITHER_TYPE_ST1 (1<<2)
> #define PIPECONF_DITHER_TYPE_ST2 (2<<2)
> #define PIPECONF_DITHER_TYPE_TEMP (3<<2)
> -#define _PIPEASTAT (dev_priv->info->display_mmio_offset + 0x70024)
> +#define _PIPEASTAT (dev_priv->info.display_mmio_offset + 0x70024)
> #define PIPE_FIFO_UNDERRUN_STATUS (1UL<<31)
> #define SPRITE1_FLIPDONE_INT_EN_VLV (1UL<<30)
> #define PIPE_CRC_ERROR_ENABLE (1UL<<29)
> @@ -3317,7 +3317,7 @@
> #define DSPARB_BEND_SHIFT 9 /* on 855 */
> #define DSPARB_AEND_SHIFT 0
>
> -#define DSPFW1 (dev_priv->info->display_mmio_offset + 0x70034)
> +#define DSPFW1 (dev_priv->info.display_mmio_offset + 0x70034)
> #define DSPFW_SR_SHIFT 23
> #define DSPFW_SR_MASK (0x1ff<<23)
> #define DSPFW_CURSORB_SHIFT 16
> @@ -3325,11 +3325,11 @@
> #define DSPFW_PLANEB_SHIFT 8
> #define DSPFW_PLANEB_MASK (0x7f<<8)
> #define DSPFW_PLANEA_MASK (0x7f)
> -#define DSPFW2 (dev_priv->info->display_mmio_offset + 0x70038)
> +#define DSPFW2 (dev_priv->info.display_mmio_offset + 0x70038)
> #define DSPFW_CURSORA_MASK 0x00003f00
> #define DSPFW_CURSORA_SHIFT 8
> #define DSPFW_PLANEC_MASK (0x7f)
> -#define DSPFW3 (dev_priv->info->display_mmio_offset + 0x7003c)
> +#define DSPFW3 (dev_priv->info.display_mmio_offset + 0x7003c)
> #define DSPFW_HPLL_SR_EN (1<<31)
> #define DSPFW_CURSOR_SR_SHIFT 24
> #define PINEVIEW_SELF_REFRESH_EN (1<<30)
> @@ -3337,8 +3337,8 @@
> #define DSPFW_HPLL_CURSOR_SHIFT 16
> #define DSPFW_HPLL_CURSOR_MASK (0x3f<<16)
> #define DSPFW_HPLL_SR_MASK (0x1ff)
> -#define DSPFW4 (dev_priv->info->display_mmio_offset + 0x70070)
> -#define DSPFW7 (dev_priv->info->display_mmio_offset + 0x7007c)
> +#define DSPFW4 (dev_priv->info.display_mmio_offset + 0x70070)
> +#define DSPFW7 (dev_priv->info.display_mmio_offset + 0x7007c)
>
> /* drain latency register values*/
> #define DRAIN_LATENCY_PRECISION_32 32
> @@ -3498,12 +3498,12 @@
> #define PIPE_PIXEL_MASK 0x00ffffff
> #define PIPE_PIXEL_SHIFT 0
> /* GM45+ just has to be different */
> -#define _PIPEA_FRMCOUNT_GM45 (dev_priv->info->display_mmio_offset + 0x70040)
> -#define _PIPEA_FLIPCOUNT_GM45 (dev_priv->info->display_mmio_offset + 0x70044)
> +#define _PIPEA_FRMCOUNT_GM45 (dev_priv->info.display_mmio_offset + 0x70040)
> +#define _PIPEA_FLIPCOUNT_GM45 (dev_priv->info.display_mmio_offset + 0x70044)
> #define PIPE_FRMCOUNT_GM45(pipe) _PIPE(pipe, _PIPEA_FRMCOUNT_GM45, _PIPEB_FRMCOUNT_GM45)
>
> /* Cursor A & B regs */
> -#define _CURACNTR (dev_priv->info->display_mmio_offset + 0x70080)
> +#define _CURACNTR (dev_priv->info.display_mmio_offset + 0x70080)
> /* Old style CUR*CNTR flags (desktop 8xx) */
> #define CURSOR_ENABLE 0x80000000
> #define CURSOR_GAMMA_ENABLE 0x40000000
> @@ -3526,16 +3526,16 @@
> #define MCURSOR_PIPE_B (1 << 28)
> #define MCURSOR_GAMMA_ENABLE (1 << 26)
> #define CURSOR_TRICKLE_FEED_DISABLE (1 << 14)
> -#define _CURABASE (dev_priv->info->display_mmio_offset + 0x70084)
> -#define _CURAPOS (dev_priv->info->display_mmio_offset + 0x70088)
> +#define _CURABASE (dev_priv->info.display_mmio_offset + 0x70084)
> +#define _CURAPOS (dev_priv->info.display_mmio_offset + 0x70088)
> #define CURSOR_POS_MASK 0x007FF
> #define CURSOR_POS_SIGN 0x8000
> #define CURSOR_X_SHIFT 0
> #define CURSOR_Y_SHIFT 16
> #define CURSIZE 0x700a0
> -#define _CURBCNTR (dev_priv->info->display_mmio_offset + 0x700c0)
> -#define _CURBBASE (dev_priv->info->display_mmio_offset + 0x700c4)
> -#define _CURBPOS (dev_priv->info->display_mmio_offset + 0x700c8)
> +#define _CURBCNTR (dev_priv->info.display_mmio_offset + 0x700c0)
> +#define _CURBBASE (dev_priv->info.display_mmio_offset + 0x700c4)
> +#define _CURBPOS (dev_priv->info.display_mmio_offset + 0x700c8)
>
> #define _CURBCNTR_IVB 0x71080
> #define _CURBBASE_IVB 0x71084
> @@ -3550,7 +3550,7 @@
> #define CURPOS_IVB(pipe) _PIPE(pipe, _CURAPOS, _CURBPOS_IVB)
>
> /* Display A control */
> -#define _DSPACNTR (dev_priv->info->display_mmio_offset + 0x70180)
> +#define _DSPACNTR (dev_priv->info.display_mmio_offset + 0x70180)
> #define DISPLAY_PLANE_ENABLE (1<<31)
> #define DISPLAY_PLANE_DISABLE 0
> #define DISPPLANE_GAMMA_ENABLE (1<<30)
> @@ -3584,14 +3584,14 @@
> #define DISPPLANE_STEREO_POLARITY_SECOND (1<<18)
> #define DISPPLANE_TRICKLE_FEED_DISABLE (1<<14) /* Ironlake */
> #define DISPPLANE_TILED (1<<10)
> -#define _DSPAADDR (dev_priv->info->display_mmio_offset + 0x70184)
> -#define _DSPASTRIDE (dev_priv->info->display_mmio_offset + 0x70188)
> -#define _DSPAPOS (dev_priv->info->display_mmio_offset + 0x7018C) /* reserved */
> -#define _DSPASIZE (dev_priv->info->display_mmio_offset + 0x70190)
> -#define _DSPASURF (dev_priv->info->display_mmio_offset + 0x7019C) /* 965+ only */
> -#define _DSPATILEOFF (dev_priv->info->display_mmio_offset + 0x701A4) /* 965+ only */
> -#define _DSPAOFFSET (dev_priv->info->display_mmio_offset + 0x701A4) /* HSW */
> -#define _DSPASURFLIVE (dev_priv->info->display_mmio_offset + 0x701AC)
> +#define _DSPAADDR (dev_priv->info.display_mmio_offset + 0x70184)
> +#define _DSPASTRIDE (dev_priv->info.display_mmio_offset + 0x70188)
> +#define _DSPAPOS (dev_priv->info.display_mmio_offset + 0x7018C) /* reserved */
> +#define _DSPASIZE (dev_priv->info.display_mmio_offset + 0x70190)
> +#define _DSPASURF (dev_priv->info.display_mmio_offset + 0x7019C) /* 965+ only */
> +#define _DSPATILEOFF (dev_priv->info.display_mmio_offset + 0x701A4) /* 965+ only */
> +#define _DSPAOFFSET (dev_priv->info.display_mmio_offset + 0x701A4) /* HSW */
> +#define _DSPASURFLIVE (dev_priv->info.display_mmio_offset + 0x701AC)
>
> #define DSPCNTR(plane) _PIPE(plane, _DSPACNTR, _DSPBCNTR)
> #define DSPADDR(plane) _PIPE(plane, _DSPAADDR, _DSPBADDR)
> @@ -3612,44 +3612,44 @@
> (I915_WRITE((reg), (gfx_addr) | I915_LO_DISPBASE(I915_READ(reg))))
>
> /* VBIOS flags */
> -#define SWF00 (dev_priv->info->display_mmio_offset + 0x71410)
> -#define SWF01 (dev_priv->info->display_mmio_offset + 0x71414)
> -#define SWF02 (dev_priv->info->display_mmio_offset + 0x71418)
> -#define SWF03 (dev_priv->info->display_mmio_offset + 0x7141c)
> -#define SWF04 (dev_priv->info->display_mmio_offset + 0x71420)
> -#define SWF05 (dev_priv->info->display_mmio_offset + 0x71424)
> -#define SWF06 (dev_priv->info->display_mmio_offset + 0x71428)
> -#define SWF10 (dev_priv->info->display_mmio_offset + 0x70410)
> -#define SWF11 (dev_priv->info->display_mmio_offset + 0x70414)
> -#define SWF14 (dev_priv->info->display_mmio_offset + 0x71420)
> -#define SWF30 (dev_priv->info->display_mmio_offset + 0x72414)
> -#define SWF31 (dev_priv->info->display_mmio_offset + 0x72418)
> -#define SWF32 (dev_priv->info->display_mmio_offset + 0x7241c)
> +#define SWF00 (dev_priv->info.display_mmio_offset + 0x71410)
> +#define SWF01 (dev_priv->info.display_mmio_offset + 0x71414)
> +#define SWF02 (dev_priv->info.display_mmio_offset + 0x71418)
> +#define SWF03 (dev_priv->info.display_mmio_offset + 0x7141c)
> +#define SWF04 (dev_priv->info.display_mmio_offset + 0x71420)
> +#define SWF05 (dev_priv->info.display_mmio_offset + 0x71424)
> +#define SWF06 (dev_priv->info.display_mmio_offset + 0x71428)
> +#define SWF10 (dev_priv->info.display_mmio_offset + 0x70410)
> +#define SWF11 (dev_priv->info.display_mmio_offset + 0x70414)
> +#define SWF14 (dev_priv->info.display_mmio_offset + 0x71420)
> +#define SWF30 (dev_priv->info.display_mmio_offset + 0x72414)
> +#define SWF31 (dev_priv->info.display_mmio_offset + 0x72418)
> +#define SWF32 (dev_priv->info.display_mmio_offset + 0x7241c)
>
> /* Pipe B */
> -#define _PIPEBDSL (dev_priv->info->display_mmio_offset + 0x71000)
> -#define _PIPEBCONF (dev_priv->info->display_mmio_offset + 0x71008)
> -#define _PIPEBSTAT (dev_priv->info->display_mmio_offset + 0x71024)
> +#define _PIPEBDSL (dev_priv->info.display_mmio_offset + 0x71000)
> +#define _PIPEBCONF (dev_priv->info.display_mmio_offset + 0x71008)
> +#define _PIPEBSTAT (dev_priv->info.display_mmio_offset + 0x71024)
> #define _PIPEBFRAMEHIGH 0x71040
> #define _PIPEBFRAMEPIXEL 0x71044
> -#define _PIPEB_FRMCOUNT_GM45 (dev_priv->info->display_mmio_offset + 0x71040)
> -#define _PIPEB_FLIPCOUNT_GM45 (dev_priv->info->display_mmio_offset + 0x71044)
> +#define _PIPEB_FRMCOUNT_GM45 (dev_priv->info.display_mmio_offset + 0x71040)
> +#define _PIPEB_FLIPCOUNT_GM45 (dev_priv->info.display_mmio_offset + 0x71044)
>
>
> /* Display B control */
> -#define _DSPBCNTR (dev_priv->info->display_mmio_offset + 0x71180)
> +#define _DSPBCNTR (dev_priv->info.display_mmio_offset + 0x71180)
> #define DISPPLANE_ALPHA_TRANS_ENABLE (1<<15)
> #define DISPPLANE_ALPHA_TRANS_DISABLE 0
> #define DISPPLANE_SPRITE_ABOVE_DISPLAY 0
> #define DISPPLANE_SPRITE_ABOVE_OVERLAY (1)
> -#define _DSPBADDR (dev_priv->info->display_mmio_offset + 0x71184)
> -#define _DSPBSTRIDE (dev_priv->info->display_mmio_offset + 0x71188)
> -#define _DSPBPOS (dev_priv->info->display_mmio_offset + 0x7118C)
> -#define _DSPBSIZE (dev_priv->info->display_mmio_offset + 0x71190)
> -#define _DSPBSURF (dev_priv->info->display_mmio_offset + 0x7119C)
> -#define _DSPBTILEOFF (dev_priv->info->display_mmio_offset + 0x711A4)
> -#define _DSPBOFFSET (dev_priv->info->display_mmio_offset + 0x711A4)
> -#define _DSPBSURFLIVE (dev_priv->info->display_mmio_offset + 0x711AC)
> +#define _DSPBADDR (dev_priv->info.display_mmio_offset + 0x71184)
> +#define _DSPBSTRIDE (dev_priv->info.display_mmio_offset + 0x71188)
> +#define _DSPBPOS (dev_priv->info.display_mmio_offset + 0x7118C)
> +#define _DSPBSIZE (dev_priv->info.display_mmio_offset + 0x71190)
> +#define _DSPBSURF (dev_priv->info.display_mmio_offset + 0x7119C)
> +#define _DSPBTILEOFF (dev_priv->info.display_mmio_offset + 0x711A4)
> +#define _DSPBOFFSET (dev_priv->info.display_mmio_offset + 0x711A4)
> +#define _DSPBSURFLIVE (dev_priv->info.display_mmio_offset + 0x711AC)
>
> /* Sprite A control */
> #define _DVSACNTR 0x72180
> @@ -3898,39 +3898,39 @@
> #define FDI_PLL_FREQ_DISABLE_COUNT_LIMIT_MASK 0xff
>
>
> -#define _PIPEA_DATA_M1 (dev_priv->info->display_mmio_offset + 0x60030)
> +#define _PIPEA_DATA_M1 (dev_priv->info.display_mmio_offset + 0x60030)
> #define PIPE_DATA_M1_OFFSET 0
> -#define _PIPEA_DATA_N1 (dev_priv->info->display_mmio_offset + 0x60034)
> +#define _PIPEA_DATA_N1 (dev_priv->info.display_mmio_offset + 0x60034)
> #define PIPE_DATA_N1_OFFSET 0
>
> -#define _PIPEA_DATA_M2 (dev_priv->info->display_mmio_offset + 0x60038)
> +#define _PIPEA_DATA_M2 (dev_priv->info.display_mmio_offset + 0x60038)
> #define PIPE_DATA_M2_OFFSET 0
> -#define _PIPEA_DATA_N2 (dev_priv->info->display_mmio_offset + 0x6003c)
> +#define _PIPEA_DATA_N2 (dev_priv->info.display_mmio_offset + 0x6003c)
> #define PIPE_DATA_N2_OFFSET 0
>
> -#define _PIPEA_LINK_M1 (dev_priv->info->display_mmio_offset + 0x60040)
> +#define _PIPEA_LINK_M1 (dev_priv->info.display_mmio_offset + 0x60040)
> #define PIPE_LINK_M1_OFFSET 0
> -#define _PIPEA_LINK_N1 (dev_priv->info->display_mmio_offset + 0x60044)
> +#define _PIPEA_LINK_N1 (dev_priv->info.display_mmio_offset + 0x60044)
> #define PIPE_LINK_N1_OFFSET 0
>
> -#define _PIPEA_LINK_M2 (dev_priv->info->display_mmio_offset + 0x60048)
> +#define _PIPEA_LINK_M2 (dev_priv->info.display_mmio_offset + 0x60048)
> #define PIPE_LINK_M2_OFFSET 0
> -#define _PIPEA_LINK_N2 (dev_priv->info->display_mmio_offset + 0x6004c)
> +#define _PIPEA_LINK_N2 (dev_priv->info.display_mmio_offset + 0x6004c)
> #define PIPE_LINK_N2_OFFSET 0
>
> /* PIPEB timing regs are same start from 0x61000 */
>
> -#define _PIPEB_DATA_M1 (dev_priv->info->display_mmio_offset + 0x61030)
> -#define _PIPEB_DATA_N1 (dev_priv->info->display_mmio_offset + 0x61034)
> +#define _PIPEB_DATA_M1 (dev_priv->info.display_mmio_offset + 0x61030)
> +#define _PIPEB_DATA_N1 (dev_priv->info.display_mmio_offset + 0x61034)
>
> -#define _PIPEB_DATA_M2 (dev_priv->info->display_mmio_offset + 0x61038)
> -#define _PIPEB_DATA_N2 (dev_priv->info->display_mmio_offset + 0x6103c)
> +#define _PIPEB_DATA_M2 (dev_priv->info.display_mmio_offset + 0x61038)
> +#define _PIPEB_DATA_N2 (dev_priv->info.display_mmio_offset + 0x6103c)
>
> -#define _PIPEB_LINK_M1 (dev_priv->info->display_mmio_offset + 0x61040)
> -#define _PIPEB_LINK_N1 (dev_priv->info->display_mmio_offset + 0x61044)
> +#define _PIPEB_LINK_M1 (dev_priv->info.display_mmio_offset + 0x61040)
> +#define _PIPEB_LINK_N1 (dev_priv->info.display_mmio_offset + 0x61044)
>
> -#define _PIPEB_LINK_M2 (dev_priv->info->display_mmio_offset + 0x61048)
> -#define _PIPEB_LINK_N2 (dev_priv->info->display_mmio_offset + 0x6104c)
> +#define _PIPEB_LINK_M2 (dev_priv->info.display_mmio_offset + 0x61048)
> +#define _PIPEB_LINK_N2 (dev_priv->info.display_mmio_offset + 0x6104c)
>
> #define PIPE_DATA_M1(tran) _TRANSCODER(tran, _PIPEA_DATA_M1, _PIPEB_DATA_M1)
> #define PIPE_DATA_N1(tran) _TRANSCODER(tran, _PIPEA_DATA_N1, _PIPEB_DATA_N1)
> @@ -5041,7 +5041,7 @@
> #define GEN8_CENTROID_PIXEL_OPT_DIS (1<<8)
> #define GEN8_SAMPLER_POWER_BYPASS_DIS (1<<1)
>
> -#define G4X_AUD_VID_DID (dev_priv->info->display_mmio_offset + 0x62020)
> +#define G4X_AUD_VID_DID (dev_priv->info.display_mmio_offset + 0x62020)
> #define INTEL_AUDIO_DEVCL 0x808629FB
> #define INTEL_AUDIO_DEVBLC 0x80862801
> #define INTEL_AUDIO_DEVCTG 0x80862802
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 5c4c3ca..71876d9 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -1030,7 +1030,7 @@ static void assert_fdi_tx_pll_enabled(struct drm_i915_private *dev_priv,
> u32 val;
>
> /* ILK FDI PLL is always enabled */
> - if (dev_priv->info->gen == 5)
> + if (dev_priv->info.gen == 5)
> return;
>
> /* On Haswell, DDI ports are responsible for the FDI PLL setup */
> @@ -1433,7 +1433,7 @@ static void i9xx_enable_pll(struct intel_crtc *crtc)
> assert_pipe_disabled(dev_priv, crtc->pipe);
>
> /* No really, not for ILK+ */
> - BUG_ON(dev_priv->info->gen >= 5);
> + BUG_ON(dev_priv->info.gen >= 5);
>
> /* PLL is protected by panel, make sure we can write it */
> if (IS_MOBILE(dev) && !IS_I830(dev))
> @@ -1540,7 +1540,7 @@ static void ironlake_enable_shared_dpll(struct intel_crtc *crtc)
> struct intel_shared_dpll *pll = intel_crtc_to_shared_dpll(crtc);
>
> /* PCH PLLs only available on ILK, SNB and IVB */
> - BUG_ON(dev_priv->info->gen < 5);
> + BUG_ON(dev_priv->info.gen < 5);
> if (WARN_ON(pll == NULL))
> return;
>
> @@ -1569,7 +1569,7 @@ static void intel_disable_shared_dpll(struct intel_crtc *crtc)
> struct intel_shared_dpll *pll = intel_crtc_to_shared_dpll(crtc);
>
> /* PCH only available on ILK+ */
> - BUG_ON(dev_priv->info->gen < 5);
> + BUG_ON(dev_priv->info.gen < 5);
> if (WARN_ON(pll == NULL))
> return;
>
> @@ -1604,7 +1604,7 @@ static void ironlake_enable_pch_transcoder(struct drm_i915_private *dev_priv,
> uint32_t reg, val, pipeconf_val;
>
> /* PCH only available on ILK+ */
> - BUG_ON(dev_priv->info->gen < 5);
> + BUG_ON(dev_priv->info.gen < 5);
>
> /* Make sure PCH DPLL is enabled */
> assert_shared_dpll_enabled(dev_priv,
> @@ -1657,7 +1657,7 @@ static void lpt_enable_pch_transcoder(struct drm_i915_private *dev_priv,
> u32 val, pipeconf_val;
>
> /* PCH only available on ILK+ */
> - BUG_ON(dev_priv->info->gen < 5);
> + BUG_ON(dev_priv->info.gen < 5);
>
> /* FDI must be feeding us bits for PCH ports */
> assert_fdi_tx_enabled(dev_priv, (enum pipe) cpu_transcoder);
> @@ -1838,7 +1838,7 @@ static void intel_disable_pipe(struct drm_i915_private *dev_priv,
> void intel_flush_primary_plane(struct drm_i915_private *dev_priv,
> enum plane plane)
> {
> - u32 reg = dev_priv->info->gen >= 4 ? DSPSURF(plane) : DSPADDR(plane);
> + u32 reg = dev_priv->info.gen >= 4 ? DSPSURF(plane) : DSPADDR(plane);
>
> I915_WRITE(reg, I915_READ(reg));
> POSTING_READ(reg);
> @@ -7532,7 +7532,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
>
> /* we only need to pin inside GTT if cursor is non-phy */
> mutex_lock(&dev->struct_mutex);
> - if (!dev_priv->info->cursor_needs_physical) {
> + if (!dev_priv->info.cursor_needs_physical) {
> unsigned alignment;
>
> if (obj->tiling_mode) {
> @@ -7580,7 +7580,7 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc,
>
> finish:
> if (intel_crtc->cursor_bo) {
> - if (dev_priv->info->cursor_needs_physical) {
> + if (dev_priv->info.cursor_needs_physical) {
> if (intel_crtc->cursor_bo != obj)
> i915_gem_detach_phys_object(dev, intel_crtc->cursor_bo);
> } else
> @@ -8163,7 +8163,7 @@ void intel_mark_idle(struct drm_device *dev)
> intel_decrease_pllclock(crtc);
> }
>
> - if (dev_priv->info->gen >= 6)
> + if (dev_priv->info.gen >= 6)
> gen6_rps_idle(dev->dev_private);
> }
>
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index c01d08d..74b72a3 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -3586,7 +3586,7 @@ void gen6_rps_idle(struct drm_i915_private *dev_priv)
> {
> mutex_lock(&dev_priv->rps.hw_lock);
> if (dev_priv->rps.enabled) {
> - if (dev_priv->info->is_valleyview)
> + if (dev_priv->info.is_valleyview)
> valleyview_set_rps(dev_priv->dev, dev_priv->rps.min_delay);
> else
> gen6_set_rps(dev_priv->dev, dev_priv->rps.min_delay);
> @@ -3599,7 +3599,7 @@ void gen6_rps_boost(struct drm_i915_private *dev_priv)
> {
> mutex_lock(&dev_priv->rps.hw_lock);
> if (dev_priv->rps.enabled) {
> - if (dev_priv->info->is_valleyview)
> + if (dev_priv->info.is_valleyview)
> valleyview_set_rps(dev_priv->dev, dev_priv->rps.max_delay);
> else
> gen6_set_rps(dev_priv->dev, dev_priv->rps.max_delay);
> @@ -4368,7 +4368,7 @@ unsigned long i915_chipset_val(struct drm_i915_private *dev_priv)
> {
> unsigned long val;
>
> - if (dev_priv->info->gen != 5)
> + if (dev_priv->info.gen != 5)
> return 0;
>
> spin_lock_irq(&mchdev_lock);
> @@ -4530,7 +4530,7 @@ static u16 pvid_to_extvid(struct drm_i915_private *dev_priv, u8 pxvid)
> { 16000, 14875, },
> { 16125, 15000, },
> };
> - if (dev_priv->info->is_mobile)
> + if (dev_priv->info.is_mobile)
> return v_table[pxvid].vm;
> else
> return v_table[pxvid].vd;
> @@ -4573,7 +4573,7 @@ static void __i915_update_gfx_val(struct drm_i915_private *dev_priv)
>
> void i915_update_gfx_val(struct drm_i915_private *dev_priv)
> {
> - if (dev_priv->info->gen != 5)
> + if (dev_priv->info.gen != 5)
> return;
>
> spin_lock_irq(&mchdev_lock);
> @@ -4624,7 +4624,7 @@ unsigned long i915_gfx_val(struct drm_i915_private *dev_priv)
> {
> unsigned long val;
>
> - if (dev_priv->info->gen != 5)
> + if (dev_priv->info.gen != 5)
> return 0;
>
> spin_lock_irq(&mchdev_lock);
> --
> 1.8.3.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Ville Syrjälä
Intel OTC
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2013-12-12 11:42 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-12 11:20 Supporting fused display configurations v2 Damien Lespiau
2013-12-12 11:20 ` [PATCH 1/6] drm/i915: Make the intel_device_info structure kept in dev_priv writable Damien Lespiau
2013-12-12 11:42 ` Ville Syrjälä
2013-12-12 11:20 ` [PATCH 2/6] drm/i915: Move num_plane to the intel_device_info structure Damien Lespiau
2013-12-12 11:40 ` Ville Syrjälä
2013-12-12 11:21 ` [PATCH 3/6] drm/i915: Consolidate FUSE_STRAP in one set of defines Damien Lespiau
2013-12-12 11:21 ` [PATCH 4/6] drm/i915: Disable display when fused off Damien Lespiau
2013-12-12 11:21 ` [PATCH 5/6] drm/i915: Remove the Quanta special case Damien Lespiau
2013-12-12 11:21 ` [PATCH 6/6] drm/i915: Use I915_MAX_PIPES in the pipe/plane_to_crtc_mapping definitions Damien Lespiau
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox