From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from loongson.cn (loongson.cn [114.242.206.163]) by mx.groups.io with SMTP id smtpd.web10.6217.1668652800408281786 for ; Wed, 16 Nov 2022 18:40:01 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: loongson.cn, ip: 114.242.206.163, mailfrom: lixianglai@loongson.cn) Received: from loongson.cn (unknown [10.2.5.185]) by gateway (Coremail) with SMTP id _____8Bx67X8nnVj7SMIAA--.3894S3; Thu, 17 Nov 2022 10:39:56 +0800 (CST) Received: from localhost.localdomain (unknown [10.2.5.185]) by localhost.localdomain (Coremail) with SMTP id AQAAf8DxLeD5nnVjCpcVAA--.56818S2; Thu, 17 Nov 2022 10:39:53 +0800 (CST) From: "xianglai" To: devel@edk2.groups.io Cc: Ard Biesheuvel , Bibo Mao , Chao Li , Leif Lindholm , Liming Gao , Michael D Kinney Subject: [edk2-platforms][PATCH V6 00/16] Platform: Add Loongson support. Date: Thu, 17 Nov 2022 10:39:26 +0800 Message-Id: X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-CM-TRANSID: AQAAf8DxLeD5nnVjCpcVAA--.56818S2 X-CM-SenderInfo: 5ol0xt5qjotxo6or00hjvr0hdfq/ X-Coremail-Antispam: 1Uk129KBjvAXoW3Zw17XryUtF15GFW8AFyrZwb_yoW8GF1fWo W8JFZruw4UJr1fAa4v9wnxJrWxX3W2gw4Fqr40vFWUZFZIkryqqFs8Ja4xWF15ZFy3Aw15 G34rK3ykJFW2qrZ3n29KB7ZKAUJUUUU8529EdanIXcx71UUUUU7KY7ZEXasCq-sGcSsGvf J3Ic02F40EFcxC0VAKzVAqx4xG6I80ebIjqfuFe4nvWSU5nxnvy29KBjDU0xBIdaVrnRJU UUqq1xkIjI8I6I8E6xAIw20EY4v20xvaj40_Wr0E3s1l8cAvFVAK0II2c7xJM28CjxkF64 kEwVA0rcxSw2x7M28EF7xvwVC0I7IYx2IY67AKxVW8JVW5JwA2z4x0Y4vE2Ix0cI8IcVCY 1x0267AKxVW8JVWxJwA2z4x0Y4vEx4A2jsIE14v26r4UJVWxJr1l84ACjcxK6I8E87Iv6x kF7I0E14v26r4UJVWxJr1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqjxCEc2xF0cIa020E x4CE44I27wAqx4xG64xvF2IEw4CE5I8CrVC2j2WlYx0E74AGY7Cv6cx26rWlOx8S6xCaFV Cjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JMxAIw28IcxkI7VAKI48JMxAIw28IcVCjz48v 1sIEY20_WwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r18MI8I3I 0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIxkGc2Ij64vIr41lIxAI cVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Jr0_Gr1lIxAIcV CF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvEx4A2jsIE c7CjxVAFwI0_Jr0_GrUvcSsGvfC2KfnxnUUI43ZEXa7xRE6wZ7UUUUU== Content-Transfer-Encoding: 8bit REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4054 The uploaded code generates firmware to support Linux launching on the LoongArch platform under qemu, So it will run in a virtual machine. LoongArch is the general processor architecture of Loongson. You can get the latest LoongArch documents or LoongArch tools at https://github.com/loongson/. You can also view the code through the Loongson community. The edk2 code in Loongson community: https://github.com/loongson/edk2/tree/LoongArch The edk2-platform code in Loonson community: https://github.com/loongson/edk2-platforms The qemu code in Loongson community: https://gitlab.com/qemu-project/qemu.git The LoongArch Documentation in Loongson community: https://github.com/loongson/LoongArch-Documentation/tree/main/docs The all patches at: https://github.com/loongson/edk2-platforms/tree/devel-LoongArch-patch v2 changes: - Remove the inline assembly from StableTimerLib. - troubleshoot TAB strings, convert TAB characters to spaces. - remove smm related code, loongarch has no smm mode. v3 changes: - delete ExtractHandler related code. - Boot UEFI with low 256M memory. - Modify common interrupt handling. v4 changes: - Remove qemu flash related code. - Modify fdt base address. v5 changes: - Add Udf driver support. - Split readme file into a separate patch. - Modify the code style - delete extra blank lines - use the assembly function definition macros in MdePkg - sort out the PCD variable Token value. v6 changes: - Obtain the serial port base address by resolving fdt. - Obtain the RTC base address by resolving fdt. - Use the public 16550 serial port driver. - Add Dxe Hob lib. Cc: Ard Biesheuvel Cc: Bibo Mao Cc: Chao Li Cc: Leif Lindholm Cc: Liming Gao Cc: Michael D Kinney xianglai li (16): Platform/Loongson: Add Serial Port library Platform/Loongson: Support SEC Platform/Loongson: Add PeiServicesTablePointerLib. Platform/Loongson: Add QemuFwCfgLib. Platform/Loongson: Add MmuLib. Platform/Loongson: Add StableTimerLib. Platform/Loongson: Support PEI phase. Platform/Loongson: Add CPU DXE driver. Platform/Loongson: Add PciCpuIoDxe driver. Platform/Loongson: Add timer Dxe driver. Platform/Loongson: Add RealTime Clock lib. Platform/Loongson: Add Platform Boot Manager Lib. Platform/Loongson: Add Reset System Lib. Platform/Loongson: Add Hob Dxe Lib. Platform/Loongson: Support Dxe Platform/Loongson: Add Readme. .../LoongArchQemuPkg/Drivers/CpuDxe/CpuDxe.c | 367 +++++++ .../LoongArchQemuPkg/Drivers/CpuDxe/CpuDxe.h | 199 ++++ .../Drivers/CpuDxe/CpuDxe.inf | 59 ++ .../Drivers/CpuDxe/LoongArch64/Exception.c | 335 +++++++ .../Drivers/CpuDxe/LoongArch64/Fpu.S | 97 ++ .../Drivers/CpuDxe/LoongArch64/LoongArch.S | 321 +++++++ .../Drivers/PciCpuIo2Dxe/PciCpuIo2Dxe.c | 538 +++++++++++ .../Drivers/PciCpuIo2Dxe/PciCpuIo2Dxe.h | 207 ++++ .../Drivers/PciCpuIo2Dxe/PciCpuIo2Dxe.inf | 44 + .../Drivers/StableTimerDxe/Timer.c | 388 ++++++++ .../Drivers/StableTimerDxe/Timer.h | 172 ++++ .../Drivers/StableTimerDxe/TimerConfig.S | 38 + .../Drivers/StableTimerDxe/TimerDxe.inf | 44 + .../Include/Guid/Early16550UartBaseAddress.h | 22 + .../LoongArchQemuPkg/Include/Library/Cpu.h | 237 +++++ .../LoongArchQemuPkg/Include/Library/MmuLib.h | 85 ++ .../Include/Library/QemuFwCfgLib.h | 174 ++++ .../Include/Library/StableTimer.h | 59 ++ .../Fdt16550SerialPortHookLib.c | 57 ++ .../Fdt16550SerialPortHookLib.inf | 38 + .../LsRealTimeClockLib/LsRealTimeClock.h | 40 + .../LsRealTimeClockLib/LsRealTimeClockLib.c | 335 +++++++ .../LsRealTimeClockLib/LsRealTimeClockLib.inf | 47 + .../LoongArchQemuPkg/Library/MmuLib/Mmu.S | 155 +++ .../Library/MmuLib/MmuBaseLib.inf | 40 + .../Library/MmuLib/MmuBaseLibPei.inf | 47 + .../Library/MmuLib/MmuLibCore.c | 831 ++++++++++++++++ .../Library/MmuLib/MmuLibCore.h | 40 + .../Library/MmuLib/MmuLibCorePei.c | 231 +++++ .../LoongArchQemuPkg/Library/MmuLib/mmu.h | 190 ++++ .../LoongArchQemuPkg/Library/MmuLib/page.h | 280 ++++++ .../LoongArchQemuPkg/Library/MmuLib/pte.h | 57 ++ .../PeiServicesTablePointer.c | 79 ++ .../PeiServicesTablePointer.h | 39 + .../PeiServicesTablePointerLib.S | 40 + .../PeiServicesTablePointerLib.inf | 32 + .../PlatformBootManagerLib/PlatformBm.c | 742 +++++++++++++++ .../PlatformBootManagerLib/PlatformBm.h | 112 +++ .../PlatformBootManagerLib.inf | 75 ++ .../PlatformBootManagerLib/QemuKernel.c | 81 ++ .../QemuFwCfgLib/QemuFwCfgLibInternal.h | 63 ++ .../Library/QemuFwCfgLib/QemuFwCfgPei.c | 117 +++ .../Library/QemuFwCfgLib/QemuFwCfgPeiLib.c | 463 +++++++++ .../Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf | 46 + .../BaseResetSystemAcpiGed.c | 146 +++ .../BaseResetSystemAcpiGedLib.inf | 37 + .../DxeResetSystemAcpiGed.c | 257 +++++ .../DxeResetSystemAcpiGedLib.inf | 41 + .../ResetSystemAcpiLib/ResetSystemAcpiGed.c | 128 +++ .../ResetSystemAcpiLib/ResetSystemAcpiGed.h | 23 + .../SerialPortLib/EarlySerialPortLib16550.c | 900 ++++++++++++++++++ .../SerialPortLib/EarlySerialPortLib16550.inf | 46 + .../Library/StableTimerLib/Count.S | 52 + .../Library/StableTimerLib/TimerLib.c | 236 +++++ .../Library/StableTimerLib/TimerLib.inf | 32 + .../Library/VirtDxeHobLib/HobLib.c | 590 ++++++++++++ .../Library/VirtDxeHobLib/VirtDxeHobLib.inf | 34 + .../Loongson/LoongArchQemuPkg/Loongson.dec | 76 ++ .../Loongson/LoongArchQemuPkg/Loongson.dsc | 647 +++++++++++++ .../Loongson/LoongArchQemuPkg/Loongson.fdf | 347 +++++++ .../LoongArchQemuPkg/Loongson.fdf.inc | 29 + .../LoongArchQemuPkg/PlatformPei/Fv.c | 58 ++ .../LoongArchQemuPkg/PlatformPei/MemDetect.c | 104 ++ .../LoongArchQemuPkg/PlatformPei/Platform.c | 433 +++++++++ .../LoongArchQemuPkg/PlatformPei/Platform.h | 86 ++ .../PlatformPei/PlatformPei.inf | 74 ++ Platform/Loongson/LoongArchQemuPkg/Readme.md | 60 ++ .../LoongArchQemuPkg/Sec/LoongArch64/Start.S | 84 ++ .../Loongson/LoongArchQemuPkg/Sec/SecMain.c | 494 ++++++++++ .../Loongson/LoongArchQemuPkg/Sec/SecMain.inf | 51 + Readme.md | 9 + 71 files changed, 12737 insertions(+) create mode 100644 Platform/Loongson/LoongArchQemuPkg/Drivers/CpuDxe/CpuDxe.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Drivers/CpuDxe/CpuDxe.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Drivers/CpuDxe/CpuDxe.inf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Drivers/CpuDxe/LoongArch64/Exception.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Drivers/CpuDxe/LoongArch64/Fpu.S create mode 100644 Platform/Loongson/LoongArchQemuPkg/Drivers/CpuDxe/LoongArch64/LoongArch.S create mode 100644 Platform/Loongson/LoongArchQemuPkg/Drivers/PciCpuIo2Dxe/PciCpuIo2Dxe.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Drivers/PciCpuIo2Dxe/PciCpuIo2Dxe.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Drivers/PciCpuIo2Dxe/PciCpuIo2Dxe.inf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Drivers/StableTimerDxe/Timer.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Drivers/StableTimerDxe/Timer.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Drivers/StableTimerDxe/TimerConfig.S create mode 100644 Platform/Loongson/LoongArchQemuPkg/Drivers/StableTimerDxe/TimerDxe.inf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Include/Guid/Early16550UartBaseAddress.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Include/Library/Cpu.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Include/Library/MmuLib.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Include/Library/QemuFwCfgLib.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Include/Library/StableTimer.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/Fdt16550SerialPortHookLib/Fdt16550SerialPortHookLib.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/Fdt16550SerialPortHookLib/Fdt16550SerialPortHookLib.inf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/LsRealTimeClockLib/LsRealTimeClock.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/LsRealTimeClockLib/LsRealTimeClockLib.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/LsRealTimeClockLib/LsRealTimeClockLib.inf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/Mmu.S create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuBaseLib.inf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuBaseLibPei.inf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCore.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/MmuLibCorePei.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/mmu.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/page.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/MmuLib/pte.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointer.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointer.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.S create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/PlatformBootManagerLib/PlatformBm.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/PlatformBootManagerLib/PlatformBm.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/PlatformBootManagerLib/QemuKernel.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/QemuFwCfgLib/QemuFwCfgLibInternal.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/QemuFwCfgLib/QemuFwCfgPeiLib.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/ResetSystemAcpiLib/BaseResetSystemAcpiGed.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/ResetSystemAcpiLib/BaseResetSystemAcpiGedLib.inf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/ResetSystemAcpiLib/DxeResetSystemAcpiGed.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/ResetSystemAcpiLib/DxeResetSystemAcpiGedLib.inf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/ResetSystemAcpiLib/ResetSystemAcpiGed.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/ResetSystemAcpiLib/ResetSystemAcpiGed.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/SerialPortLib/EarlySerialPortLib16550.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/SerialPortLib/EarlySerialPortLib16550.inf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/StableTimerLib/Count.S create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/StableTimerLib/TimerLib.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/StableTimerLib/TimerLib.inf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/VirtDxeHobLib/HobLib.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Library/VirtDxeHobLib/VirtDxeHobLib.inf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Loongson.dec create mode 100644 Platform/Loongson/LoongArchQemuPkg/Loongson.dsc create mode 100644 Platform/Loongson/LoongArchQemuPkg/Loongson.fdf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Loongson.fdf.inc create mode 100644 Platform/Loongson/LoongArchQemuPkg/PlatformPei/Fv.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/PlatformPei/MemDetect.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/PlatformPei/Platform.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/PlatformPei/Platform.h create mode 100644 Platform/Loongson/LoongArchQemuPkg/PlatformPei/PlatformPei.inf create mode 100644 Platform/Loongson/LoongArchQemuPkg/Readme.md create mode 100644 Platform/Loongson/LoongArchQemuPkg/Sec/LoongArch64/Start.S create mode 100644 Platform/Loongson/LoongArchQemuPkg/Sec/SecMain.c create mode 100644 Platform/Loongson/LoongArchQemuPkg/Sec/SecMain.inf -- 2.31.1