summaryrefslogtreecommitdiffstats
path: root/ArmPkg/Drivers/ArmScmiDxe
diff options
context:
space:
mode:
authorGirish Pathak <girish.pathak@arm.com>2018-06-19 14:53:53 +0100
committerArd Biesheuvel <ard.biesheuvel@linaro.org>2018-06-22 08:22:04 +0200
commit3b03b5e990f8bb347dfdb91926d8ef015d0b607e (patch)
tree516064273ee34d27207d5f26cef74eda70b4085e /ArmPkg/Drivers/ArmScmiDxe
parent889cf68c3cd67617e274526822e553bfb07cd231 (diff)
downloadedk2-3b03b5e990f8bb347dfdb91926d8ef015d0b607e.tar.gz
edk2-3b03b5e990f8bb347dfdb91926d8ef015d0b607e.tar.bz2
edk2-3b03b5e990f8bb347dfdb91926d8ef015d0b607e.zip
ArmPkg/ArmScmiDxe: Dynamically allocate buffer for protocol ids
Dynamically allocate the buffer to receive the SCMI protocol list. This makes MAX_PROTOCOLS redundant, so it is removed. It also fixes one minor code alignment issue and removes an unused macro PROTOCOL_MASK. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Girish Pathak <girish.pathak@arm.com> Tested-by: Sudeep Holla <sudeep.holla@arm.com> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Diffstat (limited to 'ArmPkg/Drivers/ArmScmiDxe')
-rw-r--r--ArmPkg/Drivers/ArmScmiDxe/Scmi.c5
-rw-r--r--ArmPkg/Drivers/ArmScmiDxe/ScmiDxe.c27
-rw-r--r--ArmPkg/Drivers/ArmScmiDxe/ScmiDxe.h1
3 files changed, 21 insertions, 12 deletions
diff --git a/ArmPkg/Drivers/ArmScmiDxe/Scmi.c b/ArmPkg/Drivers/ArmScmiDxe/Scmi.c
index 1e279f69cf..d247d3a932 100644
--- a/ArmPkg/Drivers/ArmScmiDxe/Scmi.c
+++ b/ArmPkg/Drivers/ArmScmiDxe/Scmi.c
@@ -22,11 +22,6 @@
#include "ScmiPrivate.h"
-// SCMI Specification 1.0
-#define MAX_PROTOCOLS 6
-
-#define PROTOCOL_MASK 0xF
-
// Arbitrary timeout value 20ms.
#define RESPONSE_TIMEOUT 20000
diff --git a/ArmPkg/Drivers/ArmScmiDxe/ScmiDxe.c b/ArmPkg/Drivers/ArmScmiDxe/ScmiDxe.c
index a56c7b21d5..0400799b5c 100644
--- a/ArmPkg/Drivers/ArmScmiDxe/ScmiDxe.c
+++ b/ArmPkg/Drivers/ArmScmiDxe/ScmiDxe.c
@@ -63,8 +63,8 @@ ArmScmiDxeEntryPoint (
UINT32 Index;
UINT32 NumProtocols;
UINT32 ProtocolIndex;
- UINT8 SupportedList[MAX_PROTOCOLS];
- UINT32 SupportedListSize = sizeof (SupportedList);
+ UINT8 *SupportedList;
+ UINT32 SupportedListSize;
// Every SCMI implementation must implement the base protocol.
ASSERT (Protocols[0].Id == SCMI_PROTOCOL_ID_BASE);
@@ -108,13 +108,26 @@ ArmScmiDxeEntryPoint (
ASSERT (NumProtocols != 0);
+ SupportedListSize = (NumProtocols * sizeof (*SupportedList));
+
+ Status = gBS->AllocatePool (
+ EfiBootServicesData,
+ SupportedListSize,
+ (VOID**)&SupportedList
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT (FALSE);
+ return Status;
+ }
+
// Get the list of protocols supported by SCP firmware on the platform.
Status = BaseProtocol->DiscoverListProtocols (
- BaseProtocol,
- &SupportedListSize,
- SupportedList
- );
+ BaseProtocol,
+ &SupportedListSize,
+ SupportedList
+ );
if (EFI_ERROR (Status)) {
+ gBS->FreePool (SupportedList);
ASSERT (FALSE);
return Status;
}
@@ -134,5 +147,7 @@ ArmScmiDxeEntryPoint (
}
}
+ gBS->FreePool (SupportedList);
+
return EFI_SUCCESS;
}
diff --git a/ArmPkg/Drivers/ArmScmiDxe/ScmiDxe.h b/ArmPkg/Drivers/ArmScmiDxe/ScmiDxe.h
index 222e54f4dc..c9a9072579 100644
--- a/ArmPkg/Drivers/ArmScmiDxe/ScmiDxe.h
+++ b/ArmPkg/Drivers/ArmScmiDxe/ScmiDxe.h
@@ -19,7 +19,6 @@
#include "ScmiPrivate.h"
-#define MAX_PROTOCOLS 6
#define MAX_VENDOR_LEN SCMI_MAX_STR_LEN
/** Pointer to protocol initialization function.