--- /dev/null
+From 8eeb5c15131d7b5061c10423eda3ae4c68db4eaf Mon Sep 17 00:00:00 2001
+From: Lars-Peter Clausen <lars@metafoo.de>
+Date: Tue, 4 Mar 2014 09:39:24 +0100
+Subject: ASoC: 88pm860: Fix IO setup
+
+From: Lars-Peter Clausen <lars@metafoo.de>
+
+commit 8eeb5c15131d7b5061c10423eda3ae4c68db4eaf upstream.
+
+The 88pm860 is a MFD device and the CODEC driver is using the regmap struct of
+the parent device, hence automatic IO setup will not work and we need to
+manually call snd_soc_codec_set_cache_io(). The issue was introduced in commit
+f9ded3b2e7 ("ASoC: 88pm860x: Use regmap for I/O").
+
+Fixes: f9ded3b2e7 ("ASoC: 88pm860x: Use regmap for I/O").
+Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
+Signed-off-by: Mark Brown <broonie@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/soc/codecs/88pm860x-codec.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/sound/soc/codecs/88pm860x-codec.c
++++ b/sound/soc/codecs/88pm860x-codec.c
+@@ -1328,6 +1328,9 @@ static int pm860x_probe(struct snd_soc_c
+ pm860x->codec = codec;
+
+ codec->control_data = pm860x->regmap;
++ ret = snd_soc_codec_set_cache_io(codec, 0, 0, SND_SOC_REGMAP);
++ if (ret)
++ return ret;
+
+ for (i = 0; i < 4; i++) {
+ ret = request_threaded_irq(pm860x->irq[i], NULL,
--- /dev/null
+From e4ad1accb28d0ed8cea6f12395d58686ad344ca7 Mon Sep 17 00:00:00 2001
+From: Patrick Lai <plai@codeaurora.org>
+Date: Sun, 2 Mar 2014 11:52:57 -0800
+Subject: ASoC: pcm: free path list before exiting from error conditions
+
+From: Patrick Lai <plai@codeaurora.org>
+
+commit e4ad1accb28d0ed8cea6f12395d58686ad344ca7 upstream.
+
+dpcm_path_get() allocates dynamic memory to hold path list.
+Corresponding dpcm_path_put() must be called to free the memory.
+dpcm_path_put() is not called under several error conditions.
+This leads to memory leak.
+
+Signed-off-by: Patrick Lai <plai@codeaurora.org>
+Signed-off-by: Mark Brown <broonie@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/soc/soc-pcm.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/sound/soc/soc-pcm.c
++++ b/sound/soc/soc-pcm.c
+@@ -1886,6 +1886,7 @@ int soc_dpcm_runtime_update(struct snd_s
+
+ paths = dpcm_path_get(fe, SNDRV_PCM_STREAM_PLAYBACK, &list);
+ if (paths < 0) {
++ dpcm_path_put(&list);
+ dev_warn(fe->dev, "ASoC: %s no valid %s path\n",
+ fe->dai_link->name, "playback");
+ mutex_unlock(&card->mutex);
+@@ -1915,6 +1916,7 @@ capture:
+
+ paths = dpcm_path_get(fe, SNDRV_PCM_STREAM_CAPTURE, &list);
+ if (paths < 0) {
++ dpcm_path_put(&list);
+ dev_warn(fe->dev, "ASoC: %s no valid %s path\n",
+ fe->dai_link->name, "capture");
+ mutex_unlock(&card->mutex);
+@@ -1979,6 +1981,7 @@ static int dpcm_fe_dai_open(struct snd_p
+ fe->dpcm[stream].runtime = fe_substream->runtime;
+
+ if (dpcm_path_get(fe, stream, &list) <= 0) {
++ dpcm_path_put(&list);
+ dev_dbg(fe->dev, "ASoC: %s no valid %s route\n",
+ fe->dai_link->name, stream ? "capture" : "playback");
+ }
--- /dev/null
+From 58d4d3c976b33784a1443c446a3d7203bf2153f0 Mon Sep 17 00:00:00 2001
+From: Lars-Peter Clausen <lars@metafoo.de>
+Date: Tue, 4 Mar 2014 09:41:53 +0100
+Subject: ASoC: si476x: Fix IO setup
+
+From: Lars-Peter Clausen <lars@metafoo.de>
+
+commit 58d4d3c976b33784a1443c446a3d7203bf2153f0 upstream.
+
+The si476x is a MFD device and the CODEC driver is using the regmap struct of
+the parent device, hence automatic IO setup will not work and we need to
+manually call snd_soc_codec_set_cache_io(). The issue was introduced commit
+d6173df35f ("ASoC: si476x: Remove custom register I/O implementation")
+
+Fixes: d6173df35f ("ASoC: si476x: Remove custom register I/O implementation")
+Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
+Signed-off-by: Mark Brown <broonie@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ sound/soc/codecs/si476x.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/sound/soc/codecs/si476x.c
++++ b/sound/soc/codecs/si476x.c
+@@ -210,7 +210,7 @@ out:
+ static int si476x_codec_probe(struct snd_soc_codec *codec)
+ {
+ codec->control_data = dev_get_regmap(codec->dev->parent, NULL);
+- return 0;
++ return snd_soc_codec_set_cache_io(codec, 0, 0, SND_SOC_REGMAP);
+ }
+
+ static struct snd_soc_dai_ops si476x_dai_ops = {
--- /dev/null
+From b2b3d8d952e4f8d6ac2ce80be96b937f29f6e42e Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Wed, 12 Mar 2014 16:20:44 -0400
+Subject: drm/radeon/cik: properly set compute ring status on disable
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit b2b3d8d952e4f8d6ac2ce80be96b937f29f6e42e upstream.
+
+When we disable the rings, set the status properly. If
+not other code pathes may try and use the rings which are
+not functional at this point.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/cik.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/radeon/cik.c
++++ b/drivers/gpu/drm/radeon/cik.c
+@@ -4069,8 +4069,11 @@ static void cik_cp_compute_enable(struct
+ {
+ if (enable)
+ WREG32(CP_MEC_CNTL, 0);
+- else
++ else {
+ WREG32(CP_MEC_CNTL, (MEC_ME1_HALT | MEC_ME2_HALT));
++ rdev->ring[CAYMAN_RING_TYPE_CP1_INDEX].ready = false;
++ rdev->ring[CAYMAN_RING_TYPE_CP2_INDEX].ready = false;
++ }
+ udelay(50);
+ }
+
--- /dev/null
+From 7b1bbe883b3ed962ca2be4daf321f318f5091340 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Wed, 12 Mar 2014 15:15:58 -0400
+Subject: drm/radeon/cik: properly set sdma ring status on disable
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 7b1bbe883b3ed962ca2be4daf321f318f5091340 upstream.
+
+When we disable the rings, set the status properly. If
+not other code pathes may try and use the rings which are
+not functional at this point.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/cik_sdma.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/gpu/drm/radeon/cik_sdma.c
++++ b/drivers/gpu/drm/radeon/cik_sdma.c
+@@ -193,6 +193,8 @@ static void cik_sdma_gfx_stop(struct rad
+ WREG32(SDMA0_GFX_RB_CNTL + reg_offset, rb_cntl);
+ WREG32(SDMA0_GFX_IB_CNTL + reg_offset, 0);
+ }
++ rdev->ring[R600_RING_TYPE_DMA_INDEX].ready = false;
++ rdev->ring[CAYMAN_RING_TYPE_DMA1_INDEX].ready = false;
+ }
+
+ /**
--- /dev/null
+From 07ae78c9798b79bad3d3adf983c94ba23fde54d4 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Wed, 12 Mar 2014 15:26:34 -0400
+Subject: drm/radeon/cik: stop the sdma engines in the enable() function
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 07ae78c9798b79bad3d3adf983c94ba23fde54d4 upstream.
+
+We always stop the rings when disabling the engines so just
+call the stop functions directly from the sdma enable function.
+This way the rings' status is set correctly on suspend so
+there are no problems on resume. Fixes resume failures that
+result in acceleration getting disabled.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/cik_sdma.c | 12 +++++-------
+ 1 file changed, 5 insertions(+), 7 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/cik_sdma.c
++++ b/drivers/gpu/drm/radeon/cik_sdma.c
+@@ -222,6 +222,11 @@ void cik_sdma_enable(struct radeon_devic
+ u32 me_cntl, reg_offset;
+ int i;
+
++ if (enable == false) {
++ cik_sdma_gfx_stop(rdev);
++ cik_sdma_rlc_stop(rdev);
++ }
++
+ for (i = 0; i < 2; i++) {
+ if (i == 0)
+ reg_offset = SDMA0_REGISTER_OFFSET;
+@@ -349,10 +354,6 @@ static int cik_sdma_load_microcode(struc
+ if (!rdev->sdma_fw)
+ return -EINVAL;
+
+- /* stop the gfx rings and rlc compute queues */
+- cik_sdma_gfx_stop(rdev);
+- cik_sdma_rlc_stop(rdev);
+-
+ /* halt the MEs */
+ cik_sdma_enable(rdev, false);
+
+@@ -421,9 +422,6 @@ int cik_sdma_resume(struct radeon_device
+ */
+ void cik_sdma_fini(struct radeon_device *rdev)
+ {
+- /* stop the gfx rings and rlc compute queues */
+- cik_sdma_gfx_stop(rdev);
+- cik_sdma_rlc_stop(rdev);
+ /* halt the MEs */
+ cik_sdma_enable(rdev, false);
+ radeon_ring_fini(rdev, &rdev->ring[R600_RING_TYPE_DMA_INDEX]);
--- /dev/null
+From 407b6dfd9afa30cf963fa99bca91870e47965612 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Fri, 17 Jan 2014 12:34:55 -0500
+Subject: drm/radeon: fix minor typos in si_dpm.c
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 407b6dfd9afa30cf963fa99bca91870e47965612 upstream.
+
+Copy/paste typos from the ni code. Should not
+have any functional change.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/si_dpm.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/si_dpm.c
++++ b/drivers/gpu/drm/radeon/si_dpm.c
+@@ -2396,7 +2396,7 @@ static int si_populate_sq_ramping_values
+ if (SISLANDS_DPM2_SQ_RAMP_STI_SIZE > (STI_SIZE_MASK >> STI_SIZE_SHIFT))
+ enable_sq_ramping = false;
+
+- if (NISLANDS_DPM2_SQ_RAMP_LTI_RATIO <= (LTI_RATIO_MASK >> LTI_RATIO_SHIFT))
++ if (SISLANDS_DPM2_SQ_RAMP_LTI_RATIO <= (LTI_RATIO_MASK >> LTI_RATIO_SHIFT))
+ enable_sq_ramping = false;
+
+ for (i = 0; i < state->performance_level_count; i++) {
+@@ -5413,7 +5413,7 @@ static void si_populate_mc_reg_addresses
+
+ for (i = 0, j = 0; j < si_pi->mc_reg_table.last; j++) {
+ if (si_pi->mc_reg_table.valid_flag & (1 << j)) {
+- if (i >= SMC_NISLANDS_MC_REGISTER_ARRAY_SIZE)
++ if (i >= SMC_SISLANDS_MC_REGISTER_ARRAY_SIZE)
+ break;
+ mc_reg_table->address[i].s0 =
+ cpu_to_be16(si_pi->mc_reg_table.mc_reg_address[j].s0);
--- /dev/null
+From 7848865914c6a63ead674f0f5604b77df7d3874f Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Tue, 11 Mar 2014 15:02:30 -0400
+Subject: drm/radeon: fix runpm disabling on non-PX harder
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 7848865914c6a63ead674f0f5604b77df7d3874f upstream.
+
+Make sure runtime pm is disabled on non-PX hardware.
+Should fix powerdown problems without displays attached.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_kms.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/radeon/radeon_kms.c
++++ b/drivers/gpu/drm/radeon/radeon_kms.c
+@@ -33,6 +33,13 @@
+ #include <linux/vga_switcheroo.h>
+ #include <linux/slab.h>
+ #include <linux/pm_runtime.h>
++
++#if defined(CONFIG_VGA_SWITCHEROO)
++bool radeon_is_px(void);
++#else
++static inline bool radeon_is_px(void) { return false; }
++#endif
++
+ /**
+ * radeon_driver_unload_kms - Main unload function for KMS.
+ *
+@@ -130,7 +137,8 @@ int radeon_driver_load_kms(struct drm_de
+ "Error during ACPI methods call\n");
+ }
+
+- if (radeon_runtime_pm != 0) {
++ if ((radeon_runtime_pm == 1) ||
++ ((radeon_runtime_pm == -1) && radeon_is_px())) {
+ pm_runtime_use_autosuspend(dev->dev);
+ pm_runtime_set_autosuspend_delay(dev->dev, 5000);
+ pm_runtime_set_active(dev->dev);
--- /dev/null
+From 5b43c3cd07981619dbdb1fb935ef705a3e80955f Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Tue, 18 Feb 2014 10:14:46 -0500
+Subject: drm/radeon/si: fix typo in dpm sq ramping setup
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 5b43c3cd07981619dbdb1fb935ef705a3e80955f upstream.
+
+inverted logic.
+
+Noticed-by: Sylvain BERTRAND <sylware@legeek.net>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/si_dpm.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/radeon/si_dpm.c
++++ b/drivers/gpu/drm/radeon/si_dpm.c
+@@ -2396,7 +2396,7 @@ static int si_populate_sq_ramping_values
+ if (SISLANDS_DPM2_SQ_RAMP_STI_SIZE > (STI_SIZE_MASK >> STI_SIZE_SHIFT))
+ enable_sq_ramping = false;
+
+- if (SISLANDS_DPM2_SQ_RAMP_LTI_RATIO <= (LTI_RATIO_MASK >> LTI_RATIO_SHIFT))
++ if (SISLANDS_DPM2_SQ_RAMP_LTI_RATIO > (LTI_RATIO_MASK >> LTI_RATIO_SHIFT))
+ enable_sq_ramping = false;
+
+ for (i = 0; i < state->performance_level_count; i++) {
drm-i915-fix-pch-pci-device-enumeration.patch
drm-i915-reject-165mhz-modes-w-dvi-monitors.patch
drm-radeon-re-order-firmware-loading-in-preparation-for-dpm-rework.patch
+drm-radeon-fix-runpm-disabling-on-non-px-harder.patch
+drm-radeon-cik-properly-set-sdma-ring-status-on-disable.patch
+drm-radeon-cik-stop-the-sdma-engines-in-the-enable-function.patch
+drm-radeon-cik-properly-set-compute-ring-status-on-disable.patch
+drm-radeon-fix-minor-typos-in-si_dpm.c.patch
+drm-radeon-si-fix-typo-in-dpm-sq-ramping-setup.patch
+asoc-pcm-free-path-list-before-exiting-from-error-conditions.patch
+asoc-88pm860-fix-io-setup.patch
+asoc-si476x-fix-io-setup.patch