* [PATCH v5 1/2] Platform/SbsaQemu: read platform version [not found] <175E2102FF399ADF.29341@groups.io> @ 2023-05-11 15:44 ` Marcin Juszkiewicz 0 siblings, 0 replies; 2+ messages in thread From: Marcin Juszkiewicz @ 2023-05-11 15:44 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 | 27 +++++++++++++++++++ .../SbsaQemuPlatformDxe.inf | 5 ++++ Silicon/Qemu/SbsaQemu/SbsaQemu.dec | 3 +++ 4 files changed, 38 insertions(+) diff --git a/Platform/Qemu/SbsaQemu/SbsaQemu.dsc b/Platform/Qemu/SbsaQemu/SbsaQemu.dsc index 9ca030cfe9a7..43798e03d33c 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..199766c7014a 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,9 @@ InitializeSbsaQemuPlatformDxe ( EFI_STATUS Status; UINTN Size; VOID* Base; + UINTN Arg0; + UINTN Arg1; + UINTN Result; DEBUG ((DEBUG_INFO, "%a: InitializeSbsaQemuPlatformDxe called\n", __FUNCTION__)); @@ -51,5 +64,19 @@ InitializeSbsaQemuPlatformDxe ( return Status; } + Result = ArmCallSmc0 (SIP_SVC_VERSION, &Arg0, &Arg1, NULL); + if (Result == SMC_ARCH_CALL_SUCCESS) + { + Result = PcdSet32S (PcdPlatformVersionMajor, Arg0); + ASSERT_EFI_ERROR (Result); + Result = PcdSet32S (PcdPlatformVersionMinor, Arg1); + ASSERT_EFI_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] 2+ messages in thread
* [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 0 siblings, 1 reply; 2+ 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] 2+ 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 0 siblings, 0 replies; 2+ 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] 2+ messages in thread
end of thread, other threads:[~2023-05-15 13:48 UTC | newest] Thread overview: 2+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <175E2102FF399ADF.29341@groups.io> 2023-05-11 15:44 ` [PATCH v5 1/2] Platform/SbsaQemu: read platform version Marcin Juszkiewicz 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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox