> Am 03.07.2012 20:10, schrieb Marek Vasut:
> >> The commit 5dd95cf93dfffa1d19a1928990852aac9f55b9d9 'usb_storage:
> >> Fix EHCI "out of buffer pointers" with CD-ROM' introduce a bug in
> >> usb_storage as it wrongly assumes that every transfer can use 4k
> >> per qt_buffer. This is wrong if the start address of the data
> >> is not 4k aligned and leads to 'EHCI timed out on TD' messages
> >> because of 'out of buffer pointers' in ehci_td_buffer function.
> >>
> >> Cc: Marek Vasut <ma...@denx.de>
> >> Signed-off-by: Stefan Herbrechtsmeier <ste...@herbrechtsmeier.net>
> > Ok, first I have to admit I broke my promise to look into this ASAP, sorry
> about
> > it :-(
> No problem, as long as we get it into the next release. ;-)
> >
> > Just curious, but shouldn't it be ((4096 * 5) / dev_desc->blk_sz) - 1 ?
> No, because the first blk need to be aligned with the 4096. In worst
> case the blk is at the end of the 4096 range. If we assume that the blk
> is aligned to blk_sz we can change it to ((4096 * 4) / dev_desc->blk_sz)
> + 1. I skip the last blk (+ 1) because with 4096 aligned first blk we
> unaligned the next transfer and add extra short packages to each ehci
> transfer.
> 
> If we want to maximise the usage we need to calculate the max_xfer_blk
> depending on the start address of the first blk.
> 

I admit to not totally getting it. However, there are two things that come to 
my mind:
 -      Doesn't the EHCI Specification mention exactly five buffers that 
can/should/must
        be used?
 -      I think I once stumbled across some comment that said as much as the 
blocks
        always having to be aligned anyway?

:-) Kolja

> >> ---
> >>   common/usb_storage.c |    6 +++---
> >>   1 file changed, 3 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/common/usb_storage.c b/common/usb_storage.c
> >> index faad237..612a553 100644
> >> --- a/common/usb_storage.c
> >> +++ b/common/usb_storage.c
> >> @@ -1416,10 +1416,10 @@ int usb_stor_get_info(struct usb_device
> *dev,
> >> struct us_data *ss, USB_STOR_PRINTF("partype: %d\n", dev_desc-
> >part_type);
> >>
> >>    /*
> >> -   * The U-Boot EHCI driver cannot handle more than 4096 * 5 bytes in
> a
> >> -   * transfer without running itself out of qt_buffers.
> >> +   * The U-Boot EHCI driver cannot handle more than 4096 * 4 bytes in
> a
> >> +   * unaligned transfer without running itself out of qt_buffers.
> >>     */
> >> -  ss->max_xfer_blk = (4096 * 5) / dev_desc->blksz;
> >> +  ss->max_xfer_blk = (4096 * 4) / dev_desc->blksz;
> >>
> >>    init_part(dev_desc);
> >
> 
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to