From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: None (no SPF record) identity=mailfrom; client-ip=2607:f8b0:4001:c0b::22b; helo=mail-it0-x22b.google.com; envelope-from=mw@semihalf.com; receiver=edk2-devel@lists.01.org Received: from mail-it0-x22b.google.com (mail-it0-x22b.google.com [IPv6:2607:f8b0:4001:c0b::22b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id BE54420977860 for ; Fri, 1 Jun 2018 09:02:06 -0700 (PDT) Received: by mail-it0-x22b.google.com with SMTP id c3-v6so2401689itj.4 for ; Fri, 01 Jun 2018 09:02:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=lLFD2I96g/S/+WmDaotwVJoYGzOZmEMb04NG6cHNsyg=; b=vmeGtYS7fpOEsF/FHHv+60Wyrnruu7dmYLQVGCkmvs0tW0bmSPkGCA0GVKlvGMVfJ1 XP1p/fp78I8GoRLMgBTN0jyFNQulAo2f6PDEnTpwIbW+QyiIORwuAek2PifkIr7KLj7o UKt9+wAyJSuIVR8QPfDVOg+KvQJtDX8bVtAwGkf8LW4vP/0QvloIvN1wcQPEMy1bXBsV W7PxoUCKAls30IRGfKDal87n4xJ/qFWghl40y20QEvNe9My0aYIM0QWZcAhVtSM+XixC vgyHo7s+I/pQZXAZTnTvikPZW2XLlMj5Ug1qNuTExrH6eodnqtzCBYjXH/qiy6FtHNdL GrKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=lLFD2I96g/S/+WmDaotwVJoYGzOZmEMb04NG6cHNsyg=; b=nhrkocklfbTLb4iuXNQUAHIyM9LcqhS9L/p9kbCu3GDgCN7SOJBctYnJkx4KCIhOuf di9ob5WmIDBlQ3Q8W8Ryj8k6PRxNUNxhfebYQQjiaQ28Imx8q7v49Y+rs5CVomXXFCyv xWMoDOSFGVd/VqZU0l4GTqxDuCvxCOUiLWGjpL2td0W4tkyc8KdXisuCN0UaQ46GFwD6 0sgUIiZ1npvlBBqa5O5oxe2vbytdEoHojX3jOWmArzOaw/wLFizgbe75FHGKth5RyDOV e3rW6c0bn+2FKNCawUrBq2fVh+FocKM9mTHLBnCbH3KVaG4avcNOZ9OXxx0byye//PIr utyw== X-Gm-Message-State: APt69E2z1FofhwtuoUz0jEQZYOoB0gZikjiWHWW96Jl2txLm7qPgQVBK BX3VSJ+pgpYD+ARZ43c4jd/5FbDaZtZFCobWCHeIBM7wqew= X-Google-Smtp-Source: ADUXVKLV9iuWo8rBFH7ZtwUlD1vhFLEsb3vwhXXfuURSWM5xOc0ylO4QTwnFbDk90ed3NjhHQAfwywLkBQGsiMy8DXw= X-Received: by 2002:a24:1085:: with SMTP id 127-v6mr4573437ity.57.1527868925758; Fri, 01 Jun 2018 09:02:05 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a6b:c6cc:0:0:0:0:0 with HTTP; Fri, 1 Jun 2018 09:02:04 -0700 (PDT) In-Reply-To: References: <1527863526-5494-1-git-send-email-mw@semihalf.com> <1527863526-5494-4-git-send-email-mw@semihalf.com> From: Marcin Wojtas Date: Fri, 1 Jun 2018 18:02:04 +0200 Message-ID: To: Ard Biesheuvel Cc: "edk2-devel@lists.01.org" , Leif Lindholm , =?UTF-8?B?SmFuIETEhWJyb8Wb?= , Hua Jing , Grzegorz Jaszczyk , David Sniatkiwicz Subject: Re: [platforms PATCH 3/4] Marvell/Armada7k8k: Introduce capsule FW update implementation X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 01 Jun 2018 16:02:07 -0000 Content-Type: text/plain; charset="UTF-8" Hi Ard, 2018-06-01 17:32 GMT+02:00 Ard Biesheuvel : > On 1 June 2018 at 16:32, Marcin Wojtas wrote: >> From: David Sniatkiwicz >> >> This patch adds necessary code that allows to update >> firmware on Armada7k8k platforms, using generic gRT->UpdateCapsule, >> i.e. >> * PlatformFlashAccessLib implementation to write data to SPI flash >> * SystemFirmwareDescriptor for FMP protocol >> * SystemFirmwareUpdateConfig to specify binary description >> within SystemFirmwareFile >> >> Contributed-under: TianoCore Contribution Agreement 1.1 >> Signed-off-by: David Sniatkiwicz >> Signed-off-by: Marcin Wojtas > > Please take the [very recent] changes made in > 550de36633fec97d4f7467c02a33b3217f440ae9 into account here. > Unfortunately, there is no loop in your code from which you can report > progress, but you should at least implement the new entry point. > Actually there is a loop and current % of progress printed when updating data in the SPI. It is implemented in the SPI flash protocol callback. https://github.com/tianocore/edk2-platforms/blob/master/Silicon/Marvell/Drivers/Spi/MvSpiFlashDxe/MvSpiFlashDxe.c#L382 What would you recommend me to do in such case? Thanks, Marcin > >> --- >> Silicon/Marvell/Armada7k8k/Feature/Capsule/PlatformFlashAccessLib/PlatformFlashAccessLib.c | 261 ++++++++++++++++++++ >> Silicon/Marvell/Armada7k8k/Feature/Capsule/PlatformFlashAccessLib/PlatformFlashAccessLib.inf | 52 ++++ >> Silicon/Marvell/Armada7k8k/Feature/Capsule/SystemFirmwareDescriptor/SystemFirmwareDescriptor.aslc | 81 ++++++ >> Silicon/Marvell/Armada7k8k/Feature/Capsule/SystemFirmwareDescriptor/SystemFirmwareDescriptor.inf | 50 ++++ >> Silicon/Marvell/Armada7k8k/Feature/Capsule/SystemFirmwareDescriptor/SystemFirmwareDescriptorPei.c | 74 ++++++ >> Silicon/Marvell/Armada7k8k/Feature/Capsule/SystemFirmwareUpdateConfig/SystemFirmwareUpdateConfig.ini | 26 ++ >> 6 files changed, 544 insertions(+) >> >> diff --git a/Silicon/Marvell/Armada7k8k/Feature/Capsule/PlatformFlashAccessLib/PlatformFlashAccessLib.c b/Silicon/Marvell/Armada7k8k/Feature/Capsule/PlatformFlashAccessLib/PlatformFlashAccessLib.c >> new file mode 100644 >> index 0000000..47d3205 >> --- /dev/null >> +++ b/Silicon/Marvell/Armada7k8k/Feature/Capsule/PlatformFlashAccessLib/PlatformFlashAccessLib.c >> @@ -0,0 +1,261 @@ >> +/** @file >> + Platform flash device access library for Marvell Armada 7k8k Platforms >> + >> + Copyright (c) 2018 Marvell International Ltd.
>> + >> + 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 >> +#include >> + >> +#include >> +#include >> + >> +#define MAIN_HDR_MAGIC 0xB105B002 >> + >> +STATIC MARVELL_SPI_FLASH_PROTOCOL *SpiFlashProtocol; >> +STATIC MARVELL_SPI_MASTER_PROTOCOL *SpiMasterProtocol; >> + >> +typedef struct { // Bytes >> + UINT32 Magic; // 0-3 >> + UINT32 PrologSize; // 4-7 >> + UINT32 PrologChecksum; // 8-11 >> + UINT32 BootImageSize; // 12-15 >> + UINT32 BootImageChecksum; // 16-19 >> + UINT32 Reserved0; // 20-23 >> + UINT32 LoadAddr; // 24-27 >> + UINT32 ExecAddr; // 28-31 >> + UINT8 UartConfig; // 32 >> + UINT8 Baudrate; // 33 >> + UINT8 ExtCount; // 34 >> + UINT8 AuxFlags; // 35 >> + UINT32 IoArg0; // 36-39 >> + UINT32 IoArg1; // 40-43 >> + UINT32 IoArg2; // 43-47 >> + UINT32 IoArg3; // 48-51 >> + UINT32 Reserved1; // 52-55 >> + UINT32 Reserved2; // 56-59 >> + UINT32 Reserved3; // 60-63 >> +} MV_FIRMWARE_IMAGE_HEADER; >> + >> +STATIC >> +EFI_STATUS >> +SpiFlashProbe ( >> + IN SPI_DEVICE *SpiFlash >> + ) >> +{ >> + EFI_STATUS Status; >> + >> + // Read SPI flash ID >> + Status = SpiFlashProtocol->ReadId (SpiFlash, FALSE); >> + if (EFI_ERROR (Status)) { >> + return Status; >> + } >> + >> + Status = SpiFlashProtocol->Init (SpiFlashProtocol, SpiFlash); >> + if (EFI_ERROR (Status)) { >> + DEBUG ((DEBUG_ERROR, "%a: Cannot initialize flash device\n", __FUNCTION__)); >> + return Status; >> + } >> + >> + return EFI_SUCCESS; >> +} >> + >> +STATIC >> +EFI_STATUS >> +CheckImageHeader ( >> + IN OUT VOID *ImageBuffer >> + ) >> +{ >> + MV_FIRMWARE_IMAGE_HEADER *Header; >> + UINT32 HeaderLength, Checksum, ChecksumBackup; >> + >> + Header = (MV_FIRMWARE_IMAGE_HEADER *)ImageBuffer; >> + HeaderLength = Header->PrologSize; >> + ChecksumBackup = Header->PrologChecksum; >> + >> + // Compare magic number >> + if (Header->Magic != MAIN_HDR_MAGIC) { >> + DEBUG ((DEBUG_ERROR, >> + "%a: Bad Image magic 0x%08x != 0x%08x\n", >> + __FUNCTION__, >> + Header->Magic, >> + MAIN_HDR_MAGIC)); >> + return EFI_VOLUME_CORRUPTED; >> + } >> + >> + // The checksum field is discarded from calculation >> + Header->PrologChecksum = 0; >> + >> + Checksum = CalculateSum32 ((UINT32 *)Header, HeaderLength); >> + if (Checksum != ChecksumBackup) { >> + DEBUG ((DEBUG_ERROR, >> + "%a: Bad Image checksum. 0x%x != 0x%x\n", >> + __FUNCTION__, >> + Checksum, >> + ChecksumBackup)); >> + return EFI_VOLUME_CORRUPTED; >> + } >> + >> + // Restore checksum backup >> + Header->PrologChecksum = ChecksumBackup; >> + >> + return EFI_SUCCESS; >> +} >> + >> + >> +/** >> + Perform flash write operation. >> + >> + @param[in] FirmwareType The type of firmware. >> + @param[in] FlashAddress The address of flash device to be accessed. >> + @param[in] FlashAddressType The type of flash device address. >> + @param[in] Buffer The pointer to the data buffer. >> + @param[in] Length The length of data buffer in bytes. >> + >> + @retval EFI_SUCCESS The operation returns successfully. >> + @retval EFI_WRITE_PROTECTED The flash device is read only. >> + @retval EFI_UNSUPPORTED The flash device access is unsupported. >> + @retval EFI_INVALID_PARAMETER The input parameter is not valid. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +PerformFlashWrite ( >> + IN PLATFORM_FIRMWARE_TYPE FirmwareType, >> + IN EFI_PHYSICAL_ADDRESS FlashAddress, >> + IN FLASH_ADDRESS_TYPE FlashAddressType, >> + IN VOID *Buffer, >> + IN UINTN Length >> + ) >> +{ >> + EFI_STATUS Status; >> + VOID *ImageBuffer; >> + SPI_DEVICE *SpiFlash = NULL; >> + BOOLEAN BufferAligned = TRUE; >> + >> + // Verify Firmware data >> + if (FlashAddressType != FlashAddressTypeAbsoluteAddress) { >> + DEBUG ((DEBUG_ERROR, >> + "%a: only FlashAddressTypeAbsoluteAddress supported\n", >> + __FUNCTION__)); >> + >> + return EFI_INVALID_PARAMETER; >> + } >> + >> + if (FirmwareType != PlatformFirmwareTypeSystemFirmware) { >> + DEBUG ((DEBUG_ERROR, >> + "%a: only PlatformFirmwareTypeSystemFirmware supported\n", >> + __FUNCTION__)); >> + >> + return EFI_INVALID_PARAMETER; >> + } >> + >> + // Locate SPI protocols >> + Status = gBS->LocateProtocol (&gMarvellSpiFlashProtocolGuid, >> + NULL, >> + (VOID **)&SpiFlashProtocol); >> + if (EFI_ERROR (Status)) { >> + DEBUG ((DEBUG_ERROR, >> + "%a: Cannot locate SpiFlash protocol\n", >> + __FUNCTION__)); >> + return Status; >> + } >> + >> + Status = gBS->LocateProtocol (&gMarvellSpiMasterProtocolGuid, >> + NULL, >> + (VOID **)&SpiMasterProtocol); >> + if (EFI_ERROR (Status)) { >> + DEBUG ((DEBUG_ERROR, >> + "%a: Cannot locate SpiMaster protocol\n", >> + __FUNCTION__)); >> + return Status; >> + } >> + >> + // >> + // Counting checksum in the header verification requires >> + // the buffer address alignment. >> + // It is not guaranteed by the generic capsule handling code, >> + // so use an auxiliary buffer in such case. >> + // >> + if (((UINTN) Buffer & 0x3) != 0) { >> + ImageBuffer = AllocateCopyPool (Length, Buffer); >> + if (ImageBuffer == NULL) { >> + return EFI_OUT_OF_RESOURCES; >> + } >> + BufferAligned = FALSE; >> + } else { >> + ImageBuffer = Buffer; >> + } >> + >> + // Check image checksum and magic >> + Status = CheckImageHeader (ImageBuffer); >> + if (EFI_ERROR (Status)) { >> + goto HeaderError; >> + } >> + >> + // Setup and probe SPI flash >> + SpiFlash = SpiMasterProtocol->SetupDevice (SpiMasterProtocol, >> + SpiFlash, >> + PcdGet32 (PcdSpiFlashCs), >> + PcdGet32 (PcdSpiFlashMode)); >> + if (SpiFlash == NULL) { >> + DEBUG ((DEBUG_ERROR, "%a: Cannot allocate SPI device!\n", __FUNCTION__)); >> + Status = EFI_DEVICE_ERROR; >> + goto HeaderError; >> + } >> + >> + Status = SpiFlashProbe (SpiFlash); >> + if (EFI_ERROR (Status)) { >> + DEBUG ((DEBUG_ERROR, >> + "%a: Error while performing SPI flash probe\n", >> + __FUNCTION__)); >> + goto FlashProbeError; >> + } >> + >> + // Update firmware image in flash at offset 0x0 >> + Status = SpiFlashProtocol->Update (SpiFlash, 0, Length, (UINT8 *)ImageBuffer); >> + if (EFI_ERROR (Status)) { >> + DEBUG ((DEBUG_ERROR, >> + "%a: Error while performing flash update\n", >> + __FUNCTION__)); >> + goto FlashProbeError; >> + } >> + >> + DEBUG ((DEBUG_ERROR, >> + "%a: Update %d bytes at offset 0x0 succeeded!\n", >> + __FUNCTION__, >> + Length)); >> + >> + // Release resources >> + SpiMasterProtocol->FreeDevice (SpiFlash); >> + >> + if (!BufferAligned) { >> + FreePool (ImageBuffer); >> + } >> + >> + return EFI_SUCCESS; >> + >> +FlashProbeError: >> + SpiMasterProtocol->FreeDevice (SpiFlash); >> +HeaderError: >> + if (!BufferAligned) { >> + FreePool (ImageBuffer); >> + } >> + >> + return Status; >> +} >> diff --git a/Silicon/Marvell/Armada7k8k/Feature/Capsule/PlatformFlashAccessLib/PlatformFlashAccessLib.inf b/Silicon/Marvell/Armada7k8k/Feature/Capsule/PlatformFlashAccessLib/PlatformFlashAccessLib.inf >> new file mode 100644 >> index 0000000..fd94759 >> --- /dev/null >> +++ b/Silicon/Marvell/Armada7k8k/Feature/Capsule/PlatformFlashAccessLib/PlatformFlashAccessLib.inf >> @@ -0,0 +1,52 @@ >> +## @file >> +# Platform flash device access library. >> +# >> +# Copyright (c) 2017, Linaro, Ltd. All rights reserved.
>> +# Copyright (c) 2018, Marvell International, Ltd. All rights reserved.
>> +# 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 = PlatformFlashAccessLib >> + FILE_GUID = c3f314d8-2995-4f0c-a8d6-e10298de4bde >> + MODULE_TYPE = BASE >> + VERSION_STRING = 1.0 >> + LIBRARY_CLASS = PlatformFlashAccessLib|DXE_DRIVER >> + >> +[Sources] >> + PlatformFlashAccessLib.c >> + >> +[Packages] >> + ArmPkg/ArmPkg.dec >> + EmbeddedPkg/EmbeddedPkg.dec >> + MdeModulePkg/MdeModulePkg.dec >> + MdePkg/MdePkg.dec >> + SignedCapsulePkg/SignedCapsulePkg.dec >> + Silicon/Marvell/Marvell.dec >> + >> +[LibraryClasses] >> + BaseLib >> + BaseMemoryLib >> + DebugLib >> + DxeServicesTableLib >> + MemoryAllocationLib >> + PcdLib >> + UefiBootServicesTableLib >> + UefiLib >> + UefiRuntimeServicesTableLib >> + >> +[Pcd] >> + gMarvellTokenSpaceGuid.PcdSpiFlashCs >> + gMarvellTokenSpaceGuid.PcdSpiFlashMode >> + >> +[Protocols] >> + gMarvellSpiFlashProtocolGuid >> + gMarvellSpiMasterProtocolGuid >> diff --git a/Silicon/Marvell/Armada7k8k/Feature/Capsule/SystemFirmwareDescriptor/SystemFirmwareDescriptor.aslc b/Silicon/Marvell/Armada7k8k/Feature/Capsule/SystemFirmwareDescriptor/SystemFirmwareDescriptor.aslc >> new file mode 100644 >> index 0000000..fbccdc2 >> --- /dev/null >> +++ b/Silicon/Marvell/Armada7k8k/Feature/Capsule/SystemFirmwareDescriptor/SystemFirmwareDescriptor.aslc >> @@ -0,0 +1,81 @@ >> +/** @file >> + System Firmware descriptor. >> + >> + Copyright (c) 2018, Marvell International Limited. All rights reserved. >> + Copyright (c) 2018, Linaro Limited. All rights reserved. >> + Copyright (c) 2016, Intel Corporation. All rights reserved.
>> + >> + 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 >> + >> +#define PACKAGE_VERSION 0xFFFFFFFF >> +#define PACKAGE_VERSION_STRING L"Unknown" >> + >> +#define CURRENT_FIRMWARE_VERSION 0x00000002 >> +#define CURRENT_FIRMWARE_VERSION_STRING L"0x00000002" >> +#define LOWEST_SUPPORTED_FIRMWARE_VERSION 0x00000001 >> + >> +#define IMAGE_ID SIGNATURE_64('M','V','E', 'B', 'U', '_', 'I', 'D') >> +#define IMAGE_ID_STRING L"MvebuPlatform" >> + >> +// PcdSystemFmpCapsuleImageTypeIdGuid >> +#define IMAGE_TYPE_ID_GUID { 0x757fc475, 0x6b22, 0x4482, { 0x86, 0x8e, 0xde, 0xd2, 0x86, 0xf3, 0x09, 0x40 } } >> + >> +typedef struct { >> + EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR Descriptor; >> + // real string data >> + CHAR16 ImageIdNameStr[ARRAY_SIZE (IMAGE_ID_STRING)]; >> + CHAR16 VersionNameStr[ARRAY_SIZE (CURRENT_FIRMWARE_VERSION_STRING)]; >> + CHAR16 PackageVersionNameStr[ARRAY_SIZE (PACKAGE_VERSION_STRING)]; >> +} IMAGE_DESCRIPTOR; >> + >> +IMAGE_DESCRIPTOR mImageDescriptor = >> +{ >> + { >> + EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR_SIGNATURE, >> + sizeof (EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR), >> + sizeof (IMAGE_DESCRIPTOR), >> + PACKAGE_VERSION, // PackageVersion >> + OFFSET_OF (IMAGE_DESCRIPTOR, PackageVersionNameStr), // PackageVersionName >> + 1, // ImageIndex; >> + {0x0}, // Reserved >> + IMAGE_TYPE_ID_GUID, // ImageTypeId; >> + IMAGE_ID, // ImageId; >> + OFFSET_OF (IMAGE_DESCRIPTOR, ImageIdNameStr), // ImageIdName; >> + CURRENT_FIRMWARE_VERSION, // Version; >> + OFFSET_OF (IMAGE_DESCRIPTOR, VersionNameStr), // VersionName; >> + {0x0}, // Reserved2 >> + FixedPcdGet32 (PcdFdSize), // Size; >> + IMAGE_ATTRIBUTE_IMAGE_UPDATABLE | >> + IMAGE_ATTRIBUTE_RESET_REQUIRED | >> + IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED | >> + IMAGE_ATTRIBUTE_IN_USE, // AttributesSupported; >> + IMAGE_ATTRIBUTE_IMAGE_UPDATABLE | >> + IMAGE_ATTRIBUTE_RESET_REQUIRED | >> + IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED | >> + IMAGE_ATTRIBUTE_IN_USE, // AttributesSetting; >> + 0x0, // Compatibilities; >> + LOWEST_SUPPORTED_FIRMWARE_VERSION, // LowestSupportedImageVersion; >> + 0x00000000, // LastAttemptVersion; >> + 0, // LastAttemptStatus; >> + {0x0}, // Reserved3 >> + 0, // HardwareInstance; >> + }, >> + // real string data >> + {IMAGE_ID_STRING}, >> + {CURRENT_FIRMWARE_VERSION_STRING}, >> + {PACKAGE_VERSION_STRING}, >> +}; >> + >> +VOID* CONST ReferenceAcpiTable = &mImageDescriptor; >> diff --git a/Silicon/Marvell/Armada7k8k/Feature/Capsule/SystemFirmwareDescriptor/SystemFirmwareDescriptor.inf b/Silicon/Marvell/Armada7k8k/Feature/Capsule/SystemFirmwareDescriptor/SystemFirmwareDescriptor.inf >> new file mode 100644 >> index 0000000..e6967b2 >> --- /dev/null >> +++ b/Silicon/Marvell/Armada7k8k/Feature/Capsule/SystemFirmwareDescriptor/SystemFirmwareDescriptor.inf >> @@ -0,0 +1,50 @@ >> +## @file >> +# System Firmware descriptor. >> +# >> +# Copyright (c) 2018, Marvell International Limited. All rights reserved. >> +# Copyright (c) 2018, Linaro Limited. All rights reserved. >> +# Copyright (c) 2016, Intel Corporation. All rights reserved.
>> +# >> +# 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 = 0x0001001A >> + BASE_NAME = SystemFirmwareDescriptor >> + FILE_GUID = 90B2B846-CA6D-4D6E-A8D3-C140A8E110AC >> + MODULE_TYPE = PEIM >> + VERSION_STRING = 1.0 >> + ENTRY_POINT = SystemFirmwareDescriptorPeimEntry >> + >> +[Sources] >> + SystemFirmwareDescriptorPei.c >> + SystemFirmwareDescriptor.aslc >> + >> +[Packages] >> + ArmPkg/ArmPkg.dec >> + ArmPlatformPkg/ArmPlatformPkg.dec >> + MdeModulePkg/MdeModulePkg.dec >> + MdePkg/MdePkg.dec >> + SignedCapsulePkg/SignedCapsulePkg.dec >> + >> +[LibraryClasses] >> + DebugLib >> + PcdLib >> + PeimEntryPoint >> + PeiServicesLib >> + >> +[FixedPcd] >> + gArmTokenSpaceGuid.PcdFdSize >> + >> +[Pcd] >> + gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareImageDescriptor >> + >> +[Depex] >> + TRUE >> diff --git a/Silicon/Marvell/Armada7k8k/Feature/Capsule/SystemFirmwareDescriptor/SystemFirmwareDescriptorPei.c b/Silicon/Marvell/Armada7k8k/Feature/Capsule/SystemFirmwareDescriptor/SystemFirmwareDescriptorPei.c >> new file mode 100644 >> index 0000000..c55c4d9 >> --- /dev/null >> +++ b/Silicon/Marvell/Armada7k8k/Feature/Capsule/SystemFirmwareDescriptor/SystemFirmwareDescriptorPei.c >> @@ -0,0 +1,74 @@ >> +/** @file >> + System Firmware descriptor producer. >> + >> + Copyright (c) 2018, Marvell International, Ltd. All rights reserved. >> + Copyright (c) 2018, Linaro Limited. All rights reserved. >> + Copyright (c) 2016, Intel Corporation. All rights reserved.
>> + >> + 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 >> + >> +/** >> + Entrypoint for SystemFirmwareDescriptor PEIM. >> + >> + @param[in] FileHandle Handle of the file being invoked. >> + @param[in] PeiServices Describes the list of possible PEI Services. >> + >> + @retval EFI_SUCCESS PPI successfully installed. >> +**/ >> +EFI_STATUS >> +EFIAPI >> +SystemFirmwareDescriptorPeimEntry ( >> + IN EFI_PEI_FILE_HANDLE FileHandle, >> + IN CONST EFI_PEI_SERVICES **PeiServices >> + ) >> +{ >> + EFI_STATUS Status; >> + EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *Descriptor; >> + UINTN Size; >> + UINTN Index; >> + UINT32 AuthenticationStatus; >> + >> + // >> + // Search RAW section. >> + // >> + >> + Index = 0; >> + while (TRUE) { >> + Status = PeiServicesFfsFindSectionData3 (EFI_SECTION_RAW, >> + Index, >> + FileHandle, >> + (VOID **)&Descriptor, >> + &AuthenticationStatus); >> + if (EFI_ERROR (Status)) { >> + // Should not happen, must something wrong in FDF. >> + ASSERT(FALSE); >> + return EFI_NOT_FOUND; >> + } >> + if (Descriptor->Signature == EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR_SIGNATURE) { >> + break; >> + } >> + Index++; >> + } >> + >> + DEBUG ((DEBUG_INFO, "EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR size - 0x%x\n", Descriptor->Length)); >> + >> + Size = Descriptor->Length; >> + PcdSetPtrS (PcdEdkiiSystemFirmwareImageDescriptor, &Size, Descriptor); >> + >> + return EFI_SUCCESS; >> +} >> diff --git a/Silicon/Marvell/Armada7k8k/Feature/Capsule/SystemFirmwareUpdateConfig/SystemFirmwareUpdateConfig.ini b/Silicon/Marvell/Armada7k8k/Feature/Capsule/SystemFirmwareUpdateConfig/SystemFirmwareUpdateConfig.ini >> new file mode 100644 >> index 0000000..fb0bd0b >> --- /dev/null >> +++ b/Silicon/Marvell/Armada7k8k/Feature/Capsule/SystemFirmwareUpdateConfig/SystemFirmwareUpdateConfig.ini >> @@ -0,0 +1,26 @@ >> +## @file >> +# >> +# Copyright (c) 2018, Marvell International Ltd.
>> +# Copyright (c) 2016, Intel Corporation. All rights reserved.
>> +# 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. >> +# >> +## >> + >> +[Head] >> +NumOfUpdate = 1 >> +NumOfRecovery = 0 >> +Update0 = MvFvMain >> + >> +[MvFvMain] >> +FirmwareType = 0 # SystemFirmware >> +AddressType = 1 # 0 - relative address, 1 - absolute address. >> +BaseAddress = 0x0 # Base address offset on flash >> +Length = 0x00300000 # Length, need to fix the length >> +ImageOffset = 0x00100000 # Image offset of this SystemFirmware image >> +FileGuid = b3890e02-c46b-4970-9536-57787a9e06c7 # PcdEdkiiSystemFirmwareFileGuid >> -- >> 2.7.4 >>