Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 225aa011 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: add pipe A force quirks to i915 driver
  drm/i915: Fix panel fitting regression since 734b4157
  drm/i915: fix deadlock in fb teardown
  drm/i915: don't free non-existent compressed llb on ILK+
  agp/intel: Use the correct mask to detect i830 aperture size.
  drm/i915: disable FBC when more than one pipe is active
  drm/i915: Use the correct scanout alignment for fbcon.
  drm/i915: make sure eDP panel is turned on
  drm/i915: add PANEL_UNLOCK_REGS definition
  drm/i915: Make G4X-style PLL search more permissive
  drm/i915: Clear any existing dither mode prior to enabling spatial dithering
  drm/i915: handle shared framebuffers when flipping
  drm/i915: Explosion following OOM in do_execbuffer.
  gpu/drm/i915: Add a blacklist to omit modeset on LID open
parents 6aa033d7 b690e96c
Loading
Loading
Loading
Loading
+8 −5
Original line number Original line Diff line number Diff line
@@ -1216,17 +1216,20 @@ static int intel_i915_get_gtt_size(void)


		/* G33's GTT size defined in gmch_ctrl */
		/* G33's GTT size defined in gmch_ctrl */
		pci_read_config_word(agp_bridge->dev, I830_GMCH_CTRL, &gmch_ctrl);
		pci_read_config_word(agp_bridge->dev, I830_GMCH_CTRL, &gmch_ctrl);
		switch (gmch_ctrl & G33_PGETBL_SIZE_MASK) {
		switch (gmch_ctrl & I830_GMCH_GMS_MASK) {
		case G33_PGETBL_SIZE_1M:
		case I830_GMCH_GMS_STOLEN_512:
			size = 512;
			break;
		case I830_GMCH_GMS_STOLEN_1024:
			size = 1024;
			size = 1024;
			break;
			break;
		case G33_PGETBL_SIZE_2M:
		case I830_GMCH_GMS_STOLEN_8192:
			size = 2048;
			size = 8*1024;
			break;
			break;
		default:
		default:
			dev_info(&agp_bridge->dev->dev,
			dev_info(&agp_bridge->dev->dev,
				 "unknown page table size 0x%x, assuming 512KB\n",
				 "unknown page table size 0x%x, assuming 512KB\n",
				(gmch_ctrl & G33_PGETBL_SIZE_MASK));
				(gmch_ctrl & I830_GMCH_GMS_MASK));
			size = 512;
			size = 512;
		}
		}
	} else {
	} else {
+3 −0
Original line number Original line Diff line number Diff line
@@ -605,6 +605,9 @@ static int i915_fbc_status(struct seq_file *m, void *unused)
		case FBC_NOT_TILED:
		case FBC_NOT_TILED:
			seq_printf(m, "scanout buffer not tiled");
			seq_printf(m, "scanout buffer not tiled");
			break;
			break;
		case FBC_MULTIPLE_PIPES:
			seq_printf(m, "multiple pipes are enabled");
			break;
		default:
		default:
			seq_printf(m, "unknown reason");
			seq_printf(m, "unknown reason");
		}
		}
+1 −1
Original line number Original line Diff line number Diff line
@@ -1300,7 +1300,7 @@ static void i915_cleanup_compression(struct drm_device *dev)
	struct drm_i915_private *dev_priv = dev->dev_private;
	struct drm_i915_private *dev_priv = dev->dev_private;


	drm_mm_put_block(dev_priv->compressed_fb);
	drm_mm_put_block(dev_priv->compressed_fb);
	if (!IS_GM45(dev))
	if (dev_priv->compressed_llb)
		drm_mm_put_block(dev_priv->compressed_llb);
		drm_mm_put_block(dev_priv->compressed_llb);
}
}


+5 −0
Original line number Original line Diff line number Diff line
@@ -215,6 +215,7 @@ enum no_fbc_reason {
	FBC_MODE_TOO_LARGE, /* mode too large for compression */
	FBC_MODE_TOO_LARGE, /* mode too large for compression */
	FBC_BAD_PLANE, /* fbc not supported on plane */
	FBC_BAD_PLANE, /* fbc not supported on plane */
	FBC_NOT_TILED, /* buffer not tiled */
	FBC_NOT_TILED, /* buffer not tiled */
	FBC_MULTIPLE_PIPES, /* more than one pipe active */
};
};


enum intel_pch {
enum intel_pch {
@@ -222,6 +223,8 @@ enum intel_pch {
	PCH_CPT,	/* Cougarpoint PCH */
	PCH_CPT,	/* Cougarpoint PCH */
};
};


#define QUIRK_PIPEA_FORCE (1<<0)

struct intel_fbdev;
struct intel_fbdev;


typedef struct drm_i915_private {
typedef struct drm_i915_private {
@@ -337,6 +340,8 @@ typedef struct drm_i915_private {
	/* PCH chipset type */
	/* PCH chipset type */
	enum intel_pch pch_type;
	enum intel_pch pch_type;


	unsigned long quirks;

	/* Register state */
	/* Register state */
	bool modeset_on_lid;
	bool modeset_on_lid;
	u8 saveLBB;
	u8 saveLBB;
+2 −1
Original line number Original line Diff line number Diff line
@@ -3647,6 +3647,7 @@ i915_gem_wait_for_pending_flip(struct drm_device *dev,
	return ret;
	return ret;
}
}



int
int
i915_gem_do_execbuffer(struct drm_device *dev, void *data,
i915_gem_do_execbuffer(struct drm_device *dev, void *data,
		       struct drm_file *file_priv,
		       struct drm_file *file_priv,
@@ -3794,7 +3795,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
				unsigned long long total_size = 0;
				unsigned long long total_size = 0;
				int num_fences = 0;
				int num_fences = 0;
				for (i = 0; i < args->buffer_count; i++) {
				for (i = 0; i < args->buffer_count; i++) {
					obj_priv = object_list[i]->driver_private;
					obj_priv = to_intel_bo(object_list[i]);


					total_size += object_list[i]->size;
					total_size += object_list[i]->size;
					num_fences +=
					num_fences +=
Loading