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

Marek Vasut
2013-05-14T02:13:33Z

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?

Best regards,
Marek Vasut