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 BFD1CAC0D02 for ; Fri, 3 Nov 2023 08:10:07 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=6Q/7juRAMfi/nsdPAHcS3nSuwbqyPjrHuAGB1k8Liz8=; c=relaxed/simple; d=groups.io; h=Message-ID:Date:MIME-Version:User-Agent:Subject:To:Cc:References:From:In-Reply-To:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Type; s=20140610; t=1698999006; v=1; b=DSI9QE643xKlaP3CjoQ09I71YxhjDRbi3SuBZnxTpneDxFyuA9P/pPSGUXGgDQeXhHuI2sQW aSEX+GIxoC13uNitQ4nUgPMy45BVd385QX8qBJIZnrM0C65wfihO4GrddOuLGY8fOo9/afKhg6P kW8JgjsCaywDl1Rue0G0p4jY= X-Received: by 127.0.0.2 with SMTP id 1aI9YY7687511xZzluocNuGs; Fri, 03 Nov 2023 01:10:06 -0700 X-Received: from mail.loongson.cn (mail.loongson.cn [114.242.206.163]) by mx.groups.io with SMTP id smtpd.web10.40639.1698999003335036499 for ; Fri, 03 Nov 2023 01:10:05 -0700 X-Received: from loongson.cn (unknown [10.40.24.149]) by gateway (Coremail) with SMTP id _____8AxDOvXqkRl4aw2AA--.36834S3; Fri, 03 Nov 2023 16:09:59 +0800 (CST) X-Received: from [10.40.24.149] (unknown [10.40.24.149]) by localhost.localdomain (Coremail) with SMTP id AQAAf8DxiuTSqkRl3QM5AA--.59729S3; Fri, 03 Nov 2023 16:09:54 +0800 (CST) Message-ID: Date: Fri, 3 Nov 2023 16:09:54 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [edk2-devel] [PATCH v1 00/29] Enable LoongArch virtual machine in edk2 To: maobibo , devel@edk2.groups.io, ray.ni@intel.com Cc: "Kinney, Michael D" , "Gao, Liming" , "Liu, Zhiguang" , "Dong, Eric" , "Kumar, Rahul R" , Gerd Hoffmann , Leif Lindholm , Ard Biesheuvel , Abner Chang , Daniel Schaefer , Sami Mujawar , "Yao, Jiewen" , "Justen, Jordan L" References: <20231103010302.4052990-1-lichao@loongson.cn> <0a6b9701-4e48-451e-bc7e-3a683abc2246@loongson.cn> <8939fcae-b40e-32aa-b598-4f720f2e380e@loongson.cn> From: "Chao Li" In-Reply-To: <8939fcae-b40e-32aa-b598-4f720f2e380e@loongson.cn> X-CM-TRANSID: AQAAf8DxiuTSqkRl3QM5AA--.59729S3 X-CM-SenderInfo: xolfxt3r6o00pqjv00gofq/1tbiAQAECGVEWKjFtgABsu X-Coremail-Antispam: 1Uk129KBj9fXoWftF4UZr1DKryDuFy5GFWkZrc_yoW5Gw4rKo W8Cr4UAr45Jrn5C34rKwsxJrW5XF47Ars8Xr4xZay7tF15A3WUKayDJryrG3y5XF95Wr1U G345J3WkJFy7tr4fl-sFpf9Il3svdjkaLaAFLSUrUUUU8b8apTn2vfkv8UJUUUU8wcxFpf 9Il3svdxBIdaVrnUUv73VFW2AGmfu7bjvjm3AaLaJ3UjIYCTnIWjp_UUUYS7kC6x804xWl 14x267AKxVWUJVW8JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0rVWrJVCq3wAFIxvE14AKwV WUXVWUAwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK021l84ACjcxK6xIIjxv20xvE 14v26r1I6r4UM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r1j6r4UM28EF7xvwVC2z280aV AFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Gr1j6F4UJwAaw2AFwI0_Jrv_ JF1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqjxCEc2xF0cIa020Ex4CE44I27wAv7VC0I7 IYx2IY67AKxVWUAVWUtwAv7VC2z280aVAFwI0_Gr0_Cr1lOx8S6xCaFVCjc4AY6r1j6r4U M4x0Y48IcVAKI48JMx8GjcxK6IxK0xIIj40E5I8CrwCF04k20xvY0x0EwIxGrwCFx2IqxV CFs4IE7xkEbVWUJVW8JwCFI7km07C267AKxVWrXVW3AwC20s026c02F40E14v26r106r1r MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_GFv_WrylIxkGc2Ij64vIr4 1lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Jr0_Gr1l IxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r4j6F4UMIIF0xvEx4 A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x07j5jjgUUUUU= 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,lichao@loongson.cn List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: i164UQHGGJqJtnMaMBc0o2IAx7686176AA= Content-Type: multipart/alternative; boundary="------------P2cuI9xKRM0b23WTQf4xKiBo" X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=DSI9QE64; 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 --------------P2cuI9xKRM0b23WTQf4xKiBo Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi Bibo, Yes, you are right, MpInitLib is most used on the physical machines, but in LoongArch, this library is a public library, so it is the minimum requirement that it can worke on physical machines and virtual machines. This library has been tested on the actual and virtual machines to ensure it works right. Thanks, Chao 在 2023/11/3 15:51, maobibo 写道: > > > On 2023/11/3 下午3:08, Chao Li wrote: >> Hi Ray, >> >> Thanks for review. >> >> >> I think the MpInitLib is necessary, because this library will serve >> PEI and DEX phases. In LoongArch, the MP initialization function will >> be  called first in the PEI phase. It will wake up all of AP, collect >> accurate online cores, and all APs will fill in their self >> information to prepare for next wakeup. >> >> The second time the MP initialization function is called will in DXE >> phase, usually located CpuDxe, I guess you are checked this code. >> This time the MP service HOB will be brought from PEI to DXE phase, >> and the MP protocal will be registered to prepare for service DXE phase. >> >> Like you saied, why not use the MP PPI? I think it's just that the >> code hasn't been added yet, and I think LoongArch will definitely >> need the MP PPI in the future, like memory trainning, configure APs >> local registers, etc. > > It is necessary for physical machine like memory trainning/configure > APs local register etc, however I doubt whether it is useful for > LoongArch virt-machine, I do not see the advantages for wakeup APs in > UEFI BIOS. ACPI FADT table is prepared in qemu side rather than BIOS > side. > > Regards > Bibo Mao >> >> >> Thanks, >> Chao >> 在 2023/11/3 13:10, Ni, Ray 写道: >>> Chao, >>> MpInitLib is to avoid code duplication between CpuMpPeim and CpuDxe. >>> If you only need MP protocol but not MP PPI, do you still need to >>> add MpInitLib? >>> Can MpInitLib code be included in CpuDxe folder? >>> >>> Thanks, >>> Ray >>> ------------------------------------------------------------------------ >>> >>> *From:* Chao Li >>> *Sent:* Friday, November 3, 2023 9:03 AM >>> *To:* devel@edk2.groups.io >>> *Cc:* Kinney, Michael D ; Gao, Liming >>> ; Liu, Zhiguang ; >>> Dong, Eric ; Ni, Ray ; Kumar, >>> Rahul R ; Gerd Hoffmann >>> ; Leif Lindholm ; Ard >>> Biesheuvel ; Abner Chang >>> ; Daniel Schaefer ; Sami >>> Mujawar ; Yao, Jiewen ; >>> Justen, Jordan L >>> *Subject:* [PATCH v1 00/29] Enable LoongArch virtual machine in edk2 >>> This patch set will enable LoongArch virtual machine in edk2, the new >>> LoongArch virtual machine is located in OvmfPkg/LoongArchVirt/, it is a >>> generic platform that dose not require any actual hardware. >>> >>> Patch1-Patch14: Submit the common library and driver for LoongArch >>> virtual machine and real hardware. Such as base help functions, >>> exception handel, MMU library, multiprocessor library etc. >>> >>> Patch15-Patch16: Add PrePiCpuIoSize for LoongArch64. and move >>> ArmVirtPkg >>> two PCDs into OvmfPkg for easier use by other architectures. >>> >>> Patch17-Patch29: LoongArch virtual machine private code, include SEC >>> and >>> PEI phase code, some library and drivers. >>> >>> Modfied modues: MdePkg, UefiCpuPkg, EmbeddedPkg, ArmVirtPkg, OvmfPkg. >>> >>> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4584 >>> >>> Cc: Michael D Kinney >>> Cc: Liming Gao >>> Cc: Zhiguang Liu >>> Cc: Eric Dong >>> Cc: Ray Ni >>> Cc: Rahul Kumar >>> Cc: Gerd Hoffmann >>> Cc: Leif Lindholm >>> Cc: Ard Biesheuvel >>> Cc: Abner Chang >>> Cc: Daniel Schaefer >>> Cc: Sami Mujawar >>> Cc: Jiewen Yao >>> Cc: Jordan Justen >>> >>> Chao Li (29): >>>   MdePkg: Add the header file named Csr.h for LoongArch64 >>>   MdePkg: Add LoongArch64 FPU function set into BaseCpuLib >>>   MdePkg: Add LoongArch64 exception function set into BaseLib >>>   MdePkg: Add LoongArch64 local interrupt function set into BaseLib >>>   MdePkg: Add LoongArch Cpucfg function >>>   MdePkg: Add read stable counter operation for LoongArch >>>   MdePkg: Add CSR operation for LoongArch >>>   MdePkg: Add IOCSR operation for LoongArch >>>   UefiCpuPkg: Add LoongArch64 CPU Timer library >>>   UefiCpuPkg: Add CPU exception library for LoongArch >>>   UefiCpuPkg: Add CpuMmuLib.h to UefiCpuPkg >>>   UefiCpuPkg: Add LoongArch64CpuMmuLib to UefiCpuPkg >>>   UefiCpuPkg: Add multiprocessor library for LoongArch64 >>>   UefiCpuPkg: Add CpuDxe driver for LoongArch64 >>>   EmbeddedPkg: Add PcdPrePiCpuIoSize width for LOONGARCH64 >>>   ArmVirtPkg: Move PCD of FDT base address and FDT padding to OvmfPkg >>>   OvmfPkg/LoongArchVirt: Add PciCpuIo2Dxe module >>>   OvmfPkg/LoongArchVirt: Add stable timer driver >>>   OvmfPkg/LoongArchVirt: Add a NULL library named >>>     CollectApResouceLibNull >>>   OvmfPkg/LoongArchVirt: Add serial port library >>>   OvmfPkg/LoongArchVirt: Add real time clock library >>>   OvmfPkg/LoongArchVirt: Add NorFlashQemuLib >>>   OvmfPkg/LoongArchVirt: Add PeiServiceTablePointerLib >>>   OvmfPkg/LoongArchVirt: Add platform boot manager library >>>   OvmfPkg/LoongArchVirt: Add FdtQemuFwCfgLib >>>   OvmfPkg/LoongArchVirt: Add reset system library >>>   OvmfPkg/LoongArchVirt: Support SEC phase >>>   OvmfPkg/LoongArchVirt: Support PEI phase >>>   OvmfPkg/LoongArchVirt: Add build file >>> >>>  ArmVirtPkg/ArmVirtCloudHv.dsc                 |    2 +- >>>  ArmVirtPkg/ArmVirtKvmTool.dsc                 |    2 +- >>>  ArmVirtPkg/ArmVirtPkg.dec                     |   14 - >>>  ArmVirtPkg/ArmVirtQemu.dsc                    |    2 +- >>>  ArmVirtPkg/ArmVirtQemuKernel.dsc              |    2 +- >>>  ArmVirtPkg/ArmVirtXen.dsc                     |    2 +- >>>  .../ArmVirtPsciResetSystemPeiLib.inf          |    3 +- >>>  .../CloudHvVirtMemInfoPeiLib.inf              |    3 +- >>>  .../DebugLibFdtPL011UartFlash.inf             |    3 +- >>>  .../EarlyFdt16550SerialPortHookLib.inf        |    3 +- >>>  .../EarlyFdtPL011SerialPortLib.inf            |    3 +- >>>  .../KvmtoolPlatformPeiLib.inf                 |    5 +- >>>  .../Library/PlatformPeiLib/PlatformPeiLib.inf |   10 +- >>>  .../QemuVirtMemInfoPeiLib.inf                 |    3 +- >>>  .../PrePi/ArmVirtPrePiUniCoreRelocatable.inf  |    3 +- >>>  EmbeddedPkg/EmbeddedPkg.dec                   |    3 + >>>  MdePkg/Include/Library/BaseLib.h              |  221 +++ >>>  MdePkg/Include/Library/CpuLib.h               |   37 +- >>>  MdePkg/Include/Protocol/DebugSupport.h        |   76 +- >>>  MdePkg/Include/Register/LoongArch64/Cpucfg.h  |  565 ++++++ >>>  MdePkg/Include/Register/LoongArch64/Csr.h     |  221 +++ >>>  MdePkg/Library/BaseCpuLib/BaseCpuLib.inf      |    7 +- >>>  .../Library/BaseCpuLib/LoongArch/DisableFpu.S |   17 + >>>  .../Library/BaseCpuLib/LoongArch/EnableFpu.S  |   17 + >>>  .../BaseCpuLib/LoongArch/InitializeFpu.S      |   51 + >>>  MdePkg/Library/BaseLib/BaseLib.inf            |    6 + >>>  MdePkg/Library/BaseLib/LoongArch64/AsmCsr.S   |  422 +++++ >>>  MdePkg/Library/BaseLib/LoongArch64/Cpucfg.S   |   26 + >>>  MdePkg/Library/BaseLib/LoongArch64/Csr.c      |   81 + >>>  .../BaseLib/LoongArch64/DisableInterrupts.S   |   22 +- >>>  .../BaseLib/LoongArch64/EnableInterrupts.S    |   22 +- >>>  .../BaseLib/LoongArch64/ExceptionBase.S       |   41 + >>>  MdePkg/Library/BaseLib/LoongArch64/IoCsr.S    |  120 ++ >>>  .../BaseLib/LoongArch64/ReadStableCounter.S   |   24 + >>>  MdePkg/MdePkg.ci.yaml                         |    3 +- >>>  .../Drivers/PciCpuIo2Dxe/PciCpuIo2Dxe.c       |  547 ++++++ >>>  .../Drivers/PciCpuIo2Dxe/PciCpuIo2Dxe.inf     |   45 + >>>  .../Drivers/StableTimerDxe/Timer.c            |  381 ++++ >>>  .../Drivers/StableTimerDxe/Timer.h            |  127 ++ >>>  .../Drivers/StableTimerDxe/TimerDxe.inf       |   41 + >>>  .../CollectApResourceLibNull.c                |   35 + >>>  .../CollectApResourceLibNull.inf              |   32 + >>>  .../CollectApResourceLibNull.uni              |    9 + >>>  .../EarlyFdtSerialPortLib16550.c              |  824 +++++++++ >>>  .../EarlyFdtSerialPortLib16550.inf            |   47 + >>>  .../EarlyFdt16550SerialPortHookLib.c          |  136 ++ >>>  .../EarlyFdt16550SerialPortHookLib.inf        |   36 + >>>  .../Fdt16550SerialPortHookLib.c               |   41 + >>>  .../Fdt16550SerialPortHookLib.inf             |   33 + >>>  .../Fdt16550SerialPortHookLib.uni             |   13 + >>>  .../FdtQemuFwCfgLib/FdtQemuFwCfgPeiLib.c      |  505 ++++++ >>>  .../FdtQemuFwCfgLib/FdtQemuFwCfgPeiLib.inf    |   42 + >>>  .../FdtQemuFwCfgLib/QemuFwCfgLibInternal.h    |   73 + >>>  .../Library/FdtQemuFwCfgLib/QemuFwCfgPei.c    |  117 ++ >>>  .../DxeLsRealTimeClockLib.c                   |  333 ++++ >>>  .../DxeLsRealTimeClockLib.inf                 |   42 + >>>  .../LsRealTimeClockLib/LsRealTimeClock.h      |   47 + >>>  .../PeiLsRealTimeClockLib.c                   |   31 + >>>  .../PeiLsRealTimeClockLib.inf                 |   29 + >>>  .../Library/NorFlashQemuLib/NorFlashQemuLib.c |  140 ++ >>>  .../NorFlashQemuLib/NorFlashQemuLib.inf       |   43 + >>>  .../PeiServicesTablePointer.c                 |   75 + >>>  .../PeiServicesTablePointerLib.inf            |   31 + >>>  .../PlatformBootManagerLib/PlatformBm.c       |  829 +++++++++ >>>  .../PlatformBootManagerLib/PlatformBm.h       |  112 ++ >>>  .../PlatformBootManagerLib.inf                |   73 + >>>  .../PlatformBootManagerLib/QemuKernel.c       |   81 + >>>  .../BaseResetSystemAcpiGed.c                  |  148 ++ >>>  .../BaseResetSystemAcpiGedLib.inf             |   37 + >>>  .../DxeResetSystemAcpiGed.c                   |  259 +++ >>>  .../DxeResetSystemAcpiGedLib.inf              |   41 + >>>  .../ResetSystemAcpiLib/ResetSystemAcpiGed.c   |  128 ++ >>>  .../ResetSystemAcpiLib/ResetSystemAcpiGed.h   |   23 + >>>  OvmfPkg/LoongArchVirt/LoongArchVirt.fdf.inc   |   34 + >>>  OvmfPkg/LoongArchVirt/LoongArchVirtQemu.dsc   |  675 +++++++ >>>  OvmfPkg/LoongArchVirt/LoongArchVirtQemu.fdf   |  313 ++++ >>>  OvmfPkg/LoongArchVirt/PlatformPei/Fv.c        |   40 + >>>  OvmfPkg/LoongArchVirt/PlatformPei/MemDetect.c |  203 +++ >>>  OvmfPkg/LoongArchVirt/PlatformPei/Platform.c  |  393 ++++ >>>  OvmfPkg/LoongArchVirt/PlatformPei/Platform.h  |  128 ++ >>>  .../LoongArchVirt/PlatformPei/PlatformPei.inf |   72 + >>>  OvmfPkg/LoongArchVirt/Sec/LoongArch64/Start.S |  176 ++ >>>  OvmfPkg/LoongArchVirt/Sec/SecMain.c           |  507 ++++++ >>>  OvmfPkg/LoongArchVirt/Sec/SecMain.inf         |   53 + >>>  OvmfPkg/LoongArchVirt/VarStore.fdf.inc        |   67 + >>>  OvmfPkg/OvmfPkg.dec                           |   15 + >>>  UefiCpuPkg/CpuDxeLoongArch64/CpuDxe.c         |  440 +++++ >>>  UefiCpuPkg/CpuDxeLoongArch64/CpuDxe.h         |  261 +++ >>>  UefiCpuPkg/CpuDxeLoongArch64/CpuDxe.inf       |   60 + >>>  UefiCpuPkg/CpuDxeLoongArch64/CpuDxe.uni       |   15 + >>>  UefiCpuPkg/CpuDxeLoongArch64/CpuMp.c          |  544 ++++++ >>>  UefiCpuPkg/CpuDxeLoongArch64/CpuMp.h          |  471 +++++ >>>  UefiCpuPkg/CpuDxeLoongArch64/Exception.c      |  150 ++ >>>  UefiCpuPkg/Include/Library/CpuMmuLib.h        |  194 ++ >>>  .../BaseLoongArch64CpuTimerLib.inf            |   30 + >>>  .../BaseLoongArch64CpuTimerLib.uni            |   15 + >>>  .../BaseLoongArch64CpuTimerLib/CpuTimerLib.c  |  226 +++ >>>  .../DxeCpuExceptionHandlerLib.inf             |   45 + >>>  .../DxeCpuExceptionHandlerLib.uni             |   15 + >>>  .../DxeExceptionLib.c                         |  202 +++ >>>  .../ExceptionCommon.c                         |  170 ++ >>>  .../ExceptionCommon.h                         |  111 ++ >>>  .../LoongArch64/ArchExceptionHandler.c        |  214 +++ >>>  .../LoongArch64/ExceptionHandlerAsm.S         |  320 ++++ >>>  .../SecPeiCpuExceptionHandlerLib.inf          |   45 + >>>  .../SecPeiCpuExceptionHandlerLib.uni          |   15 + >>>  .../SecPeiExceptionLib.c                      |   90 + >>>  .../LoongArch64CpuMmuLib/CommonMmuLib.c       |  963 ++++++++++ >>>  .../LoongArch64CpuMmuLib/CommonMmuLib.h       |   43 + >>>  .../LoongArch64CpuMmuLib/DxeCpuMmuLib.inf     |   37 + >>>  .../LoongArch64CpuMmuLib/DxeCpuMmuLib.uni     |   14 + >>>  .../Library/LoongArch64CpuMmuLib/Page.h       |  279 +++ >>>  .../LoongArch64CpuMmuLib/PeiCpuMmuLib.c       |  165 ++ >>>  .../LoongArch64CpuMmuLib/PeiCpuMmuLib.inf     |   44 + >>>  .../LoongArch64CpuMmuLib/PeiCpuMmuLib.uni     |   14 + >>>  UefiCpuPkg/Library/LoongArch64CpuMmuLib/Tlb.h |   48 + >>>  .../LoongArch64CpuMmuLib/TlbOperation.S       |   44 + >>>  .../LoongArch64MpInitLib/DxeMpInitLib.inf     |   45 + >>>  .../LoongArch64MpInitLib/DxeMpInitLib.uni     |   15 + >>>  .../Library/LoongArch64MpInitLib/DxeMpLib.c   |  481 +++++ >>>  .../Library/LoongArch64MpInitLib/MpLib.c      | 1596 +++++++++++++++++ >>>  .../Library/LoongArch64MpInitLib/MpLib.h      |  361 ++++ >>>  .../LoongArch64MpInitLib/PeiMpInitLib.inf     |   37 + >>>  .../LoongArch64MpInitLib/PeiMpInitLib.uni     |   15 + >>>  .../Library/LoongArch64MpInitLib/PeiMpLib.c   |  404 +++++ >>>  UefiCpuPkg/UefiCpuPkg.dec                     |   10 + >>>  UefiCpuPkg/UefiCpuPkg.dsc                     |   10 + >>>  127 files changed, 18478 insertions(+), 84 deletions(-) >>>  create mode 100644 MdePkg/Include/Register/LoongArch64/Cpucfg.h >>>  create mode 100644 MdePkg/Include/Register/LoongArch64/Csr.h >>>  create mode 100644 MdePkg/Library/BaseCpuLib/LoongArch/DisableFpu.S >>>  create mode 100644 MdePkg/Library/BaseCpuLib/LoongArch/EnableFpu.S >>>  create mode 100644 MdePkg/Library/BaseCpuLib/LoongArch/InitializeFpu.S >>>  create mode 100644 MdePkg/Library/BaseLib/LoongArch64/AsmCsr.S >>>  create mode 100644 MdePkg/Library/BaseLib/LoongArch64/Cpucfg.S >>>  create mode 100644 MdePkg/Library/BaseLib/LoongArch64/Csr.c >>>  create mode 100644 MdePkg/Library/BaseLib/LoongArch64/ExceptionBase.S >>>  create mode 100644 MdePkg/Library/BaseLib/LoongArch64/IoCsr.S >>>  create mode 100644 >>> MdePkg/Library/BaseLib/LoongArch64/ReadStableCounter.S >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Drivers/PciCpuIo2Dxe/PciCpuIo2Dxe.c >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Drivers/PciCpuIo2Dxe/PciCpuIo2Dxe.inf >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Drivers/StableTimerDxe/Timer.c >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Drivers/StableTimerDxe/Timer.h >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Drivers/StableTimerDxe/TimerDxe.inf >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/CollectApResouceLibNull/CollectApResourceLibNull.c >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/CollectApResouceLibNull/CollectApResourceLibNull.inf >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/CollectApResouceLibNull/CollectApResourceLibNull.uni >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/EarlyFdtSerialPortLib16550/EarlyFdtSerialPortLib16550.c >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/EarlyFdtSerialPortLib16550/EarlyFdtSerialPortLib16550.inf >>>  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 >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/FdtQemuFwCfgLib/FdtQemuFwCfgPeiLib.c >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/FdtQemuFwCfgLib/FdtQemuFwCfgPeiLib.inf >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/FdtQemuFwCfgLib/QemuFwCfgLibInternal.h >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/FdtQemuFwCfgLib/QemuFwCfgPei.c >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/LsRealTimeClockLib/DxeLsRealTimeClockLib.c >>> >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/LsRealTimeClockLib/DxeLsRealTimeClockLib.inf >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/LsRealTimeClockLib/LsRealTimeClock.h >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/LsRealTimeClockLib/PeiLsRealTimeClockLib.c >>> >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/LsRealTimeClockLib/PeiLsRealTimeClockLib.inf >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/NorFlashQemuLib/NorFlashQemuLib.c >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/NorFlashQemuLib/NorFlashQemuLib.inf >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointer.c >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/PlatformBootManagerLib/PlatformBm.c >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/PlatformBootManagerLib/PlatformBm.h >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/PlatformBootManagerLib/QemuKernel.c >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/ResetSystemAcpiLib/BaseResetSystemAcpiGed.c >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/ResetSystemAcpiLib/BaseResetSystemAcpiGedLib.inf >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/ResetSystemAcpiLib/DxeResetSystemAcpiGed.c >>> >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/ResetSystemAcpiLib/DxeResetSystemAcpiGedLib.inf >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/ResetSystemAcpiLib/ResetSystemAcpiGed.c >>>  create mode 100644 >>> OvmfPkg/LoongArchVirt/Library/ResetSystemAcpiLib/ResetSystemAcpiGed.h >>>  create mode 100644 OvmfPkg/LoongArchVirt/LoongArchVirt.fdf.inc >>>  create mode 100644 OvmfPkg/LoongArchVirt/LoongArchVirtQemu.dsc >>>  create mode 100644 OvmfPkg/LoongArchVirt/LoongArchVirtQemu.fdf >>>  create mode 100644 OvmfPkg/LoongArchVirt/PlatformPei/Fv.c >>>  create mode 100644 OvmfPkg/LoongArchVirt/PlatformPei/MemDetect.c >>>  create mode 100644 OvmfPkg/LoongArchVirt/PlatformPei/Platform.c >>>  create mode 100644 OvmfPkg/LoongArchVirt/PlatformPei/Platform.h >>>  create mode 100644 OvmfPkg/LoongArchVirt/PlatformPei/PlatformPei.inf >>>  create mode 100644 OvmfPkg/LoongArchVirt/Sec/LoongArch64/Start.S >>>  create mode 100644 OvmfPkg/LoongArchVirt/Sec/SecMain.c >>>  create mode 100644 OvmfPkg/LoongArchVirt/Sec/SecMain.inf >>>  create mode 100644 OvmfPkg/LoongArchVirt/VarStore.fdf.inc >>>  create mode 100644 UefiCpuPkg/CpuDxeLoongArch64/CpuDxe.c >>>  create mode 100644 UefiCpuPkg/CpuDxeLoongArch64/CpuDxe.h >>>  create mode 100644 UefiCpuPkg/CpuDxeLoongArch64/CpuDxe.inf >>>  create mode 100644 UefiCpuPkg/CpuDxeLoongArch64/CpuDxe.uni >>>  create mode 100644 UefiCpuPkg/CpuDxeLoongArch64/CpuMp.c >>>  create mode 100644 UefiCpuPkg/CpuDxeLoongArch64/CpuMp.h >>>  create mode 100644 UefiCpuPkg/CpuDxeLoongArch64/Exception.c >>>  create mode 100644 UefiCpuPkg/Include/Library/CpuMmuLib.h >>>  create mode 100644 >>> UefiCpuPkg/Library/BaseLoongArch64CpuTimerLib/BaseLoongArch64CpuTimerLib.inf >>>  create mode 100644 >>> UefiCpuPkg/Library/BaseLoongArch64CpuTimerLib/BaseLoongArch64CpuTimerLib.uni >>>  create mode 100644 >>> UefiCpuPkg/Library/BaseLoongArch64CpuTimerLib/CpuTimerLib.c >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib.inf >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib.uni >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/DxeExceptionLib.c >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/ExceptionCommon.c >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/ExceptionCommon.h >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/LoongArch64/ArchExceptionHandler.c >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/LoongArch64/ExceptionHandlerAsm.S >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib.inf >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib.uni >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/SecPeiExceptionLib.c >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuMmuLib/CommonMmuLib.c >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuMmuLib/CommonMmuLib.h >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuMmuLib/DxeCpuMmuLib.inf >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuMmuLib/DxeCpuMmuLib.uni >>>  create mode 100644 UefiCpuPkg/Library/LoongArch64CpuMmuLib/Page.h >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuMmuLib/PeiCpuMmuLib.c >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuMmuLib/PeiCpuMmuLib.inf >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuMmuLib/PeiCpuMmuLib.uni >>>  create mode 100644 UefiCpuPkg/Library/LoongArch64CpuMmuLib/Tlb.h >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64CpuMmuLib/TlbOperation.S >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64MpInitLib/DxeMpInitLib.inf >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64MpInitLib/DxeMpInitLib.uni >>>  create mode 100644 UefiCpuPkg/Library/LoongArch64MpInitLib/DxeMpLib.c >>>  create mode 100644 UefiCpuPkg/Library/LoongArch64MpInitLib/MpLib.c >>>  create mode 100644 UefiCpuPkg/Library/LoongArch64MpInitLib/MpLib.h >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64MpInitLib/PeiMpInitLib.inf >>>  create mode 100644 >>> UefiCpuPkg/Library/LoongArch64MpInitLib/PeiMpInitLib.uni >>>  create mode 100644 UefiCpuPkg/Library/LoongArch64MpInitLib/PeiMpLib.c >>> >> -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#110616): https://edk2.groups.io/g/devel/message/110616 Mute This Topic: https://groups.io/mt/102355705/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=- --------------P2cuI9xKRM0b23WTQf4xKiBo Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

Hi Bibo,

Yes, you are right, MpInitLib is most used on the physical machines, but in LoongArch, this library is a public library, so it is the minimum requirement that it can worke on physical machines and virtual machines. This library has been tested on the actual and virtual machines to ensure it works right.


Thanks,
Chao
在 2023/11/3 15:51, maobibo 写道:


On 2023/11/3 下午3:08, Chao Li wrote:
Hi Ray,

Thanks for review.


I think the MpInitLib is necessary, because this library will serve PEI and DEX phases. In LoongArch, the MP initialization function will be  called first in the PEI phase. It will wake up all of AP, collect accurate online cores, and all APs will fill in their self information to prepare for next wakeup.

The second time the MP initialization function is called will in DXE phase, usually located CpuDxe, I guess you are checked this code. This time the MP service HOB will be brought from PEI to DXE phase, and the MP protocal will be registered to prepare for service DXE phase.

Like you saied, why not use the MP PPI? I think it's just that the code hasn't been added yet, and I think LoongArch will definitely need the MP PPI in the future, like memory trainning, configure APs local registers, etc.

It is necessary for physical machine like memory trainning/configure APs local register etc, however I doubt whether it is useful for LoongArch virt-machine, I do not see the advantages for wakeup APs in UEFI BIOS. ACPI FADT table is prepared in qemu side rather than BIOS side.

Regards
Bibo Mao


Thanks,
Chao
在 2023/11/3 13:10, Ni, Ray 写道:
Chao,
MpInitLib is to avoid code duplication between CpuMpPeim and CpuDxe.
If you only need MP protocol but not MP PPI, do you still need to add MpInitLib?
Can MpInitLib code be included in CpuDxe folder?

Thanks,
Ray
------------------------------------------------------------------------
*From:* Chao Li <lichao@loongson.cn>
*Sent:* Friday, November 3, 2023 9:03 AM
*To:* devel@edk2.groups.io <devel@edk2.groups.io>
*Cc:* Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming <gaoliming@byosoft.com.cn>; Liu, Zhiguang <zhiguang.liu@intel.com>; Dong, Eric <eric.dong@intel.com>; Ni, Ray <ray.ni@intel.com>; Kumar, Rahul R <rahul.r.kumar@intel.com>; Gerd Hoffmann <kraxel@redhat.com>; Leif Lindholm <quic_llindhol@quicinc.com>; Ard Biesheuvel <ardb+tianocore@kernel.org>; Abner Chang <abner.chang@amd.com>; Daniel Schaefer <git@danielschaefer.me>; Sami Mujawar <sami.mujawar@arm.com>; Yao, Jiewen <jiewen.yao@intel.com>; Justen, Jordan L <jordan.l.justen@intel.com>
*Subject:* [PATCH v1 00/29] Enable LoongArch virtual machine in edk2
This patch set will enable LoongArch virtual machine in edk2, the new
LoongArch virtual machine is located in OvmfPkg/LoongArchVirt/, it is a
generic platform that dose not require any actual hardware.

Patch1-Patch14: Submit the common library and driver for LoongArch
virtual machine and real hardware. Such as base help functions,
exception handel, MMU library, multiprocessor library etc.

Patch15-Patch16: Add PrePiCpuIoSize for LoongArch64. and move ArmVirtPkg
two PCDs into OvmfPkg for easier use by other architectures.

Patch17-Patch29: LoongArch virtual machine private code, include SEC and
PEI phase code, some library and drivers.

Modfied modues: MdePkg, UefiCpuPkg, EmbeddedPkg, ArmVirtPkg, OvmfPkg.

BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4584

Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Leif Lindholm <quic_llindhol@quicinc.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Abner Chang <abner.chang@amd.com>
Cc: Daniel Schaefer <git@danielschaefer.me>
Cc: Sami Mujawar <sami.mujawar@arm.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Jordan Justen <jordan.l.justen@intel.com>

Chao Li (29):
  MdePkg: Add the header file named Csr.h for LoongArch64
  MdePkg: Add LoongArch64 FPU function set into BaseCpuLib
  MdePkg: Add LoongArch64 exception function set into BaseLib
  MdePkg: Add LoongArch64 local interrupt function set into BaseLib
  MdePkg: Add LoongArch Cpucfg function
  MdePkg: Add read stable counter operation for LoongArch
  MdePkg: Add CSR operation for LoongArch
  MdePkg: Add IOCSR operation for LoongArch
  UefiCpuPkg: Add LoongArch64 CPU Timer library
  UefiCpuPkg: Add CPU exception library for LoongArch
  UefiCpuPkg: Add CpuMmuLib.h to UefiCpuPkg
  UefiCpuPkg: Add LoongArch64CpuMmuLib to UefiCpuPkg
  UefiCpuPkg: Add multiprocessor library for LoongArch64
  UefiCpuPkg: Add CpuDxe driver for LoongArch64
  EmbeddedPkg: Add PcdPrePiCpuIoSize width for LOONGARCH64
  ArmVirtPkg: Move PCD of FDT base address and FDT padding to OvmfPkg
  OvmfPkg/LoongArchVirt: Add PciCpuIo2Dxe module
  OvmfPkg/LoongArchVirt: Add stable timer driver
  OvmfPkg/LoongArchVirt: Add a NULL library named
    CollectApResouceLibNull
  OvmfPkg/LoongArchVirt: Add serial port library
  OvmfPkg/LoongArchVirt: Add real time clock library
  OvmfPkg/LoongArchVirt: Add NorFlashQemuLib
  OvmfPkg/LoongArchVirt: Add PeiServiceTablePointerLib
  OvmfPkg/LoongArchVirt: Add platform boot manager library
  OvmfPkg/LoongArchVirt: Add FdtQemuFwCfgLib
  OvmfPkg/LoongArchVirt: Add reset system library
  OvmfPkg/LoongArchVirt: Support SEC phase
  OvmfPkg/LoongArchVirt: Support PEI phase
  OvmfPkg/LoongArchVirt: Add build file

 ArmVirtPkg/ArmVirtCloudHv.dsc                 |    2 +-
 ArmVirtPkg/ArmVirtKvmTool.dsc                 |    2 +-
 ArmVirtPkg/ArmVirtPkg.dec                     |   14 -
 ArmVirtPkg/ArmVirtQemu.dsc                    |    2 +-
 ArmVirtPkg/ArmVirtQemuKernel.dsc              |    2 +-
 ArmVirtPkg/ArmVirtXen.dsc                     |    2 +-
 .../ArmVirtPsciResetSystemPeiLib.inf          |    3 +-
 .../CloudHvVirtMemInfoPeiLib.inf              |    3 +-
 .../DebugLibFdtPL011UartFlash.inf             |    3 +-
 .../EarlyFdt16550SerialPortHookLib.inf        |    3 +-
 .../EarlyFdtPL011SerialPortLib.inf            |    3 +-
 .../KvmtoolPlatformPeiLib.inf                 |    5 +-
 .../Library/PlatformPeiLib/PlatformPeiLib.inf |   10 +-
 .../QemuVirtMemInfoPeiLib.inf                 |    3 +-
 .../PrePi/ArmVirtPrePiUniCoreRelocatable.inf  |    3 +-
 EmbeddedPkg/EmbeddedPkg.dec                   |    3 +
 MdePkg/Include/Library/BaseLib.h              |  221 +++
 MdePkg/Include/Library/CpuLib.h               |   37 +-
 MdePkg/Include/Protocol/DebugSupport.h        |   76 +-
 MdePkg/Include/Register/LoongArch64/Cpucfg.h  |  565 ++++++
 MdePkg/Include/Register/LoongArch64/Csr.h     |  221 +++
 MdePkg/Library/BaseCpuLib/BaseCpuLib.inf      |    7 +-
 .../Library/BaseCpuLib/LoongArch/DisableFpu.S |   17 +
 .../Library/BaseCpuLib/LoongArch/EnableFpu.S  |   17 +
 .../BaseCpuLib/LoongArch/InitializeFpu.S      |   51 +
 MdePkg/Library/BaseLib/BaseLib.inf            |    6 +
 MdePkg/Library/BaseLib/LoongArch64/AsmCsr.S   |  422 +++++
 MdePkg/Library/BaseLib/LoongArch64/Cpucfg.S   |   26 +
 MdePkg/Library/BaseLib/LoongArch64/Csr.c      |   81 +
 .../BaseLib/LoongArch64/DisableInterrupts.S   |   22 +-
 .../BaseLib/LoongArch64/EnableInterrupts.S    |   22 +-
 .../BaseLib/LoongArch64/ExceptionBase.S       |   41 +
 MdePkg/Library/BaseLib/LoongArch64/IoCsr.S    |  120 ++
 .../BaseLib/LoongArch64/ReadStableCounter.S   |   24 +
 MdePkg/MdePkg.ci.yaml                         |    3 +-
 .../Drivers/PciCpuIo2Dxe/PciCpuIo2Dxe.c       |  547 ++++++
 .../Drivers/PciCpuIo2Dxe/PciCpuIo2Dxe.inf     |   45 +
 .../Drivers/StableTimerDxe/Timer.c            |  381 ++++
 .../Drivers/StableTimerDxe/Timer.h            |  127 ++
 .../Drivers/StableTimerDxe/TimerDxe.inf       |   41 +
 .../CollectApResourceLibNull.c                |   35 +
 .../CollectApResourceLibNull.inf              |   32 +
 .../CollectApResourceLibNull.uni              |    9 +
 .../EarlyFdtSerialPortLib16550.c              |  824 +++++++++
 .../EarlyFdtSerialPortLib16550.inf            |   47 +
 .../EarlyFdt16550SerialPortHookLib.c          |  136 ++
 .../EarlyFdt16550SerialPortHookLib.inf        |   36 +
 .../Fdt16550SerialPortHookLib.c               |   41 +
 .../Fdt16550SerialPortHookLib.inf             |   33 +
 .../Fdt16550SerialPortHookLib.uni             |   13 +
 .../FdtQemuFwCfgLib/FdtQemuFwCfgPeiLib.c      |  505 ++++++
 .../FdtQemuFwCfgLib/FdtQemuFwCfgPeiLib.inf    |   42 +
 .../FdtQemuFwCfgLib/QemuFwCfgLibInternal.h    |   73 +
 .../Library/FdtQemuFwCfgLib/QemuFwCfgPei.c    |  117 ++
 .../DxeLsRealTimeClockLib.c                   |  333 ++++
 .../DxeLsRealTimeClockLib.inf                 |   42 +
 .../LsRealTimeClockLib/LsRealTimeClock.h      |   47 +
 .../PeiLsRealTimeClockLib.c                   |   31 +
 .../PeiLsRealTimeClockLib.inf                 |   29 +
 .../Library/NorFlashQemuLib/NorFlashQemuLib.c |  140 ++
 .../NorFlashQemuLib/NorFlashQemuLib.inf       |   43 +
 .../PeiServicesTablePointer.c                 |   75 +
 .../PeiServicesTablePointerLib.inf            |   31 +
 .../PlatformBootManagerLib/PlatformBm.c       |  829 +++++++++
 .../PlatformBootManagerLib/PlatformBm.h       |  112 ++
 .../PlatformBootManagerLib.inf                |   73 +
 .../PlatformBootManagerLib/QemuKernel.c       |   81 +
 .../BaseResetSystemAcpiGed.c                  |  148 ++
 .../BaseResetSystemAcpiGedLib.inf             |   37 +
 .../DxeResetSystemAcpiGed.c                   |  259 +++
 .../DxeResetSystemAcpiGedLib.inf              |   41 +
 .../ResetSystemAcpiLib/ResetSystemAcpiGed.c   |  128 ++
 .../ResetSystemAcpiLib/ResetSystemAcpiGed.h   |   23 +
 OvmfPkg/LoongArchVirt/LoongArchVirt.fdf.inc   |   34 +
 OvmfPkg/LoongArchVirt/LoongArchVirtQemu.dsc   |  675 +++++++
 OvmfPkg/LoongArchVirt/LoongArchVirtQemu.fdf   |  313 ++++
 OvmfPkg/LoongArchVirt/PlatformPei/Fv.c        |   40 +
 OvmfPkg/LoongArchVirt/PlatformPei/MemDetect.c |  203 +++
 OvmfPkg/LoongArchVirt/PlatformPei/Platform.c  |  393 ++++
 OvmfPkg/LoongArchVirt/PlatformPei/Platform.h  |  128 ++
 .../LoongArchVirt/PlatformPei/PlatformPei.inf |   72 +
 OvmfPkg/LoongArchVirt/Sec/LoongArch64/Start.S |  176 ++
 OvmfPkg/LoongArchVirt/Sec/SecMain.c           |  507 ++++++
 OvmfPkg/LoongArchVirt/Sec/SecMain.inf         |   53 +
 OvmfPkg/LoongArchVirt/VarStore.fdf.inc        |   67 +
 OvmfPkg/OvmfPkg.dec                           |   15 +
 UefiCpuPkg/CpuDxeLoongArch64/CpuDxe.c         |  440 +++++
 UefiCpuPkg/CpuDxeLoongArch64/CpuDxe.h         |  261 +++
 UefiCpuPkg/CpuDxeLoongArch64/CpuDxe.inf       |   60 +
 UefiCpuPkg/CpuDxeLoongArch64/CpuDxe.uni       |   15 +
 UefiCpuPkg/CpuDxeLoongArch64/CpuMp.c          |  544 ++++++
 UefiCpuPkg/CpuDxeLoongArch64/CpuMp.h          |  471 +++++
 UefiCpuPkg/CpuDxeLoongArch64/Exception.c      |  150 ++
 UefiCpuPkg/Include/Library/CpuMmuLib.h        |  194 ++
 .../BaseLoongArch64CpuTimerLib.inf            |   30 +
 .../BaseLoongArch64CpuTimerLib.uni            |   15 +
 .../BaseLoongArch64CpuTimerLib/CpuTimerLib.c  |  226 +++
 .../DxeCpuExceptionHandlerLib.inf             |   45 +
 .../DxeCpuExceptionHandlerLib.uni             |   15 +
 .../DxeExceptionLib.c                         |  202 +++
 .../ExceptionCommon.c                         |  170 ++
 .../ExceptionCommon.h                         |  111 ++
 .../LoongArch64/ArchExceptionHandler.c        |  214 +++
 .../LoongArch64/ExceptionHandlerAsm.S         |  320 ++++
 .../SecPeiCpuExceptionHandlerLib.inf          |   45 +
 .../SecPeiCpuExceptionHandlerLib.uni          |   15 +
 .../SecPeiExceptionLib.c                      |   90 +
 .../LoongArch64CpuMmuLib/CommonMmuLib.c       |  963 ++++++++++
 .../LoongArch64CpuMmuLib/CommonMmuLib.h       |   43 +
 .../LoongArch64CpuMmuLib/DxeCpuMmuLib.inf     |   37 +
 .../LoongArch64CpuMmuLib/DxeCpuMmuLib.uni     |   14 +
 .../Library/LoongArch64CpuMmuLib/Page.h       |  279 +++
 .../LoongArch64CpuMmuLib/PeiCpuMmuLib.c       |  165 ++
 .../LoongArch64CpuMmuLib/PeiCpuMmuLib.inf     |   44 +
 .../LoongArch64CpuMmuLib/PeiCpuMmuLib.uni     |   14 +
 UefiCpuPkg/Library/LoongArch64CpuMmuLib/Tlb.h |   48 +
 .../LoongArch64CpuMmuLib/TlbOperation.S       |   44 +
 .../LoongArch64MpInitLib/DxeMpInitLib.inf     |   45 +
 .../LoongArch64MpInitLib/DxeMpInitLib.uni     |   15 +
 .../Library/LoongArch64MpInitLib/DxeMpLib.c   |  481 +++++
 .../Library/LoongArch64MpInitLib/MpLib.c      | 1596 +++++++++++++++++
 .../Library/LoongArch64MpInitLib/MpLib.h      |  361 ++++
 .../LoongArch64MpInitLib/PeiMpInitLib.inf     |   37 +
 .../LoongArch64MpInitLib/PeiMpInitLib.uni     |   15 +
 .../Library/LoongArch64MpInitLib/PeiMpLib.c   |  404 +++++
 UefiCpuPkg/UefiCpuPkg.dec                     |   10 +
 UefiCpuPkg/UefiCpuPkg.dsc                     |   10 +
 127 files changed, 18478 insertions(+), 84 deletions(-)
 create mode 100644 MdePkg/Include/Register/LoongArch64/Cpucfg.h
 create mode 100644 MdePkg/Include/Register/LoongArch64/Csr.h
 create mode 100644 MdePkg/Library/BaseCpuLib/LoongArch/DisableFpu.S
 create mode 100644 MdePkg/Library/BaseCpuLib/LoongArch/EnableFpu.S
 create mode 100644 MdePkg/Library/BaseCpuLib/LoongArch/InitializeFpu.S
 create mode 100644 MdePkg/Library/BaseLib/LoongArch64/AsmCsr.S
 create mode 100644 MdePkg/Library/BaseLib/LoongArch64/Cpucfg.S
 create mode 100644 MdePkg/Library/BaseLib/LoongArch64/Csr.c
 create mode 100644 MdePkg/Library/BaseLib/LoongArch64/ExceptionBase.S
 create mode 100644 MdePkg/Library/BaseLib/LoongArch64/IoCsr.S
 create mode 100644 MdePkg/Library/BaseLib/LoongArch64/ReadStableCounter.S
 create mode 100644 OvmfPkg/LoongArchVirt/Drivers/PciCpuIo2Dxe/PciCpuIo2Dxe.c
 create mode 100644 OvmfPkg/LoongArchVirt/Drivers/PciCpuIo2Dxe/PciCpuIo2Dxe.inf
 create mode 100644 OvmfPkg/LoongArchVirt/Drivers/StableTimerDxe/Timer.c
 create mode 100644 OvmfPkg/LoongArchVirt/Drivers/StableTimerDxe/Timer.h
 create mode 100644 OvmfPkg/LoongArchVirt/Drivers/StableTimerDxe/TimerDxe.inf
 create mode 100644 OvmfPkg/LoongArchVirt/Library/CollectApResouceLibNull/CollectApResourceLibNull.c
 create mode 100644 OvmfPkg/LoongArchVirt/Library/CollectApResouceLibNull/CollectApResourceLibNull.inf
 create mode 100644 OvmfPkg/LoongArchVirt/Library/CollectApResouceLibNull/CollectApResourceLibNull.uni
 create mode 100644 OvmfPkg/LoongArchVirt/Library/EarlyFdtSerialPortLib16550/EarlyFdtSerialPortLib16550.c
 create mode 100644 OvmfPkg/LoongArchVirt/Library/EarlyFdtSerialPortLib16550/EarlyFdtSerialPortLib16550.inf
 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
 create mode 100644 OvmfPkg/LoongArchVirt/Library/FdtQemuFwCfgLib/FdtQemuFwCfgPeiLib.c
 create mode 100644 OvmfPkg/LoongArchVirt/Library/FdtQemuFwCfgLib/FdtQemuFwCfgPeiLib.inf
 create mode 100644 OvmfPkg/LoongArchVirt/Library/FdtQemuFwCfgLib/QemuFwCfgLibInternal.h
 create mode 100644 OvmfPkg/LoongArchVirt/Library/FdtQemuFwCfgLib/QemuFwCfgPei.c
 create mode 100644 OvmfPkg/LoongArchVirt/Library/LsRealTimeClockLib/DxeLsRealTimeClockLib.c
 create mode 100644 OvmfPkg/LoongArchVirt/Library/LsRealTimeClockLib/DxeLsRealTimeClockLib.inf
 create mode 100644 OvmfPkg/LoongArchVirt/Library/LsRealTimeClockLib/LsRealTimeClock.h
 create mode 100644 OvmfPkg/LoongArchVirt/Library/LsRealTimeClockLib/PeiLsRealTimeClockLib.c
 create mode 100644 OvmfPkg/LoongArchVirt/Library/LsRealTimeClockLib/PeiLsRealTimeClockLib.inf
 create mode 100644 OvmfPkg/LoongArchVirt/Library/NorFlashQemuLib/NorFlashQemuLib.c
 create mode 100644 OvmfPkg/LoongArchVirt/Library/NorFlashQemuLib/NorFlashQemuLib.inf
 create mode 100644 OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointer.c
 create mode 100644 OvmfPkg/LoongArchVirt/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
 create mode 100644 OvmfPkg/LoongArchVirt/Library/PlatformBootManagerLib/PlatformBm.c
 create mode 100644 OvmfPkg/LoongArchVirt/Library/PlatformBootManagerLib/PlatformBm.h
 create mode 100644 OvmfPkg/LoongArchVirt/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
 create mode 100644 OvmfPkg/LoongArchVirt/Library/PlatformBootManagerLib/QemuKernel.c
 create mode 100644 OvmfPkg/LoongArchVirt/Library/ResetSystemAcpiLib/BaseResetSystemAcpiGed.c
 create mode 100644 OvmfPkg/LoongArchVirt/Library/ResetSystemAcpiLib/BaseResetSystemAcpiGedLib.inf
 create mode 100644 OvmfPkg/LoongArchVirt/Library/ResetSystemAcpiLib/DxeResetSystemAcpiGed.c
 create mode 100644 OvmfPkg/LoongArchVirt/Library/ResetSystemAcpiLib/DxeResetSystemAcpiGedLib.inf
 create mode 100644 OvmfPkg/LoongArchVirt/Library/ResetSystemAcpiLib/ResetSystemAcpiGed.c
 create mode 100644 OvmfPkg/LoongArchVirt/Library/ResetSystemAcpiLib/ResetSystemAcpiGed.h
 create mode 100644 OvmfPkg/LoongArchVirt/LoongArchVirt.fdf.inc
 create mode 100644 OvmfPkg/LoongArchVirt/LoongArchVirtQemu.dsc
 create mode 100644 OvmfPkg/LoongArchVirt/LoongArchVirtQemu.fdf
 create mode 100644 OvmfPkg/LoongArchVirt/PlatformPei/Fv.c
 create mode 100644 OvmfPkg/LoongArchVirt/PlatformPei/MemDetect.c
 create mode 100644 OvmfPkg/LoongArchVirt/PlatformPei/Platform.c
 create mode 100644 OvmfPkg/LoongArchVirt/PlatformPei/Platform.h
 create mode 100644 OvmfPkg/LoongArchVirt/PlatformPei/PlatformPei.inf
 create mode 100644 OvmfPkg/LoongArchVirt/Sec/LoongArch64/Start.S
 create mode 100644 OvmfPkg/LoongArchVirt/Sec/SecMain.c
 create mode 100644 OvmfPkg/LoongArchVirt/Sec/SecMain.inf
 create mode 100644 OvmfPkg/LoongArchVirt/VarStore.fdf.inc
 create mode 100644 UefiCpuPkg/CpuDxeLoongArch64/CpuDxe.c
 create mode 100644 UefiCpuPkg/CpuDxeLoongArch64/CpuDxe.h
 create mode 100644 UefiCpuPkg/CpuDxeLoongArch64/CpuDxe.inf
 create mode 100644 UefiCpuPkg/CpuDxeLoongArch64/CpuDxe.uni
 create mode 100644 UefiCpuPkg/CpuDxeLoongArch64/CpuMp.c
 create mode 100644 UefiCpuPkg/CpuDxeLoongArch64/CpuMp.h
 create mode 100644 UefiCpuPkg/CpuDxeLoongArch64/Exception.c
 create mode 100644 UefiCpuPkg/Include/Library/CpuMmuLib.h
 create mode 100644 UefiCpuPkg/Library/BaseLoongArch64CpuTimerLib/BaseLoongArch64CpuTimerLib.inf
 create mode 100644 UefiCpuPkg/Library/BaseLoongArch64CpuTimerLib/BaseLoongArch64CpuTimerLib.uni
 create mode 100644 UefiCpuPkg/Library/BaseLoongArch64CpuTimerLib/CpuTimerLib.c
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib.inf
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib.uni
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/DxeExceptionLib.c
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/ExceptionCommon.c
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/ExceptionCommon.h
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/LoongArch64/ArchExceptionHandler.c
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/LoongArch64/ExceptionHandlerAsm.S
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib.inf
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/SecPeiCpuExceptionHandlerLib.uni
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuExceptionHandlerLib/SecPeiExceptionLib.c
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuMmuLib/CommonMmuLib.c
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuMmuLib/CommonMmuLib.h
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuMmuLib/DxeCpuMmuLib.inf
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuMmuLib/DxeCpuMmuLib.uni
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuMmuLib/Page.h
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuMmuLib/PeiCpuMmuLib.c
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuMmuLib/PeiCpuMmuLib.inf
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuMmuLib/PeiCpuMmuLib.uni
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuMmuLib/Tlb.h
 create mode 100644 UefiCpuPkg/Library/LoongArch64CpuMmuLib/TlbOperation.S
 create mode 100644 UefiCpuPkg/Library/LoongArch64MpInitLib/DxeMpInitLib.inf
 create mode 100644 UefiCpuPkg/Library/LoongArch64MpInitLib/DxeMpInitLib.uni
 create mode 100644 UefiCpuPkg/Library/LoongArch64MpInitLib/DxeMpLib.c
 create mode 100644 UefiCpuPkg/Library/LoongArch64MpInitLib/MpLib.c
 create mode 100644 UefiCpuPkg/Library/LoongArch64MpInitLib/MpLib.h
 create mode 100644 UefiCpuPkg/Library/LoongArch64MpInitLib/PeiMpInitLib.inf
 create mode 100644 UefiCpuPkg/Library/LoongArch64MpInitLib/PeiMpInitLib.uni
 create mode 100644 UefiCpuPkg/Library/LoongArch64MpInitLib/PeiMpLib.c

_._,_._,_

Groups.io Links:

You receive all messages sent to this group.

View/Reply Online (#110616) | | Mute This Topic | New Topic
Your Subscription | Contact Group Owner | Unsubscribe [rebecca@openfw.io]

_._,_._,_
--------------P2cuI9xKRM0b23WTQf4xKiBo--