From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id AFE90AC0DE0 for ; Wed, 3 Jan 2024 10:07:26 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=xY8BadrNnJdJ2RllJSQ22hRtWD5X1PTF6MToyF+b/tA=; c=relaxed/simple; d=groups.io; h=Subject:To:Cc:References:From:Message-ID:Date:User-Agent:MIME-Version:In-Reply-To:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Type:Content-Language:Content-Transfer-Encoding; s=20140610; t=1704276445; v=1; b=FoXfe/TR84xLTcGXrCXQYclmpxrnoozBm3gPPcD72QWOgTOTPeS31tUazUr5dcN835Iejx3t 8NrdARRqXXTDKrg3WS6KBdLvG9uokc8hE3GjIIYeVaRjxRDyhx5In6LqkT1VVDoFKCdyC/NaiEK jMDlACaarkufPqgyzUIHeY+c= X-Received: by 127.0.0.2 with SMTP id 2c0MYY7687511xzqvi64fUZn; Wed, 03 Jan 2024 02:07:25 -0800 X-Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by mx.groups.io with SMTP id smtpd.web11.14534.1704276443318821611 for ; Wed, 03 Jan 2024 02:07:23 -0800 X-Received: from loongson.cn (unknown [10.20.42.173]) by gateway (Coremail) with SMTP id _____8DxfevTMZVlO4EBAA--.5879S3; Wed, 03 Jan 2024 18:07:15 +0800 (CST) X-Received: from [10.20.42.173] (unknown [10.20.42.173]) by localhost.localdomain (Coremail) with SMTP id AQAAf8Dxqb3QMZVl9MoYAA--.44982S3; Wed, 03 Jan 2024 18:07:14 +0800 (CST) Subject: Re: [edk2-devel] [PATCH v5 27/36] OvmfPkg/LoongArchVirt: Add serial port hook library To: devel@edk2.groups.io, lichao@loongson.cn Cc: Ard Biesheuvel , Jiewen Yao , Jordan Justen , Gerd Hoffmann References: <20231228100351.1756165-1-lichao@loongson.cn> <20231228100718.1766374-1-lichao@loongson.cn> From: "maobibo" Message-ID: <4fdedfc1-53a4-9a73-32de-9462cff4236d@loongson.cn> Date: Wed, 3 Jan 2024 18:07:12 +0800 User-Agent: Mozilla/5.0 (X11; Linux loongarch64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <20231228100718.1766374-1-lichao@loongson.cn> X-CM-TRANSID: AQAAf8Dxqb3QMZVl9MoYAA--.44982S3 X-CM-SenderInfo: xpdruxter6z05rqj20fqof0/ X-Coremail-Antispam: 1Uk129KBj93XoW3Gr1xZF1xGF1DtF48CryDurX_yoWfWF4kpF 47KFs8GrW7J34ftwsIqa15XFs0kFyFvF4rGrW8Cw15Zwn0gwnakr10vws5tw45Jr1jqry8 WF4q9a1kuF95AagCm3ZEXasCq-sJn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7KY7ZEXa sCq-sGcSsGvfJ3Ic02F40EFcxC0VAKzVAqx4xG6I80ebIjqfuFe4nvWSU5nxnvy29KBjDU 0xBIdaVrnRJUUUvIb4IE77IF4wAFF20E14v26r1j6r4UM7CY07I20VC2zVCF04k26cxKx2 IYs7xG6rWj6s0DM7CIcVAFz4kK6r106r15M28lY4IEw2IIxxk0rwA2F7IY1VAKz4vEj48v e4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_JFI_Gr1l84ACjcxK6xIIjxv20xvEc7CjxVAFwI 0_Jr0_Gr1l84ACjcxK6I8E87Iv67AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVCY1x0267AK xVW8Jr0_Cr1UM2AIxVAIcxkEcVAq07x20xvEncxIr21l57IF6xkI12xvs2x26I8E6xACxx 1l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r106r15McIj6I8E87Iv 67AKxVW8JVWxJwAm72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IY64vIr41lc7I2V7IY0VAS07 AlzVAYIcxG8wCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02 F40E14v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw 1lIxkGc2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7Cj xVAFwI0_Jr0_Gr1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r 4j6F4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x07j0 sjUUUUUU= Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,maobibo@loongson.cn List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: YCzhjwrbKw8TZ4jhl6utBxxfx7686176AA= Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b="FoXfe/TR"; dmarc=none; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io On 2023/12/28 下午6:07, Chao Li wrote: > Add a serial port hook library in LoongArchVirt named > Fdt16550SerialProtHookLib, this library is referenced from ArmVirtPkg. > > LoongArch QEMU virtual machine uses register of LOONGARCH_CSR_KS1 to > transfer serial port base addres from the PEI phase to the DXE phase. > > BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4584 > > Cc: Ard Biesheuvel > Cc: Jiewen Yao > Cc: Jordan Justen > Cc: Gerd Hoffmann > Signed-off-by: Chao Li > --- > .../EarlyFdt16550SerialPortHookLib.c | 52 +++++++++++++++++++ > .../EarlyFdt16550SerialPortHookLib.inf | 37 +++++++++++++ > .../Fdt16550SerialPortHookLib.c | 39 ++++++++++++++ > .../Fdt16550SerialPortHookLib.inf | 33 ++++++++++++ > .../Fdt16550SerialPortHookLib.uni | 14 +++++ > 5 files changed, 175 insertions(+) > create mode 100644 OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/EarlyFdt16550SerialPortHookLib.c > create mode 100644 OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/EarlyFdt16550SerialPortHookLib.inf > create mode 100644 OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/Fdt16550SerialPortHookLib.c > create mode 100644 OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/Fdt16550SerialPortHookLib.inf > create mode 100644 OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/Fdt16550SerialPortHookLib.uni > > diff --git a/OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/EarlyFdt16550SerialPortHookLib.c b/OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/EarlyFdt16550SerialPortHookLib.c > new file mode 100644 > index 0000000000..9f1fcc970a > --- /dev/null > +++ b/OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/EarlyFdt16550SerialPortHookLib.c > @@ -0,0 +1,52 @@ > +/** @file > + PEI Phase Early Platform Hook Library instance for 16550 Uart. > + > + Copyright (c) 2020 - 2023, Arm Ltd. All rights reserved.
> + Copyright (c) 2024 Loongson Technology Corporation Limited. All rights reserved.
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include > +#include > +#include > +#include > +#include > + > +/** Platform hook to retrieve the 16550 UART base address from the platform > + Device tree and store it in the reigster LOONGARCH_CSR_KS1. > + > + @retval RETURN_SUCCESS Success. > + @retval RETURN_INVALID_PARAMETER A parameter was invalid. > + @retval RETURN_NOT_FOUND Serial port information not found. > + > +**/ > +RETURN_STATUS > +EFIAPI > +PlatformHookSerialPortInitialize ( > + VOID > + ) > +{ > + RETURN_STATUS Status; > + VOID *DeviceTreeBase; > + UINT64 SerialConsoleAddress; > + > + if (PcdGet64 (PcdSerialRegisterBase) != 0) { > + return RETURN_SUCCESS; > + } > + > + DeviceTreeBase = (VOID *)(UINTN)PcdGet64 (PcdDeviceTreeInitialBaseAddress); > + if (DeviceTreeBase == NULL) { > + return RETURN_NOT_FOUND; > + } > + > + Status = FdtSerialGetConsolePort (DeviceTreeBase, &SerialConsoleAddress); > + if (RETURN_ERROR (Status)) { > + return Status; > + } > + > + CsrWrite (LOONGARCH_CSR_KS1, (UINTN)SerialConsoleAddress); > + > + return RETURN_SUCCESS; > +} > diff --git a/OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/EarlyFdt16550SerialPortHookLib.inf b/OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/EarlyFdt16550SerialPortHookLib.inf > new file mode 100644 > index 0000000000..55b0c03a01 > --- /dev/null > +++ b/OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/EarlyFdt16550SerialPortHookLib.inf > @@ -0,0 +1,37 @@ > +## @file > +# PEI Phase Early Platform Hook Library instance for 16550 Uart. > +# > +# Copyright (c) 2020, ARM Ltd. All rights reserved.
> +# Copyright (c) 2024 Loongson Technology Corporation Limited. All rights reserved.
> +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > +## > + > +[Defines] > + INF_VERSION = 1.29 > + BASE_NAME = EarlyFdt16550SerialPortHookLib > + MODULE_UNI_FILE = Fdt16550SerialPortHookLib.uni > + FILE_GUID = 6A5FEBCB-C676-A7C1-A96C-B79D4860EEC5 > + MODULE_TYPE = PEIM > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = PlatformHookLib|SEC PEI_CORE PEIM > + > +[Sources] > + EarlyFdt16550SerialPortHookLib.c > + > +[LibraryClasses] > + BaseLib > + PcdLib > + FdtLib > + FdtSerialPortAddressLib > + > +[Packages] > + EmbeddedPkg/EmbeddedPkg.dec > + MdeModulePkg/MdeModulePkg.dec > + MdePkg/MdePkg.dec > + OvmfPkg/OvmfPkg.dec > + > +[Pcd] > + gUefiOvmfPkgTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress > + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase > diff --git a/OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/Fdt16550SerialPortHookLib.c b/OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/Fdt16550SerialPortHookLib.c > new file mode 100644 > index 0000000000..fd188f75b8 > --- /dev/null > +++ b/OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/Fdt16550SerialPortHookLib.c > @@ -0,0 +1,39 @@ > +/** @file > + Platform Hook Library instance for 16550 Uart. > + > + Copyright (c) 2020, ARM Ltd. All rights reserved.
> + Copyright (c) 2024 Loongson Technology Corporation Limited. All rights reserved.
> + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include > +#include > +#include > +#include > + > +/** Platform hook to retrieve the 16550 UART base address from register > + LOONGARCH_CSR_KS1 that caches the UART base address from early boot > + stage and store it in PcdSerialRegisterBase. > + > + @retval RETURN_SUCCESS Success. > + @retval RETURN_NOT_FOUND Serial Port information not found. > + > +**/ > +RETURN_STATUS > +EFIAPI > +PlatformHookSerialPortInitialize ( > + VOID > + ) > +{ > + UINT64 *UartBase; > + > + if (PcdGet64 (PcdSerialRegisterBase) != 0) { > + return RETURN_SUCCESS; > + } > + > + *UartBase = CsrRead (LOONGARCH_CSR_KS1); > + > + return (RETURN_STATUS)PcdSet64S (PcdSerialRegisterBase, (UINTN)*UartBase); > +} > diff --git a/OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/Fdt16550SerialPortHookLib.inf b/OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/Fdt16550SerialPortHookLib.inf > new file mode 100644 > index 0000000000..b5fc03a284 > --- /dev/null > +++ b/OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/Fdt16550SerialPortHookLib.inf > @@ -0,0 +1,33 @@ > +## @file > +# Platform Hook Library instance for 16550 Uart. > +# > +# Copyright (c) 2020, ARM Ltd. All rights reserved.
> +# Copyright (c) 2024 Loongson Technology Corporation Limited. All rights reserved.
> +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > +## > + > +[Defines] > + INF_VERSION = 1.29 > + BASE_NAME = Fdt16550SerialPortHookLib > + MODULE_UNI_FILE = Fdt16550SerialPortHookLib.uni > + FILE_GUID = 808335DB-220E-A353-887C-9AA1B7D433A1 > + MODULE_TYPE = BASE > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = PlatformHookLib|DXE_CORE DXE_DRIVER UEFI_DRIVER DXE_RUNTIME_DRIVER UEFI_APPLICATION > + CONSTRUCTOR = PlatformHookSerialPortInitialize > + > +[Sources] > + Fdt16550SerialPortHookLib.c > + > +[LibraryClasses] > + BaseLib > + PcdLib > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + > +[Pcd] > + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase > diff --git a/OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/Fdt16550SerialPortHookLib.uni b/OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/Fdt16550SerialPortHookLib.uni > new file mode 100644 > index 0000000000..92eb2ed0b4 > --- /dev/null > +++ b/OvmfPkg/LoongArchVirt/Library/Fdt16550SerialPortHookLib/Fdt16550SerialPortHookLib.uni > @@ -0,0 +1,14 @@ > +// /** @file > +// Platform Hook Library instance for 16550 Uart. > +// > +// > +// Copyright (c) 2020, ARM Ltd. All rights reserved.
> +// Copyright (c) 2024 Loongson Technology Corporation Limited. All rights reserved.
> +// > +// SPDX-License-Identifier: BSD-2-Clause-Patent > +// > +// **/ > + > +#string STR_MODULE_ABSTRACT #language en-US "Platform Hook Library instance for 16550 Uart." > + > +#string STR_MODULE_DESCRIPTION #language en-US "Platform Hook Library instance for 16550 Uart." > Reviewed-by: Bibo Mao -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#113065): https://edk2.groups.io/g/devel/message/113065 Mute This Topic: https://groups.io/mt/103398630/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-