From: Dave Airlie <airlied@redhat.com>
Date: Fri, 8 Nov 2013 06:34:39 +0000 (+1000)
Subject: Merge tag 'drm-intel-fixes-2013-11-07' of git://people.freedesktop.org/~danvet/drm... 
X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=91915260ea5ed9d9b19bfb75d53c989c8ada2ab0;p=GitHub%2Fexynos8895%2Fandroid_kernel_samsung_universal8895.git

Merge tag 'drm-intel-fixes-2013-11-07' of git://people.freedesktop.org/~danvet/drm-intel into drm-next

Bit a bit -fixes pull request in the merge window than usual dua to two
feauture-y things:
- Display CRCs are now enabled on all platforms, including the odd DP case
  on gm45/vlv. Since this is a testing-only feature it should ever hurt,
  but I figured it'll help with regression-testing -fixes. So I left it
  in and didn't postpone it to 3.14.
- Display power well refactoring from Imre. Would have caused major pain
  conflict with the bdw stage 1 patches if I'd postpone this to -next.
  It's only an relatively small interface rework, so shouldn't cause pain.
  It's also been in my tree since almost 3 weeks already.

That accounts for about two thirds of the pull, otherwise just bugfixes:
- vlv backlight fix from Jesse/Jani
- vlv vblank timestamp fix from Jesse
- improved edp detection through vbt from Ville (fixes a vlv issue)
- eDP vdd fix from Paulo
- fixes for dvo lvds on i830M
- a few smaller things all over

Note: This contains a backmerge of v3.12. Since the -internal branch
always applied on top of -nightly I need that unified base to merge bdw
patches. So you'll get a conflict with radeon connector props when pulling
this (and nouveau/master will also conflict a bit when Ben doesn't
rebase). The backmerge itself only had conflicts in drm/i915.

There's also a tiny conflict between Jani's backlight fix and your sysfs
lifetime fix in drm-next.

* tag 'drm-intel-fixes-2013-11-07' of git://people.freedesktop.org/~danvet/drm-intel: (940 commits)
  drm/i915/vlv: use per-pipe backlight controls v2
  drm/i915: make backlight functions take a connector
  drm/i915: move opregion asle request handling to a work queue
  drm/i915/vlv: use PIPE_START_VBLANK interrupts on VLV
  drm/i915: Make intel_dp_is_edp() less specific
  drm/i915: Give names to the VBT child device type bits
  drm/i915/vlv: enable HDA display audio for Valleyview2
  drm/i915/dvo: call ->mode_set callback only when the port is running
  drm/i915: avoid unclaimed registers when capturing the error state
  drm/i915: Enable DP port CRC for the "auto" source on g4x/vlv
  drm/i915: scramble reset support for DP port CRC on vlv
  drm/i915: scramble reset support for DP port CRC on g4x
  drm/i916: add "auto" pipe CRC source
  ...

Conflicts:
	MAINTAINERS
	drivers/gpu/drm/i915/intel_panel.c
	drivers/gpu/drm/nouveau/core/subdev/mc/base.c
	drivers/gpu/drm/radeon/atombios_encoders.c
	drivers/gpu/drm/radeon/radeon_connectors.c
---

91915260ea5ed9d9b19bfb75d53c989c8ada2ab0
diff --cc MAINTAINERS
index 4907a747f3e0,ffcaf975bed7..63dbfc384d5d
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@@ -2815,10 -2833,8 +2833,10 @@@ M:	Terje Bergström <tbergstrom@nvidia.
  L:	dri-devel@lists.freedesktop.org
  L:	linux-tegra@vger.kernel.org
  T:	git git://anongit.freedesktop.org/tegra/linux.git
- S:	Maintained
+ S:	Supported
 +F:	drivers/gpu/drm/tegra/
  F:	drivers/gpu/host1x/
 +F:	include/linux/host1x.h
  F:	include/uapi/drm/tegra_drm.h
  F:	Documentation/devicetree/bindings/gpu/nvidia,tegra20-host1x.txt
  
diff --cc drivers/gpu/drm/i915/intel_dp.c
index 1e3d2720d811,4609eedf52aa..045d46475121
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@@ -737,11 -747,9 +747,9 @@@ intel_dp_i2c_init(struct intel_dp *inte
  	strncpy(intel_dp->adapter.name, name, sizeof(intel_dp->adapter.name) - 1);
  	intel_dp->adapter.name[sizeof(intel_dp->adapter.name) - 1] = '\0';
  	intel_dp->adapter.algo_data = &intel_dp->algo;
 -	intel_dp->adapter.dev.parent = &intel_connector->base.kdev;
 +	intel_dp->adapter.dev.parent = intel_connector->base.kdev;
  
- 	ironlake_edp_panel_vdd_on(intel_dp);
  	ret = i2c_dp_aux_add_bus(&intel_dp->adapter);
- 	ironlake_edp_panel_vdd_off(intel_dp, false);
  	return ret;
  }
  
