From: Marek Vasut <marex@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 2/5] ehci-hcd: Boost transfer speed
Date: Wed, 1 Aug 2012 04:41:41 +0200 [thread overview]
Message-ID: <201208010441.41751.marex@denx.de> (raw)
In-Reply-To: <50183764.7000804@herbrechtsmeier.net>
Dear Stefan Herbrechtsmeier,
[...]
> >>> What do you mean by "partial USB transfers"? As seen from EHCI
> >>> users like
> >>> the MSC driver (usb_storage.c), USB transfers either succeed or
> >>> fail, but
> >>> they cannot be "segmented".
> >>
> >> Segmented -- like multiple transfers being issues with small payload?
>
> Right.
>
> >> You can
> >> not put these together at the USB-level, since it's the issuing code
> >> that has to
> >> be fixed.
>
> If the segmentation comes from the file system handling we can not avoid
> this.
If the FS code is shitty or the device is fragmented, noone can help that.
[...]
> >>> My code assumes that wMaxPacketSize is a power of 2. This is not
> >>> always
> >>> true for interrupt endpoints. Let's talk about these. Their
> >>> handling is
> >>> currently broken in U-Boot since their transfers are made
> >>> asynchronous
> >>> instead of periodic. Devices shouldn't care too much about that, as
> >>> long
> >>> as transfers do not exceed wMaxPacketSize, in which case my code
> >>> still
> >>> works because wMaxPacketSize always fits in a single qTD. Interrupt
> >>> transfers larger than wMaxPacketSize do not seem to be used by
> >>> U-Boot. If
> >>> they were used, the current code in U-Boot would have a timing
> >>> issue
> >>> because the asynchronous scheme would break the interval requested
> >>> by
> >>> devices, which could at worst make them fail in some way. So the
> >>> only
> >>> solution would be that such transfers be split by the caller of
> >>> submit_int_msg, in which case my code still works. What would you
> >>> think
> >>> about failing with an error message in submit_int_msg if length is
> >>> larger
> >>> than wMaxPacketSize? Marek, what do you think?
> >>
> >> Let's do that ... I think the interrupt endpoint is only used for
> >> keyboard and
> >> if someone needs it for something else, the code will be there, just
> >> needing
> >> improvement. Comment and error message are OK.
> >
> > OK. I have thought of another solution for this. You'll tell me which one
> > you prefer.
> >
> > The ehci_submit_async code currently in U-Boot checks through
> > ehci_td_buffer that length fits in the single qTD reserved for data
> > payload only after work has begun, possibly after a SETUP transfer. With
> > my series, this is checked at the very beginning, before the allocation.
> > We could detect that wMaxPacketSize is not a power of 2 (e.g. with
> > __builtin_popcount), in which case the allocation for the data payload
> > would be restricted to 1 qTD like now, and there would be a check at the
> > very beginning to test if length fits in this qTD. In that way, there
> > could be several packets per interrupt transfer as long as it fits in a
> > single qTD, just like now, contrary to the limitation imposed by the
> > error in submit_int_msg. But I'm not sure it's a good idea to allow this
> > behavior.
>
> I think this is not needed, as there is only one user (keyboard) with
> max size of 8 byte.
I agree, but for a different reason. Let's aim for a simple implementation first
that doesn't change behavior and add this change later _if_ needed.
[...]
> >>> So we could perhaps issue a #error in ehci-hcd or in usb_storage if
> >>> CONFIG_SYS_MALLOC_LEN is not large enough, but I don't think it's a
> >>> good
> >>>
> >>> idea because:
> >>> - the threshold value would have to depend on runtime block sizes
> >>> or
> >>>
> >>> something, which could lead to a big worst worst case that would
> >>> almost
> >>> never happen in real life, so giving such an unrealistic heap size
> >>> constraint would be cumbersome,
> >>
> >> #warning then?
> >
> > With which limit if so?
>
> I would expect more than 128kB as this is a common worst case (512 B
> block size).
Seems to be reasonable.
[..]
next prev parent reply other threads:[~2012-08-01 2:41 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-19 20:17 [U-Boot] [PATCH 2/5] ehci-hcd: Boost transfer speed Benoît Thébaudeau
2012-07-20 11:26 ` [U-Boot] [PATCH v2 " Benoît Thébaudeau
2012-07-20 11:37 ` Stefan Herbrechtsmeier
2012-07-20 13:17 ` Benoît Thébaudeau
2012-07-20 13:44 ` Marek Vasut
2012-07-20 13:56 ` Benoît Thébaudeau
2012-07-20 14:51 ` Stefan Herbrechtsmeier
2012-07-20 15:03 ` Benoît Thébaudeau
2012-07-20 15:15 ` Stefan Herbrechtsmeier
2012-07-20 15:35 ` Benoît Thébaudeau
2012-07-23 13:35 ` Stefan Herbrechtsmeier
2012-07-23 17:15 ` Benoît Thébaudeau
2012-07-24 13:02 ` Stefan Herbrechtsmeier
2012-07-29 0:48 ` Benoît Thébaudeau
2012-07-30 22:38 ` Marek Vasut
2012-07-31 1:06 ` Benoît Thébaudeau
2012-07-31 19:52 ` Stefan Herbrechtsmeier
2012-08-01 2:41 ` Marek Vasut [this message]
2012-08-03 23:02 ` Benoît Thébaudeau
2012-08-04 7:45 ` Marek Vasut
2012-08-08 23:14 ` Benoît Thébaudeau
2012-08-08 23:14 ` Marek Vasut
2012-07-31 20:01 ` Stefan Herbrechtsmeier
2012-07-27 14:07 ` Marek Vasut
2012-07-27 14:16 ` Benoît Thébaudeau
2012-07-27 14:30 ` Marek Vasut
2012-08-09 21:51 ` [U-Boot] [PATCH v3 3/8] " Benoît Thébaudeau
2012-08-09 22:32 ` Marek Vasut
2012-07-27 12:54 ` [U-Boot] [PATCH 2/5] " Marek Vasut
2012-07-27 13:59 ` Benoît Thébaudeau
2012-07-27 14:01 ` Marek Vasut
2012-07-27 14:13 ` Benoît Thébaudeau
2012-07-27 14:31 ` Marek Vasut
2012-07-29 0:58 ` Benoît Thébaudeau
2012-07-29 1:40 ` Marek Vasut
2012-07-29 14:14 ` Benoît Thébaudeau
2012-07-29 18:08 ` Marek Vasut
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=201208010441.41751.marex@denx.de \
--to=marex@denx.de \
--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