Commit 97096527 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/anholt/drm-intel:
  drm/i915: Select CONFIG_SHMEM
  drm/i915: Fix CRT hotplug detect by checking really no channels attached
  agp/intel: new host bridge support
  drm/i915: Add more registers save/restore for Ironlake suspend
  drm/i915: Fix IRQ stall issue on Ironlake
  drm/i915: HDMI hardware workaround for Ironlake
  drm/i915: Fix and cleanup DPLL calculation for Ironlake
  drm/i915: Avoid potential sleep whilst holding spinlock
parents b54eb179 ca9ab100
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@
#define PCI_DEVICE_ID_INTEL_IGDNG_D_IG	    0x0042
#define PCI_DEVICE_ID_INTEL_IGDNG_M_HB	    0x0044
#define PCI_DEVICE_ID_INTEL_IGDNG_MA_HB	    0x0062
#define PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB    0x006a
#define PCI_DEVICE_ID_INTEL_IGDNG_M_IG	    0x0046

/* cover 915 and 945 variants */
@@ -96,7 +97,8 @@
		agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_B43_HB || \
		agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_D_HB || \
		agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_M_HB || \
		agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_MA_HB)
		agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_MA_HB || \
		agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB)

extern int agp_memory_reserved;

@@ -1358,6 +1360,7 @@ static void intel_i965_get_gtt_range(int *gtt_offset, int *gtt_size)
	case PCI_DEVICE_ID_INTEL_IGDNG_D_HB:
	case PCI_DEVICE_ID_INTEL_IGDNG_M_HB:
	case PCI_DEVICE_ID_INTEL_IGDNG_MA_HB:
	case PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB:
		*gtt_offset = *gtt_size = MB(2);
		break;
	default:
@@ -2359,6 +2362,8 @@ static const struct intel_driver_description {
	    "IGDNG/M", NULL, &intel_i965_driver },
	{ PCI_DEVICE_ID_INTEL_IGDNG_MA_HB, PCI_DEVICE_ID_INTEL_IGDNG_M_IG, 0,
	    "IGDNG/MA", NULL, &intel_i965_driver },
	{ PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB, PCI_DEVICE_ID_INTEL_IGDNG_M_IG, 0,
	    "IGDNG/MC2", NULL, &intel_i965_driver },
	{ 0, 0, 0, NULL, NULL, NULL }
};

@@ -2560,6 +2565,7 @@ static struct pci_device_id agp_intel_pci_table[] = {
	ID(PCI_DEVICE_ID_INTEL_IGDNG_D_HB),
	ID(PCI_DEVICE_ID_INTEL_IGDNG_M_HB),
	ID(PCI_DEVICE_ID_INTEL_IGDNG_MA_HB),
	ID(PCI_DEVICE_ID_INTEL_IGDNG_MC2_HB),
	{ }
};

+1 −0
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ config DRM_I830
config DRM_I915
	tristate "i915 driver"
	depends on AGP_INTEL
	select SHMEM
	select DRM_KMS_HELPER
	select FB_CFB_FILLRECT
	select FB_CFB_COPYAREA
+2 −2
Original line number Diff line number Diff line
@@ -267,10 +267,10 @@ static void i915_dump_pages(struct seq_file *m, struct page **pages, int page_co
	uint32_t *mem;

	for (page = 0; page < page_count; page++) {
		mem = kmap(pages[page]);
		mem = kmap_atomic(pages[page], KM_USER0);
		for (i = 0; i < PAGE_SIZE; i += 4)
			seq_printf(m, "%08x :  %08x\n", i, mem[i / 4]);
		kunmap(pages[page]);
		kunmap_atomic(pages[page], KM_USER0);
	}
}

+12 −0
Original line number Diff line number Diff line
@@ -296,6 +296,7 @@ typedef struct drm_i915_private {
	u32 saveVBLANK_A;
	u32 saveVSYNC_A;
	u32 saveBCLRPAT_A;
	u32 saveTRANSACONF;
	u32 saveTRANS_HTOTAL_A;
	u32 saveTRANS_HBLANK_A;
	u32 saveTRANS_HSYNC_A;
@@ -326,6 +327,7 @@ typedef struct drm_i915_private {
	u32 saveVBLANK_B;
	u32 saveVSYNC_B;
	u32 saveBCLRPAT_B;
	u32 saveTRANSBCONF;
	u32 saveTRANS_HTOTAL_B;
	u32 saveTRANS_HBLANK_B;
	u32 saveTRANS_HSYNC_B;
@@ -414,6 +416,16 @@ typedef struct drm_i915_private {
	u32 savePFB_WIN_SZ;
	u32 savePFA_WIN_POS;
	u32 savePFB_WIN_POS;
	u32 savePCH_DREF_CONTROL;
	u32 saveDISP_ARB_CTL;
	u32 savePIPEA_DATA_M1;
	u32 savePIPEA_DATA_N1;
	u32 savePIPEA_LINK_M1;
	u32 savePIPEA_LINK_N1;
	u32 savePIPEB_DATA_M1;
	u32 savePIPEB_DATA_N1;
	u32 savePIPEB_LINK_M1;
	u32 savePIPEB_LINK_N1;

	struct {
		struct drm_mm gtt_space;
+9 −1
Original line number Diff line number Diff line
@@ -254,10 +254,15 @@ irqreturn_t igdng_irq_handler(struct drm_device *dev)
{
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
	int ret = IRQ_NONE;
	u32 de_iir, gt_iir;
	u32 de_iir, gt_iir, de_ier;
	u32 new_de_iir, new_gt_iir;
	struct drm_i915_master_private *master_priv;

	/* disable master interrupt before clearing iir  */
	de_ier = I915_READ(DEIER);
	I915_WRITE(DEIER, de_ier & ~DE_MASTER_IRQ_CONTROL);
	(void)I915_READ(DEIER);

	de_iir = I915_READ(DEIIR);
	gt_iir = I915_READ(GTIIR);

@@ -290,6 +295,9 @@ irqreturn_t igdng_irq_handler(struct drm_device *dev)
		gt_iir = new_gt_iir;
	}

	I915_WRITE(DEIER, de_ier);
	(void)I915_READ(DEIER);

	return ret;
}

Loading