|
[Gc-linux-cvs] linux/drivers/block gcn-aram.c,1.6,1.7
From: <herraa1@us...> - 2005-03-22 20:39
|
Update of /cvsroot/gc-linux/linux/drivers/block
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3454
Modified Files:
gcn-aram.c
Log Message:
Do not accidentally ack AI and DSP interrupts in the ARAM driver.
Index: gcn-aram.c
===================================================================
RCS file: /cvsroot/gc-linux/linux/drivers/block/gcn-aram.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- gcn-aram.c 20 Mar 2005 22:35:14 -0000 1.6
+++ gcn-aram.c 22 Mar 2005 20:39:14 -0000 1.7
@@ -455,12 +455,16 @@
static void aram_quiesce(struct aram_device *adev)
{
u16 __iomem *csr_reg = adev->io_base + DSP_CSR;
+ u16 csr;
unsigned long flags;
- /* disable ARAM interrupts */
+ /*
+ * Disable ARAM interrupts, but do not accidentally ack non-ARAM ones.
+ */
spin_lock_irqsave(&adev->io_lock, flags);
- writew(readw(csr_reg) & ~DSP_CSR_ARINTMASK,
- csr_reg);
+ csr = readw(csr_reg);
+ csr &= ~(DSP_CSR_AIDINT | DSP_CSR_DSPINT | DSP_CSR_ARINTMASK);
+ writew(csr, csr_reg);
spin_unlock_irqrestore(&adev->io_lock, flags);
/* wait until pending transfers are finished */
@@ -474,6 +478,7 @@
static int aram_init_irq(struct aram_device *adev)
{
u16 __iomem *csr_reg = adev->io_base + DSP_CSR;
+ u16 csr;
unsigned long flags;
int retval;
@@ -486,9 +491,15 @@
goto out;
}
- /* enable ARAM interrupts, and route them to the processor */
+ /*
+ * Enable ARAM interrupts, and route them to the processor.
+ * As in the other cases, preserve the AI and DSP interrupts.
+ */
spin_lock_irqsave(&adev->io_lock, flags);
- writew(readw(csr_reg) | DSP_CSR_ARINTMASK | DSP_CSR_PIINT, csr_reg);
+ csr = readw(csr_reg);
+ csr |= (DSP_CSR_ARINT | DSP_CSR_ARINTMASK | DSP_CSR_PIINT);
+ csr &= ~(DSP_CSR_AIDINT | DSP_CSR_DSPINT);
+ writew(csr, csr_reg);
spin_unlock_irqrestore(&adev->io_lock, flags);
out:
|
| Thread | Author | Date |
|---|---|---|
| [Gc-linux-cvs] linux/drivers/block gcn-aram.c,1.6,1.7 | <herraa1@us...> |