diff --cc drivers/gpu/drm/i915/intel_panel.c
index 09b2994c9b37,cad41ac330e8..f161ac02c4f6
--- a/drivers/gpu/drm/i915/intel_panel.c
+++ b/drivers/gpu/drm/i915/intel_panel.c
@@@ -726,7 -802,8 +802,8 @@@ int intel_panel_setup_backlight(struct 
  	}
  	dev_priv->backlight.device =
  		backlight_device_register("intel_backlight",
- 					  connector->kdev, dev,
 -					  &connector->kdev,
++					  connector->kdev,
+ 					  to_intel_connector(connector),
  					  &intel_panel_bl_ops, &props);
  
  	if (IS_ERR(dev_priv->backlight.device)) {
diff --cc drivers/gpu/drm/nouveau/core/subdev/mc/base.c
index bc19aa497d5b,e290cfa4acee..b4b9943773bc
--- a/drivers/gpu/drm/nouveau/core/subdev/mc/base.c
+++ b/drivers/gpu/drm/nouveau/core/subdev/mc/base.c
@@@ -38,36 -29,34 +38,35 @@@ static irqreturn_
  nouveau_mc_intr(int irq, void *arg)
  {
  	struct nouveau_mc *pmc = arg;
 -	const struct nouveau_mc_intr *map = pmc->intr_map;
 -	struct nouveau_device *device = nv_device(pmc);
 +	const struct nouveau_mc_oclass *oclass = (void *)nv_object(pmc)->oclass;
 +	const struct nouveau_mc_intr *map = oclass->intr;
- 	struct nouveau_device *device = nv_device(pmc);
  	struct nouveau_subdev *unit;
 -	u32 stat, intr;
 -
 -	intr = stat = nv_rd32(pmc, 0x000100);
 -	if (intr == 0xffffffff)
 -		return IRQ_NONE;
 -	while (stat && map->stat) {
 -		if (stat & map->stat) {
 -			unit = nouveau_subdev(pmc, map->unit);
 -			if (unit && unit->intr)
 -				unit->intr(unit);
 -			intr &= ~map->stat;
 -		}
 -		map++;
 -	}
 +	u32 intr;
  
 +	nv_wr32(pmc, 0x000140, 0x00000000);
 +	nv_rd32(pmc, 0x000140);
 +	intr = nouveau_mc_intr_mask(pmc);
  	if (pmc->use_msi)
 -		nv_wr08(pmc->base.base.parent, 0x00088068, 0xff);
 +		oclass->msi_rearm(pmc);
  
  	if (intr) {
 -		nv_error(pmc, "unknown intr 0x%08x\n", stat);
 +		u32 stat = intr = nouveau_mc_intr_mask(pmc);
 +		while (map->stat) {
 +			if (intr & map->stat) {
 +				unit = nouveau_subdev(pmc, map->unit);
 +				if (unit && unit->intr)
 +					unit->intr(unit);
 +				stat &= ~map->stat;
 +			}
 +			map++;
 +		}
 +
 +		if (stat)
 +			nv_error(pmc, "unknown intr 0x%08x\n", stat);
  	}
  
 -	if (stat == IRQ_HANDLED)
 -		pm_runtime_mark_last_busy(&device->pdev->dev);
 -	return stat ? IRQ_HANDLED : IRQ_NONE;
 +	nv_wr32(pmc, 0x000140, 0x00000001);
 +	return intr ? IRQ_HANDLED : IRQ_NONE;
  }
  
  int
diff --cc drivers/gpu/drm/radeon/evergreen_hdmi.c
index 678736542ed8,57fcc4b16a52..a82b6f78d7f2
--- a/drivers/gpu/drm/radeon/evergreen_hdmi.c
+++ b/drivers/gpu/drm/radeon/evergreen_hdmi.c
@@@ -105,11 -67,12 +105,14 @@@ static void dce4_afmt_write_speaker_all
  	u8 *sadb;
  	int sad_count;
  
+ 	/* XXX: setting this register causes hangs on some asics */
+ 	return;
+ 
  	list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) {
 -		if (connector->encoder == encoder)
 +		if (connector->encoder == encoder) {
  			radeon_connector = to_radeon_connector(connector);
 +			break;
 +		}
  	}
  
  	if (!radeon_connector) {
diff --cc drivers/gpu/drm/radeon/r600_hdmi.c
index 21f2b74e20e6,06022e3b9c3b..0977c303aeec
--- a/drivers/gpu/drm/radeon/r600_hdmi.c
+++ b/drivers/gpu/drm/radeon/r600_hdmi.c
@@@ -302,11 -309,12 +309,14 @@@ static void dce3_2_afmt_write_speaker_a
  	u8 *sadb;
  	int sad_count;
  
+ 	/* XXX: setting this register causes hangs on some asics */
+ 	return;
+ 
  	list_for_each_entry(connector, &encoder->dev->mode_config.connector_list, head) {
 -		if (connector->encoder == encoder)
 +		if (connector->encoder == encoder) {
  			radeon_connector = to_radeon_connector(connector);
 +			break;
 +		}
  	}
  
  	if (!radeon_connector) {
diff --cc drivers/gpu/drm/radeon/radeon_connectors.c
index e972143e5a36,64565732cb98..f60b310b1399
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@@ -1720,12 -1658,12 +1720,18 @@@ radeon_add_atom_connector(struct drm_de
  			drm_object_attach_property(&radeon_connector->base.base,
  						      rdev->mode_info.underscan_vborder_property,
  						      0);
- 			drm_object_attach_property(&radeon_connector->base.base,
- 						   rdev->mode_info.audio_property,
- 						   RADEON_AUDIO_AUTO);
++
 +			drm_object_attach_property(&radeon_connector->base.base,
 +						   rdev->mode_info.dither_property,
 +						   RADEON_FMT_DITHER_DISABLE);
++
+ 			if (radeon_audio != 0)
+ 				drm_object_attach_property(&radeon_connector->base.base,
+ 							   rdev->mode_info.audio_property,
+ 							   (radeon_audio == 1) ?
+ 							   RADEON_AUDIO_AUTO :
+ 							   RADEON_AUDIO_DISABLE);
++
  			subpixel_order = SubPixelHorizontalRGB;
  			connector->interlace_allowed = true;
  			if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
@@@ -1819,16 -1757,13 +1825,18 @@@
  							      rdev->mode_info.underscan_vborder_property,
  							      0);
  			}
- 			if (ASIC_IS_DCE2(rdev)) {
+ 			if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
  				drm_object_attach_property(&radeon_connector->base.base,
- 							      rdev->mode_info.audio_property,
- 							      RADEON_AUDIO_AUTO);
+ 							   rdev->mode_info.audio_property,
+ 							   (radeon_audio == 1) ?
+ 							   RADEON_AUDIO_AUTO :
+ 							   RADEON_AUDIO_DISABLE);
  			}
 +			if (ASIC_IS_AVIVO(rdev)) {
 +				drm_object_attach_property(&radeon_connector->base.base,
 +							   rdev->mode_info.dither_property,
 +							   RADEON_FMT_DITHER_DISABLE);
 +			}
  			if (connector_type == DRM_MODE_CONNECTOR_DVII) {
  				radeon_connector->dac_load_detect = true;
  				drm_object_attach_property(&radeon_connector->base.base,
@@@ -1869,16 -1804,13 +1877,18 @@@
  							      rdev->mode_info.underscan_vborder_property,
  							      0);
  			}
- 			if (ASIC_IS_DCE2(rdev)) {
+ 			if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
  				drm_object_attach_property(&radeon_connector->base.base,
- 							      rdev->mode_info.audio_property,
- 							      RADEON_AUDIO_AUTO);
+ 							   rdev->mode_info.audio_property,
+ 							   (radeon_audio == 1) ?
+ 							   RADEON_AUDIO_AUTO :
+ 							   RADEON_AUDIO_DISABLE);
  			}
 +			if (ASIC_IS_AVIVO(rdev)) {
 +				drm_object_attach_property(&radeon_connector->base.base,
 +							   rdev->mode_info.dither_property,
 +							   RADEON_FMT_DITHER_DISABLE);
 +			}
  			subpixel_order = SubPixelHorizontalRGB;
  			connector->interlace_allowed = true;
  			if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
@@@ -1918,16 -1850,13 +1928,19 @@@
  							      rdev->mode_info.underscan_vborder_property,
  							      0);
  			}
- 			if (ASIC_IS_DCE2(rdev)) {
+ 			if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
  				drm_object_attach_property(&radeon_connector->base.base,
- 							      rdev->mode_info.audio_property,
- 							      RADEON_AUDIO_AUTO);
+ 							   rdev->mode_info.audio_property,
+ 							   (radeon_audio == 1) ?
+ 							   RADEON_AUDIO_AUTO :
+ 							   RADEON_AUDIO_DISABLE);
  			}
 +			if (ASIC_IS_AVIVO(rdev)) {
 +				drm_object_attach_property(&radeon_connector->base.base,
 +							   rdev->mode_info.dither_property,
 +							   RADEON_FMT_DITHER_DISABLE);
++
 +			}
  			connector->interlace_allowed = true;
  			/* in theory with a DP to VGA converter... */
  			connector->doublescan_allowed = false;
diff --cc drivers/gpu/drm/radeon/si.c
index 2acfe561796f,d96f7cbca0a1..6a64ccaa0695
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@@ -78,8 -78,16 +78,11 @@@ extern void evergreen_mc_resume(struct 
  extern u32 evergreen_get_number_of_dram_channels(struct radeon_device *rdev);
  extern void evergreen_print_gpu_status_regs(struct radeon_device *rdev);
  extern bool evergreen_is_display_hung(struct radeon_device *rdev);
 -extern void si_dma_vm_set_page(struct radeon_device *rdev,
 -			       struct radeon_ib *ib,
 -			       uint64_t pe,
 -			       uint64_t addr, unsigned count,
 -			       uint32_t incr, uint32_t flags);
  static void si_enable_gui_idle_interrupt(struct radeon_device *rdev,
  					 bool enable);
+ static void si_fini_pg(struct radeon_device *rdev);
+ static void si_fini_cg(struct radeon_device *rdev);
+ static void si_rlc_stop(struct radeon_device *rdev);
  
  static const u32 verde_rlc_save_restore_register_list[] =
  {