Skip to content

Commit

Permalink
irqchip/mips-gic: Add new DT property to reserve IPIs
Browse files Browse the repository at this point in the history
The new property will allow to specify the range of GIC hwirqs to use for IPIs.

This is an optinal property. We preserve the previous behaviour of allocating
the last 2 * gic_vpes if it's not specified or DT is not supported.

Signed-off-by: Qais Yousef <qais.yousef@imgtec.com>
Acked-by: Rob Herring <robh@kernel.org>
Acked-by: Ralf Baechle <ralf@linux-mips.org>
Cc: <jason@lakedaemon.net>
Cc: <marc.zyngier@arm.com>
Cc: <jiang.liu@linux.intel.com>
Cc: <linux-mips@linux-mips.org>
Cc: <lisa.parratt@imgtec.com>
Cc: Qais Yousef <qsyousef@gmail.com>
Link: http://lkml.kernel.org/r/1449580830-23652-20-git-send-email-qais.yousef@imgtec.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
  • Loading branch information
Qais Yousef authored and Thomas Gleixner committed Feb 25, 2016
1 parent 7eb8c99 commit 16a8083
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@ Optional properties:
- mti,reserved-cpu-vectors : Specifies the list of CPU interrupt vectors
to which the GIC may not route interrupts. Valid values are 2 - 7.
This property is ignored if the CPU is started in EIC mode.
- mti,reserved-ipi-vectors : Specifies the range of GIC interrupts that are
reserved for IPIs.
It accepts 2 values, the 1st is the starting interrupt and the 2nd is the size
of the reserved range.
If not specified, the driver will allocate the last 2 * number of VPEs in the
system.

Required properties for timer sub-node:
- compatible : Should be "mti,gic-timer".
Expand All @@ -44,6 +50,7 @@ Example:
#interrupt-cells = <3>;

mti,reserved-cpu-vectors = <7>;
mti,reserved-ipi-vectors = <40 8>;

timer {
compatible = "mti,gic-timer";
Expand Down
12 changes: 10 additions & 2 deletions drivers/irqchip/irq-mips-gic.c
Original file line number Diff line number Diff line change
Expand Up @@ -957,6 +957,7 @@ static void __init __gic_init(unsigned long gic_base_addr,
struct device_node *node)
{
unsigned int gicconfig;
unsigned int v[2];

__gic_base_addr = gic_base_addr;

Expand Down Expand Up @@ -1027,8 +1028,15 @@ static void __init __gic_init(unsigned long gic_base_addr,

gic_ipi_domain->bus_token = DOMAIN_BUS_IPI;

/* Make the last 2 * gic_vpes available for IPIs */
bitmap_set(ipi_resrv, gic_shared_intrs - 2 * gic_vpes, 2 * gic_vpes);
if (node &&
!of_property_read_u32_array(node, "mti,reserved-ipi-vectors", v, 2)) {
bitmap_set(ipi_resrv, v[0], v[1]);
} else {
/* Make the last 2 * gic_vpes available for IPIs */
bitmap_set(ipi_resrv,
gic_shared_intrs - 2 * gic_vpes,
2 * gic_vpes);
}

gic_basic_init();
}
Expand Down

0 comments on commit 16a8083

Please sign in to comment.