From nobody Sun Feb 8 15:47:05 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+47538+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47538+1787277+3901457@groups.io; dmarc=fail(p=none dis=none) header.from=hpe.com ARC-Seal: i=1; a=rsa-sha256; t=1568865102; cv=none; d=zoho.com; s=zohoarc; b=H4fnRT3BULjfY83FO9MliGdrCFUzyicqxMEiMCSzjqJWiSwrYC+jCTZpyW9GfGIeXFqP3B3U+aU3Y6b5+fhley7+QpApvBfu6i3KtWFjQO4vte+0MyAwCLX/+C8wlC263TT9efBbcka8WlDpGm43JfhQ4SUfBY8FejeWSsmnPsg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1568865102; h=Date:From:In-Reply-To:List-Id:List-Unsubscribe:Message-ID:Reply-To:References:Sender:Subject:To:ARC-Authentication-Results; bh=fE8D24At+VYsxEoKG/CAVMswUsmL/XB+Di8QK6SlLKg=; b=ZD+6I67fTyT8RvXupybqw/izPQoNTKBcLrbPZV500tlAxXpgwgViowO1h+2ZwoJIpWfKIuco43ZquFJpPG5/pdpylW/1MOg+WankmA256wsskiqsKWHw9F7ky0eSf/twet1P6miBMbFO51xAOdBLiVMIqYpQSZ6jZoHofEVgLy8= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=pass; spf=pass (zoho.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+47538+1787277+3901457@groups.io; dmarc=fail header.from= (p=none dis=none) header.from= Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 1568865102809268.3263009508232; Wed, 18 Sep 2019 20:51:42 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id u1PJYY1788612xvZmsZjhMJN; Wed, 18 Sep 2019 20:51:42 -0700 X-Received: from mx0a-002e3701.pphosted.com (mx0a-002e3701.pphosted.com [148.163.147.86]) by groups.io with SMTP; Wed, 18 Sep 2019 20:51:42 -0700 X-Received: from pps.filterd (m0134420.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id x8J3pf7v013413 for ; Thu, 19 Sep 2019 03:51:41 GMT X-Received: from g4t3425.houston.hpe.com (g4t3425.houston.hpe.com [15.241.140.78]) by mx0b-002e3701.pphosted.com with ESMTP id 2v3vapdarg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 19 Sep 2019 03:51:41 +0000 X-Received: from g4t3433.houston.hpecorp.net (g4t3433.houston.hpecorp.net [16.208.49.245]) by g4t3425.houston.hpe.com (Postfix) with ESMTP id 5918F8D for ; Thu, 19 Sep 2019 03:51:40 +0000 (UTC) X-Received: from ARBDN0VRAE.asiapacific.hpqcorp.net (arbdn0vrae.asiapacific.hpqcorp.net [10.43.41.0]) by g4t3433.houston.hpecorp.net (Postfix) with ESMTP id 8C4E445 for ; Thu, 19 Sep 2019 03:51:39 +0000 (UTC) From: "Gilbert Chen" To: devel@edk2.groups.io Subject: [edk2-devel] [plaforms/devel-riscv-v2 PATCHv2 05/14] RiscV/Library: Initial version of libraries introduced in RISC-V platform package Date: Thu, 19 Sep 2019 11:51:22 +0800 Message-Id: <20190919035131.4700-6-gilbert.chen@hpe.com> In-Reply-To: <20190919035131.4700-1-gilbert.chen@hpe.com> References: <20190919035131.4700-1-gilbert.chen@hpe.com> X-HPE-SCL: -1 Precedence: Bulk List-Unsubscribe: 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,gilbert.chen@hpe.com X-Gm-Message-State: XaoW7k8Gb0MqgCDYEirN7zChx1787277AA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1568865102; bh=H5/sPcYytLu66EclnbSISxSUqKPIm15QOudV+A20Ego=; h=Date:From:Reply-To:Subject:To; b=iP+0HM/s8j5YNecLMe7z9eyFwJy9YMKRPzONZrL8EK/XyQMzGTIapCcGMt7Z6YixBue TypPe86U0dVnnobudPW8XGVuraGHynmjL2xinOml29VwGBYJI1TPqlDyaQZzmY+cx1qoO JKJUPXlJc+erjAKmjOWFoRYQVvnXFypFio0= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" FirmwareContextProcessorSpecificLib - Common library to consume EFI_RISCV_FIRMWARE_CONTEXT_HART_SPECIFIC and build up processor specific data HOB. RealTimClockLibNull - NULL instance of Real Time Clock library. Signed-off-by: Gilbert Chen --- .../FirmwareContextProcessorSpecificLib.c | 82 +++++++++ .../FirmwareContextProcessorSpecificLib.inf | 33 ++++ .../RealTimeClockLibNull/RealTimeClockLibNull.c | 204 +++++++++++++++++= ++++ .../RealTimeClockLibNull/RealTimeClockLibNull.inf | 30 +++ 4 files changed, 349 insertions(+) create mode 100644 Platform/RiscV/Library/FirmwareContextProcessorSpecific= Lib/FirmwareContextProcessorSpecificLib.c create mode 100644 Platform/RiscV/Library/FirmwareContextProcessorSpecific= Lib/FirmwareContextProcessorSpecificLib.inf create mode 100644 Platform/RiscV/Library/RealTimeClockLibNull/RealTimeClo= ckLibNull.c create mode 100644 Platform/RiscV/Library/RealTimeClockLibNull/RealTimeClo= ckLibNull.inf diff --git a/Platform/RiscV/Library/FirmwareContextProcessorSpecificLib/Fir= mwareContextProcessorSpecificLib.c b/Platform/RiscV/Library/FirmwareContext= ProcessorSpecificLib/FirmwareContextProcessorSpecificLib.c new file mode 100644 index 00000000..4d4c51dc --- /dev/null +++ b/Platform/RiscV/Library/FirmwareContextProcessorSpecificLib/FirmwareCo= ntextProcessorSpecificLib.c @@ -0,0 +1,82 @@ +/**@file + Common library to build upfirmware context processor-specific information + + Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All right= s reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +// +// The package level header files this module uses +// +#include + +// +// The Library classes this module consumes +// +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +/** + Build up common firmware context processor-specific information + + @param FirmwareContextHartSpecific Pointer to EFI_RISCV_FIRMWARE_CONTE= XT_HART_SPECIFIC + @param ParentProcessorGuid Pointer to GUID of Processor which = contains this core + @param ParentProcessorUid Unique ID of pysical processor whic= h owns this core. + @param CoreGuid Pointer to GUID of core + @param HartId Hart ID of this core. + @param IsBootHart This is boot hart or not + @param ProcessorSpecDataHob Pointer to RISC_V_PROCESSOR_SPECIFI= C_DATA_HOB + + @return EFI_STATUS + +**/ +EFI_STATUS +EFIAPI +CommonFirmwareContextHartSpecificInfo ( + EFI_RISCV_FIRMWARE_CONTEXT_HART_SPECIFIC *FirmwareContextHartSpecific, + EFI_GUID *ParentProcessorGuid, + UINTN ParentProcessorUid, + EFI_GUID *CoreGuid, + UINTN HartId, + BOOLEAN IsBootHart, + RISC_V_PROCESSOR_SPECIFIC_DATA_HOB *ProcessorSpecDataHob + ) +{ + // + // Build up RISC_V_PROCESSOR_SPECIFIC_DATA_HOB. + // + CopyGuid (&ProcessorSpecDataHob->ParentPrcessorGuid, ParentProcessorGuid= ); + ProcessorSpecDataHob->ParentProcessorUid =3D ParentProcessorUid; + CopyGuid (&ProcessorSpecDataHob->CoreGuid, CoreGuid); + ProcessorSpecDataHob->Context =3D NULL; + ProcessorSpecDataHob->ProcessorSpecificData.Revision =3D SMBIOS_= RISC_V_PROCESSOR_SPECIFIC_DATA_REVISION; + ProcessorSpecDataHob->ProcessorSpecificData.Length =3D sizeof = (SMBIOS_RISC_V_PROCESSOR_SPECIFIC_DATA); + ProcessorSpecDataHob->ProcessorSpecificData.HartId.Value64_L =3D (UINT64= )HartId; + ProcessorSpecDataHob->ProcessorSpecificData.HartId.Value64_H =3D 0; + ProcessorSpecDataHob->ProcessorSpecificData.BootHartId =3D (UINT8)= IsBootHart; + ProcessorSpecDataHob->ProcessorSpecificData.InstSetSupported =3D Firmwar= eContextHartSpecific->IsaExtensionSupported; + ProcessorSpecDataHob->ProcessorSpecificData.PrivilegeModeSupported =3D= SMBIOS_RISC_V_PSD_MACHINE_MODE_SUPPORTED; + if ((ProcessorSpecDataHob->ProcessorSpecificData.InstSetSupported & RISC= _V_ISA_SUPERVISOR_MODE_IMPLEMENTED) !=3D 0) { + ProcessorSpecDataHob->ProcessorSpecificData.PrivilegeModeSupported |= =3D SMBIOS_RISC_V_PSD_SUPERVISOR_MODE_SUPPORTED; + } + if ((ProcessorSpecDataHob->ProcessorSpecificData.InstSetSupported & RISC= _V_ISA_USER_MODE_IMPLEMENTED) !=3D 0) { + ProcessorSpecDataHob->ProcessorSpecificData.PrivilegeModeSupported |= =3D SMBIOS_RISC_V_PSD_USER_MODE_SUPPORTED; + } + ProcessorSpecDataHob->ProcessorSpecificData.MachineVendorId.Value64_L = =3D FirmwareContextHartSpecific->MachineVendorId.Value64_L; + ProcessorSpecDataHob->ProcessorSpecificData.MachineVendorId.Value64_H = =3D FirmwareContextHartSpecific->MachineVendorId.Value64_H; + ProcessorSpecDataHob->ProcessorSpecificData.MachineArchId.Value64_L =3D = FirmwareContextHartSpecific->MachineArchId.Value64_L; + ProcessorSpecDataHob->ProcessorSpecificData.MachineArchId.Value64_H =3D = FirmwareContextHartSpecific->MachineArchId.Value64_H; + ProcessorSpecDataHob->ProcessorSpecificData.MachineImplId.Value64_L =3D = FirmwareContextHartSpecific->MachineImplId.Value64_L; + ProcessorSpecDataHob->ProcessorSpecificData.MachineImplId.Value64_H =3D = FirmwareContextHartSpecific->MachineImplId.Value64_H; + return EFI_SUCCESS; +} diff --git a/Platform/RiscV/Library/FirmwareContextProcessorSpecificLib/Fir= mwareContextProcessorSpecificLib.inf b/Platform/RiscV/Library/FirmwareConte= xtProcessorSpecificLib/FirmwareContextProcessorSpecificLib.inf new file mode 100644 index 00000000..ff841c3e --- /dev/null +++ b/Platform/RiscV/Library/FirmwareContextProcessorSpecificLib/FirmwareCo= ntextProcessorSpecificLib.inf @@ -0,0 +1,33 @@ +#/** @file +# +# Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All righ= ts reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +#**/ + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D FirmwareContextProcessorSpecificLib + FILE_GUID =3D 8BEC9FD7-C554-403A-94F1-0EBBFD81A242 + MODULE_TYPE =3D PEIM + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D FirmwareContextProcessorSpecificLib + +[Sources.common] + FirmwareContextProcessorSpecificLib.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + RiscVPkg/RiscVPkg.dec + Silicon/SiFive/SiFive.dec + +[LibraryClasses] + BaseLib + PcdLib + MemoryAllocationLib + PrintLib + +[Pcd] + diff --git a/Platform/RiscV/Library/RealTimeClockLibNull/RealTimeClockLibNu= ll.c b/Platform/RiscV/Library/RealTimeClockLibNull/RealTimeClockLibNull.c new file mode 100644 index 00000000..904e7e7b --- /dev/null +++ b/Platform/RiscV/Library/RealTimeClockLibNull/RealTimeClockLibNull.c @@ -0,0 +1,204 @@ +/** @file + EFI RealTimeClock NULL library + + Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All right= s reserved.
+ + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include +#include +#include +#include +#include +// Use EfiAtRuntime to check stage +#include +#include +#include +#include + + +/** + Returns the current time and date information, and the time-keeping capa= bilities + of the hardware platform. + + @param Time A pointer to storage to receive a snapsho= t of the current time. + @param Capabilities An optional pointer to a buffer to receiv= e the real time clock + device's capabilities. + + @retval EFI_SUCCESS The operation completed successfully. + @retval EFI_INVALID_PARAMETER Time is NULL. + @retval EFI_DEVICE_ERROR The time could not be retrieved due to ha= rdware error. + @retval EFI_SECURITY_VIOLATION The time could not be retrieved due to an= authentication failure. +**/ +EFI_STATUS +EFIAPI +LibGetTime ( + OUT EFI_TIME *Time, + OUT EFI_TIME_CAPABILITIES *Capabilities + ) +{ + EFI_STATUS Status =3D EFI_SUCCESS; + + return Status; + +} + + +/** + Sets the current local time and date information. + + @param Time A pointer to the current time. + + @retval EFI_SUCCESS The operation completed successfully. + @retval EFI_INVALID_PARAMETER A time field is out of range. + @retval EFI_DEVICE_ERROR The time could not be set due due to hardw= are error. + +**/ +EFI_STATUS +EFIAPI +LibSetTime ( + IN EFI_TIME *Time + ) +{ + + EFI_STATUS Status =3D EFI_SUCCESS; + + + return Status; +} + + +/** + Returns the current wakeup alarm clock setting. + + @param Enabled Indicates if the alarm is currently enable= d or disabled. + @param Pending Indicates if the alarm signal is pending a= nd requires acknowledgement. + @param Time The current alarm setting. + + @retval EFI_SUCCESS The alarm settings were returned. + @retval EFI_INVALID_PARAMETER Any parameter is NULL. + @retval EFI_DEVICE_ERROR The wakeup time could not be retrieved due= to a hardware error. + +**/ +EFI_STATUS +EFIAPI +LibGetWakeupTime ( + OUT BOOLEAN *Enabled, + OUT BOOLEAN *Pending, + OUT EFI_TIME *Time + ) +{ + // Not a required feature + return EFI_UNSUPPORTED; +} + + +/** + Sets the system wakeup alarm clock time. + + @param Enabled Enable or disable the wakeup alarm. + @param Time If Enable is TRUE, the time to set the wak= eup alarm for. + + @retval EFI_SUCCESS If Enable is TRUE, then the wakeup alarm w= as enabled. If + Enable is FALSE, then the wakeup alarm was= disabled. + @retval EFI_INVALID_PARAMETER A time field is out of range. + @retval EFI_DEVICE_ERROR The wakeup time could not be set due to a = hardware error. + @retval EFI_UNSUPPORTED A wakeup timer is not supported on this pl= atform. + +**/ +EFI_STATUS +EFIAPI +LibSetWakeupTime ( + IN BOOLEAN Enabled, + OUT EFI_TIME *Time + ) +{ + // Not a required feature + return EFI_UNSUPPORTED; +} + + + +/** + This is the declaration of an EFI image entry point. This can be the ent= ry point to an application + written to this specification, an EFI boot service driver, or an EFI run= time driver. + + @param ImageHandle Handle that identifies the loaded image. + @param SystemTable System Table for this image. + + @retval EFI_SUCCESS The operation completed successfully. + +**/ +EFI_STATUS +EFIAPI +LibRtcInitialize ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + EFI_HANDLE Handle; + + + EFI_TIME EfiTime; + + // Setup the setters and getters + gRT->GetTime =3D LibGetTime; + gRT->SetTime =3D LibSetTime; + gRT->GetWakeupTime =3D LibGetWakeupTime; + gRT->SetWakeupTime =3D LibSetWakeupTime; + + + (VOID)gRT->GetTime (&EfiTime, NULL); + if((EfiTime.Year < 2015) || (EfiTime.Year > 2099)){ + EfiTime.Year =3D 2015; + EfiTime.Month =3D 1; + EfiTime.Day =3D 1; + EfiTime.Hour =3D 0; + EfiTime.Minute =3D 0; + EfiTime.Second =3D 0; + EfiTime.Nanosecond =3D 0; + Status =3D gRT->SetTime(&EfiTime); + if (EFI_ERROR(Status)) + { + DEBUG((DEBUG_ERROR, "[%a]:[%dL] Status : %r\n", __FUNCTION__, __LI= NE__, Status)); + } + } + + // Install the protocol + Handle =3D NULL; + Status =3D gBS->InstallMultipleProtocolInterfaces ( + &Handle, + &gEfiRealTimeClockArchProtocolGuid, NULL, + NULL + ); + + return Status; +} + + +/** + Fixup internal data so that EFI can be call in virtual mode. + Call the passed in Child Notify event and convert any pointers in + lib to virtual mode. + + @param[in] Event The Event that is being processed + @param[in] Context Event Context +**/ +VOID +EFIAPI +LibRtcVirtualNotifyEvent ( + IN EFI_EVENT Event, + IN VOID *Context + ) +{ + // + // Only needed if you are going to support the OS calling RTC functions = in virtual mode. + // You will need to call EfiConvertPointer (). To convert any stored phy= sical addresses + // to virtual address. After the OS transitions to calling in virtual mo= de, all future + // runtime calls will be made in virtual mode. + // + return; +} diff --git a/Platform/RiscV/Library/RealTimeClockLibNull/RealTimeClockLibNu= ll.inf b/Platform/RiscV/Library/RealTimeClockLibNull/RealTimeClockLibNull.i= nf new file mode 100644 index 00000000..21b2e435 --- /dev/null +++ b/Platform/RiscV/Library/RealTimeClockLibNull/RealTimeClockLibNull.inf @@ -0,0 +1,30 @@ +#/** @file +# +# Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All righ= ts reserved.
+# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +#**/ + +[Defines] + INF_VERSION =3D 0x00010005 + BASE_NAME =3D RealTimeClockLibNull + FILE_GUID =3D BFC3E25A-8AD0-4201-8A75-F00DE7964370 + MODULE_TYPE =3D BASE + VERSION_STRING =3D 1.0 + LIBRARY_CLASS =3D RealTimeClockLib + +[Sources.common] + RealTimeClockLibNull.c + +[Packages] + MdePkg/MdePkg.dec + +[LibraryClasses] + UefiLib + DebugLib +# Use EFiAtRuntime to check stage + UefiRuntimeLib + +[Pcd] + --=20 2.12.0.windows.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#47538): https://edk2.groups.io/g/devel/message/47538 Mute This Topic: https://groups.io/mt/34196352/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-