USB: EHCI: Initialize multiple USB controllers at once
Subsystems (2)
PATCH v2 1/1 USB: EHCI: Initialize multiple USB controllers at once
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_MULTICONFIG_USB_MAX_CONTROLLER_COUNT
---
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(-)
common/cmd_usb.c +10 -0
@@ -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 +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 ) {
common/usb.c +97 -1
137 lines not on this page · raw message
common/usb_hub.c +4 -0
@@ -243,7 +243,11 @@ void usb_hub_port_connect_change(struct usb_device *dev, int port)mdelay (200 );/* Allocate a new device struct for it */ +#ifdef CONFIG_USB_MULTI + usb =usb_alloc_new_device (dev->controller); +#else usb =usb_alloc_new_device (); +#endif if (portstatus &USB_PORT_STAT_HIGH_SPEED ) usb->speed =USB_SPEED_HIGH ;
drivers/usb/host/ehci-hcd.c +123 -44
333 lines not on this page · raw message
drivers/usb/host/ehci.h +5 -0
@@ -201,7 +201,12 @@ struct QH { };/* Low level init functions */ +#ifdef CONFIG_USB_MULTI +int ehci_hcd_init (int index,struct ehci_hccr **hccr,struct ehci_hcor **hcor); +int ehci_hcd_stop (int index); +#else int ehci_hcd_init (void );int ehci_hcd_stop (void ); +#endif #endif /* USB_EHCI_H */
include/usb.h +12 -0
@@ -140,6 +140,9 @@ struct usb_device {int portnr;struct usb_device *parent;struct usb_device *children[USB_MAXCHILDREN ]; +#ifdef CONFIG_USB_MULTI +void *controller;/* hardware controller private data */ +#endif };/**********************************************************************
@@ -153,8 +156,13 @@ struct usb_device {defined (CONFIG_USB_OMAP3 ) ||defined (CONFIG_USB_DA8XX ) || \ defined(CONFIG_USB_BLACKFIN) || defined(CONFIG_USB_AM35X) +#ifdef CONFIG_USB_MULTI +void *usb_lowlevel_init (int index); +int usb_lowlevel_stop (int index); +#else int usb_lowlevel_init (void );int usb_lowlevel_stop (void ); +#endif int submit_bulk_msg (struct usb_device *dev,unsigned long pipe,void *buffer,int transfer_len); int submit_control_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
@@ -382,7 +390,11 @@ void usb_hub_reset(void);int hub_port_reset (struct usb_device *dev,int port,unsigned short *portstat); +#ifdef CONFIG_USB_MULTI +struct usb_device *usb_alloc_new_device (void *controller); +#else struct usb_device *usb_alloc_new_device (void ); +#endif int usb_new_device (struct usb_device *dev);#endif /*_USB_H_ */
--
1.7.3
nvpublic
PATCH v2 1/1 USB: EHCI: Initialize multiple USB controllers at once
Dear Jim Lin,
Quoted 30 lines
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_MULTICONFIG_USB_MAX_CONTROLLER_COUNTSigned-off-by Jim Lin <[email protected]>---
Changes in v2:
- Renaming fromCONFIG_USB_INIT_MULTItoCONFIG_USB_MULTI
- DefineCONFIG_USB_MAX_CONTROLLER_COUNTas 1 if not defined
- Remove volatile from structureehci_ctrlofehci-hcd.cfor a checkpatch.pl warningcommon/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(-)common/cmd_usb.c +0
-0
common/cmd_usb.c int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char · line 557
Quoted 4 lines
common/cmd_usb.c +1
-0@@ -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?
Quoted 66 lines
common/cmd_usb.c +9
-0+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 ) {common/usb.c +44
-0@@ -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);
common/usb.c static int asynch_allowed; · line 134
Quoted 10 lines
common/usb.c +10
-0+ } + } + +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?
Quoted 43 lines
common/usb.c +12
-0+#endif +USB_PRINTF ("scan end\n" ); + usb_started =1 ; +return 0 ; + }else { +printf ("Error, couldn't init Lowlevel part\n" ); + usb_started =0 ; +return -1 ; + } +} + +/************************************************************************* ***** + * Stop USB this stops the LowLevel Part and deregisters USB devices. + */
common/usb.c +15
-0+int usb_stop (void ) +{ +int i; + +if (usb_started) { + asynch_allowed =1 ; + usb_started =0 ; +usb_hub_reset (); +for (i =0 ; i <CONFIG_USB_MAX_CONTROLLER_COUNT ; i++) +usb_lowlevel_stop (i); + } +return 0 ; +} +#else /********************************************************************** * some forward declerations... */ @@ -127,6 +210,7 @@ int usb_stop(void) }return res; } +#endif /* * disables the asynch behaviour of the control message. This is used for data @@ -750,11 +834,18 @@ struct
usb_device*usb_get_dev_index(int index) return &usb_dev[index];
}
common/usb.c struct usb_device *usb_get_dev_index(int index) · line 837
Quoted 2 lines
common/usb.c +1
-1- +#ifdef CONFIG_USB_MULTI
I still believe it's possible to get rid of this MULTI crap, simply set the "multiness" to 1 for non-multi setups. How big overhead will that generate? [...]
btw you might want to rebase on top of latest u-boot-usb.
PATCH v2 1/1 USB: EHCI: Initialize multiple USB controllers at once
Quoted 7 lines
-----Original Message-----
From: Marek Vasut [mailto:marex at denx.de]
Sent: Sunday, August 12, 2012 7:47 AM
To: Jim Lin
Cc: u-boot at lists.denx.de; Wolfgang Denk; Tom Warren
Subject: Re: [U-Boot] [PATCH v2 1/1] USB: EHCI: Initialize multiple USB controllers at once
Quoted 12 lines
Quoted 10 lines
common/cmd_usb.c index renamed from common/cmd_usb.c +0
-0a8e3ae5..8d3093b 100644
common/cmd_usb.c +0
-0@@ -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_MULTIHow's this supposed to work? Shouldn't this call
usb_show_treeon roots of all the trees?
You see the following if dev->parent is NULL that means it's the only root hub under a controller , then we show devices under this root hub of the controller by usb_show_tree. Root hub under different controller is listed as separate device.
Quoted 60 lines
Quoted 60 lines
common/cmd_usb.c +9
-0+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.cb/common/usb.cindex 1b40228..065c70c 100644common/usb.c +13
-0+#endif +USB_PRINTF ("scan end\n" ); + usb_started =1 ; +return 0 ; + }else { +printf ("Error, couldn't init Lowlevel part\n" ); + usb_started =0 ; +return -1 ; + } +} + +/******************************************************************** +***** ***** + * Stop USB this stops the LowLevel Part and deregisters USB devices. + */
common/usb.c +15
-0+int usb_stop (void ) +{ +int i; + +if (usb_started) { + asynch_allowed =1 ; + usb_started =0 ; +usb_hub_reset (); +for (i =0 ; i <CONFIG_USB_MAX_CONTROLLER_COUNT ; i++) +usb_lowlevel_stop (i); + } +return 0 ; +} +#else /********************************************************************** * some forward declerations... */ @@ -127,6 +210,7 @@ int usb_stop(void) }return res; } +#endif /* * disables the asynch behaviour of the control message. This is used for data @@ -750,11 +834,18 @@ struct
usb_device*usb_get_dev_index(int index) return &usb_dev[index]; }
Quoted 4 lines
common/usb.c struct usb_device *usb_get_dev_index(int index) · line 837
Quoted 2 lines
common/usb.c +1
-1- +#ifdef CONFIG_USB_MULTI I still believe it's possible to get rid of this MULTI crap, simply set the "multiness" to 1 for non-multi setups. How big overhead will that generate?
I assume you want me to use code in ifdef CONFIG_USB_MULTI block, remove CONFIG_USB_MULTI and if CONFIG_USB_MAX_CONTROLLER_COUNT is 1 , then do non-multi setups.
nvpublic
PATCH v2 1/1 USB: EHCI: Initialize multiple USB controllers at once
Dear Jim Lin,
Quoted 25 lines
Quoted 16 lines
-----Original Message-----
From: Marek Vasut [mailto:marex at denx.de]
Sent: Sunday, August 12, 2012 7:47 AM
To: Jim Lin
Cc: u-boot at lists.denx.de; Wolfgang Denk; Tom Warren
Subject: Re: [U-Boot] [PATCH v2 1/1] USB: EHCI: Initialize multiple USB controllers at onceQuoted 8 lines
common/cmd_usb.c index renamed from common/cmd_usb.c +0
-0a8e3ae5..8d3093b 100644
common/cmd_usb.c +0
-0@@ -554,7 +554,17 @@ int do_usb(cmd_tbl_t *cmdtp, int flag, int argc,char
* const argv[]) }Quoted 8 lines
Quoted 5 lines
if (strncmp(argv[1], "tree", 4) == 0) { printf("\nDevice Tree:\n");+#ifdef
CONFIG_USB_MULTIHow's this supposed to work? Shouldn't this call
usb_show_treeon roots of all the trees?
Quoted 4 lines
You see the following if
dev->parentis NULL that means it's the only root hub under a controller , then we show devices under this root hub of the controller byusb_show_tree. Root hub under different controller is listed as separate device.
So if you set USB_MAX_DEVICE to 1, this code won't need the ifdefs? :)
Quoted 22 lines
Quoted 22 lines
Quoted 22 lines
common/cmd_usb.c +9
-0+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.cb/common/usb.cindex 1b40228..065c70c 100644common/usb.c +0
-0
Quoted 6 lines
Quoted 6 lines
common/usb.c static int asynch_allowed; · line 140
Quoted 6 lines
common/usb.c +6
-0+#endif +USB_PRINTF ("scan end\n" ); + usb_started =1 ; +return 0 ; + }else { +printf ("Error, couldn't init Lowlevel part\n" );
puts();
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
common/usb.c +5
-0+ usb_started =0 ; +return -1 ; + } +} +
Quoted 8 lines
Quoted 8 lines
common/usb.c static int asynch_allowed; · line 152
Quoted 8 lines
common/usb.c +2
-0+/******************************************************************** +***** ***** + * Stop USB this stops the LowLevel Part and deregisters USB devices. + */
common/usb.c +4
-0+int usb_stop (void ) +{ +int i; +
if (!started)
return 0;
... do the work ...
;-)
Quoted 39 lines
Quoted 32 lines
Quoted 32 lines
common/usb.c +11
-0+if (usb_started) { + asynch_allowed =1 ; + usb_started =0 ; +usb_hub_reset (); +for (i =0 ; i <CONFIG_USB_MAX_CONTROLLER_COUNT ; i++) +usb_lowlevel_stop (i); + } + return 0; +} +#else /********************************************************************** * some forward declerations... */ @@ -127,6 +210,7 @@ int usb_stop(void) }return res; } +#endif /*
* disables the asynch behaviour of the control message. This is used
for data @@ -750,11 +834,18 @@ struct
usb_device*usb_get_dev_index(int index) return &usb_dev[index]; }Quoted 6 lines
common/usb.c struct usb_device *usb_get_dev_index(int index) · line 837
Quoted 2 lines
common/usb.c +1
-1- +#ifdef CONFIG_USB_MULTI I still believe it's possible to get rid of this MULTI crap, simply set the "multiness" to 1 for non-multi setups. How big overhead will that generate?
Quoted 2 lines
I assume you want me to use code in ifdef
CONFIG_USB_MULTIblock, removeCONFIG_USB_MULTI
Yes!
Quoted 2 lines
and if
CONFIG_USB_MAX_CONTROLLER_COUNTis 1
, then do non-multi setups.
No ;-) Why can't the "multi setups" be used for "non-multi" configuration?
Quoted 5 lines
nvpublic
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot
PATCH v2 1/1 USB: EHCI: Initialize multiple USB controllers at once
In reply to Marek VasutQuoted 34 lines
-----Original Message-----
From: Marek Vasut [mailto:marex at denx.de]
Sent: Sunday, August 12, 2012 7:47 AM
To: Jim Lin
Cc: u-boot at lists.denx.de; Wolfgang Denk; Tom Warren
Subject: Re: [U-Boot] [PATCH v2 1/1] USB: EHCI: Initialize multiple USB controllers at onceDear Jim Lin,
Quoted 9 lines
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_MULTICONFIG_USB_MAX_CONTROLLER_COUNTSigned-off-by Jim Lin <[email protected]>---
Quoted 15 lines
Changes in v2:
- Renaming fromCONFIG_USB_INIT_MULTItoCONFIG_USB_MULTI
- DefineCONFIG_USB_MAX_CONTROLLER_COUNTas 1 if not defined
- Remove volatile from structureehci_ctrlofehci-hcd.cfor a checkpatch.pl warningcommon/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(-)
Quoted 12 lines
Quoted 10 lines
common/cmd_usb.c index renamed from common/cmd_usb.c +0
-0a8e3ae5..8d3093b 100644
common/cmd_usb.c +0
-0@@ -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_MULTIHow's this supposed to work? Shouldn't this call
usb_show_treeon 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
Quoted 69 lines
Quoted 69 lines
common/cmd_usb.c +9
-0+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.cb/common/usb.cindex 1b40228..065c70c 100644common/usb.c +48
-0@@ -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) {
Quoted 8 lines
common/usb.c static int asynch_allowed; · line 134
Quoted 6 lines
common/usb.c +6
-0+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
PATCH v2 1/1 USB: EHCI: Initialize multiple USB controllers at once
Quoted 6 lines · Jim Lin
Marek Vasut wrote at Sunday, August 12, 2012 7:47 AM:
Quoted 5 lines
Dear Jim Lin,
Quoted 3 lines
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.
...
Quoted 5 lines
Quoted 4 lines
common/usb.c static int asynch_allowed; · line 134
Quoted 2 lines
common/usb.c +2
-0+#ifdef CONFIG_USB_KEYBOARD +drv_usb_kbd_init ();Will the keyboard driver survive this?
Quoted 8 lines
Yes I have tried it after doing the following.
1. DefineCONFIG_USB_KEYBOARD,CONFIG_SYS_USB_EVENT_POLL,CONFIG_USB_MULTI, andCONFIG_USB_MAX_CONTROLLER_COUNT3 in config header file likeseaboard.hto 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
I've also tested this on Springbank, which has a built-in USB keyboard and an external USB port via a separate host controller, which I connected to an Ethernet device, and it appears to all work very well for me.
So,
PATCH v2 1/1 USB: EHCI: Initialize multiple USB controllers at once
Dear Stephen Warren,
Quoted 27 lines · Jim Lin
Quoted 6 lines
Marek Vasut wrote at Sunday, August 12, 2012 7:47 AM:
Quoted 5 lines
Dear Jim Lin,
Quoted 3 lines
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.
...
Quoted 9 lines
Quoted 4 lines
common/usb.c static int asynch_allowed; · line 134
Quoted 2 lines
common/usb.c +2
-0+#ifdef CONFIG_USB_KEYBOARD +drv_usb_kbd_init ();Will the keyboard driver survive this?
Yes I have tried it after doing the following.
1. DefineCONFIG_USB_KEYBOARD,CONFIG_SYS_USB_EVENT_POLL,CONFIG_USB_MULTI, andCONFIG_USB_MAX_CONTROLLER_COUNT3Quoted 7 lines
in config header file like
seaboard.hto compile2. 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
Quoted 8 lines
I've also tested this on Springbank, which has a built-in USB keyboard and an external USB port via a separate host controller, which I connected to an Ethernet device, and it appears to all work very well for me.
So,
Tested-by Stephen Warren <[email protected]>
Good, thanks! :)
Best regards,
Marek Vasut