From: Leif Lindholm <leif.lindholm@linaro.org>
To: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: edk2-devel@lists.01.org
Subject: Re: [PATCH] EmbeddedPkg/DtPlatformDxe: remove /chosen/stdout-path on GOP registration
Date: Thu, 19 Oct 2017 21:55:04 +0100 [thread overview]
Message-ID: <20171019205504.uoiofih7quhjtiq4@bivouac.eciton.net> (raw)
In-Reply-To: <20171019192141.4782-1-ard.biesheuvel@linaro.org>
On Thu, Oct 19, 2017 at 08:21:41PM +0100, Ard Biesheuvel wrote:
> The presence of a /chosen/stdout-path property will force Linux to use
> the serial port as the primary console, even if a graphical console is
> available as well. But the presence of the Graphics Output Protocol (GOP)
> is a strong indication that the user may prefer to use his keyboard and
> mouse rather than his terminal emulator to interact with the system, so
> let's remove /chosen/stdout-path as soon as a GOP instance is registered.
This may be the sensible thing to do, but something just doesn't feel
right.
Also, whatever we do here, we should try to mirror in ACPI with SPCR.
Are we guaranteed to always want to disable serial console if there is
a graphics adapter?
I still dream of a world in which I can run consplitter up to the
point where an OS takes over, and an OS installer will listen to input
from both sources and register its selection from there.
But if we can't have that, can we have a menu setting to select preference?
The default can be a platform-specific Pcd.
/
Leif
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> ---
> EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.c | 41 ++++++++++++++++++++
> EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf | 4 ++
> 2 files changed, 45 insertions(+)
>
> diff --git a/EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.c b/EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.c
> index 1014be2281d4..4f9ac8090fac 100644
> --- a/EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.c
> +++ b/EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.c
> @@ -12,6 +12,7 @@
> *
> **/
>
> +#include <libfdt.h>
> #include <Library/BaseLib.h>
> #include <Library/DebugLib.h>
> #include <Library/DevicePathLib.h>
> @@ -54,6 +55,9 @@ STATIC HII_VENDOR_DEVICE_PATH mDtPlatformDxeVendorDevicePath = {
> }
> };
>
> +STATIC EFI_EVENT mRegisterGopEvent;
> +STATIC VOID *mGopRegistration;
> +
> STATIC
> EFI_STATUS
> InstallHiiPages (
> @@ -89,6 +93,32 @@ InstallHiiPages (
> return EFI_SUCCESS;
> }
>
> +STATIC
> +VOID
> +OnRegisterGop (
> + IN EFI_EVENT Event,
> + IN VOID *Dtb
> + )
> +{
> + INT32 Node;
> + INT32 Error;
> +
> + DEBUG ((DEBUG_INFO,
> + "%a: a GOP has been registered, removing /chosen/stdout-path from DT\n",
> + __FUNCTION__));
> +
> + Node = fdt_path_offset (Dtb, "/chosen");
> + if (Node < 0) {
> + return;
> + }
> +
> + Error = fdt_delprop (Dtb, Node, "stdout-path");
> + if (Error) {
> + DEBUG ((DEBUG_INFO, "%a: Failed to delete 'stdout-path' property: %a\n",
> + __FUNCTION__, fdt_strerror (Error)));
> + }
> +}
> +
> /**
> The entry point for DtPlatformDxe driver.
>
> @@ -181,6 +211,17 @@ DtPlatformDxeEntryPoint (
> __FUNCTION__));
> goto FreeDtb;
> }
> +
> + Status = gBS->CreateEvent (EVT_NOTIFY_SIGNAL, TPL_CALLBACK,
> + OnRegisterGop, Dtb, &mRegisterGopEvent);
> + if (EFI_ERROR (Status)) {
> + DEBUG ((DEBUG_ERROR, "%a: failed to create event - %r\n",
> + __FUNCTION__, Status));
> + }
> +
> + Status = gBS->RegisterProtocolNotify (&gEfiGraphicsOutputProtocolGuid,
> + mRegisterGopEvent, &mGopRegistration);
> + ASSERT_EFI_ERROR (Status);
> } else {
> ASSERT (FALSE);
> }
> diff --git a/EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf b/EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf
> index 45dfd9088bf0..6b331294df8a 100644
> --- a/EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf
> +++ b/EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf
> @@ -41,6 +41,7 @@ [LibraryClasses]
> BaseLib
> DebugLib
> DtPlatformDtbLoaderLib
> + FdtLib
> HiiLib
> MemoryAllocationLib
> UefiBootServicesTableLib
> @@ -53,6 +54,9 @@ [Guids]
> gEdkiiPlatformHasAcpiGuid
> gFdtTableGuid
>
> +[Protocols]
> + gEfiGraphicsOutputProtocolGuid
> +
> [Depex]
> gEfiVariableArchProtocolGuid AND
> gEfiVariableWriteArchProtocolGuid
> --
> 2.11.0
>
next prev parent reply other threads:[~2017-10-19 20:51 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-19 19:21 [PATCH] EmbeddedPkg/DtPlatformDxe: remove /chosen/stdout-path on GOP registration Ard Biesheuvel
2017-10-19 20:55 ` Leif Lindholm [this message]
2017-10-19 21:19 ` Ard Biesheuvel
2017-10-19 21:36 ` Leif Lindholm
2017-10-20 10:44 ` Laszlo Ersek
2017-10-20 11:40 ` Ard Biesheuvel
2017-10-20 15:18 ` Laszlo Ersek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171019205504.uoiofih7quhjtiq4@bivouac.eciton.net \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox