public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH v5 0/2] Qemu/Sbsa versioning
@ 2023-05-15 13:47 Marcin Juszkiewicz
  2023-05-15 13:47 ` [PATCH v5 1/2] Platform/SbsaQemu: read platform version Marcin Juszkiewicz
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Marcin Juszkiewicz @ 2023-05-15 13:47 UTC (permalink / raw)
  To: devel
  Cc: Ard Biesheuvel, Leif Lindholm, Rebecca Cran, Sami Mujawar,
	Marcin Juszkiewicz

Qemu has versioning for sbsa-ref platform. TF-A reads it from provided
DeviceTree and provides as SMC.

Version 0.0 (QEMU 8.0)  provides platform version information.
Version 0.1 (in review) provides GIC information.

Next versions will bring more changes to make use of development done
during last years.

Requires "SbsaQemu: make GIC base address Pcds dynamic" by Leif
Lindholm to be able to change values with those from QEMU.

QEMU part: https://lists.gnu.org/archive/html/qemu-arm/2023-05/msg00517.html
TF-A part: https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/20871

Changes since v4:
- SMC calls use SmcResult variable (UINTN)
- PcdSet* calls use Result var (RETURN_STATUS)
- fixed "are we on 0.0" check

Marcin Juszkiewicz (2):
  Platform/SbsaQemu: read platform version
  Platform/SbsaQemu: read GIC base from TF-A

 Platform/Qemu/SbsaQemu/SbsaQemu.dsc           |  3 +
 .../SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c | 58 +++++++++++++++++++
 .../SbsaQemuPlatformDxe.inf                   |  9 +++
 Silicon/Qemu/SbsaQemu/SbsaQemu.dec            |  3 +
 4 files changed, 73 insertions(+)

-- 
2.40.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v5 1/2] Platform/SbsaQemu: read platform version
  2023-05-15 13:47 [PATCH v5 0/2] Qemu/Sbsa versioning Marcin Juszkiewicz
@ 2023-05-15 13:47 ` Marcin Juszkiewicz
  2023-05-15 13:47 ` [PATCH v5 2/2] Platform/SbsaQemu: read GIC base from TF-A Marcin Juszkiewicz
  2023-05-15 13:50 ` [PATCH v5 0/2] Qemu/Sbsa versioning Rebecca Cran
  2 siblings, 0 replies; 4+ messages in thread
From: Marcin Juszkiewicz @ 2023-05-15 13:47 UTC (permalink / raw)
  To: devel
  Cc: Ard Biesheuvel, Leif Lindholm, Rebecca Cran, Sami Mujawar,
	Marcin Juszkiewicz

Qemu has versioning for sbsa-ref platform. TF-A reads it from provided
DeviceTree and provides as SMC.

This change adds reading platform version into EDK2.

Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
---
 Platform/Qemu/SbsaQemu/SbsaQemu.dsc           |  3 ++
 .../SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c | 28 +++++++++++++++++++
 .../SbsaQemuPlatformDxe.inf                   |  5 ++++
 Silicon/Qemu/SbsaQemu/SbsaQemu.dec            |  3 ++
 4 files changed, 39 insertions(+)

diff --git a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc
index 0bd0df4f0239..b88729ad8ad6 100644
--- a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc
+++ b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc
@@ -558,6 +558,9 @@ DEFINE NETWORK_HTTP_BOOT_ENABLE       = FALSE
   gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdChassisAssetTag|L"AT0000"
   gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdChassisSKU|L"SK0000"
 
+  gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformVersionMajor|0x0
+  gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformVersionMinor|0x0
+
 ################################################################################
 #
 # Components Section - list of all EDK II Modules needed by this Platform
diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c
index b7270a07abbd..39f5639d0a28 100644
--- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c
+++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c
@@ -7,15 +7,25 @@
 *
 **/
 
+#include <Library/ArmSmcLib.h>
 #include <Library/BaseLib.h>
 #include <Library/DebugLib.h>
 #include <Library/NonDiscoverableDeviceRegistrationLib.h>
 #include <Library/PcdLib.h>
 #include <Library/UefiBootServicesTableLib.h>
 #include <Library/UefiDriverEntryPoint.h>
+#include <IndustryStandard/ArmStdSmc.h>
 
 #include <Protocol/FdtClient.h>
 
