From 80520bea2c13e7bced7f474f39903c2adf902fc0 Mon Sep 17 00:00:00 2001 From: Marcin Wojtas Date: Fri, 17 Feb 2017 01:39:00 +0100 Subject: Marvell/Armada: Introduce platform initialization driver In order to enable modification of dynamic PCD's for the libraries and DXE drivers, this patch introduces new driver. It is executed prior to other drivers. Mpp, ComPhy and Utmi libraries initialization were moved from PrePi stage to DXE. To force the correct driver dispatch sequence, introduce a protocol GUID and install the protocol as a NULL protocol when PlatInitDxe executes. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Marcin Wojtas [Introduce protocol GUID to force correct driver dispatch order] Signed-off-by: Ard Biesheuvel Signed-off-by: Marcin Wojtas Reviewed-by: Leif Lindholm --- Platform/Marvell/Armada/Armada.dsc.inc | 3 ++ Platform/Marvell/Armada/Armada70x0.fdf | 5 +++ .../Armada/Drivers/PlatInitDxe/PlatInitDxe.c | 45 ++++++++++++++++++++++ .../Armada/Drivers/PlatInitDxe/PlatInitDxe.inf | 45 ++++++++++++++++++++++ .../Armada/Library/Armada70x0Lib/Armada70x0Lib.c | 11 ------ Platform/Marvell/Marvell.dec | 5 +++ 6 files changed, 103 insertions(+), 11 deletions(-) create mode 100644 Platform/Marvell/Armada/Drivers/PlatInitDxe/PlatInitDxe.c create mode 100644 Platform/Marvell/Armada/Drivers/PlatInitDxe/PlatInitDxe.inf diff --git a/Platform/Marvell/Armada/Armada.dsc.inc b/Platform/Marvell/Armada/Armada.dsc.inc index 89fb7e761c..417bb0c267 100644 --- a/Platform/Marvell/Armada/Armada.dsc.inc +++ b/Platform/Marvell/Armada/Armada.dsc.inc @@ -378,6 +378,9 @@ ArmPkg/Drivers/TimerDxe/TimerDxe.inf ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.inf + # Platform Initialization + Platform/Marvell/Armada/Drivers/PlatInitDxe/PlatInitDxe.inf + # Platform drivers Platform/Marvell/Drivers/I2c/MvI2cDxe/MvI2cDxe.inf MdeModulePkg/Bus/I2c/I2cDxe/I2cDxe.inf diff --git a/Platform/Marvell/Armada/Armada70x0.fdf b/Platform/Marvell/Armada/Armada70x0.fdf index c861e78a6f..763d76a601 100644 --- a/Platform/Marvell/Armada/Armada70x0.fdf +++ b/Platform/Marvell/Armada/Armada70x0.fdf @@ -89,6 +89,11 @@ FvNameGuid = 5eda4200-2c5f-43cb-9da3-0baf74b1b30c INF MdeModulePkg/Core/Dxe/DxeMain.inf + # + # Platform Initialization + # + INF Platform/Marvell/Armada/Drivers/PlatInitDxe/PlatInitDxe.inf + # PI DXE Drivers producing Architectural Protocols (EFI Services) INF ArmPkg/Drivers/CpuDxe/CpuDxe.inf INF ArmPkg/Drivers/ArmGic/ArmGicDxe.inf diff --git a/Platform/Marvell/Armada/Drivers/PlatInitDxe/PlatInitDxe.c b/Platform/Marvell/Armada/Drivers/PlatInitDxe/PlatInitDxe.c new file mode 100644 index 0000000000..1efad77854 --- /dev/null +++ b/Platform/Marvell/Armada/Drivers/PlatInitDxe/PlatInitDxe.c @@ -0,0 +1,45 @@ +/** @file + Copyright (c) 2017, Linaro Limited. All rights reserved. + Copyright (c) 2017, Marvell International Ltd. and its affiliates + + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ + +#include +#include +#include +#include +#include +#include +#include + +EFI_STATUS +EFIAPI +ArmadaPlatInitDxeEntryPoint ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + + DEBUG ((DEBUG_ERROR, "\nArmada Platform Init\n\n")); + + Status = gBS->InstallProtocolInterface (&ImageHandle, + &gMarvellPlatformInitCompleteProtocolGuid, + EFI_NATIVE_INTERFACE, + NULL); + ASSERT_EFI_ERROR (Status); + + MvComPhyInit (); + UtmiPhyInit (); + MppInitialize (); + + return EFI_SUCCESS; +} diff --git a/Platform/Marvell/Armada/Drivers/PlatInitDxe/PlatInitDxe.inf b/Platform/Marvell/Armada/Drivers/PlatInitDxe/PlatInitDxe.inf new file mode 100644 index 0000000000..790b7e3e4e --- /dev/null +++ b/Platform/Marvell/Armada/Drivers/PlatInitDxe/PlatInitDxe.inf @@ -0,0 +1,45 @@ +#/* @file +# Copyright (c) 2017, Linaro Limited. All rights reserved. +# Copyright (c) 2017, Marvell International Ltd. and its affiliates +# +# This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. +# +#*/ + +[Defines] + INF_VERSION = 0x00010019 + BASE_NAME = PlatInitDxe + FILE_GUID = 8c66f65b-08a6-4c91-b993-ff81e0adf818 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + + ENTRY_POINT = ArmadaPlatInitDxeEntryPoint + +[Sources] + PlatInitDxe.c + +[Packages] + MdeModulePkg/MdeModulePkg.dec + MdePkg/MdePkg.dec + Platform/Marvell/Marvell.dec + +[LibraryClasses] + ComPhyLib + DebugLib + MppLib + PcdLib + TimerLib + UefiDriverEntryPoint + UtmiPhyLib + +[Protocols] + gMarvellPlatformInitCompleteProtocolGuid ## PRODUCES + +[Depex] + TRUE diff --git a/Platform/Marvell/Armada/Library/Armada70x0Lib/Armada70x0Lib.c b/Platform/Marvell/Armada/Library/Armada70x0Lib/Armada70x0Lib.c index 0ed310f8be..968d28f813 100644 --- a/Platform/Marvell/Armada/Library/Armada70x0Lib/Armada70x0Lib.c +++ b/Platform/Marvell/Armada/Library/Armada70x0Lib/Armada70x0Lib.c @@ -15,12 +15,8 @@ #include #include -#include -#include -#include #include - ARM_CORE_INFO mArmada7040MpCoreInfoTable[] = { { // Cluster 0, Core 0 @@ -90,13 +86,6 @@ ArmPlatformInitialize ( IN UINTN MpId ) { - if (!ArmPlatformIsPrimaryCore (MpId)) { - return RETURN_SUCCESS; - } - - MvComPhyInit (); - UtmiPhyInit (); - MppInitialize (); return RETURN_SUCCESS; } diff --git a/Platform/Marvell/Marvell.dec b/Platform/Marvell/Marvell.dec index 0902086ba0..e7d7c2c098 100644 --- a/Platform/Marvell/Marvell.dec +++ b/Platform/Marvell/Marvell.dec @@ -56,6 +56,11 @@ gShellFUpdateHiiGuid = { 0x9b5d2176, 0x590a, 0x49db, { 0x89, 0x5d, 0x4a, 0x70, 0xfe, 0xad, 0xbe, 0x24 } } gShellSfHiiGuid = { 0x03a67756, 0x8cde, 0x4638, { 0x82, 0x34, 0x4a, 0x0f, 0x6d, 0x58, 0x81, 0x39 } } +[Protocols] + # installed as a protocol by PlatInitDxe to force ordering between DXE drivers + # that depend on the lowlevel platform initialization having been completed + gMarvellPlatformInitCompleteProtocolGuid = { 0x465b8cf7, 0x016f, 0x4ba6, { 0xbe, 0x6b, 0x28, 0x0e, 0x3a, 0x7d, 0x38, 0x6f } } + [PcdsFixedAtBuild.common] #MPP gMarvellTokenSpaceGuid.PcdMppChipCount|0|UINT32|0x30000001 -- cgit v1.2.3