Re: [PATCH] ahci: disable 64bit dma on sb600

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

 



Tejun Heo <htejun@xxxxxxxxx> wrote:
> SB600 claims it can do 64bit DMA but it can't.  Disable it.
> 
> DON'T APPLY YET
> ---
> 
> Srihari, can you test this against 2.6.22-rc1-git7 just in case?  I'll
> send this upstream after you ack.

Tejun,

Of course. Yes, it's working great without mem=4095M parameter on AMD690G
chipset (Asus M2A-VM) with 4 GB of RAM & Seagate SATA drives on SB600 AHCI
SATA controller (against the current http://www.kernel.org/hg/linux-2.6 repo
at changeset 56901:02db36c53917, which I believe is 2.6.22-rc1-git7
equivalent).

:-)

>  Thanks.

Thank you.

>  ahci.c |   11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
> index e00e1b9..bb94047 100644
> --- a/drivers/ata/ahci.c
> +++ b/drivers/ata/ahci.c
> @@ -170,6 +170,7 @@ enum {
>  	AHCI_FLAG_IGN_IRQ_IF_ERR	= (1 << 25), /* ignore IRQ_IF_ERR */
>  	AHCI_FLAG_HONOR_PI		= (1 << 26), /* honor PORTS_IMPL */
>  	AHCI_FLAG_IGN_SERR_INTERNAL	= (1 << 27), /* ignore SERR_INTERNAL */
> +	AHCI_FLAG_32BIT_ONLY		= (1 << 28), /* force 32bit */
>  
>  	AHCI_FLAG_COMMON		= ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
>  					  ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
> @@ -354,7 +355,8 @@ static const struct ata_port_info ahci_p
>  	/* board_ahci_sb600 */
>  	{
>  		.flags		= AHCI_FLAG_COMMON |
> -				  AHCI_FLAG_IGN_SERR_INTERNAL,
> +				  AHCI_FLAG_IGN_SERR_INTERNAL |
> +				  AHCI_FLAG_32BIT_ONLY,
>  		.pio_mask	= 0x1f, /* pio0-4 */
>  		.udma_mask	= 0x7f, /* udma0-6 ; FIXME */
>  		.port_ops	= &ahci_ops,
> @@ -492,6 +494,13 @@ static void ahci_save_initial_config(str
>  	hpriv->saved_cap = cap = readl(mmio + HOST_CAP);
>  	hpriv->saved_port_map = port_map = readl(mmio + HOST_PORTS_IMPL);
>  
> +	/* some chips lie about 64bit support */
> +	if ((cap & HOST_CAP_64) && (pi->flags & AHCI_FLAG_32BIT_ONLY)) {
> +		dev_printk(KERN_INFO, &pdev->dev,
> +			   "controller can't do 64bit DMA, forcing 32bit\n");
> +		cap &= ~HOST_CAP_64;
> +	}
> +
>  	/* fixup zero port_map */
>  	if (!port_map) {
>  		port_map = (1 << ahci_nr_ports(hpriv->cap)) - 1;
> 



      ___________________________________________________________________________________
How would you spend $50,000 to create a more sustainable environment in Australia?  Go to Yahoo!7 Answers and share your idea.
http://advision.webevents.yahoo.com/aunz/lifestyle/answers/y7ans-babp_reg.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

[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