Commit 2c899658 authored by Marc Zyngier's avatar Marc Zyngier
Browse files

powerpc: Bulk conversion to generic_handle_domain_irq()



Wherever possible, replace constructs that match either
generic_handle_irq(irq_find_mapping()) or
generic_handle_irq(irq_linear_revmap()) to a single call to
generic_handle_domain_irq().

Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
parent 153517d4
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -198,7 +198,6 @@ static void uic_irq_cascade(struct irq_desc *desc)
	struct uic *uic = irq_desc_get_handler_data(desc);
	u32 msr;
	int src;
	int subvirq;

	raw_spin_lock(&desc->lock);
	if (irqd_is_level_type(idata))
@@ -213,8 +212,7 @@ static void uic_irq_cascade(struct irq_desc *desc)

	src = 32 - ffs(msr);

	subvirq = irq_linear_revmap(uic->irqhost, src);
	generic_handle_irq(subvirq);
	generic_handle_domain_irq(uic->irqhost, src);

uic_irq_ret:
	raw_spin_lock(&desc->lock);
+10 −13
Original line number Diff line number Diff line
@@ -81,11 +81,10 @@ static struct irq_chip cpld_pic = {
	.irq_unmask = cpld_unmask_irq,
};

static int
static unsigned int
cpld_pic_get_irq(int offset, u8 ignore, u8 __iomem *statusp,
			    u8 __iomem *maskp)
{
	int cpld_irq;
	u8 status = in_8(statusp);
	u8 mask = in_8(maskp);

@@ -93,28 +92,26 @@ cpld_pic_get_irq(int offset, u8 ignore, u8 __iomem *statusp,
	status |= (ignore | mask);

	if (status == 0xff)
		return 0;

	cpld_irq = ffz(status) + offset;
		return ~0;

	return irq_linear_revmap(cpld_pic_host, cpld_irq);
	return ffz(status) + offset;
}

static void cpld_pic_cascade(struct irq_desc *desc)
{
	unsigned int irq;
	unsigned int hwirq;

	irq = cpld_pic_get_irq(0, PCI_IGNORE, &cpld_regs->pci_status,
	hwirq = cpld_pic_get_irq(0, PCI_IGNORE, &cpld_regs->pci_status,
		&cpld_regs->pci_mask);
	if (irq) {
		generic_handle_irq(irq);
	if (hwirq != ~0) {
		generic_handle_domain_irq(cpld_pic_host, hwirq);
		return;
	}

	irq = cpld_pic_get_irq(8, MISC_IGNORE, &cpld_regs->misc_status,
	hwirq = cpld_pic_get_irq(8, MISC_IGNORE, &cpld_regs->misc_status,
		&cpld_regs->misc_mask);
	if (irq) {
		generic_handle_irq(irq);
	if (hwirq != ~0) {
		generic_handle_domain_irq(cpld_pic_host, hwirq);
		return;
	}
}
+4 −5
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ static struct irq_chip media5200_irq_chip = {
static void media5200_irq_cascade(struct irq_desc *desc)
{
	struct irq_chip *chip = irq_desc_get_chip(desc);
	int sub_virq, val;
	int val;
	u32 status, enable;

	/* Mask off the cascaded IRQ */
@@ -92,11 +92,10 @@ static void media5200_irq_cascade(struct irq_desc *desc)
	enable = in_be32(media5200_irq.regs + MEDIA5200_IRQ_STATUS);
	val = ffs((status & enable) >> MEDIA5200_IRQ_SHIFT);
	if (val) {
		sub_virq = irq_linear_revmap(media5200_irq.irqhost, val - 1);
		/* pr_debug("%s: virq=%i s=%.8x e=%.8x hwirq=%i subvirq=%i\n",
		 *          __func__, virq, status, enable, val - 1, sub_virq);
		generic_handle_domain_irq(media5200_irq.irqhost, val - 1);
		/* pr_debug("%s: virq=%i s=%.8x e=%.8x hwirq=%i\n",
		 *          __func__, virq, status, enable, val - 1);
		 */
		generic_handle_irq(sub_virq);
	}

	/* Processing done; can reenable the cascade now */
+2 −5
Original line number Diff line number Diff line
@@ -190,14 +190,11 @@ static struct irq_chip mpc52xx_gpt_irq_chip = {
static void mpc52xx_gpt_irq_cascade(struct irq_desc *desc)
{
	struct mpc52xx_gpt_priv *gpt = irq_desc_get_handler_data(desc);
	int sub_virq;
	u32 status;

	status = in_be32(&gpt->regs->status) & MPC52xx_GPT_STATUS_IRQMASK;
	if (status) {
		sub_virq = irq_linear_revmap(gpt->irqhost, 0);
		generic_handle_irq(sub_virq);
	}
	if (status)
		generic_handle_domain_irq(gpt->irqhost, 0);
}

static int mpc52xx_gpt_irq_map(struct irq_domain *h, unsigned int virq,
+2 −4
Original line number Diff line number Diff line
@@ -91,10 +91,8 @@ static void pq2ads_pci_irq_demux(struct irq_desc *desc)
			break;

		for (bit = 0; pend != 0; ++bit, pend <<= 1) {
			if (pend & 0x80000000) {
				int virq = irq_linear_revmap(priv->host, bit);
				generic_handle_irq(virq);
			}
			if (pend & 0x80000000)
				generic_handle_domain_irq(priv->host, bit);
		}
	}
}
Loading