--- /dev/null
+From bcdb72ac7c00d2b56359fc82bcc8fe50454717d5 Mon Sep 17 00:00:00 2001
+From: Imre Deak <imre.deak@intel.com>
+Date: Fri, 14 Feb 2014 20:23:54 +0200
+Subject: drm/i915: fix pch pci device enumeration
+
+From: Imre Deak <imre.deak@intel.com>
+
+commit bcdb72ac7c00d2b56359fc82bcc8fe50454717d5 upstream.
+
+pci_get_class(class, from) drops the refcount for 'from', so the
+extra pci_dev_put we do on it will result in a use after free bug
+starting with the WARN below.
+
+Regression introduced in
+
+commit 6a9c4b35e6696a63805b6da5e4889c6986e9ee1b
+Author: Rui Guo <firemeteor@users.sourceforge.net>
+Date: Wed Jun 19 21:10:23 2013 +0800
+
+ drm/i915: Fix PCH detect with multiple ISA bridges in VM
+
+[ 164.338460] WARNING: CPU: 1 PID: 2094 at include/linux/kref.h:47 klist_next+0xae/0x110()
+[ 164.347731] CPU: 1 PID: 2094 Comm: modprobe Tainted: G O 3.13.0-imre+ #354
+[ 164.356468] Hardware name: Intel Corp. VALLEYVIEW B0 PLATFORM/NOTEBOOK, BIOS BYTICRB1.X64.0062.R70.1310112051 10/11/2013
+[ 164.368796] Call Trace:
+[ 164.371609] [<ffffffff816a32a6>] dump_stack+0x4e/0x7a
+[ 164.377447] [<ffffffff8104f75d>] warn_slowpath_common+0x7d/0xa0
+[ 164.384238] [<ffffffff8104f83a>] warn_slowpath_null+0x1a/0x20
+[ 164.390851] [<ffffffff8169aeae>] klist_next+0xae/0x110
+[ 164.396777] [<ffffffff8130a110>] ? pci_do_find_bus+0x70/0x70
+[ 164.403286] [<ffffffff813cb4a9>] bus_find_device+0x89/0xc0
+[ 164.409719] [<ffffffff8130a373>] pci_get_dev_by_id+0x63/0xa0
+[ 164.416238] [<ffffffff8130a4e4>] pci_get_class+0x44/0x50
+[ 164.422433] [<ffffffffa034821f>] intel_dsm_detect+0x16f/0x1f0 [i915]
+[ 164.429801] [<ffffffffa03482ae>] intel_register_dsm_handler+0xe/0x10 [i915]
+[ 164.437831] [<ffffffffa02d30fe>] i915_driver_load+0xafe/0xf30 [i915]
+[ 164.445126] [<ffffffff8158a150>] ? intel_alloc_coherent+0x110/0x110
+[ 164.452340] [<ffffffffa0148c07>] drm_dev_register+0xc7/0x150 [drm]
+[ 164.459462] [<ffffffffa014b23f>] drm_get_pci_dev+0x11f/0x1f0 [drm]
+[ 164.466554] [<ffffffff816abb81>] ? _raw_spin_unlock_irqrestore+0x51/0x70
+[ 164.474287] [<ffffffffa02cf7a6>] i915_pci_probe+0x56/0x60 [i915]
+[ 164.481185] [<ffffffff8130a028>] pci_device_probe+0x78/0xf0
+[ 164.487603] [<ffffffff813cd495>] driver_probe_device+0x155/0x350
+[ 164.494505] [<ffffffff813cd74e>] __driver_attach+0x6e/0xa0
+[ 164.500826] [<ffffffff813cd6e0>] ? __device_attach+0x50/0x50
+[ 164.507333] [<ffffffff813cb2be>] bus_for_each_dev+0x6e/0xc0
+[ 164.513752] [<ffffffff813ccefe>] driver_attach+0x1e/0x20
+[ 164.519870] [<ffffffff813cc958>] bus_add_driver+0x138/0x260
+[ 164.526289] [<ffffffffa0188000>] ? 0xffffffffa0187fff
+[ 164.532116] [<ffffffff813cde78>] driver_register+0x98/0xe0
+[ 164.538558] [<ffffffffa0188000>] ? 0xffffffffa0187fff
+[ 164.544389] [<ffffffff813087b0>] __pci_register_driver+0x60/0x70
+[ 164.551336] [<ffffffffa014b37d>] drm_pci_init+0x6d/0x120 [drm]
+[ 164.558040] [<ffffffffa0188000>] ? 0xffffffffa0187fff
+[ 164.563928] [<ffffffffa018806a>] i915_init+0x6a/0x6c [i915]
+[ 164.570363] [<ffffffff810002da>] do_one_initcall+0xaa/0x160
+[ 164.576783] [<ffffffff8103b140>] ? set_memory_nx+0x40/0x50
+[ 164.583100] [<ffffffff810ce7f5>] load_module+0x1fb5/0x2550
+[ 164.589410] [<ffffffff810caab0>] ? store_uevent+0x40/0x40
+[ 164.595628] [<ffffffff810cee7d>] SyS_init_module+0xed/0x100
+[ 164.602048] [<ffffffff816b3c52>] system_call_fastpath+0x16/0x1b
+
+v2: simplify the loop further (Chris)
+
+Signed-off-by: Imre Deak <imre.deak@intel.com>
+Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
+Reported-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=65652
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=74161
+Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
+Signed-off-by: Jani Nikula <jani.nikula@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/i915_drv.c | 23 +++++++++--------------
+ 1 file changed, 9 insertions(+), 14 deletions(-)
+
+--- a/drivers/gpu/drm/i915/i915_drv.c
++++ b/drivers/gpu/drm/i915/i915_drv.c
+@@ -401,7 +401,7 @@ MODULE_DEVICE_TABLE(pci, pciidlist);
+ void intel_detect_pch(struct drm_device *dev)
+ {
+ 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
+ * (which really amounts to a PCH but no South Display).
+@@ -422,12 +422,9 @@ void intel_detect_pch(struct drm_device
+ * all the ISA bridge devices and check for the first match, instead
+ * 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) {
+- 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;
+
+ if (id == INTEL_PCH_IBX_DEVICE_ID_TYPE) {
+@@ -459,18 +456,16 @@ void intel_detect_pch(struct drm_device
+ DRM_DEBUG_KMS("Found LynxPoint LP PCH\n");
+ WARN_ON(!IS_HASWELL(dev));
+ WARN_ON(!IS_ULT(dev));
+- } else {
+- goto check_next;
+- }
+- pci_dev_put(pch);
++ } else
++ continue;
++
+ break;
+ }
+-check_next:
+- pch = pci_get_class(PCI_CLASS_BRIDGE_ISA << 8, curr);
+- pci_dev_put(curr);
+ }
+ 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)
--- /dev/null
+From 6375b768a9850b6154478993e5fb566fa4614a9c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@linux.intel.com>
+Date: Mon, 3 Mar 2014 11:33:36 +0200
+Subject: drm/i915: Reject >165MHz modes w/ DVI monitors
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@linux.intel.com>
+
+commit 6375b768a9850b6154478993e5fb566fa4614a9c upstream.
+
+Single-link DVI max dotclock is 165MHz. Filter out modes with higher
+dotclock when the monitor doesn't support HDMI.
+
+Modes higher than 165 MHz were allowed in
+
+commit 7d148ef51a657fd04036c3ed7803da600dd0d451
+Author: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Mon Jul 22 18:02:39 2013 +0200
+
+ drm/i915: fix hdmi portclock limits
+
+Also don't attempt to use 12bpc mode with DVI monitors.
+
+Cc: Adam Nielsen <a.nielsen@shikadi.net>
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=75345
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=70331
+Tested-by: Ralf Jung <post+kernel@ralfj.de>
+Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
+Signed-off-by: Jani Nikula <jani.nikula@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/i915/intel_hdmi.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/gpu/drm/i915/intel_hdmi.c
++++ b/drivers/gpu/drm/i915/intel_hdmi.c
+@@ -845,7 +845,7 @@ static int hdmi_portclock_limit(struct i
+ {
+ struct drm_device *dev = intel_hdmi_to_dev(hdmi);
+
+- if (IS_G4X(dev))
++ if (!hdmi->has_hdmi_sink || IS_G4X(dev))
+ return 165000;
+ else if (IS_HASWELL(dev) || INTEL_INFO(dev)->gen >= 8)
+ return 300000;
+@@ -898,8 +898,8 @@ bool intel_hdmi_compute_config(struct in
+ * outputs. We also need to check that the higher clock still fits
+ * 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");
+ desired_bpp = 12*3;
+
--- /dev/null
+From d03874c881a049a50e12f285077ab1f9fc2686e1 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 6 Mar 2014 18:09:52 -0500
+Subject: drm/radeon/atom: select the proper number of lanes in
+ transmitter setup
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit d03874c881a049a50e12f285077ab1f9fc2686e1 upstream.
+
+We need to check for DVI vs. HDMI when setting up duallink since
+HDMI is single link only. Fixes 4k modes on newer asics.
+
+bug:
+https://bugs.freedesktop.org/show_bug.cgi?id=75223
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/atombios_encoders.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/radeon/atombios_encoders.c
++++ b/drivers/gpu/drm/radeon/atombios_encoders.c
+@@ -1313,7 +1313,7 @@ atombios_dig_transmitter_setup(struct dr
+ }
+ if (is_dp)
+ 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;
+ else
+ args.v5.ucLaneNum = 4;
--- /dev/null
+From 13714323f83ffa5a772fe0d8b74e0fa32ee08819 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 6 Mar 2014 13:16:55 -0500
+Subject: drm/radeon/dpm: fix typo in EVERGREEN_SMC_FIRMWARE_HEADER_softRegisters
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 13714323f83ffa5a772fe0d8b74e0fa32ee08819 upstream.
+
+Should be at 0x8 rather than 0.
+
+fixes:
+https://bugzilla.kernel.org/show_bug.cgi?id=60523
+
+Noticed by ArtForz on #radeon
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/evergreen_smc.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/radeon/evergreen_smc.h
++++ b/drivers/gpu/drm/radeon/evergreen_smc.h
+@@ -57,7 +57,7 @@ typedef struct SMC_Evergreen_MCRegisters
+
+ #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_mcRegisterTable 0x20
+
--- /dev/null
+From 01ac8794a77192236a4b91c33adf4177ac5a21f0 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Wed, 18 Dec 2013 19:11:27 -0500
+Subject: drm/radeon: re-order firmware loading in preparation for dpm rework
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 01ac8794a77192236a4b91c33adf4177ac5a21f0 upstream.
+
+We need to reorder the driver init sequence to better accomodate
+dpm which needs to be loaded earlier in the init sequence. Move
+fw init up so that it's available for dpm init.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/cik.c | 42 +++++++++++++++++++------------------
+ drivers/gpu/drm/radeon/evergreen.c | 33 +++++++++++++++--------------
+ drivers/gpu/drm/radeon/ni.c | 36 ++++++++++++++++---------------
+ drivers/gpu/drm/radeon/r600.c | 16 +++++++-------
+ drivers/gpu/drm/radeon/rv770.c | 16 +++++++-------
+ drivers/gpu/drm/radeon/si.c | 18 +++++++--------
+ 6 files changed, 84 insertions(+), 77 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/cik.c
++++ b/drivers/gpu/drm/radeon/cik.c
+@@ -7498,26 +7498,7 @@ static int cik_startup(struct radeon_dev
+
+ cik_mc_program(rdev);
+
+- if (rdev->flags & RADEON_IS_IGP) {
+- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
+- !rdev->mec_fw || !rdev->sdma_fw || !rdev->rlc_fw) {
+- r = cik_init_microcode(rdev);
+- if (r) {
+- DRM_ERROR("Failed to load firmware!\n");
+- return r;
+- }
+- }
+- } else {
+- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
+- !rdev->mec_fw || !rdev->sdma_fw || !rdev->rlc_fw ||
+- !rdev->mc_fw) {
+- r = cik_init_microcode(rdev);
+- if (r) {
+- DRM_ERROR("Failed to load firmware!\n");
+- return r;
+- }
+- }
+-
++ if (!(rdev->flags & RADEON_IS_IGP)) {
+ r = ci_mc_load_microcode(rdev);
+ if (r) {
+ DRM_ERROR("Failed to load MC firmware!\n");
+@@ -7830,6 +7811,27 @@ int cik_init(struct radeon_device *rdev)
+ if (r)
+ return r;
+
++ if (rdev->flags & RADEON_IS_IGP) {
++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
++ !rdev->mec_fw || !rdev->sdma_fw || !rdev->rlc_fw) {
++ r = cik_init_microcode(rdev);
++ if (r) {
++ DRM_ERROR("Failed to load firmware!\n");
++ return r;
++ }
++ }
++ } else {
++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
++ !rdev->mec_fw || !rdev->sdma_fw || !rdev->rlc_fw ||
++ !rdev->mc_fw) {
++ r = cik_init_microcode(rdev);
++ if (r) {
++ DRM_ERROR("Failed to load firmware!\n");
++ return r;
++ }
++ }
++ }
++
+ ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
+ ring->ring_obj = NULL;
+ r600_ring_init(rdev, ring, 1024 * 1024);
+--- a/drivers/gpu/drm/radeon/evergreen.c
++++ b/drivers/gpu/drm/radeon/evergreen.c
+@@ -5110,26 +5110,11 @@ static int evergreen_startup(struct rade
+ evergreen_mc_program(rdev);
+
+ if (ASIC_IS_DCE5(rdev)) {
+- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) {
+- r = ni_init_microcode(rdev);
+- if (r) {
+- DRM_ERROR("Failed to load firmware!\n");
+- return r;
+- }
+- }
+ r = ni_mc_load_microcode(rdev);
+ if (r) {
+ DRM_ERROR("Failed to load MC firmware!\n");
+ return r;
+ }
+- } else {
+- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
+- r = r600_init_microcode(rdev);
+- if (r) {
+- DRM_ERROR("Failed to load firmware!\n");
+- return r;
+- }
+- }
+ }
+
+ if (rdev->flags & RADEON_IS_AGP) {
+@@ -5357,6 +5342,24 @@ int evergreen_init(struct radeon_device
+ if (r)
+ return r;
+
++ if (ASIC_IS_DCE5(rdev)) {
++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) {
++ r = ni_init_microcode(rdev);
++ if (r) {
++ DRM_ERROR("Failed to load firmware!\n");
++ return r;
++ }
++ }
++ } else {
++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
++ r = r600_init_microcode(rdev);
++ if (r) {
++ DRM_ERROR("Failed to load firmware!\n");
++ return r;
++ }
++ }
++ }
++
+ rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL;
+ r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024);
+
+--- a/drivers/gpu/drm/radeon/ni.c
++++ b/drivers/gpu/drm/radeon/ni.c
+@@ -1876,23 +1876,7 @@ static int cayman_startup(struct radeon_
+
+ evergreen_mc_program(rdev);
+
+- if (rdev->flags & RADEON_IS_IGP) {
+- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
+- r = ni_init_microcode(rdev);
+- if (r) {
+- DRM_ERROR("Failed to load firmware!\n");
+- return r;
+- }
+- }
+- } else {
+- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) {
+- r = ni_init_microcode(rdev);
+- if (r) {
+- DRM_ERROR("Failed to load firmware!\n");
+- return r;
+- }
+- }
+-
++ if (!(rdev->flags & RADEON_IS_IGP)) {
+ r = ni_mc_load_microcode(rdev);
+ if (r) {
+ DRM_ERROR("Failed to load MC firmware!\n");
+@@ -2143,6 +2127,24 @@ int cayman_init(struct radeon_device *rd
+ if (r)
+ return r;
+
++ if (rdev->flags & RADEON_IS_IGP) {
++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
++ r = ni_init_microcode(rdev);
++ if (r) {
++ DRM_ERROR("Failed to load firmware!\n");
++ return r;
++ }
++ }
++ } else {
++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw || !rdev->mc_fw) {
++ r = ni_init_microcode(rdev);
++ if (r) {
++ DRM_ERROR("Failed to load firmware!\n");
++ return r;
++ }
++ }
++ }
++
+ ring->ring_obj = NULL;
+ r600_ring_init(rdev, ring, 1024 * 1024);
+
+--- a/drivers/gpu/drm/radeon/r600.c
++++ b/drivers/gpu/drm/radeon/r600.c
+@@ -2776,14 +2776,6 @@ static int r600_startup(struct radeon_de
+
+ r600_mc_program(rdev);
+
+- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
+- r = r600_init_microcode(rdev);
+- if (r) {
+- DRM_ERROR("Failed to load firmware!\n");
+- return r;
+- }
+- }
+-
+ if (rdev->flags & RADEON_IS_AGP) {
+ r600_agp_enable(rdev);
+ } else {
+@@ -2971,6 +2963,14 @@ int r600_init(struct radeon_device *rdev
+ if (r)
+ return r;
+
++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
++ r = r600_init_microcode(rdev);
++ if (r) {
++ DRM_ERROR("Failed to load firmware!\n");
++ return r;
++ }
++ }
++
+ rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL;
+ r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024);
+
+--- a/drivers/gpu/drm/radeon/rv770.c
++++ b/drivers/gpu/drm/radeon/rv770.c
+@@ -1665,14 +1665,6 @@ static int rv770_startup(struct radeon_d
+
+ rv770_mc_program(rdev);
+
+- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
+- r = r600_init_microcode(rdev);
+- if (r) {
+- DRM_ERROR("Failed to load firmware!\n");
+- return r;
+- }
+- }
+-
+ if (rdev->flags & RADEON_IS_AGP) {
+ rv770_agp_enable(rdev);
+ } else {
+@@ -1876,6 +1868,14 @@ int rv770_init(struct radeon_device *rde
+ if (r)
+ return r;
+
++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->rlc_fw) {
++ r = r600_init_microcode(rdev);
++ if (r) {
++ DRM_ERROR("Failed to load firmware!\n");
++ return r;
++ }
++ }
++
+ rdev->ring[RADEON_RING_TYPE_GFX_INDEX].ring_obj = NULL;
+ r600_ring_init(rdev, &rdev->ring[RADEON_RING_TYPE_GFX_INDEX], 1024 * 1024);
+
+--- a/drivers/gpu/drm/radeon/si.c
++++ b/drivers/gpu/drm/radeon/si.c
+@@ -6328,15 +6328,6 @@ static int si_startup(struct radeon_devi
+
+ si_mc_program(rdev);
+
+- if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
+- !rdev->rlc_fw || !rdev->mc_fw) {
+- r = si_init_microcode(rdev);
+- if (r) {
+- DRM_ERROR("Failed to load firmware!\n");
+- return r;
+- }
+- }
+-
+ r = si_mc_load_microcode(rdev);
+ if (r) {
+ DRM_ERROR("Failed to load MC firmware!\n");
+@@ -6604,6 +6595,15 @@ int si_init(struct radeon_device *rdev)
+ if (r)
+ return r;
+
++ if (!rdev->me_fw || !rdev->pfp_fw || !rdev->ce_fw ||
++ !rdev->rlc_fw || !rdev->mc_fw) {
++ r = si_init_microcode(rdev);
++ if (r) {
++ DRM_ERROR("Failed to load firmware!\n");
++ return r;
++ }
++ }
++
+ ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
+ ring->ring_obj = NULL;
+ r600_ring_init(rdev, ring, 1024 * 1024);
--- /dev/null
+From 70335abb2689c8cd5df91bf2d95a65649addf50b Mon Sep 17 00:00:00 2001
+From: Artem Fetishev <artem_fetishev@epam.com>
+Date: Mon, 10 Mar 2014 15:49:45 -0700
+Subject: fs/proc/base.c: fix GPF in /proc/$PID/map_files
+
+From: Artem Fetishev <artem_fetishev@epam.com>
+
+commit 70335abb2689c8cd5df91bf2d95a65649addf50b upstream.
+
+The expected logic of proc_map_files_get_link() is either to return 0
+and initialize 'path' or return an error and leave 'path' uninitialized.
+
+By the time dname_to_vma_addr() returns 0 the corresponding vma may have
+already be gone. In this case the path is not initialized but the
+return value is still 0. This results in 'general protection fault'
+inside d_path().
+
+Steps to reproduce:
+
+ CONFIG_CHECKPOINT_RESTORE=y
+
+ fd = open(...);
+ while (1) {
+ mmap(fd, ...);
+ munmap(fd, ...);
+ }
+
+ ls -la /proc/$PID/map_files
+
+Addresses https://bugzilla.kernel.org/show_bug.cgi?id=68991
+
+Signed-off-by: Artem Fetishev <artem_fetishev@epam.com>
+Signed-off-by: Aleksandr Terekhov <aleksandr_terekhov@epam.com>
+Reported-by: <wiebittewas@gmail.com>
+Acked-by: Pavel Emelyanov <xemul@parallels.com>
+Acked-by: Cyrill Gorcunov <gorcunov@openvz.org>
+Reviewed-by: "Eric W. Biederman" <ebiederm@xmission.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/proc/base.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/fs/proc/base.c
++++ b/fs/proc/base.c
+@@ -1819,6 +1819,7 @@ static int proc_map_files_get_link(struc
+ if (rc)
+ goto out_mmput;
+
++ rc = -ENOENT;
+ down_read(&mm->mmap_sem);
+ vma = find_exact_vma(mm, vm_start, vm_end);
+ if (vma && vma->vm_file) {
--- /dev/null
+From a2a99cea5ec7c1e47825559f0e75a4efbcf8aee3 Mon Sep 17 00:00:00 2001
+From: Nicholas Bellinger <nab@linux-iscsi.org>
+Date: Wed, 26 Feb 2014 03:09:41 -0800
+Subject: iscsi-target: Fix iscsit_get_tpg_from_np tpg_state bug
+
+From: Nicholas Bellinger <nab@linux-iscsi.org>
+
+commit a2a99cea5ec7c1e47825559f0e75a4efbcf8aee3 upstream.
+
+This patch fixes a bug in iscsit_get_tpg_from_np() where the
+tpg->tpg_state sanity check was looking for TPG_STATE_FREE,
+instead of != TPG_STATE_ACTIVE.
+
+The latter is expected during a normal TPG shutdown once the
+tpg_state goes into TPG_STATE_INACTIVE in order to reject any
+new incoming login attempts.
+
+Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/target/iscsi/iscsi_target_tpg.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/target/iscsi/iscsi_target_tpg.c
++++ b/drivers/target/iscsi/iscsi_target_tpg.c
+@@ -137,7 +137,7 @@ struct iscsi_portal_group *iscsit_get_tp
+ list_for_each_entry(tpg, &tiqn->tiqn_tpg_list, tpg_list) {
+
+ spin_lock(&tpg->tpg_state_lock);
+- if (tpg->tpg_state == TPG_STATE_FREE) {
++ if (tpg->tpg_state != TPG_STATE_ACTIVE) {
+ spin_unlock(&tpg->tpg_state_lock);
+ continue;
+ }
iser-target-fix-post_send_buf_count-for-rdma-read-write.patch
iser-target-fix-command-leak-for-tx_desc-comp_llnode_batch.patch
mm-readahead.c-fix-do_readahead-for-no-readpage-s.patch
+iscsi-target-fix-iscsit_get_tpg_from_np-tpg_state-bug.patch
+fs-proc-base.c-fix-gpf-in-proc-pid-map_files.patch
+drm-radeon-atom-select-the-proper-number-of-lanes-in.patch
+drm-radeon-dpm-fix-typo-in-evergreen_smc_firmware_header_softregisters.patch
+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