+/* those probably should go into IndustryStandard/ArmStdSmc.h */
+#define SMC_FASTCALL       0x80000000
+#define SMC64_FUNCTION     (SMC_FASTCALL   | 0x40000000)
+#define SIP_FUNCTION       (SMC64_FUNCTION | 0x02000000)
+#define SIP_FUNCTION_ID(n) (SIP_FUNCTION   | (n))
+
+#define SIP_SVC_VERSION  SIP_FUNCTION_ID(1)
+
 EFI_STATUS
 EFIAPI
 InitializeSbsaQemuPlatformDxe (
@@ -26,6 +36,10 @@ InitializeSbsaQemuPlatformDxe (
   EFI_STATUS                     Status;
   UINTN                          Size;
   VOID*                          Base;
+  UINTN                          Arg0;
+  UINTN                          Arg1;
+  UINTN                          SmcResult;
+  RETURN_STATUS                  Result;
 
   DEBUG ((DEBUG_INFO, "%a: InitializeSbsaQemuPlatformDxe called\n", __FUNCTION__));
 
@@ -51,5 +65,19 @@ InitializeSbsaQemuPlatformDxe (
     return Status;
   }
 
+  SmcResult = ArmCallSmc0 (SIP_SVC_VERSION, &Arg0, &Arg1, NULL);
+  if (SmcResult == SMC_ARCH_CALL_SUCCESS)
+  {
+    Result = PcdSet32S (PcdPlatformVersionMajor, Arg0);
+    ASSERT_RETURN_ERROR (Result);
+    Result = PcdSet32S (PcdPlatformVersionMinor, Arg1);
+    ASSERT_RETURN_ERROR (Result);
+  }
+
+  Arg0 = PcdGet32 (PcdPlatformVersionMajor);
+  Arg1 = PcdGet32 (PcdPlatformVersionMinor);
+
+  DEBUG ((DEBUG_INFO, "Platform version: %d.%d\n", Arg0, Arg1));
+
   return EFI_SUCCESS;
 }
diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.inf b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.inf
index 21d2135f6d17..1f2c8a9dd6af 100644
--- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.inf
+++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.inf
@@ -20,6 +20,7 @@
   SbsaQemuPlatformDxe.c
 
 [Packages]
+  ArmPkg/ArmPkg.dec
   ArmVirtPkg/ArmVirtPkg.dec
   EmbeddedPkg/EmbeddedPkg.dec
   MdeModulePkg/MdeModulePkg.dec
@@ -27,6 +28,7 @@
   Silicon/Qemu/SbsaQemu/SbsaQemu.dec
 
 [LibraryClasses]
+  ArmSmcLib
   PcdLib
   DebugLib
   NonDiscoverableDeviceRegistrationLib
@@ -36,6 +38,9 @@
   gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformAhciBase
   gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformAhciSize
 
+  gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformVersionMajor
+  gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformVersionMinor
+
 [Depex]
   TRUE
 
diff --git a/Silicon/Qemu/SbsaQemu/SbsaQemu.dec b/Silicon/Qemu/SbsaQemu/SbsaQemu.dec
index 9448852967b6..5182978cf56d 100644
--- a/Silicon/Qemu/SbsaQemu/SbsaQemu.dec
+++ b/Silicon/Qemu/SbsaQemu/SbsaQemu.dec
@@ -67,3 +67,6 @@
   gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdChassisManufacturer|L""|VOID*|0x0000011B
   gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdChassisAssetTag|L""|VOID*|0x0000011C
   gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdChassisSKU|L""|VOID*|0x0000011D
+
+  gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformVersionMajor|0x0|UINT32|0x0000011E
+  gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformVersionMinor|0x0|UINT32|0x0000011F
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v5 2/2] Platform/SbsaQemu: read GIC base from TF-A
  2023-05-15 13:47 [PATCH v5 0/2] Qemu/Sbsa versioning Marcin Juszkiewicz
  2023-05-15 13:47 ` [PATCH v5 1/2] Platform/SbsaQemu: read platform version Marcin Juszkiewicz
@ 2023-05-15 13:47 ` Marcin Juszkiewicz
  2023-05-15 13:50 ` [PATCH v5 0/2] Qemu/Sbsa versioning Rebecca Cran
  2 siblings, 0 replies; 4+ messages in thread
From: Marcin Juszkiewicz @ 2023-05-15 13:47 UTC (permalink / raw)
  To: devel
  Cc: Ard Biesheuvel, Leif Lindholm, Rebecca Cran, Sami Mujawar,
	Marcin Juszkiewicz

Qemu has versioning for sbsa-ref platform. TF-A reads data from provided
DeviceTree and provides as SMC.

This change adds reading GIC base addresses into EDK2.

Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
---
 .../SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c | 30 +++++++++++++++++++
 .../SbsaQemuPlatformDxe.inf                   |  4 +++
 2 files changed, 34 insertions(+)

diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c
index 39f5639d0a28..889270c76344 100644
--- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c
+++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c
@@ -25,6 +25,8 @@
 #define SIP_FUNCTION_ID(n) (SIP_FUNCTION   | (n))
 
 #define SIP_SVC_VERSION  SIP_FUNCTION_ID(1)
+#define SIP_SVC_GET_GICD SIP_FUNCTION_ID(2)
+#define SIP_SVC_GET_GICR SIP_FUNCTION_ID(3)
 
 EFI_STATUS
 EFIAPI
@@ -79,5 +81,33 @@ InitializeSbsaQemuPlatformDxe (
 
   DEBUG ((DEBUG_INFO, "Platform version: %d.%d\n", Arg0, Arg1));
 
+  /* If we are on platform version 0.0 then there is no more data for us in DeviceTree */
+  if ((Arg0 == 0) && (Arg1 == 0))
+  {
+    return EFI_SUCCESS;
+  }
+
+  SmcResult = ArmCallSmc0 (SIP_SVC_GET_GICD, &Arg0, NULL, NULL);
+  if (SmcResult == SMC_ARCH_CALL_SUCCESS)
+  {
+    Result = PcdSet64S (PcdGicDistributorBase, Arg0);
+    ASSERT_RETURN_ERROR (Result);
+  }
+
+  Arg0 = PcdGet64 (PcdGicDistributorBase);
+
+  DEBUG ((DEBUG_INFO, "GICD base: 0x%x\n", Arg0));
+
+  SmcResult = ArmCallSmc0 (SIP_SVC_GET_GICR, &Arg0, NULL, NULL);
+  if (SmcResult == SMC_ARCH_CALL_SUCCESS)
+  {
+    Result = PcdSet64S (PcdGicRedistributorsBase, Arg0);
+    ASSERT_RETURN_ERROR (Result);
+  }
+
+  Arg0 = PcdGet64 (PcdGicRedistributorsBase);
+
+  DEBUG ((DEBUG_INFO, "GICR base: 0x%x\n", Arg0));
+
   return EFI_SUCCESS;
 }
diff --git a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.inf b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.inf
index 1f2c8a9dd6af..545794a8c7ff 100644
--- a/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.inf
+++ b/Silicon/Qemu/SbsaQemu/Drivers/SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.inf
@@ -41,6 +41,10 @@
   gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformVersionMajor
   gArmVirtSbsaQemuPlatformTokenSpaceGuid.PcdPlatformVersionMinor
 
+  gArmTokenSpaceGuid.PcdGicDistributorBase
+  gArmTokenSpaceGuid.PcdGicRedistributorsBase
+
+
 [Depex]
   TRUE
 
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v5 0/2] Qemu/Sbsa versioning
  2023-05-15 13:47 [PATCH v5 0/2] Qemu/Sbsa versioning Marcin Juszkiewicz
  2023-05-15 13:47 ` [PATCH v5 1/2] Platform/SbsaQemu: read platform version Marcin Juszkiewicz
  2023-05-15 13:47 ` [PATCH v5 2/2] Platform/SbsaQemu: read GIC base from TF-A Marcin Juszkiewicz
@ 2023-05-15 13:50 ` Rebecca Cran
  2 siblings, 0 replies; 4+ messages in thread
From: Rebecca Cran @ 2023-05-15 13:50 UTC (permalink / raw)
  To: Marcin Juszkiewicz, devel; +Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar

Thanks. For the series:

Reviewed-by: Rebecca Cran <rebecca@bsdio.com>


On 5/15/23 07:47, Marcin Juszkiewicz wrote:
> Qemu has versioning for sbsa-ref platform. TF-A reads it from provided
> DeviceTree and provides as SMC.
>
> Version 0.0 (QEMU 8.0)  provides platform version information.
> Version 0.1 (in review) provides GIC information.
>
> Next versions will bring more changes to make use of development done
> during last years.
>
> Requires "SbsaQemu: make GIC base address Pcds dynamic" by Leif
> Lindholm to be able to change values with those from QEMU.
>
> QEMU part: https://lists.gnu.org/archive/html/qemu-arm/2023-05/msg00517.html
> TF-A part: https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/20871
>
> Changes since v4:
> - SMC calls use SmcResult variable (UINTN)
> - PcdSet* calls use Result var (RETURN_STATUS)
> - fixed "are we on 0.0" check
>
> Marcin Juszkiewicz (2):
>    Platform/SbsaQemu: read platform version
>    Platform/SbsaQemu: read GIC base from TF-A
>
>   Platform/Qemu/SbsaQemu/SbsaQemu.dsc           |  3 +
>   .../SbsaQemuPlatformDxe/SbsaQemuPlatformDxe.c | 58 +++++++++++++++++++
>   .../SbsaQemuPlatformDxe.inf                   |  9 +++
>   Silicon/Qemu/SbsaQemu/SbsaQemu.dec            |  3 +
>   4 files changed, 73 insertions(+)
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-05-15 13:50 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-15 13:47 [PATCH v5 0/2] Qemu/Sbsa versioning Marcin Juszkiewicz
2023-05-15 13:47 ` [PATCH v5 1/2] Platform/SbsaQemu: read platform version Marcin Juszkiewicz
2023-05-15 13:47 ` [PATCH v5 2/2] Platform/SbsaQemu: read GIC base from TF-A Marcin Juszkiewicz
2023-05-15 13:50 ` [PATCH v5 0/2] Qemu/Sbsa versioning Rebecca Cran

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox