[U-Boot] Question: issues for usb keyboard work with OHCI HCD

Marek Vasut
2013-05-14T15:54:30Z

Dear Beno?t Th?baudeau,

> Hi Marek,
>
> On Tuesday, May 14, 2013 4:13:33 AM, Marek Vasut wrote:
> > Dear Bo Shen,
> >
> > > Hi Marek,
> > >
> > > On 5/13/2013 23:12, Marek Vasut wrote:
> > > > Dear Bo Shen,
> > > >
> > > >> Hi All,
> > > >>
> > > >> On 5/6/2013 11:01, Bo Shen wrote:
> > > >>> Hi Marek,
> > > >>>
> > > >>> On 5/3/2013 21:40, Marek Vasut wrote:
> > > >>>> Dear Bo Shen,
> > > >>>>
> > > >>>>> Hi All,
> > > >>>>>
> > > >>>>> Now, I test usb host support with Atmel boards, for example,
> > > >>>>>
> > > >>>>> at91sam9x5ek board.
> > > >>>>>
> > > >>>>> When test OHCI USB host with usb keyboard. I meet the
> > > >>>>> following
> > > >>>>>
> > > >>>>> issue.
> > > >>>>> --->8---
> > > >>>>> U-Boot 2013.04-dirty (May 03 2013 - 11:00:34)
> > > >>>>>
> > > >>>>> CPU: AT91SAM9G35
> > > >>>>> Crystal frequency: 12 MHz
> > > >>>>> CPU clock : 400 MHz
> > > >>>>> Master clock : 133.333 MHz
> > > >>>>> DRAM: 128 MiB
> > > >>>>> WARNING: Caches not enabled
> > > >>>>> NAND: 256 MiB
> > > >>>>> MMC: mci: 0
> > > >>>>> In: serial
> > > >>>>> Out: serial
> > > >>>>> Err: serial
> > > >>>>> Net: macb0
> > > >>>>> Hit any key to stop autoboot: 0
> > > >>>>> U-Boot> usb start
> > > >>>>> (Re)start USB...
> > > >>>>> USB0: scanning bus 0 for devices... 2 USB Device(s) found
> > > >>>>>
> > > >>>>> scanning usb for storage devices... 0 Storage Device(s)
> > > >>>>> found
> > > >>>>>
> > > >>>>> U-Boot> setenv stdin usbkbd
> > > >>>>> U-Boot> ERROR: sohci_submit_job: ENOMEM
> > > >>>>> ERROR: sohci_submit_job failed
> > > >>>>> ... ...
> > > >>>>> (repeat to print these two error line)
> > > >>>>
> > > >>>> So the USB subsystem is leaking memory? Or do you only have too
> > > >>>> small MALLOC
> > > >>>> area?
> > > >>>
> > > >>> I am not sure whether USB subsystem is leaking memory. I am digging
> > > >>> it.
> > > >>>
> > > >>> This issue is not relative with MALLOC area.
> > > >>> This issue come out when all ptd[i].usb_dev (the maximum value of i
> > > >>> is 64) is not NULL. Each time to call td_alloc, it will check
> > > >>> whether ptd[i].usb_dev is NULL (i from 0 to 63), if not find one
> > > >>> of ptd[i].usb_dev is NULL, then report ENOMEM.
> > > >>
> > > >> All clue for this issue?
> > > >
> > > > I assume you mean the TDs are all used up then? Are they not free'd ?
> > >
> > > Yes, that's true, all TDs are used. Nowhere free them, so I use
> > > urb_free_priv() to free urb in sohci_return_job() instead of
> > > td_submit_job(), then it works well.
> >
> > Benoit, you were the last one to plumb in it, right?
>
> No. That was for EHCI, not OHCI.

Hmmm ... I don't have any OHCI device. Bo, maybe you can try tracing it and
fixing it?

Best regards,
Marek Vasut