mirror of
https://github.com/DigitalDevices/dddvb.git
synced 2023-10-10 13:37:43 +02:00
MSI fixes
- ack only the status bits belonging to corresponding interrupt handler - set msi 2 instead of 1
This commit is contained in:
parent
c4133d98c1
commit
0b4d6d807a
@ -3217,11 +3217,11 @@ static irqreturn_t irq_handler0(int irq, void *dev_id)
|
|||||||
u32 s = ddbreadl(dev, INTERRUPT_STATUS);
|
u32 s = ddbreadl(dev, INTERRUPT_STATUS);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
if (s == 0xffffffff)
|
if (s & 0x80000000)
|
||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
if (!(s & 0xfff00))
|
if (!(s & 0xfff00))
|
||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
ddbwritel(dev, s, INTERRUPT_ACK);
|
ddbwritel(dev, s & 0xfff00, INTERRUPT_ACK);
|
||||||
irq_handle_io(dev, s);
|
irq_handle_io(dev, s);
|
||||||
} while ((s = ddbreadl(dev, INTERRUPT_STATUS)));
|
} while ((s = ddbreadl(dev, INTERRUPT_STATUS)));
|
||||||
|
|
||||||
@ -3238,7 +3238,7 @@ static irqreturn_t irq_handler1(int irq, void *dev_id)
|
|||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
if (!(s & 0x0000f))
|
if (!(s & 0x0000f))
|
||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
ddbwritel(dev, s, INTERRUPT_ACK);
|
ddbwritel(dev, s & 0x0000f, INTERRUPT_ACK);
|
||||||
irq_handle_msg(dev, s);
|
irq_handle_msg(dev, s);
|
||||||
} while ((s = ddbreadl(dev, INTERRUPT_STATUS)));
|
} while ((s = ddbreadl(dev, INTERRUPT_STATUS)));
|
||||||
|
|
||||||
|
@ -175,7 +175,7 @@ static int __devinit ddb_probe(struct pci_dev *pdev,
|
|||||||
#else
|
#else
|
||||||
stat = pci_enable_msi_block(dev->pdev, 2);
|
stat = pci_enable_msi_block(dev->pdev, 2);
|
||||||
if (stat == 0) {
|
if (stat == 0) {
|
||||||
dev->msi = 1;
|
dev->msi = 2;
|
||||||
pr_info("DDBridge: using 2 MSI interrupts\n");
|
pr_info("DDBridge: using 2 MSI interrupts\n");
|
||||||
}
|
}
|
||||||
if (stat == 1)
|
if (stat == 1)
|
||||||
|
Loading…
Reference in New Issue
Block a user