irqchip/gic-v3: Do not check trigger configuration of partitionned LPIs
authorMarc Zyngier <marc.zyngier@arm.com>
Tue, 20 Mar 2018 13:44:09 +0000 (13:44 +0000)
committerMarc Zyngier <marc.zyngier@arm.com>
Tue, 20 Mar 2018 19:12:15 +0000 (19:12 +0000)
We cannot know the trigger of partitionned PPIs ahead of time
(when we instanciate the partitions), so let's not check them
early.

Reported-by: JeffyChen <jeffy.chen@rock-chips.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
drivers/irqchip/irq-gic-v3.c

index 5bb7bb22f1c1931f80e8c243856285b4c6b21233..0d8e326ebf192ecd2a47298e9532c4f53a957c35 100644 (file)
@@ -892,6 +892,8 @@ static int gic_irq_domain_map(struct irq_domain *d, unsigned int irq,
        return 0;
 }
 
+#define GIC_IRQ_TYPE_PARTITION (GIC_IRQ_TYPE_LPI + 1)
+
 static int gic_irq_domain_translate(struct irq_domain *d,
                                    struct irq_fwspec *fwspec,
                                    unsigned long *hwirq,
@@ -906,6 +908,7 @@ static int gic_irq_domain_translate(struct irq_domain *d,
                        *hwirq = fwspec->param[1] + 32;
                        break;
                case 1:                 /* PPI */
+               case GIC_IRQ_TYPE_PARTITION:
                        *hwirq = fwspec->param[1] + 16;
                        break;
                case GIC_IRQ_TYPE_LPI:  /* LPI */
@@ -917,8 +920,12 @@ static int gic_irq_domain_translate(struct irq_domain *d,
 
                *type = fwspec->param[2] & IRQ_TYPE_SENSE_MASK;
 
-               /* Make it clear that broken DTs are... broken */
-               WARN_ON(*type == IRQ_TYPE_NONE);
+               /*
+                * Make it clear that broken DTs are... broken.
+                * Partitionned PPIs are an unfortunate exception.
+                */
+               WARN_ON(*type == IRQ_TYPE_NONE &&
+                       fwspec->param[0] != GIC_IRQ_TYPE_PARTITION);
                return 0;
        }
 
@@ -1176,7 +1183,7 @@ static void __init gic_populate_ppi_partitions(struct device_node *gic_node)
                        .fwnode         = gic_data.fwnode,
                        .param_count    = 3,
                        .param          = {
-                               [0]     = 1,
+                               [0]     = GIC_IRQ_TYPE_PARTITION,
                                [1]     = i,
                                [2]     = IRQ_TYPE_NONE,
                        },