Hi,

here's the latest version of the RiscVEdk2SbiLib patch. The other commits from
the last series haven't changed, so I'm not resending them to reduce the noise.

Below in this email, I included a patch showing the differences betwen the last 
patchset and this one.

The branch is at 
https://github.com/changab/edk2-platforms/tree/devel-riscvplatforms
and I made another repo, to easily try out booting to EFI Shell on RISC-V:
https://github.com/JohnAZoidberg/riscv-edk2-docker

Other TODOs for upstreaming RISC-V:
- Deduplicating SMBIOS code -> I am doing that currently
- Figuring out in which repo to put the code -> Discussion is still going on

Cheers,
Daniel

Cc: Leif Lindholm <l...@nuviainc.com>
Cc: Gilbert Chen <gilbert.c...@hpe.com>
Cc: Abner Chang <abner.ch...@hpe.com>
Cc: Michael D. Kinney <michael.d.kin...@intel.com>

Daniel Schaefer (1):
  ProcessorPkg/Library: Add RiscVEdk2SbiLib

 Silicon/RISC-V/ProcessorPkg/Library/RiscVEdk2SbiLib/RiscVEdk2SbiLib.inf |  28 +
 Silicon/RISC-V/ProcessorPkg/Include/Library/RiscVEdk2SbiLib.h           | 563 
++++++++++++
 Silicon/RISC-V/ProcessorPkg/Library/RiscVEdk2SbiLib/RiscVEdk2SbiLib.c   | 897 
++++++++++++++++++++
 3 files changed, 1488 insertions(+)
 create mode 100644 
Silicon/RISC-V/ProcessorPkg/Library/RiscVEdk2SbiLib/RiscVEdk2SbiLib.inf
 create mode 100644 
Silicon/RISC-V/ProcessorPkg/Include/Library/RiscVEdk2SbiLib.h
 create mode 100644 
Silicon/RISC-V/ProcessorPkg/Library/RiscVEdk2SbiLib/RiscVEdk2SbiLib.c
--
diff --git 
i/Silicon/RISC-V/ProcessorPkg/Library/RiscVEdk2SbiLib/RiscVEdk2SbiLib.c 
w/Silicon/RISC-V/ProcessorPkg/Library/RiscVEdk2SbiLib/RiscVEdk2SbiLib.c
index d26adaa37ce7..0df505d2675b 100644
--- i/Silicon/RISC-V/ProcessorPkg/Library/RiscVEdk2SbiLib/RiscVEdk2SbiLib.c
+++ w/Silicon/RISC-V/ProcessorPkg/Library/RiscVEdk2SbiLib/RiscVEdk2SbiLib.c
@@ -16,8 +16,10 @@
   - SbiLegacyShutdown            -> Wait for new System Reset extension

 

   Copyright (c) 2020, Hewlett Packard Development LP. All rights reserved.<BR>

-

   SPDX-License-Identifier: BSD-2-Clause-Patent

+

+  @par Revision Reference:

+    - OpenSBI Version 0.6

 **/

 

 #include <IndustryStandard/RiscVOpensbi.h>

@@ -30,12 +32,22 @@
 #include <sbi/sbi_init.h>

 

 

+//

+// Maximum arguments for SBI ecall

+// It's possible to pass more but no SBI call uses more as of SBI 0.2.

+// The additional arguments would have to be passed on the stack instead of as

+// registers, like it's done now.

+//

+#define SBI_CALL_MAX_ARGS 6

