Skip to content

Commit 4238a41

Browse files
committed
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/anholt/drm-intel
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/anholt/drm-intel: (58 commits) drm/i915,intel_agp: Add support for Sandybridge D0 drm/i915: fix render pipe control notify on sandybridge agp/intel: set 40-bit dma mask on Sandybridge drm/i915: Remove the conflicting BUG_ON() drm/i915/suspend: s/IS_IRONLAKE/HAS_PCH_SPLIT/ drm/i915/suspend: Flush register writes before busy-waiting. i915: disable DAC on Ironlake also when doing CRT load detection. drm/i915: wait for actual vblank, not just 20ms drm/i915: make sure eDP PLL is enabled at the right time drm/i915: fix VGA plane disable for Ironlake+ drm/i915: eDP mode set sequence corrections drm/i915: add panel reset workaround drm/i915: Enable RC6 on Ironlake. drm/i915/sdvo: Only set is_lvds if we have a valid fixed mode. drm/i915: Set up a render context on Ironlake drm/i915 invalidate indirect state pointers at end of ring exec drm/i915: Wake-up wait_request() from elapsed hang-check (v2) drm/i915: Apply i830 errata for cursor alignment drm/i915: Only update i845/i865 CURBASE when disabled (v2) drm/i915: FBC is updated within set_base() so remove second call in mode_set() ...
2 parents bc584c5 + 4fefe43 commit 4238a41

28 files changed

+2663
-2417
lines changed

drivers/char/agp/intel-agp.c

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -819,13 +819,16 @@ static const struct intel_driver_description {
819819
"Sandybridge", NULL, &intel_gen6_driver },
820820
{ PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_IG,
821821
"Sandybridge", NULL, &intel_gen6_driver },
822+
{ PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB, PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_D0_IG,
823+
"Sandybridge", NULL, &intel_gen6_driver },
822824
{ 0, 0, NULL, NULL, NULL }
823825
};
824826

825827
static int __devinit intel_gmch_probe(struct pci_dev *pdev,
826828
struct agp_bridge_data *bridge)
827829
{
828-
int i;
830+
int i, mask;
831+
829832
bridge->driver = NULL;
830833

831834
for (i = 0; intel_agp_chipsets[i].name != NULL; i++) {
@@ -845,14 +848,19 @@ static int __devinit intel_gmch_probe(struct pci_dev *pdev,
845848

846849
dev_info(&pdev->dev, "Intel %s Chipset\n", intel_agp_chipsets[i].name);
847850

848-
if (bridge->driver->mask_memory == intel_i965_mask_memory) {
849-
if (pci_set_dma_mask(intel_private.pcidev, DMA_BIT_MASK(36)))
850-
dev_err(&intel_private.pcidev->dev,
851-
"set gfx device dma mask 36bit failed!\n");
852-
else
853-
pci_set_consistent_dma_mask(intel_private.pcidev,
854-
DMA_BIT_MASK(36));
855-
}
851+
if (bridge->driver->mask_memory == intel_gen6_mask_memory)
852+
mask = 40;
853+
else if (bridge->driver->mask_memory == intel_i965_mask_memory)
854+
mask = 36;
855+
else
856+
mask = 32;
857+
858+
if (pci_set_dma_mask(intel_private.pcidev, DMA_BIT_MASK(mask)))
859+
dev_err(&intel_private.pcidev->dev,
860+
"set gfx device dma mask %d-bit failed!\n", mask);
861+
else
862+
pci_set_consistent_dma_mask(intel_private.pcidev,
863+
DMA_BIT_MASK(mask));
856864

857865
return 1;
858866
}

drivers/char/agp/intel-agp.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@
204204
#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_IG 0x0102
205205
#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_HB 0x0104
206206
#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_IG 0x0106
207+
#define PCI_DEVICE_ID_INTEL_SANDYBRIDGE_M_D0_IG 0x0126
207208

208209
/* cover 915 and 945 variants */
209210
#define IS_I915 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_E7221_HB || \

drivers/gpu/drm/i915/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ i915-y := i915_drv.o i915_dma.o i915_irq.o i915_mem.o \
88
i915_suspend.o \
99
i915_gem.o \
1010
i915_gem_debug.o \
11+
i915_gem_evict.o \
1112
i915_gem_tiling.o \
1213
i915_trace_points.o \
1314
intel_display.o \
@@ -18,6 +19,7 @@ i915-y := i915_drv.o i915_dma.o i915_irq.o i915_mem.o \
1819
intel_hdmi.o \
1920
intel_sdvo.o \
2021
intel_modes.o \
22+
intel_panel.o \
2123
intel_i2c.o \
2224
intel_fb.o \
2325
intel_tv.o \

drivers/gpu/drm/i915/dvo.h

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,17 @@
3030
#include "intel_drv.h"
3131

3232
struct intel_dvo_device {
33-
char *name;
33+
const char *name;
3434
int type;
3535
/* DVOA/B/C output register */
3636
u32 dvo_reg;
3737
/* GPIO register used for i2c bus to control this device */
3838
u32 gpio;
3939
int slave_addr;
40-
struct i2c_adapter *i2c_bus;
4140

4241
const struct intel_dvo_dev_ops *dev_ops;
4342
void *dev_priv;
44-
45-
struct drm_display_mode *panel_fixed_mode;
46-
bool panel_wants_dither;
43+
struct i2c_adapter *i2c_bus;
4744
};
4845

4946
struct intel_dvo_dev_ops {

drivers/gpu/drm/i915/i915_debugfs.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,9 @@ static int i915_error_state(struct seq_file *m, void *unused)
467467
}
468468
}
469469

470+
if (error->overlay)
471+
intel_overlay_print_error_state(m, error->overlay);
472+
470473
out:
471474
spin_unlock_irqrestore(&dev_priv->error_lock, flags);
472475

drivers/gpu/drm/i915/i915_dma.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,13 @@ static int i915_dispatch_batchbuffer(struct drm_device * dev,
499499
}
500500
}
501501

502+
503+
if (IS_G4X(dev) || IS_IRONLAKE(dev)) {
504+
BEGIN_LP_RING(2);
505+
OUT_RING(MI_FLUSH | MI_NO_WRITE_FLUSH | MI_INVALIDATE_ISP);
506+
OUT_RING(MI_NOOP);
507+
ADVANCE_LP_RING();
508+
}
502509
i915_emit_breadcrumb(dev);
503510

504511
return 0;

drivers/gpu/drm/i915/i915_drv.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ static const struct pci_device_id pciidlist[] = { /* aka */
181181
INTEL_VGA_DEVICE(0x0046, &intel_ironlake_m_info),
182182
INTEL_VGA_DEVICE(0x0102, &intel_sandybridge_d_info),
183183
INTEL_VGA_DEVICE(0x0106, &intel_sandybridge_m_info),
184+
INTEL_VGA_DEVICE(0x0126, &intel_sandybridge_m_info),
184185
{0, 0, 0}
185186
};
186187

drivers/gpu/drm/i915/i915_drv.h

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ struct intel_opregion {
113113
int enabled;
114114
};
115115

116+
struct intel_overlay;
117+
struct intel_overlay_error_state;
118+
116119
struct drm_i915_master_private {
117120
drm_local_map_t *sarea;
118121
struct _drm_i915_sarea *sarea_priv;
@@ -166,6 +169,7 @@ struct drm_i915_error_state {
166169
u32 purgeable:1;
167170
} *active_bo;
168171
u32 active_bo_count;
172+
struct intel_overlay_error_state *overlay;
169173
};
170174

171175
struct drm_i915_display_funcs {
@@ -186,8 +190,6 @@ struct drm_i915_display_funcs {
186190
/* clock gating init */
187191
};
188192

189-
struct intel_overlay;
190-
191193
struct intel_device_info {
192194
u8 is_mobile : 1;
193195
u8 is_i8xx : 1;
@@ -242,6 +244,7 @@ typedef struct drm_i915_private {
242244
struct pci_dev *bridge_dev;
243245
struct intel_ring_buffer render_ring;
244246
struct intel_ring_buffer bsd_ring;
247+
uint32_t next_seqno;
245248

246249
drm_dma_handle_t *status_page_dmah;
247250
void *seqno_page;
@@ -251,6 +254,7 @@ typedef struct drm_i915_private {
251254
drm_local_map_t hws_map;
252255
struct drm_gem_object *seqno_obj;
253256
struct drm_gem_object *pwrctx;
257+
struct drm_gem_object *renderctx;
254258

255259
struct resource mch_res;
256260

@@ -285,6 +289,9 @@ typedef struct drm_i915_private {
285289
unsigned int sr01, adpa, ppcr, dvob, dvoc, lvds;
286290
int vblank_pipe;
287291
int num_pipe;
292+
u32 flush_rings;
293+
#define FLUSH_RENDER_RING 0x1
294+
#define FLUSH_BSD_RING 0x2
288295

289296
/* For hangcheck timer */
290297
#define DRM_I915_HANGCHECK_PERIOD 75 /* in jiffies */
@@ -568,8 +575,6 @@ typedef struct drm_i915_private {
568575
*/
569576
struct delayed_work retire_work;
570577

571-
uint32_t next_gem_seqno;
572-
573578
/**
574579
* Waiting sequence number, if any
575580
*/
@@ -610,6 +615,8 @@ typedef struct drm_i915_private {
610615
struct sdvo_device_mapping sdvo_mappings[2];
611616
/* indicate whether the LVDS_BORDER should be enabled or not */
612617
unsigned int lvds_border_bits;
618+
/* Panel fitter placement and size for Ironlake+ */
619+
u32 pch_pf_pos, pch_pf_size;
613620

614621
struct drm_crtc *plane_to_crtc_mapping[2];
615622
struct drm_crtc *pipe_to_crtc_mapping[2];
@@ -669,6 +676,8 @@ struct drm_i915_gem_object {
669676
struct list_head list;
670677
/** This object's place on GPU write list */
671678
struct list_head gpu_write_list;
679+
/** This object's place on eviction list */
680+
struct list_head evict_list;
672681

673682
/**
674683
* This is set if the object is on the active or flushing lists
@@ -978,6 +987,7 @@ int i915_gem_init_ringbuffer(struct drm_device *dev);
978987
void i915_gem_cleanup_ringbuffer(struct drm_device *dev);
979988
int i915_gem_do_init(struct drm_device *dev, unsigned long start,
980989
unsigned long end);
990+
int i915_gpu_idle(struct drm_device *dev);
981991
int i915_gem_idle(struct drm_device *dev);
982992
uint32_t i915_add_request(struct drm_device *dev,
983993
struct drm_file *file_priv,
@@ -991,7 +1001,9 @@ int i915_gem_object_set_to_gtt_domain(struct drm_gem_object *obj,
9911001
int write);
9921002
int i915_gem_object_set_to_display_plane(struct drm_gem_object *obj);
9931003
int i915_gem_attach_phys_object(struct drm_device *dev,
994-
struct drm_gem_object *obj, int id);
1004+
struct drm_gem_object *obj,
1005+
int id,
1006+
int align);
9951007
void i915_gem_detach_phys_object(struct drm_device *dev,
9961008
struct drm_gem_object *obj);
9971009
void i915_gem_free_all_phys_object(struct drm_device *dev);
@@ -1003,6 +1015,11 @@ int i915_gem_object_flush_write_domain(struct drm_gem_object *obj);
10031015
void i915_gem_shrinker_init(void);
10041016
void i915_gem_shrinker_exit(void);
10051017

1018+
/* i915_gem_evict.c */
1019+
int i915_gem_evict_something(struct drm_device *dev, int min_size, unsigned alignment);
1020+
int i915_gem_evict_everything(struct drm_device *dev);
1021+
int i915_gem_evict_inactive(struct drm_device *dev);
1022+
10061023
/* i915_gem_tiling.c */
10071024
void i915_gem_detect_bit_6_swizzle(struct drm_device *dev);
10081025
void i915_gem_object_do_bit_17_swizzle(struct drm_gem_object *obj);
@@ -1066,6 +1083,10 @@ extern bool ironlake_set_drps(struct drm_device *dev, u8 val);
10661083
extern void intel_detect_pch (struct drm_device *dev);
10671084
extern int intel_trans_dp_port_sel (struct drm_crtc *crtc);
10681085

1086+
/* overlay */
1087+
extern struct intel_overlay_error_state *intel_overlay_capture_error_state(struct drm_device *dev);
1088+
extern void intel_overlay_print_error_state(struct seq_file *m, struct intel_overlay_error_state *error);
1089+
10691090
/**
10701091
* Lock test for when it's just for synchronization of ring access.
10711092
*
@@ -1092,26 +1113,26 @@ extern int intel_trans_dp_port_sel (struct drm_crtc *crtc);
10921113
#define I915_VERBOSE 0
10931114

10941115
#define BEGIN_LP_RING(n) do { \
1095-
drm_i915_private_t *dev_priv = dev->dev_private; \
1116+
drm_i915_private_t *dev_priv__ = dev->dev_private; \
10961117
if (I915_VERBOSE) \
10971118
DRM_DEBUG(" BEGIN_LP_RING %x\n", (int)(n)); \
1098-
intel_ring_begin(dev, &dev_priv->render_ring, (n)); \
1119+
intel_ring_begin(dev, &dev_priv__->render_ring, (n)); \
10991120
} while (0)
11001121

11011122

11021123
#define OUT_RING(x) do { \
1103-
drm_i915_private_t *dev_priv = dev->dev_private; \
1124+
drm_i915_private_t *dev_priv__ = dev->dev_private; \
11041125
if (I915_VERBOSE) \
11051126
DRM_DEBUG(" OUT_RING %x\n", (int)(x)); \
1106-
intel_ring_emit(dev, &dev_priv->render_ring, x); \
1127+
intel_ring_emit(dev, &dev_priv__->render_ring, x); \
11071128
} while (0)
11081129

11091130
#define ADVANCE_LP_RING() do { \
1110-
drm_i915_private_t *dev_priv = dev->dev_private; \
1131+
drm_i915_private_t *dev_priv__ = dev->dev_private; \
11111132
if (I915_VERBOSE) \
11121133
DRM_DEBUG("ADVANCE_LP_RING %x\n", \
1113-
dev_priv->render_ring.tail); \
1114-
intel_ring_advance(dev, &dev_priv->render_ring); \
1134+
dev_priv__->render_ring.tail); \
1135+
intel_ring_advance(dev, &dev_priv__->render_ring); \
11151136
} while(0)
11161137

11171138
/**

0 commit comments

Comments
 (0)