From: <he...@us...> - 2005-03-22 20:39:41
|
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: |