On Sat, Jan 10, 2009 at 10:41 AM, Martin Michlmayr <tbm@xxxxxxxxxx> wrote: > * Lennert Buytenhek <buytenh@xxxxxxxxxxxxxx> [2008-08-24 05:04]: >> For some reason, sata_mv doesn't clear interrupt status during init >> when it's running on an SoC host adapter. If the bootloader has >> touched the SATA controller before starting Linux, Linux can end up >> enabling the SATA interrupt with events pending, which will cause the >> interrupt to be marked as spurious and then be disabled, which then >> breaks all further accesses to the controller. >> >> This patch makes the SoC path clear interrupt status on init like in >> the non-SoC case. > > What's the status of this patch? Saeed said that the patch is correct [1] > and Mark asked for his Signed-off-by. Saeed, can you add your > Signed-off-by, so this can go in? "Acked-by:" is already implied with Saeed's previous email: "The patch looks fine." That should be sufficient. This patch can be applied by jgarzik to libata tree. hth, grant > > [1] http://www.spinics.net/lists/linux-ide/msg25686.html > >> Signed-off-by: Lennert Buytenhek <buytenh@xxxxxxxxxxx> >> --- >> drivers/ata/sata_mv.c | 21 ++++++++++----------- >> 1 files changed, 10 insertions(+), 11 deletions(-) >> >> diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c >> index ad169ff..e829a3a 100644 >> --- a/drivers/ata/sata_mv.c >> +++ b/drivers/ata/sata_mv.c >> @@ -3131,19 +3131,18 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx) >> writelfl(0, hc_mmio + HC_IRQ_CAUSE_OFS); >> } >> >> - if (!IS_SOC(hpriv)) { >> - /* Clear any currently outstanding host interrupt conditions */ >> - writelfl(0, mmio + hpriv->irq_cause_ofs); >> + /* Clear any currently outstanding host interrupt conditions */ >> + writelfl(0, mmio + hpriv->irq_cause_ofs); >> >> - /* and unmask interrupt generation for host regs */ >> - writelfl(hpriv->unmask_all_irqs, mmio + hpriv->irq_mask_ofs); >> + /* and unmask interrupt generation for host regs */ >> + writelfl(hpriv->unmask_all_irqs, mmio + hpriv->irq_mask_ofs); >> + >> + /* >> + * enable only global host interrupts for now. >> + * The per-port interrupts get done later as ports are set up. >> + */ >> + mv_set_main_irq_mask(host, 0, PCI_ERR); >> >> - /* >> - * enable only global host interrupts for now. >> - * The per-port interrupts get done later as ports are set up. >> - */ >> - mv_set_main_irq_mask(host, 0, PCI_ERR); >> - } >> done: >> return rc; >> } >> -- >> 1.5.6.4 >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-ide" in >> the body of a message to majordomo@xxxxxxxxxxxxxxx >> More majordomo info at http://vger.kernel.org/majordomo-info.html > > -- > Martin Michlmayr > http://www.cyrius.com/ > -- > To unsubscribe from this list: send the line "unsubscribe linux-ide" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html