>-----Original Message----- >From: Marek Vasut [mailto:ma...@denx.de] >Sent: Sunday, August 12, 2012 7:47 AM >To: Jim Lin >Cc: u-boot@lists.denx.de; Wolfgang Denk; Tom Warren >Subject: Re: [U-Boot] [PATCH v2 1/1] USB: EHCI: Initialize multiple USB >controllers at once > >Dear Jim Lin, > >> Add support for command line "usb reset" or "usb start" to initialize >> , "usb stop" to stop multiple USB controllers at once. >> Other command like "usb tree" also supports multiple controllers. >> >> New added definitions in header file are: >> CONFIG_USB_MULTI >> CONFIG_USB_MAX_CONTROLLER_COUNT >> >> Signed-off-by: Jim Lin <ji...@nvidia.com> > --- >> Changes in v2: >> - Renaming from CONFIG_USB_INIT_MULTI to CONFIG_USB_MULTI >> - Define CONFIG_USB_MAX_CONTROLLER_COUNT as 1 if not defined >> - Remove volatile from structure ehci_ctrl of ehci-hcd.c for a >> checkpatch.pl warning >> >> common/cmd_usb.c | 10 +++ >> common/usb.c | 98 +++++++++++++++++++++++++- >> common/usb_hub.c | 4 + >> drivers/usb/host/ehci-hcd.c | 167 >> +++++++++++++++++++++++++++++++----------- drivers/usb/host/ehci.h | >> 5 ++ >> include/usb.h | 12 +++ >> 6 files changed, 251 insertions(+), 45 deletions(-) >> >> diff --git a/common/cmd_usb.c b/common/cmd_usb.c index >> a8e3ae5..8d3093b 100644 >> --- a/common/cmd_usb.c >> +++ b/common/cmd_usb.c >> @@ -554,7 +554,17 @@ int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, >> char >> * const argv[]) } >> if (strncmp(argv[1], "tree", 4) == 0) { >> printf("\nDevice Tree:\n"); >> +#ifdef CONFIG_USB_MULTI > >How's this supposed to work? Shouldn't this call usb_show_tree on roots of all >the trees? See the following code, if dev->parent is NULL, then current device is root hub, we show devices below it
>> + for (i = 0; i < USB_MAX_DEVICE; i++) { >> + dev = usb_get_dev_index(i); >> + if (dev == NULL) >> + break; >> + if (dev->parent == NULL) >> + usb_show_tree(dev); >> + } >> +#else >> usb_show_tree(usb_get_dev_index(0)); >> +#endif >> return 0; >> } >> if (strncmp(argv[1], "inf", 3) == 0) { diff --git >> a/common/usb.c b/common/usb.c index 1b40228..065c70c 100644 >> --- a/common/usb.c >> +++ b/common/usb.c >> @@ -77,6 +77,89 @@ static int asynch_allowed; >> >> char usb_started; /* flag for the started/stopped USB status */ >> >> +#ifdef CONFIG_USB_MULTI >> +/******************************************************************** >> +***** >> ** + * Init USB Device >> + */ >> +#ifndef CONFIG_USB_MAX_CONTROLLER_COUNT #define >> +CONFIG_USB_MAX_CONTROLLER_COUNT 1 #endif >> + >> +int usb_init(void) >> +{ >> + void *ctrl; >> + int i; >> + struct usb_device *dev; >> + >> + running = 0; >> + dev_index = 0; >> + asynch_allowed = 1; >> + usb_hub_reset(); >> + >> + /* first make all devices unknown */ >> + for (i = 0; i < USB_MAX_DEVICE; i++) { >> + memset(&usb_dev[i], 0, sizeof(struct usb_device)); >> + usb_dev[i].devnum = -1; >> + } >> + >> + /* init low_level USB */ >> + printf("USB: "); >> + for (i = 0; i < CONFIG_USB_MAX_CONTROLLER_COUNT; i++) { >> + /* init low_level USB */ >> + ctrl = usb_lowlevel_init(i); >> + /* >> + * if lowlevel init is OK, scan the bus for devices >> + * i.e. search HUBs and configure them >> + */ >> + if (ctrl) { >> + running = 1; >> + >> + printf("scanning bus for devices... "); >> + dev = usb_alloc_new_device(ctrl); >> + /* >> + * device 0 is always present >> + * (root hub, so let it analyze) >> + */ >> + if (dev) >> + usb_new_device(dev); >> + } >> + } >> + >> + if (running) { >> + if (!dev_index) >> + printf("No USB Device found\n"); >> + else >> + printf("%d USB Device(s) found\n", dev_index); >> +#ifdef CONFIG_USB_KEYBOARD >> + drv_usb_kbd_init(); > >Will the keyboard driver survive this? Yes I have tried it after doing the following. 1. Define CONFIG_USB_KEYBOARD, CONFIG_SYS_USB_EVENT_POLL, CONFIG_USB_MULTI, and CONFIG_USB_MAX_CONTROLLER_COUNT 3 in config header file like seaboard.h to compile 2. Install USB keyboard 3. Run "usb reset" in u-boot serial console 4. Run "coninfo" to see usbkbd appeared 5. Run "setenv stdin usbkbd" 6. Typing u-boot console command on USB keyboard -- nvpublic _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot