On Tue, Aug 26, 2008 at 09:50:23AM -0400, Mark Lord wrote: > >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. > > > >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; > > } > > Looks fine to me -- Saeed Bishara did the SOC stuff, and Marvell > refuses to show me any documentation for it. Yeah, docs are often a problem (even internally). However, this particular bit has been opened up, and you can get a copy of the SoC docs here: http://www.marvell.com/products/media/index.jsp (Get the docs for the 5182, which is the only 5xxx series SoC that has SATA built-in.) -- 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