Re: [PATCH,RFC] sata_mv: don't avoid clearing interrupt status on SoC host adapters

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



* 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?

[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

[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux