* Supporting fused display configurations v3
@ 2013-12-12 14:36 Damien Lespiau
2013-12-12 14:36 ` [PATCH 1/8] drm/i915: Use IS_VALLEYVIEW() to test the is_valleyview flag Damien Lespiau
` (8 more replies)
0 siblings, 9 replies; 20+ messages in thread
From: Damien Lespiau @ 2013-12-12 14:36 UTC (permalink / raw)
To: intel-gfx
v3, following up a couple of review comments from Ville:
http://lists.freedesktop.org/archives/intel-gfx/2013-December/037313.html
Changes:
- Always use INTEL_INFO() after initialization to access dev_priv->info
(well, except in the reg macros, where it's just too impractical),
- Cast the device_info pointer returned by INTEL_INFO() to be const to cast
potential writes by code using the macro,
- Renamed num_plane to num_sprites as num_planes would imply we're counting
the primary plane there, but we're not.
--
Damien
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 1/8] drm/i915: Use IS_VALLEYVIEW() to test the is_valleyview flag
2013-12-12 14:36 Supporting fused display configurations v3 Damien Lespiau
@ 2013-12-12 14:36 ` Damien Lespiau
2013-12-17 9:38 ` Daniel Vetter
2013-12-12 14:36 ` [PATCH 2/8] drm/i915: Always use INTEL_INFO() to access the device_info structure Damien Lespiau
` (7 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: Damien Lespiau @ 2013-12-12 14:36 UTC (permalink / raw)
To: intel-gfx
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
---
drivers/gpu/drm/i915/intel_pm.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index c01d08d..351065d 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -3584,9 +3584,11 @@ void gen6_set_rps(struct drm_device *dev, u8 val)
void gen6_rps_idle(struct drm_i915_private *dev_priv)
{
+ struct drm_device *dev = dev_priv->dev;
+
mutex_lock(&dev_priv->rps.hw_lock);
if (dev_priv->rps.enabled) {
- if (dev_priv->info->is_valleyview)
+ if (IS_VALLEYVIEW(dev))
valleyview_set_rps(dev_priv->dev, dev_priv->rps.min_delay);
else
gen6_set_rps(dev_priv->dev, dev_priv->rps.min_delay);
@@ -3597,9 +3599,11 @@ void gen6_rps_idle(struct drm_i915_private *dev_priv)
void gen6_rps_boost(struct drm_i915_private *dev_priv)
{
+ struct drm_device *dev = dev_priv->dev;
+
mutex_lock(&dev_priv->rps.hw_lock);
if (dev_priv->rps.enabled) {
- if (dev_priv->info->is_valleyview)
+ if (IS_VALLEYVIEW(dev))
valleyview_set_rps(dev_priv->dev, dev_priv->rps.max_delay);
else
gen6_set_rps(dev_priv->dev, dev_priv->rps.max_delay);
--
1.8.3.1
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 2/8] drm/i915: Always use INTEL_INFO() to access the device_info structure
2013-12-12 14:36 Supporting fused display configurations v3 Damien Lespiau
2013-12-12 14:36 ` [PATCH 1/8] drm/i915: Use IS_VALLEYVIEW() to test the is_valleyview flag Damien Lespiau
@ 2013-12-12 14:36 ` Damien Lespiau
2013-12-12 16:58 ` Chris Wilson
2013-12-12 14:36 ` [PATCH 3/8] drm/i915: Make the intel_device_info structure kept in dev_priv writable Damien Lespiau
` (6 subsequent siblings)
8 siblings, 1 reply; 20+ messages in thread
From: Damien Lespiau @ 2013-12-12 14:36 UTC (permalink / raw)
To: intel-gfx
If we make sure that all the dev_priv->info usages are wrapped by
INTEL_INFO(), we can easily modify the ->info field to be structure and
not a pointer while keeping the const protection in the INTEL_INFO()
macro.
Suggested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
---
drivers/gpu/drm/i915/i915_gem.c | 5 +++--
drivers/gpu/drm/i915/i915_irq.c | 4 ++--
drivers/gpu/drm/i915/intel_display.c | 27 +++++++++++++++------------
drivers/gpu/drm/i915/intel_pm.c | 13 +++++++++----
4 files changed, 29 insertions(+), 20 deletions(-)
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 4ecfbf7..5fc0b83 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -1014,7 +1014,8 @@ static int __wait_seqno(struct intel_ring_buffer *ring, u32 seqno,
struct timespec *timeout,
struct drm_i915_file_private *file_priv)
{
- drm_i915_private_t *dev_priv = ring->dev->dev_private;
+ struct drm_device *dev = ring->dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
struct timespec before, now;
DEFINE_WAIT(wait);
long timeout_jiffies;
@@ -1027,7 +1028,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 (INTEL_INFO(dev)->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..8ed7edf 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 (INTEL_INFO(dev)->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 (INTEL_INFO(dev)->gen == 3)
I915_WRITE(INSTPM, _MASKED_BIT_ENABLE(INSTPM_AGPBUSY_DIS));
i915_disable_pipestat(dev_priv, pipe,
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 5c4c3ca..34dc0d6 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 (INTEL_INFO(dev_priv->dev)->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(INTEL_INFO(dev)->gen >= 5);
/* PLL is protected by panel, make sure we can write it */
if (IS_MOBILE(dev) && !IS_I830(dev))
@@ -1536,11 +1536,12 @@ void vlv_wait_port_ready(struct drm_i915_private *dev_priv,
*/
static void ironlake_enable_shared_dpll(struct intel_crtc *crtc)
{
- struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
+ struct drm_device *dev = crtc->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
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(INTEL_INFO(dev)->gen < 5);
if (WARN_ON(pll == NULL))
return;
@@ -1565,11 +1566,12 @@ static void ironlake_enable_shared_dpll(struct intel_crtc *crtc)
static void intel_disable_shared_dpll(struct intel_crtc *crtc)
{
- struct drm_i915_private *dev_priv = crtc->base.dev->dev_private;
+ struct drm_device *dev = crtc->base.dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
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(INTEL_INFO(dev)->gen < 5);
if (WARN_ON(pll == NULL))
return;
@@ -1604,7 +1606,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(INTEL_INFO(dev)->gen < 5);
/* Make sure PCH DPLL is enabled */
assert_shared_dpll_enabled(dev_priv,
@@ -1657,7 +1659,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(INTEL_INFO(dev_priv->dev)->gen < 5);
/* FDI must be feeding us bits for PCH ports */
assert_fdi_tx_enabled(dev_priv, (enum pipe) cpu_transcoder);
@@ -1838,7 +1840,8 @@ 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);
+ struct drm_device *dev = dev_priv->dev;
+ u32 reg = INTEL_INFO(dev)->gen >= 4 ? DSPSURF(plane) : DSPADDR(plane);
I915_WRITE(reg, I915_READ(reg));
POSTING_READ(reg);
@@ -7532,7 +7535,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 (!INTEL_INFO(dev)->cursor_needs_physical) {
unsigned alignment;
if (obj->tiling_mode) {
@@ -7580,7 +7583,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 (INTEL_INFO(dev)->cursor_needs_physical) {
if (intel_crtc->cursor_bo != obj)
i915_gem_detach_phys_object(dev, intel_crtc->cursor_bo);
} else
@@ -8163,7 +8166,7 @@ void intel_mark_idle(struct drm_device *dev)
intel_decrease_pllclock(crtc);
}
- if (dev_priv->info->gen >= 6)
+ if (INTEL_INFO(dev)->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 351065d..cc21796 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -4370,9 +4370,10 @@ static unsigned long __i915_chipset_val(struct drm_i915_private *dev_priv)
unsigned long i915_chipset_val(struct drm_i915_private *dev_priv)
{
+ struct drm_device *dev = dev_priv->dev;
unsigned long val;
- if (dev_priv->info->gen != 5)
+ if (INTEL_INFO(dev)->gen != 5)
return 0;
spin_lock_irq(&mchdev_lock);
@@ -4401,6 +4402,7 @@ unsigned long i915_mch_val(struct drm_i915_private *dev_priv)
static u16 pvid_to_extvid(struct drm_i915_private *dev_priv, u8 pxvid)
{
+ struct drm_device *dev = dev_priv->dev;
static const struct v_table {
u16 vd; /* in .1 mil */
u16 vm; /* in .1 mil */
@@ -4534,7 +4536,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 (INTEL_INFO(dev)->is_mobile)
return v_table[pxvid].vm;
else
return v_table[pxvid].vd;
@@ -4577,7 +4579,9 @@ 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)
+ struct drm_device *dev = dev_priv->dev;
+
+ if (INTEL_INFO(dev)->gen != 5)
return;
spin_lock_irq(&mchdev_lock);
@@ -4626,9 +4630,10 @@ static unsigned long __i915_gfx_val(struct drm_i915_private *dev_priv)
unsigned long i915_gfx_val(struct drm_i915_private *dev_priv)
{
+ struct drm_device *dev = dev_priv->dev;
unsigned long val;
- if (dev_priv->info->gen != 5)
+ if (INTEL_INFO(dev)->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
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 3/8] drm/i915: Make the intel_device_info structure kept in dev_priv writable
2013-12-12 14:36 Supporting fused display configurations v3 Damien Lespiau
2013-12-12 14:36 ` [PATCH 1/8] drm/i915: Use IS_VALLEYVIEW() to test the is_valleyview flag Damien Lespiau
2013-12-12 14:36 ` [PATCH 2/8] drm/i915: Always use INTEL_INFO() to access the device_info structure Damien Lespiau
@ 2013-12-12 14:36 ` Damien Lespiau
2013-12-12 15:30 ` Jani Nikula
2013-12-12 16:58 ` Ville Syrjälä
2013-12-12 14:36 ` [PATCH 4/8] drm/i915: Move num_plane to the intel_device_info structure Damien Lespiau
` (5 subsequent siblings)
8 siblings, 2 replies; 20+ messages in thread
From: Damien Lespiau @ 2013-12-12 14:36 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
v2: cast the info pointer returned by INTEL_INFO() to be const to catch
uses that would modify the structure post-initialization.
(Ville Syrjälä)
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_reg.h | 228 ++++++++++++++++++++--------------------
3 files changed, 118 insertions(+), 118 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..a66245a 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) ((const struct intel_device_info *)&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_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
--
1.8.3.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 4/8] drm/i915: Move num_plane to the intel_device_info structure
2013-12-12 14:36 Supporting fused display configurations v3 Damien Lespiau
` (2 preceding siblings ...)
2013-12-12 14:36 ` [PATCH 3/8] drm/i915: Make the intel_device_info structure kept in dev_priv writable Damien Lespiau
@ 2013-12-12 14:36 ` Damien Lespiau
2013-12-12 14:36 ` [PATCH 5/8] drm/i915: Consolidate FUSE_STRAP in one set of defines Damien Lespiau
` (4 subsequent siblings)
8 siblings, 0 replies; 20+ messages in thread
From: Damien Lespiau @ 2013-12-12 14:36 UTC (permalink / raw)
To: intel-gfx
And rename it to num_sprites as this value doesn't count the primary
plane.
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.
v2: rename num_plane to num_sprites (Ville Syrjälä)
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..28a1142 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 = &to_i915(dev)->info;
+
+ info->num_sprites = 1;
+ if (IS_VALLEYVIEW(dev))
+ info->num_sprites = 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 a66245a..c3e170f 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_sprites + (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_sprites: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 34dc0d6..46e0688 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_sprites; i++) {
reg = SPCNTR(pipe, i);
val = I915_READ(reg);
WARN((val & SP_ENABLE),
@@ -10865,7 +10865,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_sprites; 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
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 5/8] drm/i915: Consolidate FUSE_STRAP in one set of defines
2013-12-12 14:36 Supporting fused display configurations v3 Damien Lespiau
` (3 preceding siblings ...)
2013-12-12 14:36 ` [PATCH 4/8] drm/i915: Move num_plane to the intel_device_info structure Damien Lespiau
@ 2013-12-12 14:36 ` Damien Lespiau
2013-12-12 14:36 ` [PATCH 6/8] drm/i915: Disable display when fused off Damien Lespiau
` (3 subsequent siblings)
8 siblings, 0 replies; 20+ messages in thread
From: Damien Lespiau @ 2013-12-12 14:36 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 46e0688..561b95e 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -10235,8 +10235,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] 20+ messages in thread
* [PATCH 6/8] drm/i915: Disable display when fused off
2013-12-12 14:36 Supporting fused display configurations v3 Damien Lespiau
` (4 preceding siblings ...)
2013-12-12 14:36 ` [PATCH 5/8] drm/i915: Consolidate FUSE_STRAP in one set of defines Damien Lespiau
@ 2013-12-12 14:36 ` Damien Lespiau
2013-12-12 14:36 ` [PATCH 7/8] drm/i915: Remove the Quanta special case Damien Lespiau
` (2 subsequent siblings)
8 siblings, 0 replies; 20+ messages in thread
From: Damien Lespiau @ 2013-12-12 14:36 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 28a1142..8810097 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 = &to_i915(dev)->info;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_device_info *info = &dev_priv->info;
info->num_sprites = 1;
if (IS_VALLEYVIEW(dev))
info->num_sprites = 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] 20+ messages in thread
* [PATCH 7/8] drm/i915: Remove the Quanta special case
2013-12-12 14:36 Supporting fused display configurations v3 Damien Lespiau
` (5 preceding siblings ...)
2013-12-12 14:36 ` [PATCH 6/8] drm/i915: Disable display when fused off Damien Lespiau
@ 2013-12-12 14:36 ` Damien Lespiau
2013-12-12 14:36 ` [PATCH 8/8] drm/i915: Use I915_MAX_PIPES in the pipe/plane_to_crtc_mapping definitions Damien Lespiau
2013-12-13 8:51 ` Supporting fused display configurations v3 Mika Kuoppala
8 siblings, 0 replies; 20+ messages in thread
From: Damien Lespiau @ 2013-12-12 14:36 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] 20+ messages in thread
* [PATCH 8/8] drm/i915: Use I915_MAX_PIPES in the pipe/plane_to_crtc_mapping definitions
2013-12-12 14:36 Supporting fused display configurations v3 Damien Lespiau
` (6 preceding siblings ...)
2013-12-12 14:36 ` [PATCH 7/8] drm/i915: Remove the Quanta special case Damien Lespiau
@ 2013-12-12 14:36 ` Damien Lespiau
2013-12-13 8:51 ` Supporting fused display configurations v3 Mika Kuoppala
8 siblings, 0 replies; 20+ messages in thread
From: Damien Lespiau @ 2013-12-12 14:36 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 c3e170f..ea6b578 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] 20+ messages in thread
* Re: [PATCH 3/8] drm/i915: Make the intel_device_info structure kept in dev_priv writable
2013-12-12 14:36 ` [PATCH 3/8] drm/i915: Make the intel_device_info structure kept in dev_priv writable Damien Lespiau
@ 2013-12-12 15:30 ` Jani Nikula
2013-12-12 15:38 ` Damien Lespiau
2013-12-12 16:58 ` Ville Syrjälä
1 sibling, 1 reply; 20+ messages in thread
From: Jani Nikula @ 2013-12-12 15:30 UTC (permalink / raw)
To: Damien Lespiau, intel-gfx
On Thu, 12 Dec 2013, Damien Lespiau <damien.lespiau@intel.com> 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
>
> v2: cast the info pointer returned by INTEL_INFO() to be const to catch
> uses that would modify the structure post-initialization.
> (Ville Syrjälä)
>
> 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_reg.h | 228 ++++++++++++++++++++--------------------
> 3 files changed, 118 insertions(+), 118 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..a66245a 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) ((const struct intel_device_info *)&to_i915(dev)->info)
If that were an inline function you wouldn't have to cast to add const:
static inline const struct intel_device_info *
intel_info(const struct drm_device *dev)
{
return to_i915(dev)->info;
}
I'm not insisting on this bikeshed, though.
BR,
Jani.
>
> #define IS_I830(dev) ((dev)->pdev->device == 0x3577)
> #define IS_845G(dev) ((dev)->pdev->device == 0x2562)
> 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
> --
> 1.8.3.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 3/8] drm/i915: Make the intel_device_info structure kept in dev_priv writable
2013-12-12 15:30 ` Jani Nikula
@ 2013-12-12 15:38 ` Damien Lespiau
0 siblings, 0 replies; 20+ messages in thread
From: Damien Lespiau @ 2013-12-12 15:38 UTC (permalink / raw)
To: Jani Nikula; +Cc: intel-gfx
On Thu, Dec 12, 2013 at 05:30:14PM +0200, Jani Nikula wrote:
> > -#define INTEL_INFO(dev) (to_i915(dev)->info)
> > +#define INTEL_INFO(dev) ((const struct intel_device_info *)&to_i915(dev)->info)
>
> If that were an inline function you wouldn't have to cast to add const:
>
> static inline const struct intel_device_info *
> intel_info(const struct drm_device *dev)
> {
> return to_i915(dev)->info;
> }
>
> I'm not insisting on this bikeshed, though.
True, I'd happily review a follow-up patch once the series has landed :)
--
Damien
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 3/8] drm/i915: Make the intel_device_info structure kept in dev_priv writable
2013-12-12 14:36 ` [PATCH 3/8] drm/i915: Make the intel_device_info structure kept in dev_priv writable Damien Lespiau
2013-12-12 15:30 ` Jani Nikula
@ 2013-12-12 16:58 ` Ville Syrjälä
1 sibling, 0 replies; 20+ messages in thread
From: Ville Syrjälä @ 2013-12-12 16:58 UTC (permalink / raw)
To: Damien Lespiau; +Cc: intel-gfx
On Thu, Dec 12, 2013 at 02:36:38PM +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
>
> v2: cast the info pointer returned by INTEL_INFO() to be const to catch
> uses that would modify the structure post-initialization.
> (Ville Syrjälä)
>
> 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_reg.h | 228 ++++++++++++++++++++--------------------
> 3 files changed, 118 insertions(+), 118 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));
This could be just an assigment. The benefit would be type checking
from the compiler.
Otherwise the series looks good to me:
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> 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..a66245a 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) ((const struct intel_device_info *)&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_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
> --
> 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] 20+ messages in thread
* Re: [PATCH 2/8] drm/i915: Always use INTEL_INFO() to access the device_info structure
2013-12-12 14:36 ` [PATCH 2/8] drm/i915: Always use INTEL_INFO() to access the device_info structure Damien Lespiau
@ 2013-12-12 16:58 ` Chris Wilson
2013-12-12 17:05 ` Damien Lespiau
0 siblings, 1 reply; 20+ messages in thread
From: Chris Wilson @ 2013-12-12 16:58 UTC (permalink / raw)
To: Damien Lespiau; +Cc: intel-gfx
On Thu, Dec 12, 2013 at 02:36:37PM +0000, Damien Lespiau wrote:
> If we make sure that all the dev_priv->info usages are wrapped by
> INTEL_INFO(), we can easily modify the ->info field to be structure and
> not a pointer while keeping the const protection in the INTEL_INFO()
> macro.
Yuck.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 2/8] drm/i915: Always use INTEL_INFO() to access the device_info structure
2013-12-12 16:58 ` Chris Wilson
@ 2013-12-12 17:05 ` Damien Lespiau
2013-12-12 17:23 ` Chris Wilson
0 siblings, 1 reply; 20+ messages in thread
From: Damien Lespiau @ 2013-12-12 17:05 UTC (permalink / raw)
To: Chris Wilson, intel-gfx
On Thu, Dec 12, 2013 at 04:58:21PM +0000, Chris Wilson wrote:
> On Thu, Dec 12, 2013 at 02:36:37PM +0000, Damien Lespiau wrote:
> > If we make sure that all the dev_priv->info usages are wrapped by
> > INTEL_INFO(), we can easily modify the ->info field to be structure and
> > not a pointer while keeping the const protection in the INTEL_INFO()
> > macro.
>
> Yuck.
Would Jani's suggestion to transmogrify INTEL_INFO() into a function
make you happier? Or is it the back and forth from *dev_priv to *dev
to dev_priv->info that is of utmost disgust?
--
Damien
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 2/8] drm/i915: Always use INTEL_INFO() to access the device_info structure
2013-12-12 17:05 ` Damien Lespiau
@ 2013-12-12 17:23 ` Chris Wilson
2013-12-12 18:47 ` Ville Syrjälä
0 siblings, 1 reply; 20+ messages in thread
From: Chris Wilson @ 2013-12-12 17:23 UTC (permalink / raw)
To: Damien Lespiau; +Cc: intel-gfx
On Thu, Dec 12, 2013 at 05:05:18PM +0000, Damien Lespiau wrote:
> On Thu, Dec 12, 2013 at 04:58:21PM +0000, Chris Wilson wrote:
> > On Thu, Dec 12, 2013 at 02:36:37PM +0000, Damien Lespiau wrote:
> > > If we make sure that all the dev_priv->info usages are wrapped by
> > > INTEL_INFO(), we can easily modify the ->info field to be structure and
> > > not a pointer while keeping the const protection in the INTEL_INFO()
> > > macro.
> >
> > Yuck.
>
> Would Jani's suggestion to transmogrify INTEL_INFO() into a function
> make you happier? Or is it the back and forth from *dev_priv to *dev
> to dev_priv->info that is of utmost disgust?
Ultimately, I'd like to see the pointer dance die. But in the meantime,
I'd like to see the macro die, dev_priv->info is far less scary than
INTEL_INFO(dev_priv->dev)->info, even to_i915(dev)->info is more
pleasant to read.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 2/8] drm/i915: Always use INTEL_INFO() to access the device_info structure
2013-12-12 17:23 ` Chris Wilson
@ 2013-12-12 18:47 ` Ville Syrjälä
0 siblings, 0 replies; 20+ messages in thread
From: Ville Syrjälä @ 2013-12-12 18:47 UTC (permalink / raw)
To: Chris Wilson, Damien Lespiau, intel-gfx
On Thu, Dec 12, 2013 at 05:23:08PM +0000, Chris Wilson wrote:
> On Thu, Dec 12, 2013 at 05:05:18PM +0000, Damien Lespiau wrote:
> > On Thu, Dec 12, 2013 at 04:58:21PM +0000, Chris Wilson wrote:
> > > On Thu, Dec 12, 2013 at 02:36:37PM +0000, Damien Lespiau wrote:
> > > > If we make sure that all the dev_priv->info usages are wrapped by
> > > > INTEL_INFO(), we can easily modify the ->info field to be structure and
> > > > not a pointer while keeping the const protection in the INTEL_INFO()
> > > > macro.
> > >
> > > Yuck.
> >
> > Would Jani's suggestion to transmogrify INTEL_INFO() into a function
> > make you happier? Or is it the back and forth from *dev_priv to *dev
> > to dev_priv->info that is of utmost disgust?
>
> Ultimately, I'd like to see the pointer dance die. But in the meantime,
> I'd like to see the macro die, dev_priv->info is far less scary than
> INTEL_INFO(dev_priv->dev)->info, even to_i915(dev)->info is more
> pleasant to read.
I guess another option would be to make keep the dev_priv.info as a
const struct, and just explicitly cast the const away when modifying
the struct.
--
Ville Syrjälä
Intel OTC
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: Supporting fused display configurations v3
2013-12-12 14:36 Supporting fused display configurations v3 Damien Lespiau
` (7 preceding siblings ...)
2013-12-12 14:36 ` [PATCH 8/8] drm/i915: Use I915_MAX_PIPES in the pipe/plane_to_crtc_mapping definitions Damien Lespiau
@ 2013-12-13 8:51 ` Mika Kuoppala
8 siblings, 0 replies; 20+ messages in thread
From: Mika Kuoppala @ 2013-12-13 8:51 UTC (permalink / raw)
To: Damien Lespiau, intel-gfx
Damien Lespiau <damien.lespiau@intel.com> writes:
> v3, following up a couple of review comments from Ville:
> http://lists.freedesktop.org/archives/intel-gfx/2013-December/037313.html
>
> Changes:
> - Always use INTEL_INFO() after initialization to access dev_priv->info
> (well, except in the reg macros, where it's just too impractical),
> - Cast the device_info pointer returned by INTEL_INFO() to be const to cast
> potential writes by code using the macro,
> - Renamed num_plane to num_sprites as num_planes would imply we're counting
> the primary plane there, but we're not.
>
> --
> Damien
Series:
Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 1/8] drm/i915: Use IS_VALLEYVIEW() to test the is_valleyview flag
2013-12-12 14:36 ` [PATCH 1/8] drm/i915: Use IS_VALLEYVIEW() to test the is_valleyview flag Damien Lespiau
@ 2013-12-17 9:38 ` Daniel Vetter
2013-12-17 11:17 ` Damien Lespiau
0 siblings, 1 reply; 20+ messages in thread
From: Daniel Vetter @ 2013-12-17 9:38 UTC (permalink / raw)
To: Damien Lespiau; +Cc: intel-gfx
On Thu, Dec 12, 2013 at 02:36:36PM +0000, Damien Lespiau wrote:
> Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
Merged this one here, not really sure what to do with the rest.
-Daniel
> ---
> drivers/gpu/drm/i915/intel_pm.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
> index c01d08d..351065d 100644
> --- a/drivers/gpu/drm/i915/intel_pm.c
> +++ b/drivers/gpu/drm/i915/intel_pm.c
> @@ -3584,9 +3584,11 @@ void gen6_set_rps(struct drm_device *dev, u8 val)
>
> void gen6_rps_idle(struct drm_i915_private *dev_priv)
> {
> + struct drm_device *dev = dev_priv->dev;
> +
> mutex_lock(&dev_priv->rps.hw_lock);
> if (dev_priv->rps.enabled) {
> - if (dev_priv->info->is_valleyview)
> + if (IS_VALLEYVIEW(dev))
> valleyview_set_rps(dev_priv->dev, dev_priv->rps.min_delay);
> else
> gen6_set_rps(dev_priv->dev, dev_priv->rps.min_delay);
> @@ -3597,9 +3599,11 @@ void gen6_rps_idle(struct drm_i915_private *dev_priv)
>
> void gen6_rps_boost(struct drm_i915_private *dev_priv)
> {
> + struct drm_device *dev = dev_priv->dev;
> +
> mutex_lock(&dev_priv->rps.hw_lock);
> if (dev_priv->rps.enabled) {
> - if (dev_priv->info->is_valleyview)
> + if (IS_VALLEYVIEW(dev))
> valleyview_set_rps(dev_priv->dev, dev_priv->rps.max_delay);
> else
> gen6_set_rps(dev_priv->dev, dev_priv->rps.max_delay);
> --
> 1.8.3.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 1/8] drm/i915: Use IS_VALLEYVIEW() to test the is_valleyview flag
2013-12-17 9:38 ` Daniel Vetter
@ 2013-12-17 11:17 ` Damien Lespiau
2013-12-17 12:18 ` Daniel Vetter
0 siblings, 1 reply; 20+ messages in thread
From: Damien Lespiau @ 2013-12-17 11:17 UTC (permalink / raw)
To: Daniel Vetter; +Cc: intel-gfx
On Tue, Dec 17, 2013 at 10:38:48AM +0100, Daniel Vetter wrote:
> On Thu, Dec 12, 2013 at 02:36:36PM +0000, Damien Lespiau wrote:
> > Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
>
> Merged this one here, not really sure what to do with the rest.
So, apparently, there's some unhappiness with INTEL_INFO, which is
somewhat understandable, it doesn't provide much more convenience than
dev_priv->info.
I can resend the series getting rid of INTEL_INFO() if the sentiment is
shared. To provide the const safety, we can then declare the info struct
as const in the private structure and cast it as non const at
initialization time (as Ville suggests).
--
Damien
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 1/8] drm/i915: Use IS_VALLEYVIEW() to test the is_valleyview flag
2013-12-17 11:17 ` Damien Lespiau
@ 2013-12-17 12:18 ` Daniel Vetter
0 siblings, 0 replies; 20+ messages in thread
From: Daniel Vetter @ 2013-12-17 12:18 UTC (permalink / raw)
To: Damien Lespiau; +Cc: intel-gfx
On Tue, Dec 17, 2013 at 12:17 PM, Damien Lespiau
<damien.lespiau@intel.com> wrote:
> On Tue, Dec 17, 2013 at 10:38:48AM +0100, Daniel Vetter wrote:
>> On Thu, Dec 12, 2013 at 02:36:36PM +0000, Damien Lespiau wrote:
>> > Signed-off-by: Damien Lespiau <damien.lespiau@intel.com>
>>
>> Merged this one here, not really sure what to do with the rest.
>
> So, apparently, there's some unhappiness with INTEL_INFO, which is
> somewhat understandable, it doesn't provide much more convenience than
> dev_priv->info.
>
> I can resend the series getting rid of INTEL_INFO() if the sentiment is
> shared. To provide the const safety, we can then declare the info struct
> as const in the private structure and cast it as non const at
> initialization time (as Ville suggests).
I'd be ok with that plan. Like I've said on irc, no opinions really on
this matter, as long as we can keep the const safety around - imo that
helps a lot with reviewing code. E.g. Chris just spotted that some of
Ben's semaphore changes aren't too safe since we can frob semaphores
at runtime.
-Daniel
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2013-12-17 12:18 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-12-12 14:36 Supporting fused display configurations v3 Damien Lespiau
2013-12-12 14:36 ` [PATCH 1/8] drm/i915: Use IS_VALLEYVIEW() to test the is_valleyview flag Damien Lespiau
2013-12-17 9:38 ` Daniel Vetter
2013-12-17 11:17 ` Damien Lespiau
2013-12-17 12:18 ` Daniel Vetter
2013-12-12 14:36 ` [PATCH 2/8] drm/i915: Always use INTEL_INFO() to access the device_info structure Damien Lespiau
2013-12-12 16:58 ` Chris Wilson
2013-12-12 17:05 ` Damien Lespiau
2013-12-12 17:23 ` Chris Wilson
2013-12-12 18:47 ` Ville Syrjälä
2013-12-12 14:36 ` [PATCH 3/8] drm/i915: Make the intel_device_info structure kept in dev_priv writable Damien Lespiau
2013-12-12 15:30 ` Jani Nikula
2013-12-12 15:38 ` Damien Lespiau
2013-12-12 16:58 ` Ville Syrjälä
2013-12-12 14:36 ` [PATCH 4/8] drm/i915: Move num_plane to the intel_device_info structure Damien Lespiau
2013-12-12 14:36 ` [PATCH 5/8] drm/i915: Consolidate FUSE_STRAP in one set of defines Damien Lespiau
2013-12-12 14:36 ` [PATCH 6/8] drm/i915: Disable display when fused off Damien Lespiau
2013-12-12 14:36 ` [PATCH 7/8] drm/i915: Remove the Quanta special case Damien Lespiau
2013-12-12 14:36 ` [PATCH 8/8] drm/i915: Use I915_MAX_PIPES in the pipe/plane_to_crtc_mapping definitions Damien Lespiau
2013-12-13 8:51 ` Supporting fused display configurations v3 Mika Kuoppala
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.