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:c06::243; helo=mail-io0-x243.google.com; envelope-from=mw@semihalf.com; receiver=edk2-devel@lists.01.org Received: from mail-io0-x243.google.com (mail-io0-x243.google.com [IPv6:2607:f8b0:4001:c06::243]) (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 15DF521FCA298 for ; Wed, 1 Nov 2017 09:37:02 -0700 (PDT) Received: by mail-io0-x243.google.com with SMTP id n137so7360505iod.6 for ; Wed, 01 Nov 2017 09:40:55 -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=FGdVNyM+Y72PqEjZyy4v2dSZXExHJ86Xw4m9H1G5uVk=; b=Dqa1sDmQy88ecDQWO6gJsMn9mB7h8O2Du1KRYUd+/ODiZe09OZz0yn7FwspDONUG4F YkjZSivgvMjPcu33BvSzTtItSYyYJGJ1WskvrPpJfkP9q/8jf7bmHoYULLX8fOZsC64+ vnu3nYIOcVXRXagtvHV26sZcjaA51pZ5EZN/ylx9ARbh78W59+CyDmB8akaVztHCBjDz QUv/TfCcz81NqPhlMmODIZc8KyQLGOJurDd4s9Mw44q5DUu4MIYSwZ/bDEkFExdAllTa s8tSsEBbEk++8ufGT5qgA08UQAcXWL+QEHXLe4azLKULBlzQcxTuu+VGbiW2TgJG6ama njfg== 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=FGdVNyM+Y72PqEjZyy4v2dSZXExHJ86Xw4m9H1G5uVk=; b=fuWj11QeqDUMhQ+s/2Xv8rwwjTdP4Ku1Ho5LtB1nBhdPJHy/pG5MDTa+66404pdx7K +XlfVBYGyTNqR2eN3M4kVFn3JiWS6QKCH0wQWAQXNqVcmrGV1oaIpTE77HFqAWMJIOXh UPVNpSKbzWRJY2SXxsxATTc1Hx53Hmi39tvESMlGIythUT0kQeCyRWwx98n2h1AyTfuy a5lAU4qnFSkgChTD8o8j9b3I3yVGSK84kLEPHIVwPYcVHD56DXdAh1QQUfz0/UuUNLES ppyUHFySJ97Ch3Y2IPaRcvlR56AVHXL4hSMzgKW5f58c5zQy6pnJqlWnKGEcjCI0b+QA CaiQ== X-Gm-Message-State: AMCzsaVWIoX1p+v9d7AVZ1qOHOC9pBd+Pj806cBLwieqhpvJL2v7LjD1 g4CKzA3b87hhfb1vKIJnEsuMXhtYaa1+J2OVXYJfVw== X-Google-Smtp-Source: ABhQp+S6j/+qAsUlbIosv+1+GTa0FWgCmnQf8A1DISVQyF5ntm9l7bqsdcrJ/SO6TGYHkKJWsQg2OwoDPZzCS3GDS1s= X-Received: by 10.36.105.65 with SMTP id e62mr1328751itc.16.1509554454519; Wed, 01 Nov 2017 09:40:54 -0700 (PDT) MIME-Version: 1.0 Received: by 10.107.167.208 with HTTP; Wed, 1 Nov 2017 09:40:54 -0700 (PDT) In-Reply-To: <20171101034534.bwm4qd3nuc76ccff@bivouac.eciton.net> References: <1509422375-20198-1-git-send-email-mw@semihalf.com> <1509422375-20198-5-git-send-email-mw@semihalf.com> <20171101034534.bwm4qd3nuc76ccff@bivouac.eciton.net> From: Marcin Wojtas Date: Wed, 1 Nov 2017 17:40:54 +0100 Message-ID: To: Leif Lindholm Cc: edk2-devel-01 , Ard Biesheuvel , nadavh@marvell.com, Neta Zur Hershkovits , Kostya Porotchkin , Hua Jing , semihalf-dabros-jan Subject: Re: [platforms: PATCH 4/6] Marvell/Applications: SpiTool: Do not override existing slave device X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Nov 2017 16:37:02 -0000 Content-Type: text/plain; charset="UTF-8" Leif, 2017-11-01 4:45 GMT+01:00 Leif Lindholm : > On Tue, Oct 31, 2017 at 04:59:33AM +0100, Marcin Wojtas wrote: >> Current usage of sf command requires running 'sf probe' prior to >> executing any other option. Because it is done in two separate steps, >> it turned out that SpiMasterProtocol->SetupDevice could easily >> overwrite valid Slave pointer when performing second operation. >> >> Fix the issue by allocating Slave device only once and keep it >> as global variable in the SpiTool application. This patch >> also updates FirmwareUpdate command to follow the modified >> SetupDevice operation. > > Really an unrelated question, but would we not expect to use capsule > updates instead now? Do we have other uses for this tool? I use it massively for the development. Since the variables work now, I have a plan to implement capsule update, but it's definitely not at the top of the list now. I'm also wondering if there will be no problems with the binaries concatenation and their handling by the bootrom. BTW. Is capsule update supposed to replace only UEFI part or the entire image stored in flash? > >> Contributed-under: TianoCore Contribution Agreement 1.1 >> Signed-off-by: Marcin Wojtas >> --- >> Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c | 4 ++-- >> Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c | 8 ++++---- >> Platform/Marvell/Drivers/Spi/MvSpiDxe.c | 17 +++++++++-------- >> Platform/Marvell/Drivers/Spi/MvSpiDxe.h | 1 + >> Platform/Marvell/Include/Protocol/Spi.h | 1 + >> 5 files changed, 17 insertions(+), 14 deletions(-) >> >> diff --git a/Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c b/Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c >> index 750e52a..9ccb1c7 100644 >> --- a/Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c >> +++ b/Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c >> @@ -240,7 +240,7 @@ ShellCommandRunFUpdate ( >> ) >> { >> IN SHELL_FILE_HANDLE FileHandle; >> - SPI_DEVICE *Slave; >> + SPI_DEVICE *Slave = NULL; >> UINT64 FileSize; >> UINTN *FileBuffer = NULL; >> CHAR16 *ProblemParam; >> @@ -302,7 +302,7 @@ ShellCommandRunFUpdate ( >> } >> >> // Setup and probe SPI flash >> - Slave = SpiMasterProtocol->SetupDevice (SpiMasterProtocol, 0, 0); >> + Slave = SpiMasterProtocol->SetupDevice (SpiMasterProtocol, Slave, 0, 0); >> if (Slave == NULL) { >> Print(L"%s: Cannot allocate SPI device!\n", CMD_NAME_STRING); >> goto HeaderError; >> diff --git a/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c b/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c >> index 68a6cf7..1084f68 100644 >> --- a/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c >> +++ b/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c >> @@ -191,7 +191,7 @@ ShellCommandRunSpiFlash ( >> ) >> { >> EFI_STATUS Status; >> - SPI_DEVICE *Slave; >> + STATIC SPI_DEVICE *Slave; > > If this is a safe thing to do, please use a global variable called > mSlave instead, to make it clear that it persists across calls. Right, this way it will be more clear. > >> LIST_ENTRY *CheckPackage; >> EFI_PHYSICAL_ADDRESS Address = 0, Offset = 0; >> SHELL_FILE_HANDLE FileHandle = NULL; >> @@ -273,7 +273,7 @@ EFI_STATUS Status; >> Cs = PcdGet32 (PcdSpiFlashCs); >> >> // Setup new spi device >> - Slave = SpiMasterProtocol->SetupDevice (SpiMasterProtocol, Cs, Mode); >> + Slave = SpiMasterProtocol->SetupDevice (SpiMasterProtocol, Slave, Cs, Mode); >> if (Slave == NULL) { >> Print(L"sf: Cannot allocate SPI device!\n"); >> return SHELL_ABORTED; >> @@ -285,6 +285,8 @@ EFI_STATUS Status; >> Status = FlashProbe (Slave); >> if (EFI_ERROR(Status)) { >> // No supported spi flash detected >> + SpiMasterProtocol->FreeDevice(Slave); > > Space before (. Ok. Thanks, Marcin > > / > Leif > >> + Slave = NULL; >> return SHELL_ABORTED; >> } else { >> return Status; >> @@ -426,8 +428,6 @@ EFI_STATUS Status; >> break; >> } >> >> - SpiMasterProtocol->FreeDevice(Slave); >> - >> if (EFI_ERROR (Status)) { >> Print (L"sf: Error while performing spi transfer\n"); >> return SHELL_ABORTED; >> diff --git a/Platform/Marvell/Drivers/Spi/MvSpiDxe.c b/Platform/Marvell/Drivers/Spi/MvSpiDxe.c >> index 3b49147..a7db5f2 100755 >> --- a/Platform/Marvell/Drivers/Spi/MvSpiDxe.c >> +++ b/Platform/Marvell/Drivers/Spi/MvSpiDxe.c >> @@ -296,21 +296,22 @@ SPI_DEVICE * >> EFIAPI >> MvSpiSetupSlave ( >> IN MARVELL_SPI_MASTER_PROTOCOL *This, >> + IN SPI_DEVICE *Slave, >> IN UINTN Cs, >> IN SPI_MODE Mode >> ) >> { >> - SPI_DEVICE *Slave; >> + if (!Slave) { >> + Slave = AllocateZeroPool (sizeof(SPI_DEVICE)); >> + if (Slave == NULL) { >> + DEBUG((DEBUG_ERROR, "Cannot allocate memory\n")); >> + return NULL; >> + } >> >> - Slave = AllocateZeroPool (sizeof(SPI_DEVICE)); >> - if (Slave == NULL) { >> - DEBUG((DEBUG_ERROR, "Cannot allocate memory\n")); >> - return NULL; >> + Slave->Cs = Cs; >> + Slave->Mode = Mode; >> } >> >> - Slave->Cs = Cs; >> - Slave->Mode = Mode; >> - >> SpiSetupTransfer (This, Slave); >> >> return Slave; >> diff --git a/Platform/Marvell/Drivers/Spi/MvSpiDxe.h b/Platform/Marvell/Drivers/Spi/MvSpiDxe.h >> index 1401f62..e7e280a 100644 >> --- a/Platform/Marvell/Drivers/Spi/MvSpiDxe.h >> +++ b/Platform/Marvell/Drivers/Spi/MvSpiDxe.h >> @@ -125,6 +125,7 @@ SPI_DEVICE * >> EFIAPI >> MvSpiSetupSlave ( >> IN MARVELL_SPI_MASTER_PROTOCOL * This, >> + IN SPI_DEVICE *Slave, >> IN UINTN Cs, >> IN SPI_MODE Mode >> ); >> diff --git a/Platform/Marvell/Include/Protocol/Spi.h b/Platform/Marvell/Include/Protocol/Spi.h >> index 93a8ec0..0cf7914 100644 >> --- a/Platform/Marvell/Include/Protocol/Spi.h >> +++ b/Platform/Marvell/Include/Protocol/Spi.h >> @@ -87,6 +87,7 @@ typedef >> SPI_DEVICE * >> (EFIAPI *MV_SPI_SETUP_DEVICE) ( >> IN MARVELL_SPI_MASTER_PROTOCOL *This, >> + IN SPI_DEVICE *Slave, >> IN UINTN Cs, >> IN SPI_MODE Mode >> ); >> -- >> 2.7.4 >>