瀏覽代碼

Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux

Pull drm fixes from Dave Airlie:
 "Mostly intel and radeon fixes, one tda998x, one kconfig dep fix and
  two more MAINTAINERS updates,

  All pretty run of the mill for this stage"

* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
  drm/radeon/atom: select the proper number of lanes in transmitter setup
  MAINTAINERS: add maintainer entry for TDA998x driver
  drm: fix bochs kconfig dependencies
  drm/radeon/dpm: fix typo in EVERGREEN_SMC_FIRMWARE_HEADER_softRegisters
  drm/radeon/cik: fix typo in documentation
  drm/radeon: silence GCC warning on 32 bit
  drm/radeon: resume old pm late
  drm/radeon: TTM must be init with cpu-visible VRAM, v2
  DRM: armada: fix use of kfifo_put()
  drm/i915: Reject >165MHz modes w/ DVI monitors
  drm/i915: fix assert_cursor on BDW
  drm/i915: vlv: reserve GT power context early
  drm/i915: fix pch pci device enumeration
  drm/i915: Resolving the memory region conflict for Stolen area
  drm/i915: use backlight legacy combination mode also for i915gm/i945gm
  MAINTAINERS: update AGP tree to point at drm tree
Linus Torvalds 11 年之前
父節點
當前提交
3bf7706b15

+ 7 - 1
MAINTAINERS

@@ -474,7 +474,7 @@ F:	net/rxrpc/af_rxrpc.c
 
 
 AGPGART DRIVER
 AGPGART DRIVER
 M:	David Airlie <airlied@linux.ie>
 M:	David Airlie <airlied@linux.ie>
-T:	git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git
+T:	git git://people.freedesktop.org/~airlied/linux (part of drm maint)
 S:	Maintained
 S:	Maintained
 F:	drivers/char/agp/
 F:	drivers/char/agp/
 F:	include/linux/agp*
 F:	include/linux/agp*
@@ -6175,6 +6175,12 @@ S:	Supported
 F:	drivers/block/nvme*
 F:	drivers/block/nvme*
 F:	include/linux/nvme.h
 F:	include/linux/nvme.h
 
 
+NXP TDA998X DRM DRIVER
+M:	Russell King <rmk+kernel@arm.linux.org.uk>
+S:	Supported
+F:	drivers/gpu/drm/i2c/tda998x_drv.c
+F:	include/drm/i2c/tda998x.h
+
 OMAP SUPPORT
 OMAP SUPPORT
 M:	Tony Lindgren <tony@atomide.com>
 M:	Tony Lindgren <tony@atomide.com>
 L:	linux-omap@vger.kernel.org
 L:	linux-omap@vger.kernel.org

+ 1 - 9
drivers/gpu/drm/armada/armada_drv.c

