* [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