+

 /**

   Call SBI call using ecall instruction.

 

+  Asserts when NumArgs exceeds SBI_CALL_MAX_ARGS.

+

   @param[in] ExtId    SBI extension ID.

   @param[in] FuncId   SBI function ID.

-  @param[in] NumAargs Number of arguments to pass to the ecall.

+  @param[in] NumArgs  Number of arguments to pass to the ecall.

   @param[in] ...      Argument list for the ecall.

 

   @retval  Returns SbiRet structure with value and error code.

@@ -49,16 +61,19 @@ SbiCall(
   IN  UINTN FuncId,

   IN  UINTN NumArgs,

   ...

-) {

+  )

+{

     UINTN I;

     SbiRet Ret;

-    UINTN Args[6];

+    UINTN Args[SBI_CALL_MAX_ARGS];

     VA_LIST ArgList;

-    VA_START(ArgList, NumArgs);

+    VA_START (ArgList, NumArgs);

 

-    for (I = 0; I < 6; I++) {

+    ASSERT (NumArgs <= SBI_CALL_MAX_ARGS);

+

+    for (I = 0; I < SBI_CALL_MAX_ARGS; I++) {

       if (I < NumArgs) {

-        Args[I] = VA_ARG(ArgList, UINTN);

+        Args[I] = VA_ARG (ArgList, UINTN);

       } else {

         // Default to 0 for all arguments that are not given

         Args[I] = 0;

@@ -95,8 +110,9 @@ STATIC
 EFI_STATUS

 EFIAPI

 TranslateError(

-  IN UINTN SbiError

-  ) {

+  IN  UINTN SbiError

+  )

+{

   switch (SbiError) {

     case SBI_SUCCESS:

       return EFI_SUCCESS;

@@ -129,7 +145,7 @@ TranslateError(
 }

 

 //

-// OpenSBI libraary interface function for the base extension

+// OpenSBI library interface function for the base extension

 //

 

 /**

@@ -150,7 +166,7 @@ SbiGetSpecVersion (
   SbiRet Ret = SbiCall (SBI_EXT_BASE, SBI_EXT_BASE_GET_SPEC_VERSION, 0);

 

   if (!Ret.Error) {

-    *SpecVersion = (UINTN) Ret.Value;

+    *SpecVersion = (UINTN)Ret.Value;

   }

 }

 

@@ -169,7 +185,7 @@ SbiGetImplId (
   )

 {

   SbiRet Ret = SbiCall (SBI_EXT_BASE, SBI_EXT_BASE_GET_IMP_ID, 0);

-  *ImplId = (UINTN) Ret.Value;

+  *ImplId = (UINTN)Ret.Value;

 }

 

 /**

@@ -187,7 +203,7 @@ SbiGetImplVersion (
   )

 {

   SbiRet Ret = SbiCall (SBI_EXT_BASE, SBI_EXT_BASE_GET_IMP_VERSION, 0);

-  *ImplVersion = (UINTN) Ret.Value;

+  *ImplVersion = (UINTN)Ret.Value;

 }

 

 /**

@@ -207,7 +223,7 @@ SbiProbeExtension (
   )

 {

   SbiRet Ret = SbiCall (SBI_EXT_BASE, SBI_EXT_BASE_PROBE_EXT, 0);

-  *ProbeResult = (UINTN) Ret.Value;

+  *ProbeResult = (UINTN)Ret.Value;

 }

 

 /**

@@ -224,7 +240,7 @@ SbiGetMachineVendorId (
   )

 {

   SbiRet Ret = SbiCall (SBI_EXT_BASE, SBI_EXT_BASE_GET_MVENDORID, 0);

-  *MachineVendorId = (UINTN) Ret.Value;

+  *MachineVendorId = (UINTN)Ret.Value;

 }

 

 /**

@@ -241,7 +257,7 @@ SbiGetMachineArchId (
   )

 {

   SbiRet Ret = SbiCall (SBI_EXT_BASE, SBI_EXT_BASE_GET_MARCHID, 0);

-  *MachineArchId = (UINTN) Ret.Value;

+  *MachineArchId = (UINTN)Ret.Value;

 }

 

 /**

@@ -258,7 +274,7 @@ SbiGetMachineImplId (
   )

 {

   SbiRet Ret = SbiCall (SBI_EXT_BASE, SBI_EXT_BASE_GET_MIMPID, 0);

-  *MachineImplId = (UINTN) Ret.Value;

+  *MachineImplId = (UINTN)Ret.Value;

 }

 

 //

@@ -296,13 +312,15 @@ SbiHartStart (
   IN  UINTN                          Priv

   )

 {

-  SbiRet Ret = SbiCall (SBI_EXT_HSM,

-                        SBI_EXT_HSM_HART_START,

-                        3,

-                        HartId,

-                        StartAddr,

-                        Priv);

-  return TranslateError(Ret.Error);

+  SbiRet Ret = SbiCall (

+                 SBI_EXT_HSM,

+                 SBI_EXT_HSM_HART_START,

+                 3,

+                 HartId,

+                 StartAddr,

+                 Priv

+                 );

+  return TranslateError (Ret.Error);

 }

 

 /**

@@ -320,7 +338,7 @@ SbiHartStop (
   )

 {

   SbiRet Ret = SbiCall (SBI_EXT_HSM, SBI_EXT_HSM_HART_STOP, 0);

-  return TranslateError(Ret.Error);

+  return TranslateError (Ret.Error);

 }

 

 /**

@@ -350,10 +368,10 @@ SbiHartGetStatus (
   SbiRet Ret = SbiCall (SBI_EXT_HSM, SBI_EXT_HSM_HART_GET_STATUS, 1, HartId);

 

   if (!Ret.Error) {

-    *HartStatus = (UINTN) Ret.Value;

+    *HartStatus = (UINTN)Ret.Value;

   }

 

-  return TranslateError(Ret.Error);

+  return TranslateError (Ret.Error);

 }

 

 /**

@@ -380,12 +398,14 @@ SbiSendIpi (
   IN  UINTN                          HartMaskBase

   )

 {

-  SbiRet Ret = SbiCall (SBI_EXT_IPI,

-                        SBI_EXT_IPI_SEND_IPI,

-                        2,

-                        (UINTN) HartMask,

-                        HartMaskBase);

-  return TranslateError(Ret.Error);

+  SbiRet Ret = SbiCall (

+                 SBI_EXT_IPI,

+                 SBI_EXT_IPI_SEND_IPI,

+                 2,

+                 (UINTN)HartMask,

+                 HartMaskBase

+                 );

+  return TranslateError (Ret.Error);

 }

 

 /**

@@ -408,12 +428,14 @@ SbiRemoteFenceI (
   IN  UINTN                          HartMaskBase

   )

 {

-  SbiRet Ret = SbiCall (SBI_EXT_RFENCE,

-                        SBI_EXT_RFENCE_REMOTE_FENCE_I,

-                        2,

-                        (UINTN) HartMask,

-                        HartMaskBase);

-  return TranslateError(Ret.Error);

+  SbiRet Ret = SbiCall (

+                 SBI_EXT_RFENCE,

+                 SBI_EXT_RFENCE_REMOTE_FENCE_I,

+                 2,

+                 (UINTN)HartMask,

+                 HartMaskBase

+                 );

+  return TranslateError (Ret.Error);

 }

 

 /**

@@ -446,14 +468,16 @@ SbiRemoteSfenceVma (
   IN  UINTN                          Size

   )

 {

-  SbiRet Ret = SbiCall (SBI_EXT_RFENCE,

-                        SBI_EXT_RFENCE_REMOTE_SFENCE_VMA,

-                        4,

-                        (UINTN) HartMask,

-                        HartMaskBase,

-                        StartAddr,

-                        Size);

-  return TranslateError(Ret.Error);

+  SbiRet Ret = SbiCall (

+                 SBI_EXT_RFENCE,

+                 SBI_EXT_RFENCE_REMOTE_SFENCE_VMA,

+                 4,

+                 (UINTN)HartMask,

+                 HartMaskBase,

+                 StartAddr,

+                 Size

+                 );

+  return TranslateError (Ret.Error);

 }

 

 /**

@@ -488,15 +512,17 @@ SbiRemoteSfenceVmaAsid (
   IN  UINTN                          Asid

   )

 {

-  SbiRet Ret = SbiCall (SBI_EXT_RFENCE,

-                        SBI_EXT_RFENCE_REMOTE_SFENCE_VMA_ASID,

-                        5,

-                        (UINTN) HartMask,

-                        HartMaskBase,

-                        StartAddr,

-                        Size,

-                        Asid);

-  return TranslateError(Ret.Error);

+  SbiRet Ret = SbiCall (

+                 SBI_EXT_RFENCE,

+                 SBI_EXT_RFENCE_REMOTE_SFENCE_VMA_ASID,

+                 5,

+                 (UINTN)HartMask,

+                 HartMaskBase,

+                 StartAddr,

+                 Size,

+                 Asid

+                 );

+  return TranslateError (Ret.Error);

 }

 

 /**

@@ -535,15 +561,17 @@ SbiRemoteHFenceGvmaVmid (
   IN  UINTN                          Vmid

   )

 {

-  SbiRet Ret = SbiCall (SBI_EXT_RFENCE,

-                        SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA,

-                        5,

-                        (UINTN) HartMask,

-                        HartMaskBase,

-                        StartAddr,

-                        Size,

-                        Vmid);

-  return TranslateError(Ret.Error);

+  SbiRet Ret = SbiCall (

+                 SBI_EXT_RFENCE,

+                 SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA,

+                 5,

+                 (UINTN)HartMask,

+                 HartMaskBase,

+                 StartAddr,

+                 Size,

+                 Vmid

+                 );

+  return TranslateError (Ret.Error);

 }

 

 /**

@@ -580,14 +608,16 @@ SbiRemoteHFenceGvma (
   IN  UINTN                          Size

   )

 {

-  SbiRet Ret = SbiCall (SBI_EXT_RFENCE,

-                        SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA_VMID,

-                        4,

-                        (UINTN) HartMask,

-                        HartMaskBase,

-                        StartAddr,

-                        Size);

-  return TranslateError(Ret.Error);

+  SbiRet Ret = SbiCall (

+                 SBI_EXT_RFENCE,

+                 SBI_EXT_RFENCE_REMOTE_HFENCE_GVMA_VMID,

+                 4,

+                 (UINTN)HartMask,

+                 HartMaskBase,

+                 StartAddr,

+                 Size

+                 );

+  return TranslateError (Ret.Error);

 }

 

 /**

@@ -626,15 +656,17 @@ SbiRemoteHFenceVvmaAsid (
   IN  UINTN                          Asid

   )

 {

-  SbiRet Ret = SbiCall (SBI_EXT_RFENCE,

-                        SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA,

-                        5,

-                        (UINTN) HartMask,

-                        HartMaskBase,

-                        StartAddr,

-                        Size,

-                        Asid);

-  return TranslateError(Ret.Error);

+  SbiRet Ret = SbiCall (

+                 SBI_EXT_RFENCE,

+                 SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA,

+                 5,

+                 (UINTN)HartMask,

+                 HartMaskBase,

+                 StartAddr,

+                 Size,

+                 Asid

+                 );

+  return TranslateError (Ret.Error);

 }

 

 /**

@@ -671,14 +703,16 @@ SbiRemoteHFenceVvma (
   IN  UINTN                          Size

   )

 {

-  SbiRet Ret = SbiCall (SBI_EXT_RFENCE,

-                        SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA_ASID,

-                        4,

-                        (UINTN) HartMask,

-                        HartMaskBase,

-                        StartAddr,

-                        Size);

-  return TranslateError(Ret.Error);

+  SbiRet Ret = SbiCall (

+                 SBI_EXT_RFENCE,

+                 SBI_EXT_RFENCE_REMOTE_HFENCE_VVMA_ASID,

+                 4,

+                 (UINTN)HartMask,

+                 HartMaskBase,

+                 StartAddr,

+                 Size

+                 );

+  return TranslateError (Ret.Error);

 }

 

 //

@@ -689,14 +723,13 @@ SbiRemoteHFenceVvma (
   Call a function in a vendor defined SBI extension

 

   ASSERT() if the ExtensionId is not in the designated SBI Vendor Extension

-  Space.

+  Space or NumArgs exceeds SBI_CALL_MAX_ARGS.

 

   @param[in]  ExtensionId          The SBI vendor extension ID.

   @param[in]  FunctionId           The function ID to call in this extension.

   @param[in]  NumArgs              How many arguments are passed.

   @param[in]  ...                  Actual Arguments to the function.

   @retval EFI_SUCCESS if the SBI function was called and it was successful

-  @retval EFI_INVALID_PARAMETER if NumArgs exceeds 6

   @retval others if the called SBI function returns an error

 **/

 EFI_STATUS

@@ -710,39 +743,41 @@ SbiVendorCall (
 {

     SbiRet Ret;

     VA_LIST Args;

-    VA_START(Args, NumArgs);

+    VA_START (Args, NumArgs);

 

-    ASSERT (ExtensionId >= 0x09000000 && ExtensionId <= 0x09FFFFFF);

+    ASSERT (ExtensionId >= SBI_EXT_VENDOR_START && ExtensionId <= 
SBI_EXT_VENDOR_END);

+    ASSERT (NumArgs <= SBI_CALL_MAX_ARGS);

 

     switch (NumArgs) {

       case 0:

         Ret = SbiCall (ExtensionId, FunctionId, NumArgs);

         break;

       case 1:

-        Ret = SbiCall (ExtensionId, FunctionId, NumArgs, VA_ARG(Args, UINTN));

+        Ret = SbiCall (ExtensionId, FunctionId, NumArgs, VA_ARG (Args, UINTN));

         break;

       case 2:

-        Ret = SbiCall (ExtensionId, FunctionId, NumArgs, VA_ARG(Args, UINTN),

-                       VA_ARG(Args, UINTN));

+        Ret = SbiCall (ExtensionId, FunctionId, NumArgs, VA_ARG (Args, UINTN),

+                       VA_ARG (Args, UINTN));

         break;

       case 3:

-        Ret = SbiCall (ExtensionId, FunctionId, NumArgs, VA_ARG(Args, UINTN),

-                       VA_ARG(Args, UINTN), VA_ARG(Args, UINTN));

+        Ret = SbiCall (ExtensionId, FunctionId, NumArgs, VA_ARG (Args, UINTN),

+                       VA_ARG (Args, UINTN), VA_ARG (Args, UINTN));

         break;

       case 4:

-        Ret = SbiCall (ExtensionId, FunctionId, NumArgs, VA_ARG(Args, UINTN),

-                       VA_ARG(Args, UINTN), VA_ARG(Args, UINTN), VA_ARG(Args, 
UINTN));

+        Ret = SbiCall (ExtensionId, FunctionId, NumArgs, VA_ARG (Args, UINTN),

+                       VA_ARG (Args, UINTN), VA_ARG (Args, UINTN),

+                       VA_ARG (Args, UINTN));

         break;

       case 5:

-        Ret = SbiCall (ExtensionId, FunctionId, NumArgs, VA_ARG(Args, UINTN),

-                       VA_ARG(Args, UINTN), VA_ARG(Args, UINTN),

-                       VA_ARG(Args, UINTN), VA_ARG(Args, UINTN));

+        Ret = SbiCall (ExtensionId, FunctionId, NumArgs, VA_ARG (Args, UINTN),

+                       VA_ARG (Args, UINTN), VA_ARG (Args, UINTN),

+                       VA_ARG (Args, UINTN), VA_ARG (Args, UINTN));

         break;

       case 6:

-        Ret = SbiCall (ExtensionId, FunctionId, NumArgs, VA_ARG(Args, UINTN),

-                       VA_ARG(Args, UINTN), VA_ARG(Args, UINTN),

-                       VA_ARG(Args, UINTN), VA_ARG(Args, UINTN),

-                       VA_ARG(Args, UINTN));

+        Ret = SbiCall (ExtensionId, FunctionId, NumArgs, VA_ARG (Args, UINTN),

+                       VA_ARG (Args, UINTN), VA_ARG (Args, UINTN),

+                       VA_ARG (Args, UINTN), VA_ARG (Args, UINTN),

+                       VA_ARG (Args, UINTN));

         break;

       default:

         // Too many args. In theory SBI can handle more arguments when they are

@@ -752,7 +787,7 @@ SbiVendorCall (
      }

 

     VA_END(Args);

-    return TranslateError(Ret.Error);

+    return TranslateError (Ret.Error);

 }

 

 //

@@ -777,7 +812,7 @@ SbiGetMscratch (
   SbiRet Ret = SbiCall (SBI_EDK2_FW_EXT, SBI_EXT_FW_MSCRATCH_FUNC, 0);

 

   if (!Ret.Error) {

-    *ScratchSpace = (SBI_SCRATCH *) Ret.Value;

+    *ScratchSpace = (SBI_SCRATCH *)Ret.Value;

   }

 

   return EFI_SUCCESS;

@@ -797,13 +832,15 @@ SbiGetMscratchHartid (
   OUT SBI_SCRATCH                    **ScratchSpace

   )

 {

-  SbiRet Ret = SbiCall (SBI_EDK2_FW_EXT,

-                        SBI_EXT_FW_MSCRATCH_HARTID_FUNC,

-                        1,

-                        HartId);

+  SbiRet Ret = SbiCall (

+                 SBI_EDK2_FW_EXT,

+                 SBI_EXT_FW_MSCRATCH_HARTID_FUNC,

+                 1,

+                 HartId

+                 );

 

   if (!Ret.Error) {

-    *ScratchSpace = (SBI_SCRATCH *) Ret.Value;

+    *ScratchSpace = (SBI_SCRATCH *)Ret.Value;

   }

 

   return EFI_SUCCESS;

@@ -826,9 +863,9 @@ SbiGetFirmwareContext (
   SbiRet Ret = SbiCall (SBI_EDK2_FW_EXT, SBI_EXT_FW_MSCRATCH_FUNC, 0);

 

   if (!Ret.Error) {

-    ScratchSpace = (SBI_SCRATCH *) Ret.Value;

-    SbiPlatform = (SBI_PLATFORM *) sbi_platform_ptr(ScratchSpace);

-    *FirmwareContext = (EFI_RISCV_OPENSBI_FIRMWARE_CONTEXT *) 
SbiPlatform->firmware_context;

+    ScratchSpace = (SBI_SCRATCH *)Ret.Value;

+    SbiPlatform = (SBI_PLATFORM *)sbi_platform_ptr(ScratchSpace);

+    *FirmwareContext = (EFI_RISCV_OPENSBI_FIRMWARE_CONTEXT 
*)SbiPlatform->firmware_context;

   }

 

   return EFI_SUCCESS;

@@ -851,9 +888,9 @@ SbiSetFirmwareContext (
   SbiRet Ret = SbiCall (SBI_EDK2_FW_EXT, SBI_EXT_FW_MSCRATCH_FUNC, 0);

 

   if (!Ret.Error) {

-    ScratchSpace = (SBI_SCRATCH *) Ret.Value;

-    SbiPlatform = (SBI_PLATFORM *) sbi_platform_ptr(ScratchSpace);

-    SbiPlatform->firmware_context = (UINTN) FirmwareContext;

+    ScratchSpace = (SBI_SCRATCH *)Ret.Value;

+    SbiPlatform = (SBI_PLATFORM *)sbi_platform_ptr (ScratchSpace);

+    SbiPlatform->firmware_context = (UINTN)FirmwareContext;

   }

 

   return EFI_SUCCESS;

-- 
2.26.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#60600): https://edk2.groups.io/g/devel/message/60600
Mute This Topic: https://groups.io/mt/74631920/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to