@@ -68,15 +68,7 @@ void __armada_drm_queue_unref_work(struct drm_device *dev,
 {
 {
 	struct armada_private *priv = dev->dev_private;
 	struct armada_private *priv = dev->dev_private;
 
 
-	/*
-	 * Yes, we really must jump through these hoops just to store a
-	 * _pointer_ to something into the kfifo.  This is utterly insane
-	 * and idiotic, because it kfifo requires the _data_ pointed to by
-	 * the pointer const, not the pointer itself.  Not only that, but
-	 * you have to pass a pointer _to_ the pointer you want stored.
-	 */
-	const struct drm_framebuffer *silly_api_alert = fb;
-	WARN_ON(!kfifo_put(&priv->fb_unref, &silly_api_alert));
+	WARN_ON(!kfifo_put(&priv->fb_unref, fb));
 	schedule_work(&priv->fb_unref_work);
 	schedule_work(&priv->fb_unref_work);
 }
 }
 
 

+ 1 - 0
drivers/gpu/drm/bochs/Kconfig

@@ -2,6 +2,7 @@ config DRM_BOCHS
 	tristate "DRM Support for bochs dispi vga interface (qemu stdvga)"
 	tristate "DRM Support for bochs dispi vga interface (qemu stdvga)"
 	depends on DRM && PCI
 	depends on DRM && PCI
 	select DRM_KMS_HELPER
 	select DRM_KMS_HELPER
+	select DRM_KMS_FB_HELPER
 	select FB_SYS_FILLRECT
 	select FB_SYS_FILLRECT
 	select FB_SYS_COPYAREA
 	select FB_SYS_COPYAREA
 	select FB_SYS_IMAGEBLIT
 	select FB_SYS_IMAGEBLIT

+ 9 - 14
drivers/gpu/drm/i915/i915_drv.c

@@ -403,7 +403,7 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
 void intel_detect_pch(struct drm_device *dev)
 void intel_detect_pch(struct drm_device *dev)
 {
 {
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	struct drm_i915_private *dev_priv = dev->dev_private;
-	struct pci_dev *pch;
+	struct pci_dev *pch = NULL;
 
 
 	/* In all current cases, num_pipes is equivalent to the PCH_NOP setting
 	/* In all current cases, num_pipes is equivalent to the PCH_NOP setting
 	 * (which really amounts to a PCH but no South Display).
 	 * (which really amounts to a PCH but no South Display).
@@ -424,12 +424,9 @@ void intel_detect_pch(struct drm_device *dev)
 	 * all the ISA bridge devices and check for the first match, instead
 	 * all the ISA bridge devices and check for the first match, instead
 	 * of only checking the first one.
 	 * of only checking the first one.
 	 */
 	 */
-	pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, NULL);
-	while (pch) {
-		struct pci_dev *curr = pch;
+	while ((pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, pch))) {
 		if (pch->vendor == PCI_VENDOR_ID_INTEL) {
 		if (pch->vendor == PCI_VENDOR_ID_INTEL) {
-			unsigned short id;
-			id = pch->device & INTEL_PCH_DEVICE_ID_MASK;
+			unsigned short id = pch->device & INTEL_PCH_DEVICE_ID_MASK;
 			dev_priv->pch_id = id;
 			dev_priv->pch_id = id;
 
 
 			if (id == INTEL_PCH_IBX_DEVICE_ID_TYPE) {
 			if (id == INTEL_PCH_IBX_DEVICE_ID_TYPE) {
@@ -461,18 +458,16 @@ void intel_detect_pch(struct drm_device *dev)
 				DRM_DEBUG_KMS("Found LynxPoint LP PCH\n");
 				DRM_DEBUG_KMS("Found LynxPoint LP PCH\n");
 				WARN_ON(!IS_HASWELL(dev));
 				WARN_ON(!IS_HASWELL(dev));
 				WARN_ON(!IS_ULT(dev));
 				WARN_ON(!IS_ULT(dev));
-			} else {
-				goto check_next;
-			}
-			pci_dev_put(pch);
+			} else
+				continue;
+
 			break;
 			break;
 		}
 		}
-check_next:
-		pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, curr);
-		pci_dev_put(curr);
 	}
 	}
 	if (!pch)
 	if (!pch)
-		DRM_DEBUG_KMS("No PCH found?\n");
+		DRM_DEBUG_KMS("No PCH found.\n");
+
+	pci_dev_put(pch);
 }
 }
 
 
 bool i915_semaphore_is_enabled(struct drm_device *dev)
 bool i915_semaphore_is_enabled(struct drm_device *dev)

+ 16 - 3
drivers/gpu/drm/i915/i915_gem_stolen.c

@@ -82,9 +82,22 @@ static unsigned long i915_stolen_to_physical(struct drm_device *dev)
 	r = devm_request_mem_region(dev->dev, base, dev_priv->gtt.stolen_size,
 	r = devm_request_mem_region(dev->dev, base, dev_priv->gtt.stolen_size,
 				    "Graphics Stolen Memory");
 				    "Graphics Stolen Memory");
 	if (r == NULL) {
 	if (r == NULL) {
-		DRM_ERROR("conflict detected with stolen region: [0x%08x - 0x%08x]\n",
-			  base, base + (uint32_t)dev_priv->gtt.stolen_size);
-		base = 0;
+		/*
+		 * One more attempt but this time requesting region from
+		 * base + 1, as we have seen that this resolves the region
+		 * conflict with the PCI Bus.
+		 * This is a BIOS w/a: Some BIOS wrap stolen in the root
+		 * PCI bus, but have an off-by-one error. Hence retry the
+		 * reservation starting from 1 instead of 0.
+		 */
+		r = devm_request_mem_region(dev->dev, base + 1,
+					    dev_priv->gtt.stolen_size - 1,
+					    "Graphics Stolen Memory");
+		if (r == NULL) {
+			DRM_ERROR("conflict detected with stolen region: [0x%08x - 0x%08x]\n",
+				  base, base + (uint32_t)dev_priv->gtt.stolen_size);
+			base = 0;
+		}
 	}
 	}
 
 
 	return base;
 	return base;

+ 4 - 4
drivers/gpu/drm/i915/intel_display.c

@@ -1092,12 +1092,12 @@ static void assert_cursor(struct drm_i915_private *dev_priv,
 	struct drm_device *dev = dev_priv->dev;
 	struct drm_device *dev = dev_priv->dev;
 	bool cur_state;
 	bool cur_state;
 
 
-	if (IS_IVYBRIDGE(dev) || IS_HASWELL(dev))
-		cur_state = I915_READ(CURCNTR_IVB(pipe)) & CURSOR_MODE;
-	else if (IS_845G(dev) || IS_I865G(dev))
+	if (IS_845G(dev) || IS_I865G(dev))
 		cur_state = I915_READ(_CURACNTR) & CURSOR_ENABLE;
 		cur_state = I915_READ(_CURACNTR) & CURSOR_ENABLE;
-	else
+	else if (INTEL_INFO(dev)->gen <= 6 || IS_VALLEYVIEW(dev))
 		cur_state = I915_READ(CURCNTR(pipe)) & CURSOR_MODE;
 		cur_state = I915_READ(CURCNTR(pipe)) & CURSOR_MODE;
+	else
+		cur_state = I915_READ(CURCNTR_IVB(pipe)) & CURSOR_MODE;
 
 
 	WARN(cur_state != state,
 	WARN(cur_state != state,
 	     "cursor on pipe %c assertion failure (expected %s, current %s)\n",
 	     "cursor on pipe %c assertion failure (expected %s, current %s)\n",

+ 3 - 3
drivers/gpu/drm/i915/intel_hdmi.c

@@ -845,7 +845,7 @@ static int hdmi_portclock_limit(struct intel_hdmi *hdmi)
 {
 {
 	struct drm_device *dev = intel_hdmi_to_dev(hdmi);
 	struct drm_device *dev = intel_hdmi_to_dev(hdmi);
 
 
-	if (IS_G4X(dev))
+	if (!hdmi->has_hdmi_sink || IS_G4X(dev))
 		return 165000;
 		return 165000;
 	else if (IS_HASWELL(dev) || INTEL_INFO(dev)->gen >= 8)
 	else if (IS_HASWELL(dev) || INTEL_INFO(dev)->gen >= 8)
 		return 300000;
 		return 300000;
@@ -899,8 +899,8 @@ bool intel_hdmi_compute_config(struct intel_encoder *encoder,
 	 * outputs. We also need to check that the higher clock still fits
 	 * outputs. We also need to check that the higher clock still fits
 	 * within limits.
 	 * within limits.
 	 */
 	 */
-	if (pipe_config->pipe_bpp > 8*3 && clock_12bpc <= portclock_limit
-	    && HAS_PCH_SPLIT(dev)) {
+	if (pipe_config->pipe_bpp > 8*3 && intel_hdmi->has_hdmi_sink &&
+	    clock_12bpc <= portclock_limit && HAS_PCH_SPLIT(dev)) {
 		DRM_DEBUG_KMS("picking bpc to 12 for HDMI output\n");
 		DRM_DEBUG_KMS("picking bpc to 12 for HDMI output\n");
 		desired_bpp = 12*3;
 		desired_bpp = 12*3;
 
 

+ 2 - 2
drivers/gpu/drm/i915/intel_panel.c

@@ -698,7 +698,7 @@ static void i9xx_enable_backlight(struct intel_connector *connector)
 		freq /= 0xff;
 		freq /= 0xff;
 
 
 	ctl = freq << 17;
 	ctl = freq << 17;
-	if (IS_GEN2(dev) && panel->backlight.combination_mode)
+	if (panel->backlight.combination_mode)
 		ctl |= BLM_LEGACY_MODE;
 		ctl |= BLM_LEGACY_MODE;
 	if (IS_PINEVIEW(dev) && panel->backlight.active_low_pwm)
 	if (IS_PINEVIEW(dev) && panel->backlight.active_low_pwm)
 		ctl |= BLM_POLARITY_PNV;
 		ctl |= BLM_POLARITY_PNV;
@@ -979,7 +979,7 @@ static int i9xx_setup_backlight(struct intel_connector *connector)
 
 
 	ctl = I915_READ(BLC_PWM_CTL);
 	ctl = I915_READ(BLC_PWM_CTL);
 
 
-	if (IS_GEN2(dev))
+	if (IS_GEN2(dev) || IS_I915GM(dev) || IS_I945GM(dev))
 		panel->backlight.combination_mode = ctl & BLM_LEGACY_MODE;
 		panel->backlight.combination_mode = ctl & BLM_LEGACY_MODE;
 
 
 	if (IS_PINEVIEW(dev))
 	if (IS_PINEVIEW(dev))

+ 4 - 2
drivers/gpu/drm/i915/intel_pm.c

@@ -3493,6 +3493,8 @@ static void valleyview_setup_pctx(struct drm_device *dev)
 	u32 pcbr;
 	u32 pcbr;
 	int pctx_size = 24*1024;
 	int pctx_size = 24*1024;
 
 
+	WARN_ON(!mutex_is_locked(&dev->struct_mutex));
+
 	pcbr = I915_READ(VLV_PCBR);
 	pcbr = I915_READ(VLV_PCBR);
 	if (pcbr) {
 	if (pcbr) {
 		/* BIOS set it up already, grab the pre-alloc'd space */
 		/* BIOS set it up already, grab the pre-alloc'd space */
@@ -3542,8 +3544,6 @@ static void valleyview_enable_rps(struct drm_device *dev)
 		I915_WRITE(GTFIFODBG, gtfifodbg);
 		I915_WRITE(GTFIFODBG, gtfifodbg);
 	}
 	}
 
 
-	valleyview_setup_pctx(dev);
-
 	/* If VLV, Forcewake all wells, else re-direct to regular path */
 	/* If VLV, Forcewake all wells, else re-direct to regular path */
 	gen6_gt_force_wake_get(dev_priv, FORCEWAKE_ALL);
 	gen6_gt_force_wake_get(dev_priv, FORCEWAKE_ALL);
 
 
@@ -4395,6 +4395,8 @@ void intel_enable_gt_powersave(struct drm_device *dev)
 		ironlake_enable_rc6(dev);
 		ironlake_enable_rc6(dev);
 		intel_init_emon(dev);
 		intel_init_emon(dev);
 	} else if (IS_GEN6(dev) || IS_GEN7(dev)) {
 	} else if (IS_GEN6(dev) || IS_GEN7(dev)) {
+		if (IS_VALLEYVIEW(dev))
+			valleyview_setup_pctx(dev);
 		/*
 		/*
 		 * PCU communication is slow and this doesn't need to be
 		 * PCU communication is slow and this doesn't need to be
 		 * done at any specific time, so do this out of our fast path
 		 * done at any specific time, so do this out of our fast path

+ 1 - 1
drivers/gpu/drm/radeon/atombios_encoders.c

@@ -1314,7 +1314,7 @@ atombios_dig_transmitter_setup(struct drm_encoder *encoder, int action, uint8_t
 			}
 			}
 			if (is_dp)
 			if (is_dp)
 				args.v5.ucLaneNum = dp_lane_count;
 				args.v5.ucLaneNum = dp_lane_count;
-			else if (radeon_encoder->pixel_clock > 165000)
+			else if (radeon_dig_monitor_is_duallink(encoder, radeon_encoder->pixel_clock))
 				args.v5.ucLaneNum = 8;
 				args.v5.ucLaneNum = 8;
 			else
 			else
 				args.v5.ucLaneNum = 4;
 				args.v5.ucLaneNum = 4;

+ 3 - 2
drivers/gpu/drm/radeon/cik.c

@@ -3046,7 +3046,7 @@ static u32 cik_create_bitmask(u32 bit_width)
 }
 }
 
 
 /**
 /**
- * cik_select_se_sh - select which SE, SH to address
+ * cik_get_rb_disabled - computes the mask of disabled RBs
  *
  *
  * @rdev: radeon_device pointer
  * @rdev: radeon_device pointer
  * @max_rb_num: max RBs (render backends) for the asic
  * @max_rb_num: max RBs (render backends) for the asic
@@ -7902,7 +7902,8 @@ int cik_resume(struct radeon_device *rdev)
 	/* init golden registers */
 	/* init golden registers */
 	cik_init_golden_registers(rdev);
 	cik_init_golden_registers(rdev);
 
 
-	radeon_pm_resume(rdev);
+	if (rdev->pm.pm_method == PM_METHOD_DPM)
+		radeon_pm_resume(rdev);
 
 
 	rdev->accel_working = true;
 	rdev->accel_working = true;
 	r = cik_startup(rdev);
 	r = cik_startup(rdev);

+ 2 - 1
drivers/gpu/drm/radeon/evergreen.c

@@ -5299,7 +5299,8 @@ int evergreen_resume(struct radeon_device *rdev)
 	/* init golden registers */
 	/* init golden registers */
 	evergreen_init_golden_registers(rdev);
 	evergreen_init_golden_registers(rdev);
 
 
-	radeon_pm_resume(rdev);
+	if (rdev->pm.pm_method == PM_METHOD_DPM)
+		radeon_pm_resume(rdev);
 
 
 	rdev->accel_working = true;
 	rdev->accel_working = true;
 	r = evergreen_startup(rdev);
 	r = evergreen_startup(rdev);

+ 1 - 1
drivers/gpu/drm/radeon/evergreen_smc.h

@@ -57,7 +57,7 @@ typedef struct SMC_Evergreen_MCRegisters SMC_Evergreen_MCRegisters;
 
 
 #define EVERGREEN_SMC_FIRMWARE_HEADER_LOCATION 0x100
 #define EVERGREEN_SMC_FIRMWARE_HEADER_LOCATION 0x100
 
 
-#define EVERGREEN_SMC_FIRMWARE_HEADER_softRegisters   0x0
+#define EVERGREEN_SMC_FIRMWARE_HEADER_softRegisters   0x8
 #define EVERGREEN_SMC_FIRMWARE_HEADER_stateTable      0xC
 #define EVERGREEN_SMC_FIRMWARE_HEADER_stateTable      0xC
 #define EVERGREEN_SMC_FIRMWARE_HEADER_mcRegisterTable 0x20
 #define EVERGREEN_SMC_FIRMWARE_HEADER_mcRegisterTable 0x20
 
 

+ 2 - 1
drivers/gpu/drm/radeon/ni.c

@@ -2105,7 +2105,8 @@ int cayman_resume(struct radeon_device *rdev)
 	/* init golden registers */
 	/* init golden registers */
 	ni_init_golden_registers(rdev);
 	ni_init_golden_registers(rdev);
 
 
-	radeon_pm_resume(rdev);
+	if (rdev->pm.pm_method == PM_METHOD_DPM)
+		radeon_pm_resume(rdev);
 
 
 	rdev->accel_working = true;
 	rdev->accel_working = true;
 	r = cayman_startup(rdev);
 	r = cayman_startup(rdev);

+ 0 - 2
drivers/gpu/drm/radeon/r100.c

@@ -3942,8 +3942,6 @@ int r100_resume(struct radeon_device *rdev)
 	/* Initialize surface registers */
 	/* Initialize surface registers */
 	radeon_surface_init(rdev);
 	radeon_surface_init(rdev);
 
 
-	radeon_pm_resume(rdev);
-
 	rdev->accel_working = true;
 	rdev->accel_working = true;
 	r = r100_startup(rdev);
 	r = r100_startup(rdev);
 	if (r) {
 	if (r) {

+ 0 - 2
drivers/gpu/drm/radeon/r300.c

@@ -1430,8 +1430,6 @@ int r300_resume(struct radeon_device *rdev)
 	/* Initialize surface registers */
 	/* Initialize surface registers */
 	radeon_surface_init(rdev);
 	radeon_surface_init(rdev);
 
 
-	radeon_pm_resume(rdev);
-
 	rdev->accel_working = true;
 	rdev->accel_working = true;
 	r = r300_startup(rdev);
 	r = r300_startup(rdev);
 	if (r) {
 	if (r) {

+ 0 - 2
drivers/gpu/drm/radeon/r420.c

@@ -325,8 +325,6 @@ int r420_resume(struct radeon_device *rdev)
 	/* Initialize surface registers */
 	/* Initialize surface registers */
 	radeon_surface_init(rdev);
 	radeon_surface_init(rdev);
 
 
-	radeon_pm_resume(rdev);
-
 	rdev->accel_working = true;
 	rdev->accel_working = true;
 	r = r420_startup(rdev);
 	r = r420_startup(rdev);
 	if (r) {
 	if (r) {

+ 0 - 2
drivers/gpu/drm/radeon/r520.c

@@ -240,8 +240,6 @@ int r520_resume(struct radeon_device *rdev)
 	/* Initialize surface registers */
 	/* Initialize surface registers */
 	radeon_surface_init(rdev);
 	radeon_surface_init(rdev);
 
 
-	radeon_pm_resume(rdev);
-
 	rdev->accel_working = true;
 	rdev->accel_working = true;
 	r = r520_startup(rdev);
 	r = r520_startup(rdev);
 	if (r) {
 	if (r) {

+ 2 - 1
drivers/gpu/drm/radeon/r600.c

@@ -2968,7 +2968,8 @@ int r600_resume(struct radeon_device *rdev)
 	/* post card */
 	/* post card */
 	atom_asic_init(rdev->mode_info.atom_context);
 	atom_asic_init(rdev->mode_info.atom_context);
 
 
-	radeon_pm_resume(rdev);
+	if (rdev->pm.pm_method == PM_METHOD_DPM)
+		radeon_pm_resume(rdev);
 
 
 	rdev->accel_working = true;
 	rdev->accel_working = true;
 	r = r600_startup(rdev);
 	r = r600_startup(rdev);

+ 4 - 1
drivers/gpu/drm/radeon/radeon_device.c

@@ -1521,13 +1521,16 @@ int radeon_resume_kms(struct drm_device *dev, bool resume, bool fbcon)
 	if (r)
 	if (r)
 		DRM_ERROR("ib ring test failed (%d).\n", r);
 		DRM_ERROR("ib ring test failed (%d).\n", r);
 
 
-	if (rdev->pm.dpm_enabled) {
+	if ((rdev->pm.pm_method == PM_METHOD_DPM) && rdev->pm.dpm_enabled) {
 		/* do dpm late init */
 		/* do dpm late init */
 		r = radeon_pm_late_init(rdev);
 		r = radeon_pm_late_init(rdev);
 		if (r) {
 		if (r) {
 			rdev->pm.dpm_enabled = false;
 			rdev->pm.dpm_enabled = false;
 			DRM_ERROR("radeon_pm_late_init failed, disabling dpm\n");
 			DRM_ERROR("radeon_pm_late_init failed, disabling dpm\n");
 		}
 		}
+	} else {
+		/* resume old pm late */
+		radeon_pm_resume(rdev);
 	}
 	}
 
 
 	radeon_restore_bios_scratch_regs(rdev);
 	radeon_restore_bios_scratch_regs(rdev);

+ 4 - 1
drivers/gpu/drm/radeon/radeon_ttm.c

@@ -714,6 +714,9 @@ int radeon_ttm_init(struct radeon_device *rdev)
 		DRM_ERROR("Failed initializing VRAM heap.\n");
 		DRM_ERROR("Failed initializing VRAM heap.\n");
 		return r;
 		return r;
 	}
 	}
+	/* Change the size here instead of the init above so only lpfn is affected */
+	radeon_ttm_set_active_vram_size(rdev, rdev->mc.visible_vram_size);
+
 	r = radeon_bo_create(rdev, 256 * 1024, PAGE_SIZE, true,
 	r = radeon_bo_create(rdev, 256 * 1024, PAGE_SIZE, true,
 			     RADEON_GEM_DOMAIN_VRAM,
 			     RADEON_GEM_DOMAIN_VRAM,
 			     NULL, &rdev->stollen_vga_memory);
 			     NULL, &rdev->stollen_vga_memory);
@@ -935,7 +938,7 @@ static ssize_t radeon_ttm_gtt_read(struct file *f, char __user *buf,
 	while (size) {
 	while (size) {
 		loff_t p = *pos / PAGE_SIZE;
 		loff_t p = *pos / PAGE_SIZE;
 		unsigned off = *pos & ~PAGE_MASK;
 		unsigned off = *pos & ~PAGE_MASK;
-		ssize_t cur_size = min(size, PAGE_SIZE - off);
+		size_t cur_size = min_t(size_t, size, PAGE_SIZE - off);
 		struct page *page;
 		struct page *page;
 		void *ptr;
 		void *ptr;
 
 

+ 0 - 2
drivers/gpu/drm/radeon/rs400.c

@@ -474,8 +474,6 @@ int rs400_resume(struct radeon_device *rdev)
 	/* Initialize surface registers */
 	/* Initialize surface registers */
 	radeon_surface_init(rdev);
 	radeon_surface_init(rdev);
 
 
-	radeon_pm_resume(rdev);
-
 	rdev->accel_working = true;
 	rdev->accel_working = true;
 	r = rs400_startup(rdev);
 	r = rs400_startup(rdev);
 	if (r) {
 	if (r) {

+ 0 - 2
drivers/gpu/drm/radeon/rs600.c

@@ -1048,8 +1048,6 @@ int rs600_resume(struct radeon_device *rdev)
 	/* Initialize surface registers */
 	/* Initialize surface registers */
 	radeon_surface_init(rdev);
 	radeon_surface_init(rdev);
 
 
-	radeon_pm_resume(rdev);
-
 	rdev->accel_working = true;
 	rdev->accel_working = true;
 	r = rs600_startup(rdev);
 	r = rs600_startup(rdev);
 	if (r) {
 	if (r) {

+ 0 - 2
drivers/gpu/drm/radeon/rs690.c

@@ -756,8 +756,6 @@ int rs690_resume(struct radeon_device *rdev)
 	/* Initialize surface registers */
 	/* Initialize surface registers */
 	radeon_surface_init(rdev);
 	radeon_surface_init(rdev);
 
 
-	radeon_pm_resume(rdev);
-
 	rdev->accel_working = true;
 	rdev->accel_working = true;
 	r = rs690_startup(rdev);
 	r = rs690_startup(rdev);
 	if (r) {
 	if (r) {

+ 0 - 2
drivers/gpu/drm/radeon/rv515.c

@@ -586,8 +586,6 @@ int rv515_resume(struct radeon_device *rdev)
 	/* Initialize surface registers */
 	/* Initialize surface registers */
 	radeon_surface_init(rdev);
 	radeon_surface_init(rdev);
 
 
-	radeon_pm_resume(rdev);
-
 	rdev->accel_working = true;
 	rdev->accel_working = true;
 	r =  rv515_startup(rdev);
 	r =  rv515_startup(rdev);
 	if (r) {
 	if (r) {

+ 2 - 1
drivers/gpu/drm/radeon/rv770.c

@@ -1811,7 +1811,8 @@ int rv770_resume(struct radeon_device *rdev)
 	/* init golden registers */
 	/* init golden registers */
 	rv770_init_golden_registers(rdev);
 	rv770_init_golden_registers(rdev);
 
 
-	radeon_pm_resume(rdev);
+	if (rdev->pm.pm_method == PM_METHOD_DPM)
+		radeon_pm_resume(rdev);
 
 
 	rdev->accel_working = true;
 	rdev->accel_working = true;
 	r = rv770_startup(rdev);
 	r = rv770_startup(rdev);

+ 2 - 1
drivers/gpu/drm/radeon/si.c

@@ -6618,7 +6618,8 @@ int si_resume(struct radeon_device *rdev)
 	/* init golden registers */
 	/* init golden registers */
 	si_init_golden_registers(rdev);
 	si_init_golden_registers(rdev);
 
 
-	radeon_pm_resume(rdev);
+	if (rdev->pm.pm_method == PM_METHOD_DPM)
+		radeon_pm_resume(rdev);
 
 
 	rdev->accel_working = true;
 	rdev->accel_working = true;
 	r = si_startup(rdev);
 	r = si_startup(rdev);