All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sergei Shtylyov <sshtylyov@mvista.com>
To: "Thang Q. Nguyen" <tqnguyen@apm.com>
Cc: Jeff Garzik <jgarzik@pobox.com>,
	linux-kernel@vger.kernel.org, linux-ide@vger.kernel.org
Subject: Re: [PATCH 3/5] sata_dwc: Add support ATAPI transfer
Date: Thu, 10 May 2012 13:50:09 +0400	[thread overview]
Message-ID: <4FAB8F51.3010004@mvista.com> (raw)
In-Reply-To: <1336623449-7697-1-git-send-email-tqnguyen@apm.com>

Hello.

On 10-05-2012 8:17, Thang Q. Nguyen wrote:

> Signed-off-by: Thang Q. Nguyen<tqnguyen@apm.com>
> ---
>   drivers/ata/sata_dwc_460ex.c |   64 ++++++++++++++++++++++++++++++++++++++++--
>   1 files changed, 61 insertions(+), 3 deletions(-)

> diff --git a/drivers/ata/sata_dwc_460ex.c b/drivers/ata/sata_dwc_460ex.c
> index 937aeb3..6175e01 100755
> --- a/drivers/ata/sata_dwc_460ex.c
> +++ b/drivers/ata/sata_dwc_460ex.c
[...]
> @@ -1385,6 +1389,58 @@ static void sata_dwc_port_stop(struct ata_port *ap)
>   	ap->private_data = NULL;
>   }
>
> +/**
> + * sata_dwc_check_atapi_dma - Filter ATAPI cmds which are unsuitable for DMA.
> + * @qc: queued command to check for chipset/DMA compatibility.
> + *
> + * The bmdma engines cannot handle speculative data sizes (bytecount
> + * under/over flow). So only allow DMA for data transfer commands with
> + * known data sizes.
> + */
> +static int sata_dwc_check_atapi_dma(struct ata_queued_cmd *qc)
> +{
[...]
> +
> +		/* -45150 (FFFF4FA2) to -1 (FFFFFFFF) shall use PIO mode */

    Sector numbers are unsigned entities.

> +		if (scmd->cmnd[0] == WRITE_10) {
> +			lba = (scmd->cmnd[2] << 24) |
> +				  (scmd->cmnd[3] << 16) |
> +				  (scmd->cmnd[4] << 8) |
> +				   scmd->cmnd[5];
> +			if (lba>= 0xFFFF4FA2)
> +				pio = 1;
> +		}
> +		/*
> +		* WORK AROUND: Fix DMA issue when blank CD/DVD disc in the drive
> +		* and user use the 'fdisk -l' command. No DMA data returned so
> +		* we can not complete the QC.

    The user shouldn't use 'fdisk' command on  CD/DVD disks. On the other 
hand, he could use something like 'hdparm -t' od 'dd' with offset in which 
case I'm not sure this heuristics will work.

> +		*/
> +		else if (scmd->cmnd[0] == READ_10) {
> +			lba = (scmd->cmnd[2] << 24) |
> +				  (scmd->cmnd[3] << 16) |
> +				  (scmd->cmnd[4] << 8) |
> +				   scmd->cmnd[5];
> +			if (lba < 0x20)
> +				pio = 1;
> +		}
> +	}
> +	return pio;
> +}
> +
>   /*
>    * Function : sata_dwc_exec_command_by_tag
>    * arguments : ata_port *ap, ata_taskfile *tf, u8 tag, u32 cmd_issued

WBR, Sergei

  reply	other threads:[~2012-05-10  9:50 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-10  4:17 [PATCH 3/5] sata_dwc: Add support ATAPI transfer Thang Q. Nguyen
2012-05-10  4:17 ` Thang Q. Nguyen
2012-05-10  9:50 ` Sergei Shtylyov [this message]
     [not found]   ` <CAKrQpSvqz-+w=Rvq_jtGwkEue0Tf6rh9Z5c9j4edbgeuWeMCVQ@mail.gmail.com>
2012-05-10 10:52     ` Sergei Shtylyov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4FAB8F51.3010004@mvista.com \
    --to=sshtylyov@mvista.com \
    --cc=jgarzik@pobox.com \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tqnguyen@apm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.