]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 10 Jun 2013 07:19:33 +0000 (00:19 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 10 Jun 2013 07:19:33 +0000 (00:19 -0700)
added patches:
arm-7742-1-topology-export-cpu_topology.patch
arm-7743-1-compressed-head.s-work-around-new-binutils-warning.patch
arm-7747-1-pcpu-ensure-__my_cpu_offset-cannot-be-re-ordered-across-barrier.patch
arm-kirkwood-ts219-fix-crash-by-double-pcie-instantiation.patch
dmaengine-ste_dma40-fix-pm-runtime-ref-counting.patch
drm-radeon-don-t-allow-audio-on-dce6.patch
powerpc-eeh-don-t-check-rtas-token-to-get-pe-addr.patch
powerpc-hw_breakpoints-add-dabrx-cpu-feature-to-fix-32-bit-regression.patch
powerpc-perf-fix-deadlock-caused-by-calling-printk-in-pmu-exception.patch
radeon-fix-system-hang-issue-when-using-kms-with-older-cards.patch

queue-3.9/arm-7742-1-topology-export-cpu_topology.patch [new file with mode: 0644]
queue-3.9/arm-7743-1-compressed-head.s-work-around-new-binutils-warning.patch [new file with mode: 0644]
queue-3.9/arm-7747-1-pcpu-ensure-__my_cpu_offset-cannot-be-re-ordered-across-barrier.patch [new file with mode: 0644]
queue-3.9/arm-kirkwood-ts219-fix-crash-by-double-pcie-instantiation.patch [new file with mode: 0644]
queue-3.9/dmaengine-ste_dma40-fix-pm-runtime-ref-counting.patch [new file with mode: 0644]
queue-3.9/drm-radeon-don-t-allow-audio-on-dce6.patch [new file with mode: 0644]
queue-3.9/powerpc-eeh-don-t-check-rtas-token-to-get-pe-addr.patch [new file with mode: 0644]
queue-3.9/powerpc-hw_breakpoints-add-dabrx-cpu-feature-to-fix-32-bit-regression.patch [new file with mode: 0644]
queue-3.9/powerpc-perf-fix-deadlock-caused-by-calling-printk-in-pmu-exception.patch [new file with mode: 0644]
queue-3.9/radeon-fix-system-hang-issue-when-using-kms-with-older-cards.patch [new file with mode: 0644]
queue-3.9/series

diff --git a/queue-3.9/arm-7742-1-topology-export-cpu_topology.patch b/queue-3.9/arm-7742-1-topology-export-cpu_topology.patch
new file mode 100644 (file)
index 0000000..a3cbe5a
--- /dev/null
@@ -0,0 +1,47 @@
+From 92bdd3f5eba299b33c2f4407977d6fa2e2a6a0da Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Fri, 31 May 2013 22:49:22 +0100
+Subject: ARM: 7742/1: topology: export cpu_topology
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+commit 92bdd3f5eba299b33c2f4407977d6fa2e2a6a0da upstream.
+
+The cpu_topology symbol is required by any driver using the topology
+interfaces, which leads to a couple of build errors:
+
+ERROR: "cpu_topology" [drivers/net/ethernet/sfc/sfc.ko] undefined!
+ERROR: "cpu_topology" [drivers/cpufreq/arm_big_little.ko] undefined!
+ERROR: "cpu_topology" [drivers/block/mtip32xx/mtip32xx.ko] undefined!
+
+The obvious solution is to export this symbol.
+
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Acked-by: Will Deacon <will.deacon@arm.com>
+Cc: Nicolas Pitre <nico@linaro.org>
+Cc: Vincent Guittot <vincent.guittot@linaro.org>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/kernel/topology.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/arch/arm/kernel/topology.c
++++ b/arch/arm/kernel/topology.c
+@@ -13,6 +13,7 @@
+ #include <linux/cpu.h>
+ #include <linux/cpumask.h>
++#include <linux/export.h>
+ #include <linux/init.h>
+ #include <linux/percpu.h>
+ #include <linux/node.h>
+@@ -200,6 +201,7 @@ static inline void update_cpu_power(unsi
+  * cpu topology table
+  */
+ struct cputopo_arm cpu_topology[NR_CPUS];
++EXPORT_SYMBOL_GPL(cpu_topology);
+ const struct cpumask *cpu_coregroup_mask(int cpu)
+ {
diff --git a/queue-3.9/arm-7743-1-compressed-head.s-work-around-new-binutils-warning.patch b/queue-3.9/arm-7743-1-compressed-head.s-work-around-new-binutils-warning.patch
new file mode 100644 (file)
index 0000000..7e15c75
--- /dev/null
@@ -0,0 +1,101 @@
+From da94a829305f1c217cfdf6771cb1faca0917e3b9 Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Fri, 31 May 2013 22:50:47 +0100
+Subject: ARM: 7743/1: compressed/head.S: work around new binutils warning
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+commit da94a829305f1c217cfdf6771cb1faca0917e3b9 upstream.
+
+In August 2012, Matthew Gretton-Dann checked a change into binutils
+labelled "Error on obsolete & warn on deprecated registers", apparently as
+part of ARMv8 support. Apparently, this was supposed to emit the message
+"Warning: This coprocessor register access is deprecated in ARMv8" when
+using certain mcr/mrc instructions and building for ARMv8. Unfortunately,
+the message that is actually emitted appears to be '(null)', which is
+less helpful in comparison.
+
+Even more unfortunately, this is biting us on every single kernel
+build with a new gas, because arch/arm/boot/compressed/head.S and some
+other files in that directory are built with -march=all since kernel
+commit 80cec14a8 "[ARM] Add -march=all to assembly file build in
+arch/arm/boot/compressed" back in v2.6.28.
+
+This patch reverts Russell's nice solution and instead marks the head.S
+file to be built for armv7-a, which fortunately lets us build all
+instructions in that file without warnings even on the broken binutils.
+
+Without this patch, building anything results in:
+
+arch/arm/boot/compressed/head.S: Assembler messages:
+arch/arm/boot/compressed/head.S:565: Warning: (null)
+arch/arm/boot/compressed/head.S:676: Warning: (null)
+arch/arm/boot/compressed/head.S:698: Warning: (null)
+arch/arm/boot/compressed/head.S:722: Warning: (null)
+arch/arm/boot/compressed/head.S:726: Warning: (null)
+arch/arm/boot/compressed/head.S:957: Warning: (null)
+arch/arm/boot/compressed/head.S:996: Warning: (null)
+arch/arm/boot/compressed/head.S:997: Warning: (null)
+arch/arm/boot/compressed/head.S:1027: Warning: (null)
+arch/arm/boot/compressed/head.S:1035: Warning: (null)
+arch/arm/boot/compressed/head.S:1046: Warning: (null)
+arch/arm/boot/compressed/head.S:1060: Warning: (null)
+arch/arm/boot/compressed/head.S:1092: Warning: (null)
+arch/arm/boot/compressed/head.S:1094: Warning: (null)
+arch/arm/boot/compressed/head.S:1095: Warning: (null)
+arch/arm/boot/compressed/head.S:1102: Warning: (null)
+arch/arm/boot/compressed/head.S:1134: Warning: (null)
+
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Cc: Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/boot/compressed/Makefile      |    2 +-
+ arch/arm/boot/compressed/head-sa1100.S |    1 +
+ arch/arm/boot/compressed/head-shark.S  |    1 +
+ arch/arm/boot/compressed/head.S        |    1 +
+ 4 files changed, 4 insertions(+), 1 deletion(-)
+
+--- a/arch/arm/boot/compressed/Makefile
++++ b/arch/arm/boot/compressed/Makefile
+@@ -121,7 +121,7 @@ KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CF
+ endif
+ ccflags-y := -fpic -mno-single-pic-base -fno-builtin -I$(obj)
+-asflags-y := -Wa,-march=all -DZIMAGE
++asflags-y := -DZIMAGE
+ # Supply kernel BSS size to the decompressor via a linker symbol.
+ KBSS_SZ = $(shell $(CROSS_COMPILE)size $(obj)/../../../../vmlinux | \
+--- a/arch/arm/boot/compressed/head-sa1100.S
++++ b/arch/arm/boot/compressed/head-sa1100.S
+@@ -11,6 +11,7 @@
+ #include <asm/mach-types.h>
+               .section        ".start", "ax"
++              .arch   armv4
+ __SA1100_start:
+--- a/arch/arm/boot/compressed/head-shark.S
++++ b/arch/arm/boot/compressed/head-shark.S
+@@ -18,6 +18,7 @@
+       
+               .section        ".start", "ax"
++              .arch armv4
+               b       __beginning
+       
+ __ofw_data:   .long   0                               @ the number of memory blocks
+--- a/arch/arm/boot/compressed/head.S
++++ b/arch/arm/boot/compressed/head.S
+@@ -11,6 +11,7 @@
+ #include <linux/linkage.h>
+ #include <asm/assembler.h>
++      .arch   armv7-a
+ /*
+  * Debugging stuff
+  *
diff --git a/queue-3.9/arm-7747-1-pcpu-ensure-__my_cpu_offset-cannot-be-re-ordered-across-barrier.patch b/queue-3.9/arm-7747-1-pcpu-ensure-__my_cpu_offset-cannot-be-re-ordered-across-barrier.patch
new file mode 100644 (file)
index 0000000..d1c09a1
--- /dev/null
@@ -0,0 +1,54 @@
+From 509eb76ebf9771abc9fe51859382df2571f11447 Mon Sep 17 00:00:00 2001
+From: Will Deacon <will.deacon@arm.com>
+Date: Wed, 5 Jun 2013 11:20:33 +0100
+Subject: ARM: 7747/1: pcpu: ensure __my_cpu_offset cannot be re-ordered across barrier()
+
+From: Will Deacon <will.deacon@arm.com>
+
+commit 509eb76ebf9771abc9fe51859382df2571f11447 upstream.
+
+__my_cpu_offset is non-volatile, since we want its value to be cached
+when we access several per-cpu variables in a row with preemption
+disabled. This means that we rely on preempt_{en,dis}able to hazard
+with the operation via the barrier() macro, so that we can't end up
+migrating CPUs without reloading the per-cpu offset.
+
+Unfortunately, GCC doesn't treat a "memory" clobber on a non-volatile
+asm block as a side-effect, and will happily re-order it before other
+memory clobbers (including those in prempt_disable()) and cache the
+value. This has been observed to break the cmpxchg logic in the slub
+allocator, leading to livelock in kmem_cache_alloc in mainline kernels.
+
+This patch adds a dummy memory input operand to __my_cpu_offset,
+forcing it to be ordered with respect to the barrier() macro.
+
+Reviewed-by: Nicolas Pitre <nico@linaro.org>
+Cc: Rob Herring <rob.herring@calxeda.com>
+Signed-off-by: Will Deacon <will.deacon@arm.com>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/include/asm/percpu.h |   11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+--- a/arch/arm/include/asm/percpu.h
++++ b/arch/arm/include/asm/percpu.h
+@@ -30,8 +30,15 @@ static inline void set_my_cpu_offset(uns
+ static inline unsigned long __my_cpu_offset(void)
+ {
+       unsigned long off;
+-      /* Read TPIDRPRW */
+-      asm("mrc p15, 0, %0, c13, c0, 4" : "=r" (off) : : "memory");
++      register unsigned long *sp asm ("sp");
++
++      /*
++       * Read TPIDRPRW.
++       * We want to allow caching the value, so avoid using volatile and
++       * instead use a fake stack read to hazard against barrier().
++       */
++      asm("mrc p15, 0, %0, c13, c0, 4" : "=r" (off) : "Q" (*sp));
++
+       return off;
+ }
+ #define __my_cpu_offset __my_cpu_offset()
diff --git a/queue-3.9/arm-kirkwood-ts219-fix-crash-by-double-pcie-instantiation.patch b/queue-3.9/arm-kirkwood-ts219-fix-crash-by-double-pcie-instantiation.patch
new file mode 100644 (file)
index 0000000..897bf17
--- /dev/null
@@ -0,0 +1,47 @@
+From e89b4058096569c999fa599370162022a5a2b3d2 Mon Sep 17 00:00:00 2001
+From: Andrew Lunn <andrew@lunn.ch>
+Date: Tue, 21 May 2013 19:41:48 +0200
+Subject: ARM: Kirkwood: TS219: Fix crash by double PCIe instantiation
+
+From: Andrew Lunn <andrew@lunn.ch>
+
+commit e89b4058096569c999fa599370162022a5a2b3d2 upstream.
+
+When creating the DT based boards-ts219.c the none DT ts219-setup.c
+was used as a template. This includes a lateinit() call to initialize
+the PCIe bus. The code makes use of machine_is_ts219() which is never
+true on DT, so a FIXME was added and the code left as is. This was
+unproblematic until b73690c8f8b5d: "ARM: Kirkwood: Support basic
+hotplug for PCI-E" which changes the way the PCIe bus is
+initialized. The non-DT ts219-setup.c now crashes during boot.  The
+lateinit() call in the DT boards-ts219.c is being called,
+machine_is_ts219() is true and so the PCIe is initialized a second
+time.
+
+This patch removes the useless, and now clearly dangerous, code from
+boards-ts219.c, making ts219-setup.c work again.
+
+Signed-off-by: Andrew Lunn <andrew@lunn.ch>
+Signed-off-by: Jason Cooper <jason@lakedaemon.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/mach-kirkwood/board-ts219.c |   10 ----------
+ 1 file changed, 10 deletions(-)
+
+--- a/arch/arm/mach-kirkwood/board-ts219.c
++++ b/arch/arm/mach-kirkwood/board-ts219.c
+@@ -41,13 +41,3 @@ void __init qnap_dt_ts219_init(void)
+       pm_power_off = qnap_tsx1x_power_off;
+ }
+-
+-/* FIXME: Will not work with DT. Maybe use MPP40_GPIO? */
+-static int __init ts219_pci_init(void)
+-{
+-      if (machine_is_ts219())
+-              kirkwood_pcie_init(KW_PCIE0);
+-
+-      return 0;
+-}
+-subsys_initcall(ts219_pci_init);
diff --git a/queue-3.9/dmaengine-ste_dma40-fix-pm-runtime-ref-counting.patch b/queue-3.9/dmaengine-ste_dma40-fix-pm-runtime-ref-counting.patch
new file mode 100644 (file)
index 0000000..2c04305
--- /dev/null
@@ -0,0 +1,40 @@
+From 9ecb41bd8cf002fd8f3e063db4df81647ddd623c Mon Sep 17 00:00:00 2001
+From: Rabin Vincent <rabin.vincent@stericsson.com>
+Date: Mon, 27 May 2013 16:03:40 +0200
+Subject: dmaengine: ste_dma40: fix pm runtime ref counting
+
+From: Rabin Vincent <rabin.vincent@stericsson.com>
+
+commit 9ecb41bd8cf002fd8f3e063db4df81647ddd623c upstream.
+
+The pm runtime reference counting of the driver is broken for the case
+when there is more than one transfer queued, leading to the device being
+runtime suspend while active.  Fix it.
+
+Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com>
+Acked-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Vinod Koul <vinod.koul@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/dma/ste_dma40.c |    8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+--- a/drivers/dma/ste_dma40.c
++++ b/drivers/dma/ste_dma40.c
+@@ -1566,10 +1566,12 @@ static void dma_tc_handle(struct d40_cha
+                       return;
+               }
+-              if (d40_queue_start(d40c) == NULL)
++              if (d40_queue_start(d40c) == NULL) {
+                       d40c->busy = false;
+-              pm_runtime_mark_last_busy(d40c->base->dev);
+-              pm_runtime_put_autosuspend(d40c->base->dev);
++
++                      pm_runtime_mark_last_busy(d40c->base->dev);
++                      pm_runtime_put_autosuspend(d40c->base->dev);
++              }
+               d40_desc_remove(d40d);
+               d40_desc_done(d40c, d40d);
diff --git a/queue-3.9/drm-radeon-don-t-allow-audio-on-dce6.patch b/queue-3.9/drm-radeon-don-t-allow-audio-on-dce6.patch
new file mode 100644 (file)
index 0000000..4c2e0c6
--- /dev/null
@@ -0,0 +1,60 @@
+From 1cbcca302a318499f20a512847c5d6a510c08c35 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Mon, 3 Jun 2013 10:32:40 -0400
+Subject: drm/radeon: don't allow audio on DCE6
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 1cbcca302a318499f20a512847c5d6a510c08c35 upstream.
+
+It's not supported yet.  Fixes display issues when
+users force it on.
+
+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 |   11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/atombios_encoders.c
++++ b/drivers/gpu/drm/radeon/atombios_encoders.c
+@@ -667,6 +667,8 @@ atombios_digital_setup(struct drm_encode
+ int
+ atombios_get_encoder_mode(struct drm_encoder *encoder)
+ {
++      struct drm_device *dev = encoder->dev;
++      struct radeon_device *rdev = dev->dev_private;
+       struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
+       struct drm_connector *connector;
+       struct radeon_connector *radeon_connector;
+@@ -693,7 +695,8 @@ atombios_get_encoder_mode(struct drm_enc
+       case DRM_MODE_CONNECTOR_DVII:
+       case DRM_MODE_CONNECTOR_HDMIB: /* HDMI-B is basically DL-DVI; analog works fine */
+               if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
+-                  radeon_audio)
++                  radeon_audio &&
++                  !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */
+                       return ATOM_ENCODER_MODE_HDMI;
+               else if (radeon_connector->use_digital)
+                       return ATOM_ENCODER_MODE_DVI;
+@@ -704,7 +707,8 @@ atombios_get_encoder_mode(struct drm_enc
+       case DRM_MODE_CONNECTOR_HDMIA:
+       default:
+               if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
+-                  radeon_audio)
++                  radeon_audio &&
++                  !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */
+                       return ATOM_ENCODER_MODE_HDMI;
+               else
+                       return ATOM_ENCODER_MODE_DVI;
+@@ -718,7 +722,8 @@ atombios_get_encoder_mode(struct drm_enc
+                   (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP))
+                       return ATOM_ENCODER_MODE_DP;
+               else if (drm_detect_hdmi_monitor(radeon_connector->edid) &&
+-                       radeon_audio)
++                       radeon_audio &&
++                       !ASIC_IS_DCE6(rdev)) /* remove once we support DCE6 */
+                       return ATOM_ENCODER_MODE_HDMI;
+               else
+                       return ATOM_ENCODER_MODE_DVI;
diff --git a/queue-3.9/powerpc-eeh-don-t-check-rtas-token-to-get-pe-addr.patch b/queue-3.9/powerpc-eeh-don-t-check-rtas-token-to-get-pe-addr.patch
new file mode 100644 (file)
index 0000000..7729422
--- /dev/null
@@ -0,0 +1,59 @@
+From b8b3de224f194005ad87ede6fd022fcc2bef3b1a Mon Sep 17 00:00:00 2001
+From: Gavin Shan <shangw@linux.vnet.ibm.com>
+Date: Wed, 5 Jun 2013 14:25:50 +0000
+Subject: powerpc/eeh: Don't check RTAS token to get PE addr
+
+From: Gavin Shan <shangw@linux.vnet.ibm.com>
+
+commit b8b3de224f194005ad87ede6fd022fcc2bef3b1a upstream.
+
+RTAS token "ibm,get-config-addr-info" or ibm,get-config-addr-info2"
+are used to retrieve the PE address according to PCI address, which
+made up of domain/bus/slot/function. If we don't have those 2 tokens,
+the domain/bus/slot/function would be used as the address for EEH
+RTAS operations. Some older f/w might not have those 2 tokens and
+that blocks the EEH functionality to be initialized. It was introduced
+by commit e2af155c ("powerpc/eeh: pseries platform EEH initialization").
+
+The patch skips the check on those 2 tokens so we can bring up EEH
+functionality successfully. And domain/bus/slot/function will be
+used as address for EEH RTAS operations.
+
+Reported-by: Robert Knight <knight@princeton.edu>
+Signed-off-by: Gavin Shan <shangw@linux.vnet.ibm.com>
+Tested-by: Robert Knight <knight@princeton.edu>
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/powerpc/platforms/pseries/eeh_pseries.c |   12 +++++-------
+ 1 file changed, 5 insertions(+), 7 deletions(-)
+
+--- a/arch/powerpc/platforms/pseries/eeh_pseries.c
++++ b/arch/powerpc/platforms/pseries/eeh_pseries.c
+@@ -83,7 +83,11 @@ static int pseries_eeh_init(void)
+       ibm_configure_pe                = rtas_token("ibm,configure-pe");
+       ibm_configure_bridge            = rtas_token("ibm,configure-bridge");
+-      /* necessary sanity check */
++      /*
++       * Necessary sanity check. We needn't check "get-config-addr-info"
++       * and its variant since the old firmware probably support address
++       * of domain/bus/slot/function for EEH RTAS operations.
++       */
+       if (ibm_set_eeh_option == RTAS_UNKNOWN_SERVICE) {
+               pr_warning("%s: RTAS service <ibm,set-eeh-option> invalid\n",
+                       __func__);
+@@ -102,12 +106,6 @@ static int pseries_eeh_init(void)
+               pr_warning("%s: RTAS service <ibm,slot-error-detail> invalid\n",
+                       __func__);
+               return -EINVAL;
+-      } else if (ibm_get_config_addr_info2 == RTAS_UNKNOWN_SERVICE &&
+-                 ibm_get_config_addr_info == RTAS_UNKNOWN_SERVICE) {
+-              pr_warning("%s: RTAS service <ibm,get-config-addr-info2> and "
+-                      "<ibm,get-config-addr-info> invalid\n",
+-                      __func__);
+-              return -EINVAL;
+       } else if (ibm_configure_pe == RTAS_UNKNOWN_SERVICE &&
+                  ibm_configure_bridge == RTAS_UNKNOWN_SERVICE) {
+               pr_warning("%s: RTAS service <ibm,configure-pe> and "
diff --git a/queue-3.9/powerpc-hw_breakpoints-add-dabrx-cpu-feature-to-fix-32-bit-regression.patch b/queue-3.9/powerpc-hw_breakpoints-add-dabrx-cpu-feature-to-fix-32-bit-regression.patch
new file mode 100644 (file)
index 0000000..1e7f5e0
--- /dev/null
@@ -0,0 +1,108 @@
+From 82a9f16adc12f51c3f8ea59a7c3c120241aff836 Mon Sep 17 00:00:00 2001
+From: Michael Neuling <mikey@neuling.org>
+Date: Thu, 16 May 2013 20:27:31 +0000
+Subject: powerpc/hw_breakpoints: Add DABRX cpu feature to fix 32-bit regression
+
+From: Michael Neuling <mikey@neuling.org>
+
+commit 82a9f16adc12f51c3f8ea59a7c3c120241aff836 upstream.
+
+When introducing support for DABRX in 4474ef0, we broke older 32-bit CPUs
+that don't have that register.
+
+Some CPUs have a DABR but not DABRX.  Configuration are:
+- No 32bit CPUs have DABRX but some have DABR.
+- POWER4+ and below have the DABR but no DABRX.
+- 970 and POWER5 and above have DABR and DABRX.
+- POWER8 has DAWR, hence no DABRX.
+
+This introduces CPU_FTR_DABRX and sets it on appropriate CPUs.  We use
+the top 64 bits for CPU FTR bits since only 64 bit CPUs have this.
+
+Processors that don't have the DABRX will still work as they will fall
+back to software filtering these breakpoints via perf_exclude_event().
+
+Signed-off-by: Michael Neuling <mikey@neuling.org>
+Reported-by: "Gorelik, Jacob (335F)" <jacob.gorelik@jpl.nasa.gov>
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/powerpc/include/asm/cputable.h |   17 ++++++++++-------
+ arch/powerpc/kernel/process.c       |    3 ++-
+ 2 files changed, 12 insertions(+), 8 deletions(-)
+
+--- a/arch/powerpc/include/asm/cputable.h
++++ b/arch/powerpc/include/asm/cputable.h
+@@ -175,6 +175,7 @@ extern const char *powerpc_base_platform
+ #define CPU_FTR_BCTAR                 LONG_ASM_CONST(0x0100000000000000)
+ #define       CPU_FTR_HAS_PPR                 LONG_ASM_CONST(0x0200000000000000)
+ #define CPU_FTR_DAWR                  LONG_ASM_CONST(0x0400000000000000)
++#define CPU_FTR_DABRX                 LONG_ASM_CONST(0x0800000000000000)
+ #ifndef __ASSEMBLY__
+@@ -391,19 +392,20 @@ extern const char *powerpc_base_platform
+           CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_201 | \
+           CPU_FTR_ALTIVEC_COMP | CPU_FTR_CAN_NAP | CPU_FTR_MMCRA | \
+           CPU_FTR_CP_USE_DCBTZ | CPU_FTR_STCX_CHECKS_ADDRESS | \
+-          CPU_FTR_HVMODE)
++          CPU_FTR_HVMODE | CPU_FTR_DABRX)
+ #define CPU_FTRS_POWER5       (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
+           CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
+           CPU_FTR_MMCRA | CPU_FTR_SMT | \
+           CPU_FTR_COHERENT_ICACHE | CPU_FTR_PURR | \
+-          CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB)
++          CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_DABRX)
+ #define CPU_FTRS_POWER6 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
+           CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
+           CPU_FTR_MMCRA | CPU_FTR_SMT | \
+           CPU_FTR_COHERENT_ICACHE | \
+           CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \
+           CPU_FTR_DSCR | CPU_FTR_UNALIGNED_LD_STD | \
+-          CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_CFAR)
++          CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_CFAR | \
++          CPU_FTR_DABRX)
+ #define CPU_FTRS_POWER7 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
+           CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_206 |\
+           CPU_FTR_MMCRA | CPU_FTR_SMT | \
+@@ -412,7 +414,7 @@ extern const char *powerpc_base_platform
+           CPU_FTR_DSCR | CPU_FTR_SAO  | CPU_FTR_ASYM_SMT | \
+           CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \
+           CPU_FTR_ICSWX | CPU_FTR_CFAR | CPU_FTR_HVMODE | \
+-          CPU_FTR_VMX_COPY | CPU_FTR_HAS_PPR)
++          CPU_FTR_VMX_COPY | CPU_FTR_HAS_PPR | CPU_FTR_DABRX)
+ #define CPU_FTRS_POWER8 (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
+           CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | CPU_FTR_ARCH_206 |\
+           CPU_FTR_MMCRA | CPU_FTR_SMT | \
+@@ -427,14 +429,15 @@ extern const char *powerpc_base_platform
+           CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
+           CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \
+           CPU_FTR_PAUSE_ZERO  | CPU_FTR_CELL_TB_BUG | CPU_FTR_CP_USE_DCBTZ | \
+-          CPU_FTR_UNALIGNED_LD_STD)
++          CPU_FTR_UNALIGNED_LD_STD | CPU_FTR_DABRX)
+ #define CPU_FTRS_PA6T (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
+           CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_ALTIVEC_COMP | \
+-          CPU_FTR_PURR | CPU_FTR_REAL_LE)
++          CPU_FTR_PURR | CPU_FTR_REAL_LE | CPU_FTR_DABRX)
+ #define CPU_FTRS_COMPATIBLE   (CPU_FTR_USE_TB | CPU_FTR_PPCAS_ARCH_V2)
+ #define CPU_FTRS_A2 (CPU_FTR_USE_TB | CPU_FTR_SMT | CPU_FTR_DBELL | \
+-                   CPU_FTR_NOEXECUTE | CPU_FTR_NODSISRALIGN | CPU_FTR_ICSWX)
++                   CPU_FTR_NOEXECUTE | CPU_FTR_NODSISRALIGN | \
++                   CPU_FTR_ICSWX | CPU_FTR_DABRX )
+ #ifdef __powerpc64__
+ #ifdef CONFIG_PPC_BOOK3E
+--- a/arch/powerpc/kernel/process.c
++++ b/arch/powerpc/kernel/process.c
+@@ -392,7 +392,8 @@ static inline int __set_dabr(unsigned lo
+ static inline int __set_dabr(unsigned long dabr, unsigned long dabrx)
+ {
+       mtspr(SPRN_DABR, dabr);
+-      mtspr(SPRN_DABRX, dabrx);
++      if (cpu_has_feature(CPU_FTR_DABRX))
++              mtspr(SPRN_DABRX, dabrx);
+       return 0;
+ }
+ #else
diff --git a/queue-3.9/powerpc-perf-fix-deadlock-caused-by-calling-printk-in-pmu-exception.patch b/queue-3.9/powerpc-perf-fix-deadlock-caused-by-calling-printk-in-pmu-exception.patch
new file mode 100644 (file)
index 0000000..6a0d92e
--- /dev/null
@@ -0,0 +1,55 @@
+From 6772faa1ba22eba18d087c2459030a683b65be57 Mon Sep 17 00:00:00 2001
+From: Michael Ellerman <michael@ellerman.id.au>
+Date: Wed, 5 Jun 2013 17:58:20 +0000
+Subject: powerpc/perf: Fix deadlock caused by calling printk() in PMU exception
+
+From: Michael Ellerman <michael@ellerman.id.au>
+
+commit 6772faa1ba22eba18d087c2459030a683b65be57 upstream.
+
+In commit bc09c21 "Fix finding overflowed PMC in interrupt" we added
+a printk() to the PMU exception handler. Unfortunately that is not safe.
+
+The problem is that the PMU exception may run even when interrupts are
+soft disabled, aka NMI context. We do this so that we can profile parts
+of the kernel that have interrupts soft-disabled.
+
+But by calling printk() from the exception handler, we can potentially
+deadlock in the printk code on logbuf_lock, eg:
+
+  [c00000038ba575c0] c000000000081928 .vprintk_emit+0xa8/0x540
+  [c00000038ba576a0] c0000000007bcde8 .printk+0x48/0x58
+  [c00000038ba57710] c000000000076504 .perf_event_interrupt+0x2d4/0x490
+  [c00000038ba57810] c00000000001f6f8 .performance_monitor_exception+0x48/0x60
+  [c00000038ba57880] c0000000000032cc performance_monitor_common+0x14c/0x180
+  --- Exception: f01 (Performance Monitor) at c0000000007b25d4 ._raw_spin_lock_irq
+  +0x64/0xc0
+  [c00000038ba57bf0] c00000000007ed90 .devkmsg_read+0xd0/0x5a0
+  [c00000038ba57d00] c0000000001c2934 .vfs_read+0xc4/0x1e0
+  [c00000038ba57d90] c0000000001c2cd8 .SyS_read+0x58/0xd0
+  [c00000038ba57e30] c000000000009d54 syscall_exit+0x0/0x98
+  --- Exception: c01 (System Call) at 00001fffffbf6f7c
+  SP (3ffff6d4de10) is in userspace
+
+Fix it by making sure we only call printk() when we are not in NMI
+context.
+
+Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
+Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/powerpc/perf/core-book3s.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/powerpc/perf/core-book3s.c
++++ b/arch/powerpc/perf/core-book3s.c
+@@ -1528,7 +1528,7 @@ static void perf_event_interrupt(struct
+                       }
+               }
+       }
+-      if ((!found) && printk_ratelimit())
++      if (!found && !nmi && printk_ratelimit())
+               printk(KERN_WARNING "Can't find PMC that caused IRQ\n");
+       /*
diff --git a/queue-3.9/radeon-fix-system-hang-issue-when-using-kms-with-older-cards.patch b/queue-3.9/radeon-fix-system-hang-issue-when-using-kms-with-older-cards.patch
new file mode 100644 (file)
index 0000000..8029e01
--- /dev/null
@@ -0,0 +1,395 @@
+From e49f3959a96dc279860af7e86e6dbcfda50580a5 Mon Sep 17 00:00:00 2001
+From: Adis Hamzić <adis@hamzadis.com>
+Date: Sun, 2 Jun 2013 16:47:54 +0200
+Subject: radeon: Fix system hang issue when using KMS with older cards
+
+From: Adis Hamzić <adis@hamzadis.com>
+
+commit e49f3959a96dc279860af7e86e6dbcfda50580a5 upstream.
+
+The current radeon driver initialization routines, when using KMS, are written
+so that the IRQ installation routine is called before initializing the WB buffer
+and the CP rings. With some ASICs, though, the IRQ routine tries to access the
+GFX_INDEX ring causing a call to RREG32 with the value of -1 in
+radeon_fence_read. This, in turn causes the system to completely hang with some
+cards, requiring a hard reset.
+
+A call stack that can cause such a hang looks like this (using rv515 ASIC for the
+example here):
+ * rv515_init (rv515.c)
+ * radeon_irq_kms_init (radeon_irq_kms.c)
+ * drm_irq_install (drm_irq.c)
+ * radeon_driver_irq_preinstall_kms (radeon_irq_kms.c)
+ * rs600_irq_process (rs600.c)
+ * radeon_fence_process - due to SW interrupt (radeon_fence.c)
+ * radeon_fence_read (radeon_fence.c)
+ * hang due to RREG32(-1)
+
+The patch moves the IRQ installation to the card startup routine, after the ring
+has been initialized, but before the IRQ has been set. This fixes the issue, but
+requires a check to see if the IRQ is already installed, as is the case in the
+system resume codepath.
+I have tested the patch on three machines using the rv515, the rv770 and the
+evergreen ASIC. They worked without issues.
+
+This seems to be a known issue and has been reported on several bug tracking
+sites by various distributions (see links below). Most of reports recommend
+booting the system with KMS disabled and then enabling KMS by reloading the
+radeon module. For some reason, this was indeed a usable workaround, however,
+UMS is now deprecated and disabled by default.
+
+Bug reports:
+https://bugzilla.redhat.com/show_bug.cgi?id=845745
+https://bugs.launchpad.net/ubuntu/+source/linux/+bug/561789
+https://bbs.archlinux.org/viewtopic.php?id=156964
+
+Signed-off-by: Adis Hamzić <adis@hamzadis.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+
+---
+ drivers/gpu/drm/radeon/evergreen.c |   10 ++++++----
+ drivers/gpu/drm/radeon/ni.c        |   10 ++++++----
+ drivers/gpu/drm/radeon/r100.c      |    9 ++++++---
+ drivers/gpu/drm/radeon/r300.c      |    9 ++++++---
+ drivers/gpu/drm/radeon/r420.c      |   10 ++++++----
+ drivers/gpu/drm/radeon/r520.c      |    9 ++++++---
+ drivers/gpu/drm/radeon/r600.c      |   10 ++++++----
+ drivers/gpu/drm/radeon/rs400.c     |    9 ++++++---
+ drivers/gpu/drm/radeon/rs600.c     |    9 ++++++---
+ drivers/gpu/drm/radeon/rs690.c     |    9 ++++++---
+ drivers/gpu/drm/radeon/rv515.c     |    9 ++++++---
+ drivers/gpu/drm/radeon/rv770.c     |   10 ++++++----
+ drivers/gpu/drm/radeon/si.c        |   10 ++++++----
+ 13 files changed, 78 insertions(+), 45 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/evergreen.c
++++ b/drivers/gpu/drm/radeon/evergreen.c
+@@ -3728,6 +3728,12 @@ static int evergreen_startup(struct rade
+       }
+       /* Enable IRQ */
++      if (!rdev->irq.installed) {
++              r = radeon_irq_kms_init(rdev);
++              if (r)
++                      return r;
++      }
++
+       r = r600_irq_init(rdev);
+       if (r) {
+               DRM_ERROR("radeon: IH init failed (%d).\n", r);
+@@ -3876,10 +3882,6 @@ int evergreen_init(struct radeon_device
+       if (r)
+               return r;
+-      r = radeon_irq_kms_init(rdev);
+-      if (r)
+-              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
+@@ -1711,6 +1711,12 @@ static int cayman_startup(struct radeon_
+       }
+       /* Enable IRQ */
++      if (!rdev->irq.installed) {
++              r = radeon_irq_kms_init(rdev);
++              if (r)
++                      return r;
++      }
++
+       r = r600_irq_init(rdev);
+       if (r) {
+               DRM_ERROR("radeon: IH init failed (%d).\n", r);
+@@ -1857,10 +1863,6 @@ int cayman_init(struct radeon_device *rd
+       if (r)
+               return r;
+-      r = radeon_irq_kms_init(rdev);
+-      if (r)
+-              return r;
+-
+       ring->ring_obj = NULL;
+       r600_ring_init(rdev, ring, 1024 * 1024);
+--- a/drivers/gpu/drm/radeon/r100.c
++++ b/drivers/gpu/drm/radeon/r100.c
+@@ -3869,6 +3869,12 @@ static int r100_startup(struct radeon_de
+       }
+       /* Enable IRQ */
++      if (!rdev->irq.installed) {
++              r = radeon_irq_kms_init(rdev);
++              if (r)
++                      return r;
++      }
++
+       r100_irq_set(rdev);
+       rdev->config.r100.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
+       /* 1M ring buffer */
+@@ -4024,9 +4030,6 @@ int r100_init(struct radeon_device *rdev
+       r = radeon_fence_driver_init(rdev);
+       if (r)
+               return r;
+-      r = radeon_irq_kms_init(rdev);
+-      if (r)
+-              return r;
+       /* Memory manager */
+       r = radeon_bo_init(rdev);
+       if (r)
+--- a/drivers/gpu/drm/radeon/r300.c
++++ b/drivers/gpu/drm/radeon/r300.c
+@@ -1382,6 +1382,12 @@ static int r300_startup(struct radeon_de
+       }
+       /* Enable IRQ */
++      if (!rdev->irq.installed) {
++              r = radeon_irq_kms_init(rdev);
++              if (r)
++                      return r;
++      }
++
+       r100_irq_set(rdev);
+       rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
+       /* 1M ring buffer */
+@@ -1516,9 +1522,6 @@ int r300_init(struct radeon_device *rdev
+       r = radeon_fence_driver_init(rdev);
+       if (r)
+               return r;
+-      r = radeon_irq_kms_init(rdev);
+-      if (r)
+-              return r;
+       /* Memory manager */
+       r = radeon_bo_init(rdev);
+       if (r)
+--- a/drivers/gpu/drm/radeon/r420.c
++++ b/drivers/gpu/drm/radeon/r420.c
+@@ -265,6 +265,12 @@ static int r420_startup(struct radeon_de
+       }
+       /* Enable IRQ */
++      if (!rdev->irq.installed) {
++              r = radeon_irq_kms_init(rdev);
++              if (r)
++                      return r;
++      }
++
+       r100_irq_set(rdev);
+       rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
+       /* 1M ring buffer */
+@@ -411,10 +417,6 @@ int r420_init(struct radeon_device *rdev
+       if (r) {
+               return r;
+       }
+-      r = radeon_irq_kms_init(rdev);
+-      if (r) {
+-              return r;
+-      }
+       /* Memory manager */
+       r = radeon_bo_init(rdev);
+       if (r) {
+--- a/drivers/gpu/drm/radeon/r520.c
++++ b/drivers/gpu/drm/radeon/r520.c
+@@ -194,6 +194,12 @@ static int r520_startup(struct radeon_de
+       }
+       /* Enable IRQ */
++      if (!rdev->irq.installed) {
++              r = radeon_irq_kms_init(rdev);
++              if (r)
++                      return r;
++      }
++
+       rs600_irq_set(rdev);
+       rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
+       /* 1M ring buffer */
+@@ -297,9 +303,6 @@ int r520_init(struct radeon_device *rdev
+       r = radeon_fence_driver_init(rdev);
+       if (r)
+               return r;
+-      r = radeon_irq_kms_init(rdev);
+-      if (r)
+-              return r;
+       /* Memory manager */
+       r = radeon_bo_init(rdev);
+       if (r)
+--- a/drivers/gpu/drm/radeon/r600.c
++++ b/drivers/gpu/drm/radeon/r600.c
+@@ -2940,6 +2940,12 @@ static int r600_startup(struct radeon_de
+       }
+       /* Enable IRQ */
++      if (!rdev->irq.installed) {
++              r = radeon_irq_kms_init(rdev);
++              if (r)
++                      return r;
++      }
++
+       r = r600_irq_init(rdev);
+       if (r) {
+               DRM_ERROR("radeon: IH init failed (%d).\n", r);
+@@ -3094,10 +3100,6 @@ int r600_init(struct radeon_device *rdev
+       if (r)
+               return r;
+-      r = radeon_irq_kms_init(rdev);
+-      if (r)
+-              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/rs400.c
++++ b/drivers/gpu/drm/radeon/rs400.c
+@@ -417,6 +417,12 @@ static int rs400_startup(struct radeon_d
+       }
+       /* Enable IRQ */
++      if (!rdev->irq.installed) {
++              r = radeon_irq_kms_init(rdev);
++              if (r)
++                      return r;
++      }
++
+       r100_irq_set(rdev);
+       rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
+       /* 1M ring buffer */
+@@ -535,9 +541,6 @@ int rs400_init(struct radeon_device *rde
+       r = radeon_fence_driver_init(rdev);
+       if (r)
+               return r;
+-      r = radeon_irq_kms_init(rdev);
+-      if (r)
+-              return r;
+       /* Memory manager */
+       r = radeon_bo_init(rdev);
+       if (r)
+--- a/drivers/gpu/drm/radeon/rs600.c
++++ b/drivers/gpu/drm/radeon/rs600.c
+@@ -923,6 +923,12 @@ static int rs600_startup(struct radeon_d
+       }
+       /* Enable IRQ */
++      if (!rdev->irq.installed) {
++              r = radeon_irq_kms_init(rdev);
++              if (r)
++                      return r;
++      }
++
+       rs600_irq_set(rdev);
+       rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
+       /* 1M ring buffer */
+@@ -1047,9 +1053,6 @@ int rs600_init(struct radeon_device *rde
+       r = radeon_fence_driver_init(rdev);
+       if (r)
+               return r;
+-      r = radeon_irq_kms_init(rdev);
+-      if (r)
+-              return r;
+       /* Memory manager */
+       r = radeon_bo_init(rdev);
+       if (r)
+--- a/drivers/gpu/drm/radeon/rs690.c
++++ b/drivers/gpu/drm/radeon/rs690.c
+@@ -628,6 +628,12 @@ static int rs690_startup(struct radeon_d
+       }
+       /* Enable IRQ */
++      if (!rdev->irq.installed) {
++              r = radeon_irq_kms_init(rdev);
++              if (r)
++                      return r;
++      }
++
+       rs600_irq_set(rdev);
+       rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
+       /* 1M ring buffer */
+@@ -753,9 +759,6 @@ int rs690_init(struct radeon_device *rde
+       r = radeon_fence_driver_init(rdev);
+       if (r)
+               return r;
+-      r = radeon_irq_kms_init(rdev);
+-      if (r)
+-              return r;
+       /* Memory manager */
+       r = radeon_bo_init(rdev);
+       if (r)
+--- a/drivers/gpu/drm/radeon/rv515.c
++++ b/drivers/gpu/drm/radeon/rv515.c
+@@ -532,6 +532,12 @@ static int rv515_startup(struct radeon_d
+       }
+       /* Enable IRQ */
++      if (!rdev->irq.installed) {
++              r = radeon_irq_kms_init(rdev);
++              if (r)
++                      return r;
++      }
++
+       rs600_irq_set(rdev);
+       rdev->config.r300.hdp_cntl = RREG32(RADEON_HOST_PATH_CNTL);
+       /* 1M ring buffer */
+@@ -662,9 +668,6 @@ int rv515_init(struct radeon_device *rde
+       r = radeon_fence_driver_init(rdev);
+       if (r)
+               return r;
+-      r = radeon_irq_kms_init(rdev);
+-      if (r)
+-              return r;
+       /* Memory manager */
+       r = radeon_bo_init(rdev);
+       if (r)
+--- a/drivers/gpu/drm/radeon/rv770.c
++++ b/drivers/gpu/drm/radeon/rv770.c
+@@ -1041,6 +1041,12 @@ static int rv770_startup(struct radeon_d
+       }
+       /* Enable IRQ */
++      if (!rdev->irq.installed) {
++              r = radeon_irq_kms_init(rdev);
++              if (r)
++                      return r;
++      }
++
+       r = r600_irq_init(rdev);
+       if (r) {
+               DRM_ERROR("radeon: IH init failed (%d).\n", r);
+@@ -1180,10 +1186,6 @@ int rv770_init(struct radeon_device *rde
+       if (r)
+               return r;
+-      r = radeon_irq_kms_init(rdev);
+-      if (r)
+-              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
+@@ -4374,6 +4374,12 @@ static int si_startup(struct radeon_devi
+       }
+       /* Enable IRQ */
++      if (!rdev->irq.installed) {
++              r = radeon_irq_kms_init(rdev);
++              if (r)
++                      return r;
++      }
++
+       r = si_irq_init(rdev);
+       if (r) {
+               DRM_ERROR("radeon: IH init failed (%d).\n", r);
+@@ -4534,10 +4540,6 @@ int si_init(struct radeon_device *rdev)
+       if (r)
+               return r;
+-      r = radeon_irq_kms_init(rdev);
+-      if (r)
+-              return r;
+-
+       ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX];
+       ring->ring_obj = NULL;
+       r600_ring_init(rdev, ring, 1024 * 1024);
index b27201ad471ccc633349aa6bfa0993bd3591c2d2..62582402a7dc7cf439b32e80140f7c3e77f25f7b 100644 (file)
@@ -35,3 +35,13 @@ alsa-hda-via-disable-broken-dynamic-power-control.patch
 alsa-hda-via-fix-wrongly-cleared-pins-after-suspend-on.patch
 alsa-hda-allow-setting-automute-automic-hooks-after-parsing.patch
 alsa-hda-add-keep_eapd_on-flag-to-generic-parser.patch
+arm-kirkwood-ts219-fix-crash-by-double-pcie-instantiation.patch
+arm-7742-1-topology-export-cpu_topology.patch
+arm-7743-1-compressed-head.s-work-around-new-binutils-warning.patch
+arm-7747-1-pcpu-ensure-__my_cpu_offset-cannot-be-re-ordered-across-barrier.patch
+powerpc-eeh-don-t-check-rtas-token-to-get-pe-addr.patch
+powerpc-hw_breakpoints-add-dabrx-cpu-feature-to-fix-32-bit-regression.patch
+powerpc-perf-fix-deadlock-caused-by-calling-printk-in-pmu-exception.patch
+dmaengine-ste_dma40-fix-pm-runtime-ref-counting.patch
+radeon-fix-system-hang-issue-when-using-kms-with-older-cards.patch
+drm-radeon-don-t-allow-audio-on-dce6.patch