lkml.org 
[lkml]   [2007]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 36/37] libata: sata_mv: Fix 50xx irq mask

    -stable review patch. If anyone has any objections, please let us know.

    ------------------
    From: Jeff Garzik <jeff@garzik.org>

    [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.

    Cc: Chuck Ebbert <cebbert@redhat.com>
    Signed-off-by: Jeff Garzik <jeff@garzik.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>


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

    --- a/drivers/ata/sata_mv.c
    +++ b/drivers/ata/sata_mv.c
    @@ -139,14 +139,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,
    @@ -2287,7 +2292,11 @@ static int mv_init_host(struct pci_dev *

    /* 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",
    --
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-03-30 23:17    [W:0.025 / U:0.336 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site