On Wed, Nov 30, 2016 at 06:53:50PM +0100, Marcin Wojtas wrote:
From: Jan Dąbroś jsd@semihalf.com
'fupdate' command performs updating firmware from file placed on local filesystem. It consumes MARVELL_SPI_FLASH_PROTOCOL and MARVELL_SPI_MASTER_PROTOCOL in order to handle SPI transfer of the image. Command also verifies image data correctness before burning to flash.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jan Dabros jsd@semihalf.com Signed-off-by: Marcin Wojtas mw@semihalf.com
So, in general...: Reviewed-by: Leif Lindholm leif.lindholm@linaro.org
But one comment inline below.
Applications/FirmwareUpdate/FUpdate.c | 413 ++++++++++++++++++++++++++ Applications/FirmwareUpdate/FUpdate.inf | 75 +++++ Applications/FirmwareUpdate/FUpdate.uni | Bin 0 -> 5146 bytes Platforms/Marvell/Include/Protocol/SpiFlash.h | 2 + Platforms/Marvell/Marvell.dec | 1 + 5 files changed, 491 insertions(+) create mode 100644 Applications/FirmwareUpdate/FUpdate.c create mode 100644 Applications/FirmwareUpdate/FUpdate.inf create mode 100644 Applications/FirmwareUpdate/FUpdate.uni
diff --git a/Applications/FirmwareUpdate/FUpdate.c b/Applications/FirmwareUpdate/FUpdate.c new file mode 100644 index 0000000..0d5ca0f --- /dev/null +++ b/Applications/FirmwareUpdate/FUpdate.c @@ -0,0 +1,413 @@ +/******************************************************************************* +Copyright (C) 2016 Marvell International Ltd.
+Marvell BSD License Option
+If you received this File from Marvell, you may opt to use, redistribute and/or +modify this File under the following licensing terms. +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met:
+* Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
+* Neither the name of Marvell nor the names of its contributors may be
- used to endorse or promote products derived from this software without
- specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*******************************************************************************/ +#include <ShellBase.h> +#include <Uefi.h>
+#include <Library/BaseLib.h> +#include <Library/BaseMemoryLib.h> +#include <Library/DebugLib.h> +#include <Library/FileHandleLib.h> +#include <Library/HiiLib.h> +#include <Library/MemoryAllocationLib.h> +#include <Library/PrintLib.h> +#include <Library/ShellCEntryLib.h> +#include <Library/ShellCommandLib.h> +#include <Library/ShellLib.h> +#include <Library/UefiBootServicesTableLib.h> +#include <Library/UefiLib.h>
+#include <Protocol/Spi.h> +#include <Protocol/SpiFlash.h>
+#define CMD_NAME_STRING L"fupdate"
+#define MAIN_HDR_MAGIC 0xB105B002
+STATIC MARVELL_SPI_FLASH_PROTOCOL *SpiFlashProtocol; +STATIC MARVELL_SPI_MASTER_PROTOCOL *SpiMasterProtocol;
+STATIC CONST CHAR16 gShellFUpdateFileName[] = L"ShellCommands"; +STATIC EFI_HANDLE gShellFUpdateHiiHandle = NULL;
+STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
- {L"help", TypeFlag},
- {NULL , TypeMax}
- };
+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 *Slave
- )
+{
- EFI_STATUS Status;
- UINT32 IdBuffer, Id, RefId;
- Id = PcdGet32 (PcdSpiFlashId);
- IdBuffer = CMD_READ_ID & 0xff;
- // Read SPI flash ID
- SpiFlashProtocol->ReadId (Slave, SPI_ID_SIZE, (UINT8 *)&IdBuffer);
My suggestion of an SPI_ID_SIZE only really made sense when there was a UINT8[] involved as well.
With this improved version of the logic, sizeof (UINT32) would make more sense.
That's minor enough I can fix up on commit if you'd like.
Regards,
Leif
- // Swap and extract 3 bytes of the ID
- RefId = SwapBytes32 (IdBuffer) >> 8;
- if (RefId == 0) {
- Print (L"%s: No SPI flash detected");
- return EFI_DEVICE_ERROR;
- } else if (RefId != Id) {
- Print (L"%s: Unsupported SPI flash detected with ID=%2x\n", CMD_NAME_STRING, RefId);
- return EFI_DEVICE_ERROR;
- }
- Print (L"%s: Detected supported SPI flash with ID=%3x\n", CMD_NAME_STRING, RefId);
- Status = SpiFlashProtocol->Init (SpiFlashProtocol, Slave);
- if (EFI_ERROR(Status)) {
- Print (L"%s: Cannot initialize flash device\n", CMD_NAME_STRING);
- return EFI_DEVICE_ERROR;
- }
- return EFI_SUCCESS;
+}
+STATIC +EFI_STATUS +CheckImageHeader (
- IN OUT UINTN *ImageHeader
- )
+{
- MV_FIRMWARE_IMAGE_HEADER *Header;
- UINT32 HeaderLength, Checksum, ChecksumBackup;
- Header = (MV_FIRMWARE_IMAGE_HEADER *)ImageHeader;
- HeaderLength = Header->PrologSize;
- ChecksumBackup = Header->PrologChecksum;
- // Compare magic number
- if (Header->Magic != MAIN_HDR_MAGIC) {
- Print (L"%s: Bad Image magic 0x%08x != 0x%08x\n", CMD_NAME_STRING, Header->Magic, MAIN_HDR_MAGIC);
- return EFI_DEVICE_ERROR;
- }
- // The checksum field is discarded from calculation
- Header->PrologChecksum = 0;
- Checksum = CalculateSum32 ((UINT32 *)Header, HeaderLength);
- if (Checksum != ChecksumBackup) {
- Print (L"%s: Bad Image checksum. 0x%x != 0x%x\n", CMD_NAME_STRING, Checksum, ChecksumBackup);
- return EFI_DEVICE_ERROR;
- }
- // Restore checksum backup
- Header->PrologChecksum = ChecksumBackup;
- return 0;
+}
+STATIC +EFI_STATUS +PrepareFirmwareImage (
- IN LIST_ENTRY *CheckPackage,
- IN OUT SHELL_FILE_HANDLE *FileHandle,
- IN OUT UINTN **FileBuffer,
- IN OUT UINTN *FileSize
- )
+{
- CONST CHAR16 *FileStr;
- EFI_STATUS Status;
- UINT64 OpenMode;
- UINTN *Buffer;
- // Parse string from commandline
- FileStr = ShellCommandLineGetRawValue (CheckPackage, 1);
- if (FileStr == NULL) {
- Print (L"%s: No image specified\n", CMD_NAME_STRING);
- return EFI_INVALID_PARAMETER;
- } else {
- Status = ShellIsFile (FileStr);
- if (EFI_ERROR(Status)) {
Print (L"%s: File not found\n", CMD_NAME_STRING);
return EFI_INVALID_PARAMETER;
- }
- }
- // Obtain file size
- OpenMode = EFI_FILE_MODE_READ;
- Status = ShellOpenFileByName (FileStr, FileHandle, OpenMode, 0);
- if (EFI_ERROR (Status)) {
Print (L"%s: Cannot open Image file\n", CMD_NAME_STRING);
return EFI_DEVICE_ERROR;
- }
- Status = FileHandleGetSize (*FileHandle, FileSize);
- if (EFI_ERROR (Status)) {
Print (L"%s: Cannot get Image file size\n", CMD_NAME_STRING);
- }
- // Read Image header into buffer
- Buffer = AllocateZeroPool (*FileSize);
- Status = FileHandleRead (*FileHandle, FileSize, Buffer);
- if (EFI_ERROR (Status)) {
- Print (L"%s: Cannot read Image file header\n", CMD_NAME_STRING);
- ShellCloseFile (FileHandle);
- FreePool (Buffer);
- return EFI_DEVICE_ERROR;
- }
- *FileBuffer = Buffer;
- return EFI_SUCCESS;
+}
+/**
- Return the file name of the help text file if not using HII.
- @return The string pointer to the file name.
+**/ +STATIC +CONST CHAR16* +EFIAPI +ShellCommandGetManFileNameFUpdate (
- VOID
- )
+{
- return gShellFUpdateFileName;
+}
+STATIC +VOID +FUpdateUsage (
- VOID
- )
+{
- Print (L"\nFirmware update command\n"
"fupdate <LocalFilePath>\n\n"
"LocalFilePath - path to local firmware image file\n"
"Example:\n"
"Update firmware from file fs2:flash-image.bin\n"
" fupdate fs2:flash-image.bin\n"
- );
+}
+STATIC +SHELL_STATUS +EFIAPI +ShellCommandRunFUpdate (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
+{
- IN SHELL_FILE_HANDLE FileHandle;
- SPI_DEVICE *Slave;
- UINTN FileSize;
- UINTN *FileBuffer = NULL;
- CHAR16 *ProblemParam;
- LIST_ENTRY *CheckPackage;
- EFI_STATUS Status;
- // Locate SPI protocols
- Status = gBS->LocateProtocol (
&gMarvellSpiFlashProtocolGuid,
NULL,
(VOID **)&SpiFlashProtocol
);
- if (EFI_ERROR(Status)) {
- Print (L"%s: Cannot locate SpiFlash protocol\n", CMD_NAME_STRING);
- return SHELL_ABORTED;
- }
- Status = gBS->LocateProtocol (
&gMarvellSpiMasterProtocolGuid,
NULL,
(VOID **)&SpiMasterProtocol
);
- if (EFI_ERROR(Status)) {
- Print (L"%s: Cannot locate SpiMaster protocol\n", CMD_NAME_STRING);
- return SHELL_ABORTED;
- }
- // Parse command line
- Status = ShellInitialize ();
- if (EFI_ERROR (Status)) {
- Print (L"%s: Error while initializing Shell\n", CMD_NAME_STRING);
- ASSERT_EFI_ERROR (Status);
- return SHELL_ABORTED;
- }
- Status = ShellCommandLineParse (ParamList, &CheckPackage, &ProblemParam, TRUE);
- if (EFI_ERROR (Status)) {
- Print (L"%s: Invalid parameter\n", CMD_NAME_STRING);
- return SHELL_ABORTED;
- }
- if (ShellCommandLineGetFlag (CheckPackage, L"help")) {
- FUpdateUsage();
- return EFI_SUCCESS;
- }
- // Prepare local file to be burned into flash
- Status = PrepareFirmwareImage (CheckPackage, &FileHandle, &FileBuffer, &FileSize);
- if (EFI_ERROR(Status)) {
- return SHELL_ABORTED;
- }
- // Check image checksum and magic
- Status = CheckImageHeader (FileBuffer);
- if (EFI_ERROR(Status)) {
- goto HeaderError;
- }
- // Setup and probe SPI flash
- Slave = SpiMasterProtocol->SetupDevice (SpiMasterProtocol, 0, 0);
- if (Slave == NULL) {
- Print(L"%s: Cannot allocate SPI device!\n", CMD_NAME_STRING);
- goto HeaderError;
- }
- Status = SpiFlashProbe (Slave);
- if (EFI_ERROR(Status)) {
- Print (L"%s: Error while performing SPI flash probe\n", CMD_NAME_STRING);
- goto FlashProbeError;
- }
- // Update firmware image in flash at offset 0x0
- Status = SpiFlashProtocol->Update (Slave, 0, FileSize, (UINT8 *)FileBuffer);
- // Release resources
- SpiMasterProtocol->FreeDevice(Slave);
- FreePool (FileBuffer);
- ShellCloseFile (&FileHandle);
- if (EFI_ERROR(Status)) {
- Print (L"%s: Error while performing flash update\n", CMD_NAME_STRING);
- return SHELL_ABORTED;
- }
- Print (L"%s: Update %d bytes at offset 0x0 succeeded!\n", CMD_NAME_STRING, FileSize);
- return EFI_SUCCESS;
+FlashProbeError:
- SpiMasterProtocol->FreeDevice(Slave);
+HeaderError:
- FreePool (FileBuffer);
- ShellCloseFile (&FileHandle);
- return SHELL_ABORTED;
+}
+EFI_STATUS +EFIAPI +ShellFUpdateCommandConstructor (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
+{
- EFI_STATUS Status;
- gShellFUpdateHiiHandle = NULL;
- gShellFUpdateHiiHandle = HiiAddPackages (
&gShellFUpdateHiiGuid,
gImageHandle,
UefiShellFUpdateCommandLibStrings,
NULL
);
- if (gShellFUpdateHiiHandle == NULL) {
- Print (L"%s: Cannot add Hii package\n", CMD_NAME_STRING);
- return EFI_DEVICE_ERROR;
- }
- Status = ShellCommandRegisterCommandName (
CMD_NAME_STRING,
ShellCommandRunFUpdate,
ShellCommandGetManFileNameFUpdate,
0,
CMD_NAME_STRING,
TRUE,
gShellFUpdateHiiHandle,
STRING_TOKEN (STR_GET_HELP_FUPDATE)
);
- if (EFI_ERROR(Status)) {
- Print (L"%s: Error while registering command\n", CMD_NAME_STRING);
- return SHELL_ABORTED;
- }
- return EFI_SUCCESS;
+}
+EFI_STATUS +EFIAPI +ShellFUpdateCommandDestructor (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
+{
- if (gShellFUpdateHiiHandle != NULL) {
- HiiRemovePackages (gShellFUpdateHiiHandle);
- }
- return EFI_SUCCESS;
+} diff --git a/Applications/FirmwareUpdate/FUpdate.inf b/Applications/FirmwareUpdate/FUpdate.inf new file mode 100644 index 0000000..4d4b97e --- /dev/null +++ b/Applications/FirmwareUpdate/FUpdate.inf @@ -0,0 +1,75 @@ +# +# Marvell BSD License Option +# +# If you received this File from Marvell, you may opt to use, redistribute +# and/or modify this File under the following licensing terms. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * Neither the name of Marvell nor the names of its contributors may be +# used to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#
+[Defines]
- INF_VERSION = 0x00010019
- BASE_NAME = UefiShellFUpdateCommandLib
- FILE_GUID = 470292b2-926b-4ed8-8080-be7a260db627
- MODULE_TYPE = UEFI_APPLICATION
- VERSION_STRING = 0.1
- LIBRARY_CLASS = NULL|UEFI_APPLICATION UEFI_DRIVER
- CONSTRUCTOR = ShellFUpdateCommandConstructor
- DESTRUCTOR = ShellFUpdateCommandDestructor
+[Sources]
- FUpdate.c
- FUpdate.uni
+[Packages]
- MdeModulePkg/MdeModulePkg.dec
- MdePkg/MdePkg.dec
- OpenPlatformPkg/Platforms/Marvell/Marvell.dec
- ShellPkg/ShellPkg.dec
+[LibraryClasses]
- BaseLib
- BaseMemoryLib
- DebugLib
- FileHandleLib
- HiiLib
- MemoryAllocationLib
- PcdLib
- ShellCommandLib
- ShellLib
- UefiBootServicesTableLib
- UefiLib
- UefiLib
- UefiRuntimeServicesTableLib
+[Pcd]
- gMarvellTokenSpaceGuid.PcdSpiFlashId
+[Protocols]
- gMarvellSpiFlashProtocolGuid
- gMarvellSpiMasterProtocolGuid
+[Guids]
- gShellFUpdateHiiGuid
diff --git a/Applications/FirmwareUpdate/FUpdate.uni b/Applications/FirmwareUpdate/FUpdate.uni new file mode 100644 index 0000000000000000000000000000000000000000..9d52e590c6d239621d226a240a3f9755210f52fe GIT binary patch literal 5146 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
literal 0 HcmV?d00001
diff --git a/Platforms/Marvell/Include/Protocol/SpiFlash.h b/Platforms/Marvell/Include/Protocol/SpiFlash.h index 743bb87..e5d46a8 100644 --- a/Platforms/Marvell/Include/Protocol/SpiFlash.h +++ b/Platforms/Marvell/Include/Protocol/SpiFlash.h @@ -47,6 +47,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define CMD_ERASE_64K 0xd8 #define CMD_4B_ADDR_ENABLE 0xb7 +#define SPI_ID_SIZE 0x4
extern EFI_GUID gMarvellSpiFlashProtocolGuid; typedef struct _MARVELL_SPI_FLASH_PROTOCOL MARVELL_SPI_FLASH_PROTOCOL; diff --git a/Platforms/Marvell/Marvell.dec b/Platforms/Marvell/Marvell.dec index f1d2def..313eaa6 100644 --- a/Platforms/Marvell/Marvell.dec +++ b/Platforms/Marvell/Marvell.dec @@ -53,6 +53,7 @@ gMarvellTokenSpaceGuid = { 0xf995c6c8, 0xbc9b, 0x4e93, { 0xbd, 0xcf, 0x49, 0x90, 0xc6, 0xe7, 0x8c, 0x7f } } gShellEepromHiiGuid = { 0xb2f4c714, 0x147f, 0x4ff7, { 0x82, 0x1b, 0xce, 0x7b, 0x91, 0x7f, 0x5f, 0x2f } }
- gShellFUpdateHiiGuid = { 0x9b5d2176, 0x590a, 0x49db, { 0x89, 0x5d, 0x4a, 0x70, 0xfe, 0xad, 0xbe, 0x24 } } gShellSfHiiGuid = { 0x03a67756, 0x8cde, 0x4638, { 0x82, 0x34, 0x4a, 0x0f, 0x6d, 0x58, 0x81, 0x39 } }
[PcdsFixedAtBuild.common] -- 1.8.3.1