[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <74d0deb30807230001x176e375cq9a8060c20596f36f@mail.gmail.com>
Date: Wed, 23 Jul 2008 09:01:34 +0200
From: "pHilipp Zabel" <philipp.zabel@...il.com>
To: "Greg KH" <gregkh@...e.de>
Cc: linux-kernel@...r.kernel.org, stable@...nel.org,
"Linus Torvalds" <torvalds@...ux-foundation.org>,
"Justin Forbes" <jmforbes@...uxtx.org>,
"Zwane Mwaikambo" <zwane@....linux.org.uk>,
"Theodore Ts'o" <tytso@....edu>,
"Randy Dunlap" <rdunlap@...otime.net>,
"Dave Jones" <davej@...hat.com>,
"Chuck Wolber" <chuckw@...ntumlinux.com>,
"Chris Wedgwood" <reviews@...cw.f00f.org>,
"Michael Krufky" <mkrufky@...uxtv.org>,
"Chuck Ebbert" <cebbert@...hat.com>,
"Domenico Andreoli" <cavokz@...il.com>, "Willy Tarreau" <w@....eu>,
"Rodrigo Rubira Branco" <rbranco@...checkpoint.com>,
"Jake Edge" <jake@....net>, akpm@...ux-foundation.org,
alan@...rguk.ukuu.org.uk, "Pierre Ossman" <drzeus@...eus.cx>
Subject: Re: [patch 44/47] pxamci: fix byte aligned DMA transfers
Hi,
On Wed, Jul 23, 2008 at 1:17 AM, Greg KH <gregkh@...e.de> wrote:
> 2.6.25-stable review patch. If anyone has any objections, please let us
> know.
There is an ugly typo in the patch below that was fixed by Karl Beldan:
http://git.kernel.org/?p=linux/kernel/git/drzeus/mmc.git;a=commit;h=28bbe535df5c461c25eb57affb30e007072429c3
Not sure how you handle this, maybe this patch should only go in
together with the other.
> ------------------
> From: Philipp Zabel <philipp.zabel@...il.com>
>
> commit 97f8571e663c808ad2d01a396627235167291556 upstream
>
> The pxa27x DMA controller defaults to 64-bit alignment. This caused
> the SCR reads to fail (and, depending on card type, error out) when
> card->raw_scr was not aligned on a 8-byte boundary.
>
> For performance reasons all scatter-gather addresses passed to
> pxamci_request should be aligned on 8-byte boundaries, but if
> this can't be guaranteed, byte aligned DMA transfers in the
> have to be enabled in the controller to get correct behaviour.
>
> Signed-off-by: Philipp Zabel <philipp.zabel@...il.com>
> Signed-off-by: Pierre Ossman <drzeus@...eus.cx>
> Signed-off-by: Linus Torvalds <torvalds@...ux-foundation.org>
> Signed-off-by: Greg Kroah-Hartman <gregkh@...e.de>
>
> ---
> drivers/mmc/host/pxamci.c | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> --- a/drivers/mmc/host/pxamci.c
> +++ b/drivers/mmc/host/pxamci.c
> @@ -114,6 +114,7 @@ static void pxamci_setup_data(struct pxa
> unsigned int nob = data->blocks;
> unsigned long long clks;
> unsigned int timeout;
> + bool dalgn = 0;
> u32 dcmd;
> int i;
>
> @@ -152,6 +153,9 @@ static void pxamci_setup_data(struct pxa
> host->sg_cpu[i].dcmd = dcmd | length;
> if (length & 31 && !(data->flags & MMC_DATA_READ))
> host->sg_cpu[i].dcmd |= DCMD_ENDIRQEN;
> + /* Not aligned to 8-byte boundary? */
> + if (sg_dma_address(&data->sg[i]) & 0x7)
> + dalgn = 1;
> if (data->flags & MMC_DATA_READ) {
> host->sg_cpu[i].dsadr = host->res->start + MMC_RXFIFO;
> host->sg_cpu[i].dtadr = sg_dma_address(&data->sg[i]);
> @@ -165,6 +169,15 @@ static void pxamci_setup_data(struct pxa
> host->sg_cpu[host->dma_len - 1].ddadr = DDADR_STOP;
> wmb();
>
> + /*
> + * The PXA27x DMA controller encounters overhead when working with
> + * unaligned (to 8-byte boundaries) data, so switch on byte alignment
> + * mode only if we have unaligned data.
> + */
> + if (dalgn)
> + DALGN |= (1 << host->dma);
> + else
> + DALGN &= (1 << host->dma);
^^^^^ here
> DDADR(host->dma) = host->sg_dma;
> DCSR(host->dma) = DCSR_RUN;
> }
>
> --
>
regards
Philipp
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists