LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH] sata_mv: fix 50xx irq mask
@ 2007-02-25  9:23 Jeff Garzik
  0 siblings, 0 replies; only message in thread
From: Jeff Garzik @ 2007-02-25  9:23 UTC (permalink / raw)
  To: linux-ide; +Cc: LKML


commit 7aa3ffd983c12d224e33e5d4f89ad083392f9d8d
Author: Jeff Garzik <jeff@garzik.org>
Date:   Sun Feb 25 04:19:45 2007 -0500

    [libata] sata_mv: Fix 50xx irq mask
    
    IRQ mask bits assumed a 60xx or newer generation chip, which is very
    wrong for the 50xx series.  Luckily both generations shared the per-port
    interrupt mask bits, leaving only the "misc chip features" bits to be
    completely mismatched.
    
    Fix 50xx by ensuring we only program bits that exist.
    
    Signed-off-by: Jeff Garzik <jeff@garzik.org>

 drivers/ata/sata_mv.c |   11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

7aa3ffd983c12d224e33e5d4f89ad083392f9d8d
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
index 30fd84e..208a9d8 100644
--- a/drivers/ata/sata_mv.c
+++ b/drivers/ata/sata_mv.c
@@ -137,14 +137,19 @@ enum {
 	PCI_ERR			= (1 << 18),
 	TRAN_LO_DONE		= (1 << 19),	/* 6xxx: IRQ coalescing */
 	TRAN_HI_DONE		= (1 << 20),	/* 6xxx: IRQ coalescing */
+	PORTS_0_3_COAL_DONE	= (1 << 8),
+	PORTS_4_7_COAL_DONE	= (1 << 17),
 	PORTS_0_7_COAL_DONE	= (1 << 21),	/* 6xxx: IRQ coalescing */
 	GPIO_INT		= (1 << 22),
 	SELF_INT		= (1 << 23),
 	TWSI_INT		= (1 << 24),
 	HC_MAIN_RSVD		= (0x7f << 25),	/* bits 31-25 */
+	HC_MAIN_RSVD_5		= (0x1fff << 19), /* bits 31-19 */
 	HC_MAIN_MASKED_IRQS	= (TRAN_LO_DONE | TRAN_HI_DONE |
 				   PORTS_0_7_COAL_DONE | GPIO_INT | TWSI_INT |
 				   HC_MAIN_RSVD),
+	HC_MAIN_MASKED_IRQS_5	= (PORTS_0_3_COAL_DONE | PORTS_4_7_COAL_DONE |
+				   HC_MAIN_RSVD_5),
 
 	/* SATAHC registers */
 	HC_CFG_OFS		= 0,
@@ -2239,7 +2244,11 @@ static int mv_init_host(struct pci_dev *pdev, struct ata_probe_ent *probe_ent,
 
 	/* and unmask interrupt generation for host regs */
 	writelfl(PCI_UNMASK_ALL_IRQS, mmio + PCI_IRQ_MASK_OFS);
-	writelfl(~HC_MAIN_MASKED_IRQS, mmio + HC_MAIN_IRQ_MASK_OFS);
+
+	if (IS_50XX(hpriv))
+		writelfl(~HC_MAIN_MASKED_IRQS_5, mmio + HC_MAIN_IRQ_MASK_OFS);
+	else
+		writelfl(~HC_MAIN_MASKED_IRQS, mmio + HC_MAIN_IRQ_MASK_OFS);
 
 	VPRINTK("HC MAIN IRQ cause/mask=0x%08x/0x%08x "
 		"PCI int cause/mask=0x%08x/0x%08x\n",

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2007-02-25  9:23 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-02-25  9:23 [PATCH] sata_mv: fix 50xx irq mask Jeff Garzik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).