Commit 17b77fc2 authored by Manu Abraham's avatar Manu Abraham Committed by Mauro Carvalho Chehab

V4L/DVB (13771): [Mantis] Reset Flags at the earliest possible

Signed-off-by: default avatarManu Abraham <manu@linuxtv.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent f668c729
...@@ -139,6 +139,8 @@ struct mantis_pci { ...@@ -139,6 +139,8 @@ struct mantis_pci {
/* A12 A13 A14 */ /* A12 A13 A14 */
u32 gpio_status; u32 gpio_status;
u32 gpif_status;
struct mantis_ca *mantis_ca; struct mantis_ca *mantis_ca;
}; };
......
...@@ -27,19 +27,11 @@ static void mantis_hifevm_work(struct work_struct *work) ...@@ -27,19 +27,11 @@ static void mantis_hifevm_work(struct work_struct *work)
struct mantis_ca *ca = container_of(work, struct mantis_ca, hif_evm_work); struct mantis_ca *ca = container_of(work, struct mantis_ca, hif_evm_work);
struct mantis_pci *mantis = ca->ca_priv; struct mantis_pci *mantis = ca->ca_priv;
u32 gpif_stat, gpif_mask, rst_mask, rst_stat; u32 gpif_stat, gpif_mask;
rst_mask = MANTIS_GPIF_WRACK |
MANTIS_GPIF_OTHERR |
MANTIS_SBUF_WSTO |
MANTIS_GPIF_EXTIRQ;
gpif_stat = mmread(MANTIS_GPIF_STATUS); gpif_stat = mmread(MANTIS_GPIF_STATUS);
gpif_mask = mmread(MANTIS_GPIF_IRQCFG); gpif_mask = mmread(MANTIS_GPIF_IRQCFG);
rst_stat = gpif_stat & rst_mask;
mmwrite(rst_stat, MANTIS_GPIF_STATUS);
if (gpif_stat & MANTIS_GPIF_DETSTAT) { if (gpif_stat & MANTIS_GPIF_DETSTAT) {
if (gpif_stat & MANTIS_CARD_PLUGIN) { if (gpif_stat & MANTIS_CARD_PLUGIN) {
dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Plugin", mantis->num); dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): CAM Plugin", mantis->num);
...@@ -60,13 +52,13 @@ static void mantis_hifevm_work(struct work_struct *work) ...@@ -60,13 +52,13 @@ static void mantis_hifevm_work(struct work_struct *work)
} }
} }
if (gpif_stat & MANTIS_GPIF_EXTIRQ) if (mantis->gpif_status & MANTIS_GPIF_EXTIRQ)
dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Ext IRQ", mantis->num); dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Ext IRQ", mantis->num);
if (gpif_stat & MANTIS_SBUF_WSTO) if (mantis->gpif_status & MANTIS_SBUF_WSTO)
dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Timeout", mantis->num); dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Timeout", mantis->num);
if (gpif_stat & MANTIS_GPIF_OTHERR) if (mantis->gpif_status & MANTIS_GPIF_OTHERR)
dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Alignment Error", mantis->num); dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Alignment Error", mantis->num);
if (gpif_stat & MANTIS_SBUF_OVFLW) if (gpif_stat & MANTIS_SBUF_OVFLW)
...@@ -75,7 +67,7 @@ static void mantis_hifevm_work(struct work_struct *work) ...@@ -75,7 +67,7 @@ static void mantis_hifevm_work(struct work_struct *work)
if (gpif_stat & MANTIS_GPIF_BRRDY) if (gpif_stat & MANTIS_GPIF_BRRDY)
dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Read Ready", mantis->num); dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Smart Buffer Read Ready", mantis->num);
if (gpif_stat & MANTIS_GPIF_WRACK) if (mantis->gpif_status & MANTIS_GPIF_WRACK)
dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Slave Write ACK", mantis->num); dprintk(verbose, MANTIS_DEBUG, 1, "Event Mgr: Adapter(%d) Slot(0): Slave Write ACK", mantis->num);
if (gpif_stat & MANTIS_GPIF_INTSTAT) if (gpif_stat & MANTIS_GPIF_INTSTAT)
......
...@@ -53,6 +53,8 @@ MODULE_DEVICE_TABLE(pci, mantis_pci_table); ...@@ -53,6 +53,8 @@ MODULE_DEVICE_TABLE(pci, mantis_pci_table);
static irqreturn_t mantis_pci_irq(int irq, void *dev_id) static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
{ {
u32 stat = 0, mask = 0, lstat = 0, mstat = 0; u32 stat = 0, mask = 0, lstat = 0, mstat = 0;
u32 rst_stat = 0, rst_mask = 0;
struct mantis_pci *mantis; struct mantis_pci *mantis;
struct mantis_ca *ca; struct mantis_ca *ca;
...@@ -69,6 +71,15 @@ static irqreturn_t mantis_pci_irq(int irq, void *dev_id) ...@@ -69,6 +71,15 @@ static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
if (!(stat & mask)) if (!(stat & mask))
return IRQ_NONE; return IRQ_NONE;
rst_mask = MANTIS_GPIF_WRACK |
MANTIS_GPIF_OTHERR |
MANTIS_SBUF_WSTO |
MANTIS_GPIF_EXTIRQ;
rst_stat = mmread(MANTIS_GPIF_STATUS);
rst_stat &= rst_mask;
mmwrite(rst_stat, MANTIS_GPIF_STATUS);
mantis->mantis_int_stat = stat; mantis->mantis_int_stat = stat;
mantis->mantis_int_mask = mask; mantis->mantis_int_mask = mask;
dprintk(verbose, MANTIS_DEBUG, 0, "=== Interrupts[%04x/%04x]= [", stat, mask); dprintk(verbose, MANTIS_DEBUG, 0, "=== Interrupts[%04x/%04x]= [", stat, mask);
...@@ -77,6 +88,7 @@ static irqreturn_t mantis_pci_irq(int irq, void *dev_id) ...@@ -77,6 +88,7 @@ static irqreturn_t mantis_pci_irq(int irq, void *dev_id)
} }
if (stat & MANTIS_INT_IRQ0) { if (stat & MANTIS_INT_IRQ0) {
dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-0 *"); dprintk(verbose, MANTIS_DEBUG, 0, "* INT IRQ-0 *");
mantis->gpif_status = rst_stat;
schedule_work(&ca->hif_evm_work); schedule_work(&ca->hif_evm_work);
} }
if (stat & MANTIS_INT_IRQ1) { if (stat & MANTIS_INT_IRQ1) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment