From: Stephen Warren <swarren@nvidia.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 09/14] tegra: usb: Add support for data alignment and txfifo threshold
Date: Mon, 28 Nov 2011 12:05:16 -0700 [thread overview]
Message-ID: <4ED3DB6C.5060101@nvidia.com> (raw)
In-Reply-To: <1322106896-23054-10-git-send-email-sjg@chromium.org>
On 11/23/2011 08:54 PM, Simon Glass wrote:
> CONFIG_USB_EHCI_DATA_ALIGN sets the required alignment of data for
> USB packets (e.g. 4 means word-aligned). This is required for Tegra
> to operate.
>
> CONFIG_USB_EHCI_TXFIFO_THRESH enables setting of the txfilltuning
> field in the EHCI controller on reset.
Shouldn't that be two separate patches?
> diff --git a/README b/README
...
> + CONFIG_USB_EHCI_DATA_ALIGN sets the required alignment of
> + data for USB packets (e.g. 4 means word-aligned). This is
> + required for Tegra to operate.
> +
> + CONFIG_USB_EHCI_TXFIFO_THRESH enables setting of the
> + txfilltuning field in the EHCI controller on reset.
> +
> diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
...
> @@ -322,6 +329,27 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
> int timeout;
> int ret = 0;
>
> +#ifdef CONFIG_USB_EHCI_DATA_ALIGN
> + /* In case ehci host requires alignment for buffers */
> + void *align_buf = NULL;
> + void *orig_buf = buffer;
> + int unaligned = ((int)buffer & (CONFIG_USB_EHCI_DATA_ALIGN - 1)) != 0;
This uses "!= 0".
> +
> + if (unaligned) {
> + align_buf = malloc(length + CONFIG_USB_EHCI_DATA_ALIGN);
> + if (!align_buf)
> + return -1;
> + if ((int)align_buf & (CONFIG_USB_EHCI_DATA_ALIGN - 1))
This doesn't use "!= 0". Probably drop the "!= 0" above?
> + buffer = (void *)((int)align_buf +
> + CONFIG_USB_EHCI_DATA_ALIGN -
> + ((int)align_buf &
> + (CONFIG_USB_EHCI_DATA_ALIGN - 1)));
> + else
> + buffer = align_buf;
Why not jsut do the following unconditionally; it seems much simpler
even if very marginally less efficient:
buffer = (align_buf + CONFIG_USB_EHCI_DATA_ALIGN - 1) &
~(CONFIG_USB_EHCI_DATA_ALIGN - 1);
IIRC, in the kernel, we had to use this technique because arbitrary
callers could have allocated "buffer" however they pleased. I assume the
same is true in U-Boot; there isn't some way that this alignment
restriction could be implemented in some core USB buffer allocation
routine instead, and thus avoid all the copying? Do you know how often
unaligned buffers actually occur in practice, and hence how much of a
performance impact the copying will have?
--
nvpublic
next prev parent reply other threads:[~2011-11-28 19:05 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-24 3:54 [U-Boot] [PATCH 01/14] fdt: Tidy up a few fdtdec problems Simon Glass
2011-11-24 3:54 ` [U-Boot] [PATCH 02/14] fdt: Add functions to access phandles, arrays and bools Simon Glass
2011-11-28 18:41 ` Stephen Warren
2011-11-29 5:12 ` David Gibson
2011-12-02 1:01 ` Simon Glass
2011-12-02 15:55 ` Stephen Warren
2011-12-02 16:38 ` Simon Glass
2011-12-02 3:33 ` Jerry Van Baren
2011-12-02 4:58 ` Simon Glass
2011-12-02 17:22 ` Jerry Van Baren
2011-12-02 18:12 ` Simon Glass
2011-11-24 3:54 ` [U-Boot] [PATCH 03/14] arm: fdt: Ensure that an embedded fdt is word-aligned Simon Glass
2011-11-24 3:54 ` [U-Boot] [PATCH 04/14] arm: fdt: Add skeleton device tree file Simon Glass
2011-11-24 3:54 ` [U-Boot] [PATCH 05/14] tegra: fdt: Add Tegra2x " Simon Glass
2011-11-28 18:56 ` Stephen Warren
2011-12-02 1:24 ` Simon Glass
2011-12-02 15:58 ` Stephen Warren
2011-12-02 16:47 ` Simon Glass
2011-11-24 3:54 ` [U-Boot] [PATCH 06/14] tegra: fdt: Add device tree file for Tegra2 Seaboard Simon Glass
2011-11-24 3:54 ` [U-Boot] [PATCH 07/14] tegra: fdt: Add initial device tree definitions for USB ports Simon Glass
2011-11-24 3:54 ` [U-Boot] [PATCH 08/14] tegra: usb: Add USB definitions for Tegra2 Seaboard Simon Glass
2011-11-24 3:54 ` [U-Boot] [PATCH 09/14] tegra: usb: Add support for data alignment and txfifo threshold Simon Glass
2011-11-28 19:05 ` Stephen Warren [this message]
2011-12-02 1:42 ` Simon Glass
2011-11-24 3:54 ` [U-Boot] [PATCH 10/14] tegra: usb: Add support for USB peripheral Simon Glass
2011-11-28 19:21 ` Stephen Warren
2011-12-02 1:51 ` Simon Glass
2011-12-02 16:10 ` Stephen Warren
2011-12-02 17:00 ` Simon Glass
2011-12-02 20:40 ` Stephen Warren
2011-12-02 23:07 ` Simon Glass
2011-12-03 0:59 ` Simon Glass
2011-12-05 21:33 ` Stephen Warren
2011-12-05 21:46 ` Simon Glass
2011-12-05 22:15 ` Stephen Warren
2011-12-05 23:35 ` Simon Glass
2011-12-06 0:17 ` Stephen Warren
2011-12-06 1:14 ` Simon Glass
2011-12-06 20:42 ` Stephen Warren
2011-12-06 21:23 ` Simon Glass
2011-12-07 23:46 ` Stephen Warren
2011-12-08 21:24 ` Simon Glass
2011-12-12 18:18 ` Stephen Warren
2011-12-12 18:42 ` Simon Glass
2011-11-24 3:54 ` [U-Boot] [PATCH 11/14] tegra: usb: Add USB support to nvidia boards Simon Glass
2011-11-24 3:54 ` [U-Boot] [PATCH 12/14] tegra: usb: Add common USB defines for tegra2 boards Simon Glass
2011-11-24 3:54 ` [U-Boot] [PATCH 13/14] tegra: usb: Enable USB on Seaboard Simon Glass
2011-11-24 3:54 ` [U-Boot] [PATCH 14/14] tegra: fdt: Enable FDT support for Seaboard Simon Glass
2011-11-28 18:33 ` [U-Boot] [PATCH 01/14] fdt: Tidy up a few fdtdec problems Stephen Warren
2011-11-29 1:10 ` David Gibson
2011-12-01 20:59 ` Simon Glass
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=4ED3DB6C.5060101@nvidia.com \
--to=swarren@nvidia.com \
--cc=u-boot@lists.denx.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox