[U-Boot] [PATCH] efi_loader: GOP fix for no display

uclass_first_device() returns 0 if there is no device, but error if there is a device that failed to probe.
Signed-off-by: Rob Clark robdclark@gmail.com --- lib/efi_loader/efi_gop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c index e063e0c79b..411a8c9226 100644 --- a/lib/efi_loader/efi_gop.c +++ b/lib/efi_loader/efi_gop.c @@ -137,7 +137,7 @@ int efi_gop_register(void) struct udevice *vdev;
/* We only support a single video output device for now */ - if (uclass_first_device(UCLASS_VIDEO, &vdev)) + if (uclass_first_device(UCLASS_VIDEO, &vdev) || !vdev) return -1;
struct video_priv *priv = dev_get_uclass_priv(vdev);

stdin might not be set, which would cause iomux_doenv() to fail therefore causing probe_usb_keyboard() to fail. Furthermore if we do have iomux enabled, the sensible thing (in terms of user experience) would be to simply add ourselves to the list of stdin devices.
This fixes an issue with usbkbd on dragonboard410c with distro- bootcmd, where stdin is not set (so stdinname is null).
Signed-off-by: Rob Clark robdclark@gmail.com --- v2: address Bin's review comments v3: fix fail with free()ing if usbkbd is already in stdin env variable pointed out by Simon
common/usb_kbd.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
diff --git a/common/usb_kbd.c b/common/usb_kbd.c index d2d29cc98f..703dd748f5 100644 --- a/common/usb_kbd.c +++ b/common/usb_kbd.c @@ -517,7 +517,22 @@ static int probe_usb_keyboard(struct usb_device *dev)
stdinname = getenv("stdin"); #if CONFIG_IS_ENABLED(CONSOLE_MUX) + char *devname = DEVNAME; + /* + * stdin might not be set yet.. either way, with console-mux the + * sensible thing to do is add ourselves to the list of stdio + * devices: + */ + if (stdinname && !strstr(stdinname, DEVNAME)) { + char *newstdin = malloc(strlen(stdinname) + strlen(","DEVNAME) + 1); + sprintf(newstdin, "%s,"DEVNAME, stdinname); + stdinname = newstdin; + } else if (!stdinname) { + stdinname = devname; + } error = iomux_doenv(stdin, stdinname); + if (stdinname != devname) + free(stdinname); if (error) return error; #else

Hi Rob,
On Fri, Aug 4, 2017 at 7:52 PM, Rob Clark robdclark@gmail.com wrote:
stdin might not be set, which would cause iomux_doenv() to fail therefore causing probe_usb_keyboard() to fail. Furthermore if we do have iomux enabled, the sensible thing (in terms of user experience) would be to simply add ourselves to the list of stdin devices.
This fixes an issue with usbkbd on dragonboard410c with distro- bootcmd, where stdin is not set (so stdinname is null).
Signed-off-by: Rob Clark robdclark@gmail.com
v2: address Bin's review comments v3: fix fail with free()ing if usbkbd is already in stdin env variable pointed out by Simon
Can you please indicate the version number in the email title next time? It's really hard to track which version the patch is.
common/usb_kbd.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
diff --git a/common/usb_kbd.c b/common/usb_kbd.c index d2d29cc98f..703dd748f5 100644 --- a/common/usb_kbd.c +++ b/common/usb_kbd.c @@ -517,7 +517,22 @@ static int probe_usb_keyboard(struct usb_device *dev)
stdinname = getenv("stdin");
#if CONFIG_IS_ENABLED(CONSOLE_MUX)
char *devname = DEVNAME;
/*
* stdin might not be set yet.. either way, with console-mux the
* sensible thing to do is add ourselves to the list of stdio
* devices:
*/
if (stdinname && !strstr(stdinname, DEVNAME)) {
char *newstdin = malloc(strlen(stdinname) + strlen(","DEVNAME) + 1);
sprintf(newstdin, "%s,"DEVNAME, stdinname);
stdinname = newstdin;
} else if (!stdinname) {
stdinname = devname;
} error = iomux_doenv(stdin, stdinname);
if (stdinname != devname)
free(stdinname); if (error) return error;
#else
And what's the difference between this "v3" and previous "v2"?
Previous v2 is here: http://patchwork.ozlabs.org/patch/797418/
Regards, Bin

On Fri, Aug 4, 2017 at 8:35 AM, Bin Meng bmeng.cn@gmail.com wrote:
Hi Rob,
On Fri, Aug 4, 2017 at 7:52 PM, Rob Clark robdclark@gmail.com wrote:
stdin might not be set, which would cause iomux_doenv() to fail therefore causing probe_usb_keyboard() to fail. Furthermore if we do have iomux enabled, the sensible thing (in terms of user experience) would be to simply add ourselves to the list of stdin devices.
This fixes an issue with usbkbd on dragonboard410c with distro- bootcmd, where stdin is not set (so stdinname is null).
Signed-off-by: Rob Clark robdclark@gmail.com
v2: address Bin's review comments v3: fix fail with free()ing if usbkbd is already in stdin env variable pointed out by Simon
Can you please indicate the version number in the email title next time? It's really hard to track which version the patch is.
ok, I had assumed u-boot followed linux kernel conventions of history below the "---" so it doesn't end up in git history.
common/usb_kbd.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
diff --git a/common/usb_kbd.c b/common/usb_kbd.c index d2d29cc98f..703dd748f5 100644 --- a/common/usb_kbd.c +++ b/common/usb_kbd.c @@ -517,7 +517,22 @@ static int probe_usb_keyboard(struct usb_device *dev)
stdinname = getenv("stdin");
#if CONFIG_IS_ENABLED(CONSOLE_MUX)
char *devname = DEVNAME;
/*
* stdin might not be set yet.. either way, with console-mux the
* sensible thing to do is add ourselves to the list of stdio
* devices:
*/
if (stdinname && !strstr(stdinname, DEVNAME)) {
char *newstdin = malloc(strlen(stdinname) + strlen(","DEVNAME) + 1);
sprintf(newstdin, "%s,"DEVNAME, stdinname);
stdinname = newstdin;
} else if (!stdinname) {
stdinname = devname;
} error = iomux_doenv(stdin, stdinname);
if (stdinname != devname)
free(stdinname); if (error) return error;
#else
And what's the difference between this "v3" and previous "v2"?
Previous v2 is here: http://patchwork.ozlabs.org/patch/797418/
Nothing because I apparently passed the old commit sha to git-format-patch again. Sorry about that. (I guess I'm doing too many things at once with trying to finalize a big efi_loader patchset in parallel with bisecting a couple remaining nonsensical travis failures as well as updating and resending these various other unrelated patches.)
I'll resend the real v3 in a moment.
BR, -R

Hi Rob,
On Fri, Aug 4, 2017 at 8:51 PM, Rob Clark robdclark@gmail.com wrote:
On Fri, Aug 4, 2017 at 8:35 AM, Bin Meng bmeng.cn@gmail.com wrote:
Hi Rob,
On Fri, Aug 4, 2017 at 7:52 PM, Rob Clark robdclark@gmail.com wrote:
stdin might not be set, which would cause iomux_doenv() to fail therefore causing probe_usb_keyboard() to fail. Furthermore if we do have iomux enabled, the sensible thing (in terms of user experience) would be to simply add ourselves to the list of stdin devices.
This fixes an issue with usbkbd on dragonboard410c with distro- bootcmd, where stdin is not set (so stdinname is null).
Signed-off-by: Rob Clark robdclark@gmail.com
v2: address Bin's review comments v3: fix fail with free()ing if usbkbd is already in stdin env variable pointed out by Simon
Can you please indicate the version number in the email title next time? It's really hard to track which version the patch is.
ok, I had assumed u-boot followed linux kernel conventions of history below the "---" so it doesn't end up in git history.
Yes, U-Boot follows the same Linux kernel conventions with regard to patch submission. What I was saying is not the commit title. It's the email title, something like "[PATCH v3] usb: kbd: don't fail with iomux"
common/usb_kbd.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)
diff --git a/common/usb_kbd.c b/common/usb_kbd.c index d2d29cc98f..703dd748f5 100644 --- a/common/usb_kbd.c +++ b/common/usb_kbd.c @@ -517,7 +517,22 @@ static int probe_usb_keyboard(struct usb_device *dev)
stdinname = getenv("stdin");
#if CONFIG_IS_ENABLED(CONSOLE_MUX)
char *devname = DEVNAME;
/*
* stdin might not be set yet.. either way, with console-mux the
* sensible thing to do is add ourselves to the list of stdio
* devices:
*/
if (stdinname && !strstr(stdinname, DEVNAME)) {
char *newstdin = malloc(strlen(stdinname) + strlen(","DEVNAME) + 1);
sprintf(newstdin, "%s,"DEVNAME, stdinname);
stdinname = newstdin;
} else if (!stdinname) {
stdinname = devname;
} error = iomux_doenv(stdin, stdinname);
if (stdinname != devname)
free(stdinname); if (error) return error;
#else
And what's the difference between this "v3" and previous "v2"?
Previous v2 is here: http://patchwork.ozlabs.org/patch/797418/
Nothing because I apparently passed the old commit sha to git-format-patch again. Sorry about that. (I guess I'm doing too many things at once with trying to finalize a big efi_loader patchset in parallel with bisecting a couple remaining nonsensical travis failures as well as updating and resending these various other unrelated patches.)
You really should start trying patman instead of git-format-patch :)
I'll resend the real v3 in a moment.
Regards, Bin

uclass_first_device() returns 0 if there is no device, but error if there is a device that failed to probe.
Signed-off-by: Rob Clark robdclark@gmail.com
Thanks, applied to efi-next
Alex
participants (3)
-
Alexander Graf
-
Bin Meng
-
Rob Clark