ARM: i.MX: Fix FIQ interrupt handling for TZIC
IRQ number should be translated from VIRQ to HWIRQ for TZIC. As a solution for this issue, move existing translation code from AVIC to common place. Signed-off-by: Alexander Shiyan <shc_work@mail.ru> Signed-off-by: Shawn Guo <shawnguo@kernel.org>
This commit is contained in:

کامیت شده توسط
Shawn Guo

والد
4dbc39e98b
کامیت
d1e1c31ccd
@@ -55,23 +55,20 @@ static void __iomem *avic_base;
|
||||
static struct irq_domain *domain;
|
||||
|
||||
#ifdef CONFIG_FIQ
|
||||
static int avic_set_irq_fiq(unsigned int irq, unsigned int type)
|
||||
static int avic_set_irq_fiq(unsigned int hwirq, unsigned int type)
|
||||
{
|
||||
struct irq_data *d = irq_get_irq_data(irq);
|
||||
unsigned int irqt;
|
||||
|
||||
irq = d->hwirq;
|
||||
|
||||
if (irq >= AVIC_NUM_IRQS)
|
||||
if (hwirq >= AVIC_NUM_IRQS)
|
||||
return -EINVAL;
|
||||
|
||||
if (irq < AVIC_NUM_IRQS / 2) {
|
||||
irqt = imx_readl(avic_base + AVIC_INTTYPEL) & ~(1 << irq);
|
||||
imx_writel(irqt | (!!type << irq), avic_base + AVIC_INTTYPEL);
|
||||
if (hwirq < AVIC_NUM_IRQS / 2) {
|
||||
irqt = imx_readl(avic_base + AVIC_INTTYPEL) & ~(1 << hwirq);
|
||||
imx_writel(irqt | (!!type << hwirq), avic_base + AVIC_INTTYPEL);
|
||||
} else {
|
||||
irq -= AVIC_NUM_IRQS / 2;
|
||||
irqt = imx_readl(avic_base + AVIC_INTTYPEH) & ~(1 << irq);
|
||||
imx_writel(irqt | (!!type << irq), avic_base + AVIC_INTTYPEH);
|
||||
hwirq -= AVIC_NUM_IRQS / 2;
|
||||
irqt = imx_readl(avic_base + AVIC_INTTYPEH) & ~(1 << hwirq);
|
||||
imx_writel(irqt | (!!type << hwirq), avic_base + AVIC_INTTYPEH);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
مرجع در شماره جدید
Block a user