fsl/mpic: Create and document the "single-cpu-affinity" device-tree flag
authorKyle Moffett <Kyle.D.Moffett@boeing.com>
Thu, 22 Dec 2011 10:19:11 +0000 (10:19 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 22 Feb 2012 23:49:59 +0000 (10:49 +1100)
The Freescale MPIC (and perhaps others in the future) is incapable of
routing non-IPI interrupts to more than once CPU at a time.  Currently
all of the Freescale boards msut pass the MPIC_SINGLE_DEST_CPU flag to
mpic_alloc(), but that information should really be present in the
device-tree.

Older board code can't rely on the device-tree having the property set,
but newer platforms won't need it manually specified in the code.

[BenH: Remove unrelated changes, folded in a different patch]

Signed-off-by: Kyle Moffett <Kyle.D.Moffett@boeing.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Documentation/devicetree/bindings/powerpc/fsl/mpic.txt
arch/powerpc/boot/dts/fsl/pq3-mpic.dtsi
arch/powerpc/sysdev/mpic.c

index ebafba29fc5f84799f1c88adcd23b8221024255b..b393ccf1e9f302cd8f8e965b74ad2bad8ab005d5 100644 (file)
@@ -64,6 +64,12 @@ PROPERTIES
           device-trees omit this property on MPIC nodes even when the MPIC is
           in fact big-endian, so certain boards override this property.
 
+  - single-cpu-affinity
+      Usage: optional
+      Value type: <empty>
+          If present the MPIC will be assumed to only be able to route
+          non-IPI interrupts to a single CPU at a time (EG: Freescale MPIC).
+
 INTERRUPT SPECIFIER DEFINITION
 
   Interrupt specifiers consists of 4 cells encoded as
index 47f2b676bc7d1b65d03237cbfe1a6639a0481312..658bd81982cbb05b5722648925f316532b1825d5 100644 (file)
@@ -40,6 +40,7 @@ mpic: pic@40000 {
        compatible = "fsl,mpic";
        device_type = "open-pic";
        big-endian;
+       single-cpu-affinity;
 };
 
 timer@41100 {
index 9deec44ede83064a1a80ae51b745c39efed4ab26..c297a524f7612c90557ed9b701d672a09f5f2823 100644 (file)
@@ -1187,6 +1187,8 @@ struct mpic * __init mpic_alloc(struct device_node *node,
                flags |= MPIC_BIG_ENDIAN;
        if (of_get_property(node, "pic-no-reset", NULL))
                flags |= MPIC_NO_RESET;
+       if (of_get_property(node, "single-cpu-affinity", NULL))
+               flags |= MPIC_SINGLE_DEST_CPU;
        if (of_device_is_compatible(node, "fsl,mpic"))
                flags |= MPIC_FSL;