Skip to content

Commit

Permalink
irqchip/gic-v3: Implement gic_ipi_send_single()
Browse files Browse the repository at this point in the history
We implement gic_ipi_send_single() to make single ipi injection
easier.

Signed-off-by: Jingyi Wang <wangjingyi11@huawei.com>
  • Loading branch information
Jingyi Wang authored and intel-lab-lkp committed Mar 29, 2021
1 parent d64aa43 commit 3866bb7
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions drivers/irqchip/irq-gic-v3.c
Original file line number Diff line number Diff line change
Expand Up @@ -1124,6 +1124,26 @@ static void gic_send_sgi(u64 cluster_id, u16 tlist, unsigned int irq)
gic_write_sgi1r(val);
}

static void gic_ipi_send_single(struct irq_data *d, unsigned int cpu)
{
unsigned long mpidr;
u64 cluster_id;
u16 tlist;

if (WARN_ON(d->hwirq >= 16))
return;

wmb();

mpidr = cpu_logical_map(cpu);
cluster_id = MPIDR_TO_SGI_CLUSTER_ID(mpidr);
tlist = 1 << (mpidr & 0xf);

gic_send_sgi(cluster_id, tlist, d->hwirq);

isb();
}

static void gic_ipi_send_mask(struct irq_data *d, const struct cpumask *mask)
{
int cpu;
Expand Down Expand Up @@ -1279,6 +1299,7 @@ static struct irq_chip gic_chip = {
.irq_nmi_setup = gic_irq_nmi_setup,
.irq_nmi_teardown = gic_irq_nmi_teardown,
.ipi_send_mask = gic_ipi_send_mask,
.ipi_send_single = gic_ipi_send_single,
.flags = IRQCHIP_SET_TYPE_MASKED |
IRQCHIP_SKIP_SET_WAKE |
IRQCHIP_MASK_ON_SUSPEND,
Expand All @@ -1298,6 +1319,7 @@ static struct irq_chip gic_eoimode1_chip = {
.irq_nmi_setup = gic_irq_nmi_setup,
.irq_nmi_teardown = gic_irq_nmi_teardown,
.ipi_send_mask = gic_ipi_send_mask,
.ipi_send_single = gic_ipi_send_single,
.flags = IRQCHIP_SET_TYPE_MASKED |
IRQCHIP_SKIP_SET_WAKE |
IRQCHIP_MASK_ON_SUSPEND,
Expand Down

0 comments on commit 3866bb7

Please sign in to comment.