public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2.
@ 2017-11-03 17:57 Marcin Wojtas
  2017-11-03 17:57 ` [platforms: PATCH v2 1/6] Marvell/Drivers: MvSpiFlash: Improve ReadId Marcin Wojtas
                   ` (7 more replies)
  0 siblings, 8 replies; 11+ messages in thread
From: Marcin Wojtas @ 2017-11-03 17:57 UTC (permalink / raw)
  To: edk2-devel
  Cc: leif.lindholm, ard.biesheuvel, nadavh, neta, kostap, jinghua, mw,
	jsd

Hi,

I submit corrected version of the Armada SPI improvements
after the first round of review. There were no significant changes
comparing to v1, please check the changelog below for the details.

Patches are available in the github:
https://github.com/MarvellEmbeddedProcessors/edk2-open-platform/commits/spi-upstream-r20171103
NorFlashInfoLib:
https://github.com/MarvellEmbeddedProcessors/edk2/commits/norlib-upstream-r20171103

I'm looking forward to the comments or remarks.

Best regards,
Marcin

Changelog:
v1 -> v2
1/6
  - Replace NOR_FLASH_ID_DEFAULT_LEN with PcdGetSize (PcdSpiFlashId)

2/6
  - Adjust to renamed functions and macros according to NorFlashInfoLib v2
  - Restore handling of CMD_ERASE_32K
  - Check NOR_FLASH_4B_ADDR only once and use SPI_DEVICE structure instead

3/6
  - Improve commit log

4/6
  - Use global variable explicitly (mSlave)

5/6
  - Use NOR_FLASH_ID_SPANSION from EmbeddedPkg/Include/Library/NorFlashInfoLib.h

6/6
  - Add RB

Marcin Wojtas (6):
  Marvell/Drivers: MvSpiFlash: Improve ReadId
  Marvell/Drivers: MvSpiFlash: Enable dynamic SPI Flash detection
  Marvell/Drivers: MvSpiFlash: Remove duplicated macros
  Marvell/Applications: SpiTool: Do not override existing slave device
  Marvell/Drivers: MvSpiFlash: Fix bank selection for Spansion
  Marvell/Drivers: MvSpiDxe: Keep data in SPI_DEVICE structure

 Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c   |  25 +----
 Platform/Marvell/Applications/FirmwareUpdate/FUpdate.inf |   4 +-
 Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c      |  57 ++++------
 Platform/Marvell/Applications/SpiTool/SpiFlashCmd.inf    |   2 +-
 Platform/Marvell/Armada/Armada.dsc.inc                   |   1 +
 Platform/Marvell/Armada/Armada70x0.dsc                   |   5 -
 Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c        | 116 ++++++++++----------
 Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.h        |   3 +
 Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.inf      |   9 +-
 Platform/Marvell/Drivers/Spi/MvSpiDxe.c                  |  63 ++++++-----
 Platform/Marvell/Drivers/Spi/MvSpiDxe.h                  |   1 +
 Platform/Marvell/Drivers/Spi/MvSpiDxe.inf                |   2 +
 Platform/Marvell/Include/Protocol/Spi.h                  |   7 ++
 Platform/Marvell/Include/Protocol/SpiFlash.h             |  14 +--
 Platform/Marvell/Marvell.dec                             |   6 -
 Silicon/Marvell/Documentation/PortingGuide.txt           |  18 ---
 16 files changed, 142 insertions(+), 191 deletions(-)

-- 
2.7.4



^ permalink raw reply	[flat|nested] 11+ messages in thread

* [platforms: PATCH v2 1/6] Marvell/Drivers: MvSpiFlash: Improve ReadId
  2017-11-03 17:57 [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2 Marcin Wojtas
@ 2017-11-03 17:57 ` Marcin Wojtas
  2017-11-03 17:57 ` [platforms: PATCH v2 2/6] Marvell/Drivers: MvSpiFlash: Enable dynamic SPI Flash detection Marcin Wojtas
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Marcin Wojtas @ 2017-11-03 17:57 UTC (permalink / raw)
  To: edk2-devel
  Cc: leif.lindholm, ard.biesheuvel, nadavh, neta, kostap, jinghua, mw,
	jsd

Fix the ReadId routine by using master's ReadWrite callback
instead of the raw Transfer - no longer swapping and byte
shifting is needed. Simplify code by using local array
instead of dynamic allocation. Moreover store the FlashId
in an UINT8 array PCD instead of the concatenated UINT32
format - this way less overhead in the driver is needed
for comparing the buffers.

The new handling allowed for cleaning Fupdate and Sf
shell commands FlashProbe routines.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
---
 Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c | 24 ++++--------
 Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c    | 39 +++++++------------
 Platform/Marvell/Armada/Armada70x0.dsc                 |  2 +-
 Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c      | 41 ++++++++++++--------
 Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.h      |  2 +
 Platform/Marvell/Include/Protocol/SpiFlash.h           |  2 +
 Platform/Marvell/Marvell.dec                           |  2 +-
 7 files changed, 51 insertions(+), 61 deletions(-)

diff --git a/Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c b/Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c
index 664411a..8a2ad3f 100644
--- a/Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c
+++ b/Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c
@@ -94,28 +94,18 @@ SpiFlashProbe (
   )
 {
   EFI_STATUS       Status;
-  UINT32           IdBuffer, Id, RefId;
+  UINT32           FlashIdLen;
+  UINT8           *FlashId;
 
-  Id = PcdGet32 (PcdSpiFlashId);
-
-  IdBuffer = CMD_READ_ID & 0xff;
+  FlashId = (UINT8 *)PcdGetPtr (PcdSpiFlashId);
+  FlashIdLen = PcdGetSize (PcdSpiFlashId);
 
   // Read SPI flash ID
-  SpiFlashProtocol->ReadId (Slave, sizeof (UINT32), (UINT8 *)&IdBuffer);
-
-  // 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;
+  Status = SpiFlashProtocol->ReadId (Slave, FlashIdLen, FlashId);
+  if (EFI_ERROR (Status)) {
+    return SHELL_ABORTED;
   }
 
-  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);
diff --git a/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c b/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c
index 9321f6b..7c81bfc 100644
--- a/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c
+++ b/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c
@@ -166,37 +166,26 @@ FlashProbe (
   )
 {
   EFI_STATUS Status;
-  UINT8  IdBuffer[4];
-  UINT32 Id, RefId;
+  UINT32     FlashIdLen;
+  UINT8      *FlashId;
 
-  Id = PcdGet32 (PcdSpiFlashId);
+  FlashId = (UINT8 *)PcdGetPtr (PcdSpiFlashId);
+  FlashIdLen = PcdGetSize (PcdSpiFlashId);
 
-  IdBuffer[0] = CMD_READ_ID;
-
-  SpiFlashProtocol->ReadId (
-    Slave,
-    4,
-    IdBuffer
-    );
-
-  RefId = (IdBuffer[0] << 16) + (IdBuffer[1] << 8) + IdBuffer[2];
+  Status = SpiFlashProtocol->ReadId (Slave, FlashIdLen, FlashId);
+  if (EFI_ERROR (Status)) {
+    return SHELL_ABORTED;
+  }
 
-  if (RefId == Id) {
-    Print (L"sf: Detected supported SPI flash with ID=%3x\n", RefId);
-    Status = SpiFlashProtocol->Init (SpiFlashProtocol, Slave);
-    if (EFI_ERROR(Status)) {
-      Print (L"sf: Cannot initialize flash device\n");
-      return SHELL_ABORTED;
-    }
-    InitFlag = 0;
-    return EFI_SUCCESS;
-  } else if (RefId != 0) {
-    Print (L"sf: Unsupported SPI flash detected with ID=%2x\n", RefId);
+  Status = SpiFlashProtocol->Init (SpiFlashProtocol, Slave);
+  if (EFI_ERROR (Status)) {
+    Print (L"sf: Cannot initialize flash device\n");
     return SHELL_ABORTED;
   }
 
-  Print (L"sf: No SPI flash detected");
-  return SHELL_ABORTED;
+  InitFlag = 0;
+
+  return SHELL_SUCCESS;
 }
 
 SHELL_STATUS
diff --git a/Platform/Marvell/Armada/Armada70x0.dsc b/Platform/Marvell/Armada/Armada70x0.dsc
index 0396e8e..4d5f55f 100644
--- a/Platform/Marvell/Armada/Armada70x0.dsc
+++ b/Platform/Marvell/Armada/Armada70x0.dsc
@@ -94,7 +94,7 @@
   gMarvellTokenSpaceGuid.PcdSpiFlashAddressCycles|3
   gMarvellTokenSpaceGuid.PcdSpiFlashEraseSize|65536
   gMarvellTokenSpaceGuid.PcdSpiFlashPageSize|256
-  gMarvellTokenSpaceGuid.PcdSpiFlashId|0x20BA18
+  gMarvellTokenSpaceGuid.PcdSpiFlashId|{ 0x20, 0xBA, 0x18 }
   gMarvellTokenSpaceGuid.PcdSpiFlashMode|3
   gMarvellTokenSpaceGuid.PcdSpiFlashCs|0
 
diff --git a/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c b/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c
index 6f7d9c7..ab3ed6a 100755
--- a/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c
+++ b/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c
@@ -409,28 +409,35 @@ MvSpiFlashReadId (
   )
 {
   EFI_STATUS Status;
-  UINT8 *DataOut;
+  UINT8 Id[NOR_FLASH_MAX_ID_LEN];
+  UINT8 Cmd;
+
+  Cmd = CMD_READ_ID;
+  Status = SpiMasterProtocol->ReadWrite (SpiMasterProtocol,
+                                SpiDev,
+                                &Cmd,
+                                SPI_CMD_LEN,
+                                NULL,
+                                Id,
+                                NOR_FLASH_MAX_ID_LEN);
+  if (EFI_ERROR (Status)) {
+    DEBUG ((DEBUG_ERROR, "ReadId: Spi transfer error\n"));
+    return Status;
+  }
 
-  DataOut = (UINT8 *) AllocateZeroPool (DataByteCount);
-  if (DataOut == NULL) {
-    DEBUG((DEBUG_ERROR, "SpiFlash: Cannot allocate memory\n"));
-    return EFI_OUT_OF_RESOURCES;
+  if (CompareMem (Id, Buffer, DataByteCount) != 0) {
+    Status = EFI_NOT_FOUND;
   }
-  Status = SpiMasterProtocol->Transfer (SpiMasterProtocol, SpiDev,
-    DataByteCount, Buffer, DataOut, SPI_TRANSFER_BEGIN | SPI_TRANSFER_END);
-  if (EFI_ERROR(Status)) {
-    FreePool (DataOut);
-    DEBUG((DEBUG_ERROR, "SpiFlash: Spi transfer error\n"));
+  if (EFI_ERROR (Status)) {
+    DEBUG ((DEBUG_ERROR,
+      "%a: Unrecognized JEDEC Id bytes: 0x%02x%02x%02x\n",
+      __FUNCTION__,
+      Id[0],
+      Id[1],
+      Id[2]));
     return Status;
   }
 
-  // Bytes 1,2 and 3 contain SPI flash ID
-  Buffer[0] = DataOut[1];
-  Buffer[1] = DataOut[2];
-  Buffer[2] = DataOut[3];
-
-  FreePool (DataOut);
-
   return EFI_SUCCESS;
 }
 
diff --git a/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.h b/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.h
index f90abb7..2583484 100755
--- a/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.h
+++ b/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.h
@@ -62,6 +62,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #define CMD_ERASE_64K                   0xd8
 #define CMD_4B_ADDR_ENABLE              0xb7
 
+#define SPI_CMD_LEN                     1
+
 #define STATUS_REG_POLL_WIP             (1 << 0)
 #define STATUS_REG_POLL_PEC             (1 << 7)
 
diff --git a/Platform/Marvell/Include/Protocol/SpiFlash.h b/Platform/Marvell/Include/Protocol/SpiFlash.h
index 743bb87..f65a12d 100644
--- a/Platform/Marvell/Include/Protocol/SpiFlash.h
+++ b/Platform/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 NOR_FLASH_MAX_ID_LEN            6
+
 extern EFI_GUID gMarvellSpiFlashProtocolGuid;
 
 typedef struct _MARVELL_SPI_FLASH_PROTOCOL MARVELL_SPI_FLASH_PROTOCOL;
diff --git a/Platform/Marvell/Marvell.dec b/Platform/Marvell/Marvell.dec
index cd800c8..679a9d0 100644
--- a/Platform/Marvell/Marvell.dec
+++ b/Platform/Marvell/Marvell.dec
@@ -133,7 +133,7 @@
   gMarvellTokenSpaceGuid.PcdSpiFlashEraseSize|0|UINT64|0x3000054
   gMarvellTokenSpaceGuid.PcdSpiFlashPageSize|0|UINT32|0x3000055
   gMarvellTokenSpaceGuid.PcdSpiFlashSectorSize|65536|UINT64|0x3000059
-  gMarvellTokenSpaceGuid.PcdSpiFlashId|0|UINT32|0x3000056
+  gMarvellTokenSpaceGuid.PcdSpiFlashId|{ 0x0 }|VOID*|0x3000056
   gMarvellTokenSpaceGuid.PcdSpiFlashCs|0|UINT32|0x3000057
   gMarvellTokenSpaceGuid.PcdSpiFlashMode|0|UINT32|0x3000058
 
-- 
2.7.4



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [platforms: PATCH v2 2/6] Marvell/Drivers: MvSpiFlash: Enable dynamic SPI Flash detection
  2017-11-03 17:57 [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2 Marcin Wojtas
  2017-11-03 17:57 ` [platforms: PATCH v2 1/6] Marvell/Drivers: MvSpiFlash: Improve ReadId Marcin Wojtas
@ 2017-11-03 17:57 ` Marcin Wojtas
  2017-11-03 17:57 ` [platforms: PATCH v2 3/6] Marvell/Drivers: MvSpiFlash: Remove duplicated macros Marcin Wojtas
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Marcin Wojtas @ 2017-11-03 17:57 UTC (permalink / raw)
  To: edk2-devel
  Cc: leif.lindholm, ard.biesheuvel, nadavh, neta, kostap, jinghua, mw,
	jsd

Hitherto mechanism of fixing SPI flash model in the PCDs,
occured to be very inefficient and problematic. Enable
dynamic detection by reworking MvSpiFlashReadId() command,
which now uses newly added NorFlashInfoLib, that helps to
obtain description of the JEDEC compliant devices.

This patch updates the MvSpiFlashProtocol ReadId() protocol
callback on both producer's (MvFlashDxe) and consumers' sides
(FirmwareUpdate and SpiTool applications). Because all
information about detected SPI NOR flash is now stored in
the obtained NorFlashInfo structure fields, use them instead
of the PCDs.

Enable compilation of the NorFlashInfoLib and update
PortingGuide documentation accordingly.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
---
 Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c   |  7 +-
 Platform/Marvell/Applications/FirmwareUpdate/FUpdate.inf |  4 +-
 Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c      |  7 +-
 Platform/Marvell/Applications/SpiTool/SpiFlashCmd.inf    |  2 +-
 Platform/Marvell/Armada/Armada.dsc.inc                   |  1 +
 Platform/Marvell/Armada/Armada70x0.dsc                   |  5 --
 Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c        | 76 +++++++++-----------
 Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.inf      |  9 +--
 Platform/Marvell/Drivers/Spi/MvSpiDxe.inf                |  2 +
 Platform/Marvell/Include/Protocol/Spi.h                  |  4 ++
 Platform/Marvell/Include/Protocol/SpiFlash.h             |  5 +-
 Platform/Marvell/Marvell.dec                             |  6 --
 Silicon/Marvell/Documentation/PortingGuide.txt           | 18 -----
 13 files changed, 48 insertions(+), 98 deletions(-)

diff --git a/Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c b/Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c
index 8a2ad3f..750e52a 100644
--- a/Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c
+++ b/Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c
@@ -94,14 +94,9 @@ SpiFlashProbe (
   )
 {
   EFI_STATUS       Status;
-  UINT32           FlashIdLen;
-  UINT8           *FlashId;
-
-  FlashId = (UINT8 *)PcdGetPtr (PcdSpiFlashId);
-  FlashIdLen = PcdGetSize (PcdSpiFlashId);
 
   // Read SPI flash ID
-  Status = SpiFlashProtocol->ReadId (Slave, FlashIdLen, FlashId);
+  Status = SpiFlashProtocol->ReadId (Slave, FALSE);
   if (EFI_ERROR (Status)) {
     return SHELL_ABORTED;
   }
diff --git a/Platform/Marvell/Applications/FirmwareUpdate/FUpdate.inf b/Platform/Marvell/Applications/FirmwareUpdate/FUpdate.inf
index 92c3333..53ea491 100644
--- a/Platform/Marvell/Applications/FirmwareUpdate/FUpdate.inf
+++ b/Platform/Marvell/Applications/FirmwareUpdate/FUpdate.inf
@@ -44,6 +44,7 @@
   FUpdate.uni
 
 [Packages]
+  EmbeddedPkg/EmbeddedPkg.dec
   MdeModulePkg/MdeModulePkg.dec
   MdePkg/MdePkg.dec
   Platform/Marvell/Marvell.dec
@@ -64,9 +65,6 @@
   UefiLib
   UefiRuntimeServicesTableLib
 
-[Pcd]
- gMarvellTokenSpaceGuid.PcdSpiFlashId
-
 [Protocols]
  gMarvellSpiFlashProtocolGuid
  gMarvellSpiMasterProtocolGuid
diff --git a/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c b/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c
index 7c81bfc..68a6cf7 100644
--- a/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c
+++ b/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c
@@ -166,13 +166,8 @@ FlashProbe (
   )
 {
   EFI_STATUS Status;
-  UINT32     FlashIdLen;
-  UINT8      *FlashId;
 
-  FlashId = (UINT8 *)PcdGetPtr (PcdSpiFlashId);
-  FlashIdLen = PcdGetSize (PcdSpiFlashId);
-
-  Status = SpiFlashProtocol->ReadId (Slave, FlashIdLen, FlashId);
+  Status = SpiFlashProtocol->ReadId (Slave, FALSE);
   if (EFI_ERROR (Status)) {
     return SHELL_ABORTED;
   }
diff --git a/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.inf b/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.inf
index 887b9a5..a52906b 100644
--- a/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.inf
+++ b/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.inf
@@ -44,6 +44,7 @@
  SpiFlashCmd.uni
 
 [Packages]
+ EmbeddedPkg/EmbeddedPkg.dec
  MdePkg/MdePkg.dec
  ShellPkg/ShellPkg.dec
  MdeModulePkg/MdeModulePkg.dec
@@ -66,7 +67,6 @@
 
 [Pcd]
  gMarvellTokenSpaceGuid.PcdSpiFlashCs
- gMarvellTokenSpaceGuid.PcdSpiFlashId
  gMarvellTokenSpaceGuid.PcdSpiFlashMode
 
 [Protocols]
diff --git a/Platform/Marvell/Armada/Armada.dsc.inc b/Platform/Marvell/Armada/Armada.dsc.inc
index b9fc384..2cd96e6 100644
--- a/Platform/Marvell/Armada/Armada.dsc.inc
+++ b/Platform/Marvell/Armada/Armada.dsc.inc
@@ -33,6 +33,7 @@
   ArmPlatformLib|Platform/Marvell/Armada/Library/Armada70x0Lib/Armada70x0Lib.inf
   ComPhyLib|Platform/Marvell/Library/ComPhyLib/ComPhyLib.inf
   MppLib|Platform/Marvell/Library/MppLib/MppLib.inf
+  NorFlashInfoLib|EmbeddedPkg/Library/NorFlashInfoLib/NorFlashInfoLib.inf
   UtmiPhyLib|Platform/Marvell/Library/UtmiPhyLib/UtmiPhyLib.inf
 
   DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
diff --git a/Platform/Marvell/Armada/Armada70x0.dsc b/Platform/Marvell/Armada/Armada70x0.dsc
index 4d5f55f..8e4cdb2 100644
--- a/Platform/Marvell/Armada/Armada70x0.dsc
+++ b/Platform/Marvell/Armada/Armada70x0.dsc
@@ -90,11 +90,6 @@
   gMarvellTokenSpaceGuid.PcdSpiMaxFrequency|10000000
   gMarvellTokenSpaceGuid.PcdSpiClockFrequency|200000000
 
-  gMarvellTokenSpaceGuid.PcdSpiFlashPollCmd|0x70
-  gMarvellTokenSpaceGuid.PcdSpiFlashAddressCycles|3
-  gMarvellTokenSpaceGuid.PcdSpiFlashEraseSize|65536
-  gMarvellTokenSpaceGuid.PcdSpiFlashPageSize|256
-  gMarvellTokenSpaceGuid.PcdSpiFlashId|{ 0x20, 0xBA, 0x18 }
   gMarvellTokenSpaceGuid.PcdSpiFlashMode|3
   gMarvellTokenSpaceGuid.PcdSpiFlashCs|0
 
diff --git a/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c b/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c
index ab3ed6a..4a97ba9 100755
--- a/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c
+++ b/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c
@@ -107,10 +107,10 @@ MvSpiFlashWriteCommon (
   UINT8 PollBit = STATUS_REG_POLL_WIP;
   UINT8 CheckStatus = 0x0;
 
-  CmdStatus = (UINT8)PcdGet32 (PcdSpiFlashPollCmd);
-  if (CmdStatus == CMD_FLAG_STATUS) {
+  if (Slave->Info->Flags & NOR_FLASH_WRITE_FSR) {
+    CmdStatus = CMD_FLAG_STATUS;
     PollBit = STATUS_REG_POLL_PEC;
-    CheckStatus = PollBit;
+    CheckStatus = STATUS_REG_POLL_PEC;
   }
 
   // Send command
@@ -177,12 +177,20 @@ MvSpiFlashErase (
   )
 {
   EFI_STATUS Status;
-  UINT32 AddrSize, EraseAddr;
+  UINT32 EraseAddr;
   UINTN EraseSize;
   UINT8 Cmd[5];
 
-  AddrSize  = PcdGet32 (PcdSpiFlashAddressCycles);
-  EraseSize = PcdGet64 (PcdSpiFlashEraseSize);
+  if (Slave->Info->Flags & NOR_FLASH_ERASE_4K) {
+    Cmd[0] = CMD_ERASE_4K;
+    EraseSize = SIZE_4KB;
+  } else if (Slave->Info->Flags & NOR_FLASH_ERASE_32K) {
+    Cmd[0] = CMD_ERASE_32K;
+    EraseSize = SIZE_32KB;
+  } else {
+    Cmd[0] = CMD_ERASE_64K;
+    EraseSize = Slave->Info->SectorSize;
+  }
 
   // Check input parameters
   if (Offset % EraseSize || Length % EraseSize) {
@@ -191,30 +199,15 @@ MvSpiFlashErase (
     return EFI_DEVICE_ERROR;
   }
 
-  switch (EraseSize) {
-  case SIZE_4KB:
-    Cmd[0] = CMD_ERASE_4K;
-    break;
-  case SIZE_32KB:
-    Cmd[0] = CMD_ERASE_32K;
-    break;
-  case SIZE_64KB:
-    Cmd[0] = CMD_ERASE_64K;
-    break;
-  default:
-    DEBUG ((DEBUG_ERROR, "MvSpiFlash: Invalid EraseSize parameter\n"));
-    return EFI_INVALID_PARAMETER;
-  }
-
   while (Length) {
     EraseAddr = Offset;
 
     SpiFlashBank (Slave, EraseAddr);
 
-    SpiFlashFormatAddress (EraseAddr, AddrSize, Cmd);
+    SpiFlashFormatAddress (EraseAddr, Slave->AddrSize, Cmd);
 
     // Programm proper erase address
-    Status = MvSpiFlashWriteCommon (Slave, Cmd, AddrSize + 1, NULL, 0);
+    Status = MvSpiFlashWriteCommon (Slave, Cmd, Slave->AddrSize + 1, NULL, 0);
       if (EFI_ERROR (Status)) {
         DEBUG((DEBUG_ERROR, "SpiFlash: Error while programming target address\n"));
         return Status;
@@ -236,11 +229,9 @@ MvSpiFlashRead (
 {
   EFI_STATUS Status = EFI_SUCCESS;
   UINT8 Cmd[6];
-  UINT32 AddrSize, ReadAddr, ReadLength, RemainLength;
+  UINT32 ReadAddr, ReadLength, RemainLength;
   UINTN BankSel = 0;
 
-  AddrSize = PcdGet32 (PcdSpiFlashAddressCycles);
-
   Cmd[0] = CMD_READ_ARRAY_FAST;
 
   // Sign end of address with 0 byte
@@ -257,9 +248,9 @@ MvSpiFlashRead (
     } else {
       ReadLength = RemainLength;
     }
-    SpiFlashFormatAddress (ReadAddr, AddrSize, Cmd);
+    SpiFlashFormatAddress (ReadAddr, Slave->AddrSize, Cmd);
     // Program proper read address and read data
-    Status = MvSpiFlashReadCmd (Slave, Cmd, AddrSize + 2, Buf, Length);
+    Status = MvSpiFlashReadCmd (Slave, Cmd, Slave->AddrSize + 2, Buf, Length);
 
     Offset += ReadLength;
     Length -= ReadLength;
@@ -280,10 +271,9 @@ MvSpiFlashWrite (
   EFI_STATUS Status;
   UINTN ByteAddr, ChunkLength, ActualIndex, PageSize;
   UINT32 WriteAddr;
-  UINT8 Cmd[5], AddrSize;
+  UINT8 Cmd[5];
 
-  AddrSize = PcdGet32 (PcdSpiFlashAddressCycles);
-  PageSize = PcdGet32 (PcdSpiFlashPageSize);
+  PageSize = Slave->Info->PageSize;
 
   Cmd[0] = CMD_PAGE_PROGRAM;
 
@@ -296,10 +286,10 @@ MvSpiFlashWrite (
 
     ChunkLength = MIN(Length - ActualIndex, (UINT64) (PageSize - ByteAddr));
 
-    SpiFlashFormatAddress (WriteAddr, AddrSize, Cmd);
+    SpiFlashFormatAddress (WriteAddr, Slave->AddrSize, Cmd);
 
     // Program proper write address and write data
-    Status = MvSpiFlashWriteCommon (Slave, Cmd, AddrSize + 1, Buf + ActualIndex,
+    Status = MvSpiFlashWriteCommon (Slave, Cmd, Slave->AddrSize + 1, Buf + ActualIndex,
       ChunkLength);
     if (EFI_ERROR (Status)) {
       DEBUG((DEBUG_ERROR, "SpiFlash: Error while programming write address\n"));
@@ -370,7 +360,7 @@ MvSpiFlashUpdate (
   UINT64 SectorSize, ToUpdate, Scale = 1;
   UINT8 *TmpBuf, *End;
 
-  SectorSize = PcdGet64 (PcdSpiFlashSectorSize);
+  SectorSize = Slave->Info->SectorSize;
 
   End = Buf + ByteCount;
 
@@ -404,8 +394,7 @@ EFI_STATUS
 EFIAPI
 MvSpiFlashReadId (
   IN     SPI_DEVICE *SpiDev,
-  IN     UINT32     DataByteCount,
-  IN OUT UINT8      *Buffer
+  IN     BOOLEAN     UseInRuntime
   )
 {
   EFI_STATUS Status;
@@ -425,9 +414,7 @@ MvSpiFlashReadId (
     return Status;
   }
 
-  if (CompareMem (Id, Buffer, DataByteCount) != 0) {
-    Status = EFI_NOT_FOUND;
-  }
+  Status = NorFlashGetInfo (Id, &SpiDev->Info, UseInRuntime);
   if (EFI_ERROR (Status)) {
     DEBUG ((DEBUG_ERROR,
       "%a: Unrecognized JEDEC Id bytes: 0x%02x%02x%02x\n",
@@ -438,6 +425,8 @@ MvSpiFlashReadId (
     return Status;
   }
 
+  NorFlashPrintInfo (SpiDev->Info);
+
   return EFI_SUCCESS;
 }
 
@@ -450,11 +439,14 @@ MvSpiFlashInit (
 {
   EFI_STATUS Status;
   UINT8 Cmd, StatusRegister;
-  UINT32 AddrSize;
 
-  AddrSize = PcdGet32 (PcdSpiFlashAddressCycles);
+  if (Slave->Info->Flags & NOR_FLASH_4B_ADDR) {
+    Slave->AddrSize = 4;
+  } else {
+    Slave->AddrSize = 3;
+  }
 
-  if (AddrSize == 4) {
+  if (Slave->AddrSize == 4) {
     // Set 4 byte address mode
     Status = MvSpiFlashWriteEnableCmd (Slave);
     if (EFI_ERROR (Status)) {
diff --git a/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.inf b/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.inf
index 4519b02..6587f69 100644
--- a/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.inf
+++ b/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.inf
@@ -42,10 +42,12 @@
   MvSpiFlash.h
 
 [Packages]
+  EmbeddedPkg/EmbeddedPkg.dec
   MdePkg/MdePkg.dec
   Platform/Marvell/Marvell.dec
 
 [LibraryClasses]
+  NorFlashInfoLib
   UefiBootServicesTableLib
   UefiDriverEntryPoint
   TimerLib
@@ -53,13 +55,6 @@
   DebugLib
   MemoryAllocationLib
 
-[FixedPcd]
-  gMarvellTokenSpaceGuid.PcdSpiFlashAddressCycles
-  gMarvellTokenSpaceGuid.PcdSpiFlashEraseSize
-  gMarvellTokenSpaceGuid.PcdSpiFlashPageSize
-  gMarvellTokenSpaceGuid.PcdSpiFlashPollCmd
-  gMarvellTokenSpaceGuid.PcdSpiFlashSectorSize
-
 [Protocols]
   gMarvellSpiMasterProtocolGuid
   gMarvellSpiFlashProtocolGuid
diff --git a/Platform/Marvell/Drivers/Spi/MvSpiDxe.inf b/Platform/Marvell/Drivers/Spi/MvSpiDxe.inf
index d38d331..08c6c04 100644
--- a/Platform/Marvell/Drivers/Spi/MvSpiDxe.inf
+++ b/Platform/Marvell/Drivers/Spi/MvSpiDxe.inf
@@ -42,10 +42,12 @@
   MvSpiDxe.h
 
 [Packages]
+  EmbeddedPkg/EmbeddedPkg.dec
   MdePkg/MdePkg.dec
   Platform/Marvell/Marvell.dec
 
 [LibraryClasses]
+  NorFlashInfoLib
   UefiBootServicesTableLib
   UefiDriverEntryPoint
   TimerLib
diff --git a/Platform/Marvell/Include/Protocol/Spi.h b/Platform/Marvell/Include/Protocol/Spi.h
index ae78a31..6f26a36 100644
--- a/Platform/Marvell/Include/Protocol/Spi.h
+++ b/Platform/Marvell/Include/Protocol/Spi.h
@@ -34,6 +34,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #ifndef __MARVELL_SPI_MASTER_PROTOCOL_H__
 #define __MARVELL_SPI_MASTER_PROTOCOL_H__
 
+#include <Library/NorFlashInfoLib.h>
+
 extern EFI_GUID gMarvellSpiMasterProtocolGuid;
 
 typedef struct _MARVELL_SPI_MASTER_PROTOCOL MARVELL_SPI_MASTER_PROTOCOL;
@@ -49,6 +51,8 @@ typedef struct {
   INTN Cs;
   INTN MaxFreq;
   SPI_MODE Mode;
+  UINT32 AddrSize;
+  NOR_FLASH_INFO *Info;
 } SPI_DEVICE;
 
 typedef
diff --git a/Platform/Marvell/Include/Protocol/SpiFlash.h b/Platform/Marvell/Include/Protocol/SpiFlash.h
index f65a12d..4a3053e 100644
--- a/Platform/Marvell/Include/Protocol/SpiFlash.h
+++ b/Platform/Marvell/Include/Protocol/SpiFlash.h
@@ -47,8 +47,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #define CMD_ERASE_64K                   0xd8
 #define CMD_4B_ADDR_ENABLE              0xb7
 
-#define NOR_FLASH_MAX_ID_LEN            6
-
 extern EFI_GUID gMarvellSpiFlashProtocolGuid;
 
 typedef struct _MARVELL_SPI_FLASH_PROTOCOL MARVELL_SPI_FLASH_PROTOCOL;
@@ -64,8 +62,7 @@ typedef
 EFI_STATUS
 (EFIAPI *MV_SPI_FLASH_READ_ID) (
   IN     SPI_DEVICE *SpiDev,
-  IN     UINT32     DataByteCount,
-  IN OUT UINT8      *Buffer
+  IN     BOOLEAN     UseInRuntime
   );
 
 typedef
diff --git a/Platform/Marvell/Marvell.dec b/Platform/Marvell/Marvell.dec
index 679a9d0..8255895 100644
--- a/Platform/Marvell/Marvell.dec
+++ b/Platform/Marvell/Marvell.dec
@@ -128,12 +128,6 @@
   gMarvellTokenSpaceGuid.PcdSpiMaxFrequency|0|UINT32|0x30000052
   gMarvellTokenSpaceGuid.PcdSpiClockFrequency|0|UINT32|0x30000053
 
-  gMarvellTokenSpaceGuid.PcdSpiFlashPollCmd|0|UINT32|0x3000052
-  gMarvellTokenSpaceGuid.PcdSpiFlashAddressCycles|0|UINT32|0x3000053
-  gMarvellTokenSpaceGuid.PcdSpiFlashEraseSize|0|UINT64|0x3000054
-  gMarvellTokenSpaceGuid.PcdSpiFlashPageSize|0|UINT32|0x3000055
-  gMarvellTokenSpaceGuid.PcdSpiFlashSectorSize|65536|UINT64|0x3000059
-  gMarvellTokenSpaceGuid.PcdSpiFlashId|{ 0x0 }|VOID*|0x3000056
   gMarvellTokenSpaceGuid.PcdSpiFlashCs|0|UINT32|0x3000057
   gMarvellTokenSpaceGuid.PcdSpiFlashMode|0|UINT32|0x3000058
 
diff --git a/Silicon/Marvell/Documentation/PortingGuide.txt b/Silicon/Marvell/Documentation/PortingGuide.txt
index cbe3bed..d5deed5 100644
--- a/Silicon/Marvell/Documentation/PortingGuide.txt
+++ b/Silicon/Marvell/Documentation/PortingGuide.txt
@@ -312,24 +312,6 @@ SpiFlash configuration
 ======================
 Folowing PCDs for spi flash driver configuration must be set properly:
 
-  - gMarvellTokenSpaceGuid.PcdSpiFlashAddressCycles
-        (Size of SPI flash address in bytes (3 or 4) )
-
-  - gMarvellTokenSpaceGuid.PcdSpiFlashEraseSize
-        (Size of minimal erase block in bytes)
-
-  - gMarvellTokenSpaceGuid.PcdSpiFlashPageSize
-        (Size of SPI flash page)
-
-  - gMarvellTokenSpaceGuid.PcdSpiFlashSectorSize
-        (Size of SPI flash sector, 65536 bytes by default)
-
-  - gMarvellTokenSpaceGuid.PcdSpiFlashId
-        (Id of SPI flash)
-
-  - gMarvellTokenSpaceGuid.PcdSpiFlashPollCmd
-        (Spi flash polling flag)
-
   - gMarvellTokenSpaceGuid.PcdSpiFlashMode
         (Default SCLK mode (see SPI_MODE enum in file
          edk2-platforms/Platform/Marvell/Drivers/Spi/MvSpi.h))
-- 
2.7.4



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [platforms: PATCH v2 3/6] Marvell/Drivers: MvSpiFlash: Remove duplicated macros
  2017-11-03 17:57 [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2 Marcin Wojtas
  2017-11-03 17:57 ` [platforms: PATCH v2 1/6] Marvell/Drivers: MvSpiFlash: Improve ReadId Marcin Wojtas
  2017-11-03 17:57 ` [platforms: PATCH v2 2/6] Marvell/Drivers: MvSpiFlash: Enable dynamic SPI Flash detection Marcin Wojtas
@ 2017-11-03 17:57 ` Marcin Wojtas
  2017-11-03 17:57 ` [platforms: PATCH v2 4/6] Marvell/Applications: SpiTool: Do not override existing slave device Marcin Wojtas
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Marcin Wojtas @ 2017-11-03 17:57 UTC (permalink / raw)
  To: edk2-devel
  Cc: leif.lindholm, ard.biesheuvel, nadavh, neta, kostap, jinghua, mw,
	jsd

Flash commands macros are already defined in MvSpiFlash.h, so
remove them from the protocol header.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
---
 Platform/Marvell/Include/Protocol/SpiFlash.h | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/Platform/Marvell/Include/Protocol/SpiFlash.h b/Platform/Marvell/Include/Protocol/SpiFlash.h
index 4a3053e..4ba29ba 100644
--- a/Platform/Marvell/Include/Protocol/SpiFlash.h
+++ b/Platform/Marvell/Include/Protocol/SpiFlash.h
@@ -36,17 +36,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 #include <Protocol/Spi.h>
 
-#define CMD_READ_ID                     0x9f
-#define READ_STATUS_REG_CMD             0x0b
-#define CMD_WRITE_ENABLE                0x06
-#define CMD_FLAG_STATUS                 0x70
-#define CMD_WRITE_STATUS_REG            0x01
-#define CMD_READ_ARRAY_FAST             0x0b
-#define CMD_PAGE_PROGRAM                0x02
-#define CMD_BANK_WRITE                  0xc5
-#define CMD_ERASE_64K                   0xd8
-#define CMD_4B_ADDR_ENABLE              0xb7
-
 extern EFI_GUID gMarvellSpiFlashProtocolGuid;
 
 typedef struct _MARVELL_SPI_FLASH_PROTOCOL MARVELL_SPI_FLASH_PROTOCOL;
-- 
2.7.4



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [platforms: PATCH v2 4/6] Marvell/Applications: SpiTool: Do not override existing slave device
  2017-11-03 17:57 [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2 Marcin Wojtas
                   ` (2 preceding siblings ...)
  2017-11-03 17:57 ` [platforms: PATCH v2 3/6] Marvell/Drivers: MvSpiFlash: Remove duplicated macros Marcin Wojtas
@ 2017-11-03 17:57 ` Marcin Wojtas
  2017-11-03 17:57 ` [platforms: PATCH v2 5/6] Marvell/Drivers: MvSpiFlash: Fix bank selection for Spansion Marcin Wojtas
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Marcin Wojtas @ 2017-11-03 17:57 UTC (permalink / raw)
  To: edk2-devel
  Cc: leif.lindholm, ard.biesheuvel, nadavh, neta, kostap, jinghua, mw,
	jsd

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.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
---
 Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c |  4 ++--
 Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c    | 21 ++++++++++----------
 Platform/Marvell/Drivers/Spi/MvSpiDxe.c                | 17 ++++++++--------
 Platform/Marvell/Drivers/Spi/MvSpiDxe.h                |  1 +
 Platform/Marvell/Include/Protocol/Spi.h                |  1 +
 5 files changed, 24 insertions(+), 20 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..cf91581 100644
--- a/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c
+++ b/Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c
@@ -58,6 +58,8 @@ EFI_HANDLE gShellSfHiiHandle = NULL;
 
 BOOLEAN InitFlag = 1;
 
+STATIC SPI_DEVICE *mSlave;
+
 STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
   {L"read", TypeFlag},
   {L"readfile", TypeFlag},
@@ -191,7 +193,6 @@ ShellCommandRunSpiFlash (
   )
 {
 EFI_STATUS              Status;
-  SPI_DEVICE            *Slave;
   LIST_ENTRY            *CheckPackage;
   EFI_PHYSICAL_ADDRESS  Address = 0, Offset = 0;
   SHELL_FILE_HANDLE     FileHandle = NULL;
@@ -273,8 +274,8 @@ EFI_STATUS              Status;
   Cs = PcdGet32 (PcdSpiFlashCs);
 
   // Setup new spi device
-  Slave = SpiMasterProtocol->SetupDevice (SpiMasterProtocol, Cs, Mode);
-    if (Slave == NULL) {
+  mSlave = SpiMasterProtocol->SetupDevice (SpiMasterProtocol, mSlave, Cs, Mode);
+    if (mSlave == NULL) {
       Print(L"sf: Cannot allocate SPI device!\n");
       return SHELL_ABORTED;
     }
@@ -282,9 +283,11 @@ EFI_STATUS              Status;
   switch (Flag) {
   case PROBE:
     // Probe spi bus
-    Status = FlashProbe (Slave);
+    Status = FlashProbe (mSlave);
     if (EFI_ERROR(Status)) {
       // No supported spi flash detected
+      SpiMasterProtocol->FreeDevice(mSlave);
+      mSlave = NULL;
       return SHELL_ABORTED;
     } else {
       return Status;
@@ -411,23 +414,21 @@ EFI_STATUS              Status;
   switch (Flag) {
   case READ:
   case READ_FILE:
-    Status = SpiFlashProtocol->Read (Slave, Offset, ByteCount, Buffer);
+    Status = SpiFlashProtocol->Read (mSlave, Offset, ByteCount, Buffer);
     break;
   case ERASE:
-    Status = SpiFlashProtocol->Erase (Slave, Offset, ByteCount);
+    Status = SpiFlashProtocol->Erase (mSlave, Offset, ByteCount);
     break;
   case WRITE:
   case WRITE_FILE:
-    Status = SpiFlashProtocol->Write (Slave, Offset, ByteCount, Buffer);
+    Status = SpiFlashProtocol->Write (mSlave, Offset, ByteCount, Buffer);
     break;
   case UPDATE:
   case UPDATE_FILE:
-    Status = SpiFlashProtocol->Update (Slave, Offset, ByteCount, Buffer);
+    Status = SpiFlashProtocol->Update (mSlave, Offset, ByteCount, Buffer);
     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 6f26a36..98fcc07 100644
--- a/Platform/Marvell/Include/Protocol/Spi.h
+++ b/Platform/Marvell/Include/Protocol/Spi.h
@@ -88,6 +88,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



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [platforms: PATCH v2 5/6] Marvell/Drivers: MvSpiFlash: Fix bank selection for Spansion
  2017-11-03 17:57 [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2 Marcin Wojtas
                   ` (3 preceding siblings ...)
  2017-11-03 17:57 ` [platforms: PATCH v2 4/6] Marvell/Applications: SpiTool: Do not override existing slave device Marcin Wojtas
@ 2017-11-03 17:57 ` Marcin Wojtas
  2017-11-03 17:57 ` [platforms: PATCH v2 6/6] Marvell/Drivers: MvSpiDxe: Keep data in SPI_DEVICE structure Marcin Wojtas
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 11+ messages in thread
From: Marcin Wojtas @ 2017-11-03 17:57 UTC (permalink / raw)
  To: edk2-devel
  Cc: leif.lindholm, ard.biesheuvel, nadavh, neta, kostap, jinghua, mw,
	jsd

Spansion SPI flash devices use different command for bank
selection. Update it, basing on the first byte of flash ID.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
---
 Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c | 5 +++++
 Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.h | 1 +
 2 files changed, 6 insertions(+)

diff --git a/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c b/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c
index 4a97ba9..456d9f9 100755
--- a/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c
+++ b/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c
@@ -150,6 +150,11 @@ SpiFlashCmdBankaddrWrite (
 {
   UINT8 Cmd = CMD_BANK_WRITE;
 
+  /* Update bank selection command for Spansion */
+  if (Slave->Info->Id[0] == NOR_FLASH_ID_SPANSION) {
+    Cmd = CMD_BANKADDR_BRWR;
+  }
+
   MvSpiFlashWriteCommon (Slave, &Cmd, 1, &BankSel, 1);
 }
 
diff --git a/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.h b/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.h
index 2583484..f09ff50 100755
--- a/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.h
+++ b/Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.h
@@ -57,6 +57,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #define CMD_READ_ARRAY_FAST             0x0b
 #define CMD_PAGE_PROGRAM                0x02
 #define CMD_BANK_WRITE                  0xc5
+#define CMD_BANKADDR_BRWR               0x17
 #define CMD_ERASE_4K                    0x20
 #define CMD_ERASE_32K                   0x52
 #define CMD_ERASE_64K                   0xd8
-- 
2.7.4



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [platforms: PATCH v2 6/6] Marvell/Drivers: MvSpiDxe: Keep data in SPI_DEVICE structure
  2017-11-03 17:57 [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2 Marcin Wojtas
                   ` (4 preceding siblings ...)
  2017-11-03 17:57 ` [platforms: PATCH v2 5/6] Marvell/Drivers: MvSpiFlash: Fix bank selection for Spansion Marcin Wojtas
@ 2017-11-03 17:57 ` Marcin Wojtas
  2017-11-05  6:13 ` [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2 Leif Lindholm
  2017-11-07 17:21 ` Leif Lindholm
  7 siblings, 0 replies; 11+ messages in thread
From: Marcin Wojtas @ 2017-11-03 17:57 UTC (permalink / raw)
  To: edk2-devel
  Cc: leif.lindholm, ard.biesheuvel, nadavh, neta, kostap, jinghua, mw,
	jsd

In the MvSpiDxe driver obtaining host register base address,
controller clock and device maximum frequency directly from PCDs
was done all over the code. This patch cleans up the parameters'
handling and enables accessing them from SPI_DEVICE structure fields.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
---
 Platform/Marvell/Drivers/Spi/MvSpiDxe.c | 48 ++++++++++++--------
 Platform/Marvell/Include/Protocol/Spi.h |  2 +
 2 files changed, 31 insertions(+), 19 deletions(-)

diff --git a/Platform/Marvell/Drivers/Spi/MvSpiDxe.c b/Platform/Marvell/Drivers/Spi/MvSpiDxe.c
index a7db5f2..c60a520 100755
--- a/Platform/Marvell/Drivers/Spi/MvSpiDxe.c
+++ b/Platform/Marvell/Drivers/Spi/MvSpiDxe.c
@@ -38,12 +38,13 @@ SPI_MASTER *mSpiMasterInstance;
 STATIC
 EFI_STATUS
 SpiSetBaudRate (
+  IN SPI_DEVICE *Slave,
   IN UINT32 CpuClock,
   IN UINT32 MaxFreq
   )
 {
   UINT32 Spr, BestSpr, Sppr, BestSppr, ClockDivider, Match, Reg, MinBaudDiff;
-  UINTN SpiRegBase = PcdGet32 (PcdSpiRegBase);
+  UINTN SpiRegBase = Slave->HostRegisterBaseAddress;
 
   MinBaudDiff = 0xFFFFFFFF;
   BestSppr = 0;
@@ -93,26 +94,28 @@ SpiSetBaudRate (
 STATIC
 VOID
 SpiSetCs (
-  UINT8 CsId
+  IN SPI_DEVICE *Slave
   )
 {
-  UINT32 Reg, SpiRegBase = PcdGet32 (PcdSpiRegBase);
+  UINT32 Reg;
+  UINTN  SpiRegBase = Slave->HostRegisterBaseAddress;
 
   Reg = MmioRead32 (SpiRegBase + SPI_CTRL_REG);
   Reg &= ~SPI_CS_NUM_MASK;
-  Reg |= (CsId << SPI_CS_NUM_OFFSET);
+  Reg |= (Slave->Cs << SPI_CS_NUM_OFFSET);
   MmioWrite32 (SpiRegBase + SPI_CTRL_REG, Reg);
 }
 
 STATIC
 VOID
 SpiActivateCs (
-  UINT8 IN CsId
+  IN SPI_DEVICE *Slave
   )
 {
-  UINT32  Reg, SpiRegBase = PcdGet32 (PcdSpiRegBase);
+  UINT32 Reg;
+  UINTN  SpiRegBase = Slave->HostRegisterBaseAddress;
 
-  SpiSetCs(CsId);
+  SpiSetCs(Slave);
   Reg = MmioRead32 (SpiRegBase + SPI_CTRL_REG);
   Reg |= SPI_CS_EN_MASK;
   MmioWrite32(SpiRegBase + SPI_CTRL_REG, Reg);
@@ -121,10 +124,11 @@ SpiActivateCs (
 STATIC
 VOID
 SpiDeactivateCs (
-  VOID
+  IN SPI_DEVICE *Slave
   )
 {
-  UINT32  Reg, SpiRegBase = PcdGet32 (PcdSpiRegBase);
+  UINT32 Reg;
+  UINTN  SpiRegBase = Slave->HostRegisterBaseAddress;
 
   Reg = MmioRead32 (SpiRegBase + SPI_CTRL_REG);
   Reg &= ~SPI_CS_EN_MASK;
@@ -139,14 +143,15 @@ SpiSetupTransfer (
   )
 {
   SPI_MASTER *SpiMaster;
-  UINT32 Reg, SpiRegBase, CoreClock, SpiMaxFreq;
+  UINT32 Reg, CoreClock, SpiMaxFreq;
+  UINTN SpiRegBase;
 
   SpiMaster = SPI_MASTER_FROM_SPI_MASTER_PROTOCOL (This);
 
   // Initialize values from PCDs
-  SpiRegBase  = PcdGet32 (PcdSpiRegBase);
-  CoreClock   = PcdGet32 (PcdSpiClockFrequency);
-  SpiMaxFreq  = PcdGet32 (PcdSpiMaxFrequency);
+  SpiRegBase  = Slave->HostRegisterBaseAddress;
+  CoreClock   = Slave->CoreClock;
+  SpiMaxFreq  = Slave->MaxFreq;
 
   EfiAcquireLock (&SpiMaster->Lock);
 
@@ -154,9 +159,9 @@ SpiSetupTransfer (
   Reg |= SPI_BYTE_LENGTH;
   MmioWrite32 (SpiRegBase + SPI_CONF_REG, Reg);
 
-  SpiSetCs(Slave->Cs);
+  SpiSetCs(Slave);
 
-  SpiSetBaudRate (CoreClock, SpiMaxFreq);
+  SpiSetBaudRate (Slave, CoreClock, SpiMaxFreq);
 
   Reg = MmioRead32 (SpiRegBase + SPI_CONF_REG);
   Reg &= ~(SPI_CPOL_MASK | SPI_CPHA_MASK | SPI_TXLSBF_MASK | SPI_RXLSBF_MASK);
@@ -194,21 +199,22 @@ MvSpiTransfer (
 {
   SPI_MASTER *SpiMaster;
   UINT64  Length;
-  UINT32  Iterator, Reg, SpiRegBase;
+  UINT32  Iterator, Reg;
   UINT8   *DataOutPtr = (UINT8 *)DataOut;
   UINT8   *DataInPtr  = (UINT8 *)DataIn;
   UINT8   DataToSend  = 0;
+  UINTN   SpiRegBase;
 
   SpiMaster = SPI_MASTER_FROM_SPI_MASTER_PROTOCOL (This);
 
-  SpiRegBase = PcdGet32 (PcdSpiRegBase);
+  SpiRegBase = Slave->HostRegisterBaseAddress;
 
   Length = 8 * DataByteCount;
 
   EfiAcquireLock (&SpiMaster->Lock);
 
   if (Flag & SPI_TRANSFER_BEGIN) {
-    SpiActivateCs (Slave->Cs);
+    SpiActivateCs (Slave);
   }
 
   // Set 8-bit mode
@@ -245,7 +251,7 @@ MvSpiTransfer (
   }
 
   if (Flag & SPI_TRANSFER_END) {
-    SpiDeactivateCs ();
+    SpiDeactivateCs (Slave);
   }
 
   EfiReleaseLock (&SpiMaster->Lock);
@@ -312,6 +318,10 @@ MvSpiSetupSlave (
     Slave->Mode = Mode;
   }
 
+  Slave->HostRegisterBaseAddress = PcdGet32 (PcdSpiRegBase);
+  Slave->CoreClock = PcdGet32 (PcdSpiClockFrequency);
+  Slave->MaxFreq = PcdGet32 (PcdSpiMaxFrequency);
+
   SpiSetupTransfer (This, Slave);
 
   return Slave;
diff --git a/Platform/Marvell/Include/Protocol/Spi.h b/Platform/Marvell/Include/Protocol/Spi.h
index 98fcc07..d993021 100644
--- a/Platform/Marvell/Include/Protocol/Spi.h
+++ b/Platform/Marvell/Include/Protocol/Spi.h
@@ -53,6 +53,8 @@ typedef struct {
   SPI_MODE Mode;
   UINT32 AddrSize;
   NOR_FLASH_INFO *Info;
+  UINTN HostRegisterBaseAddress;
+  UINTN CoreClock;
 } SPI_DEVICE;
 
 typedef
-- 
2.7.4



^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2.
  2017-11-03 17:57 [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2 Marcin Wojtas
                   ` (5 preceding siblings ...)
  2017-11-03 17:57 ` [platforms: PATCH v2 6/6] Marvell/Drivers: MvSpiDxe: Keep data in SPI_DEVICE structure Marcin Wojtas
@ 2017-11-05  6:13 ` Leif Lindholm
  2017-11-05  7:51   ` Marcin Wojtas
  2017-11-07 17:21 ` Leif Lindholm
  7 siblings, 1 reply; 11+ messages in thread
From: Leif Lindholm @ 2017-11-05  6:13 UTC (permalink / raw)
  To: Marcin Wojtas
  Cc: edk2-devel, ard.biesheuvel, nadavh, neta, kostap, jinghua, jsd

On Fri, Nov 03, 2017 at 06:57:09PM +0100, Marcin Wojtas wrote:
> Hi,
> 
> I submit corrected version of the Armada SPI improvements
> after the first round of review. There were no significant changes
> comparing to v1, please check the changelog below for the details.
> 
> Patches are available in the github:
> https://github.com/MarvellEmbeddedProcessors/edk2-open-platform/commits/spi-upstream-r20171103
> NorFlashInfoLib:
> https://github.com/MarvellEmbeddedProcessors/edk2/commits/norlib-upstream-r20171103
> 
> I'm looking forward to the comments or remarks.

For the series:
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>

I'll push it (and send an email about it) when I'm not just about to
jump on a plane. Kick me if you haven't seen anything by end of
Monday.

/
    Leif

> Best regards,
> Marcin
> 
> Changelog:
> v1 -> v2
> 1/6
>   - Replace NOR_FLASH_ID_DEFAULT_LEN with PcdGetSize (PcdSpiFlashId)
> 
> 2/6
>   - Adjust to renamed functions and macros according to NorFlashInfoLib v2
>   - Restore handling of CMD_ERASE_32K
>   - Check NOR_FLASH_4B_ADDR only once and use SPI_DEVICE structure instead
> 
> 3/6
>   - Improve commit log
> 
> 4/6
>   - Use global variable explicitly (mSlave)
> 
> 5/6
>   - Use NOR_FLASH_ID_SPANSION from EmbeddedPkg/Include/Library/NorFlashInfoLib.h
> 
> 6/6
>   - Add RB
> 
> Marcin Wojtas (6):
>   Marvell/Drivers: MvSpiFlash: Improve ReadId
>   Marvell/Drivers: MvSpiFlash: Enable dynamic SPI Flash detection
>   Marvell/Drivers: MvSpiFlash: Remove duplicated macros
>   Marvell/Applications: SpiTool: Do not override existing slave device
>   Marvell/Drivers: MvSpiFlash: Fix bank selection for Spansion
>   Marvell/Drivers: MvSpiDxe: Keep data in SPI_DEVICE structure
> 
>  Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c   |  25 +----
>  Platform/Marvell/Applications/FirmwareUpdate/FUpdate.inf |   4 +-
>  Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c      |  57 ++++------
>  Platform/Marvell/Applications/SpiTool/SpiFlashCmd.inf    |   2 +-
>  Platform/Marvell/Armada/Armada.dsc.inc                   |   1 +
>  Platform/Marvell/Armada/Armada70x0.dsc                   |   5 -
>  Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c        | 116 ++++++++++----------
>  Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.h        |   3 +
>  Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.inf      |   9 +-
>  Platform/Marvell/Drivers/Spi/MvSpiDxe.c                  |  63 ++++++-----
>  Platform/Marvell/Drivers/Spi/MvSpiDxe.h                  |   1 +
>  Platform/Marvell/Drivers/Spi/MvSpiDxe.inf                |   2 +
>  Platform/Marvell/Include/Protocol/Spi.h                  |   7 ++
>  Platform/Marvell/Include/Protocol/SpiFlash.h             |  14 +--
>  Platform/Marvell/Marvell.dec                             |   6 -
>  Silicon/Marvell/Documentation/PortingGuide.txt           |  18 ---
>  16 files changed, 142 insertions(+), 191 deletions(-)
> 
> -- 
> 2.7.4
> 


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2.
  2017-11-05  6:13 ` [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2 Leif Lindholm
@ 2017-11-05  7:51   ` Marcin Wojtas
  0 siblings, 0 replies; 11+ messages in thread
From: Marcin Wojtas @ 2017-11-05  7:51 UTC (permalink / raw)
  To: Leif Lindholm
  Cc: edk2-devel-01, Ard Biesheuvel, nadavh, Neta Zur Hershkovits,
	Kostya Porotchkin, Hua Jing, semihalf-dabros-jan

Hi Leif,

2017-11-05 7:13 GMT+01:00 Leif Lindholm <leif.lindholm@linaro.org>:
> On Fri, Nov 03, 2017 at 06:57:09PM +0100, Marcin Wojtas wrote:
>> Hi,
>>
>> I submit corrected version of the Armada SPI improvements
>> after the first round of review. There were no significant changes
>> comparing to v1, please check the changelog below for the details.
>>
>> Patches are available in the github:
>> https://github.com/MarvellEmbeddedProcessors/edk2-open-platform/commits/spi-upstream-r20171103
>> NorFlashInfoLib:
>> https://github.com/MarvellEmbeddedProcessors/edk2/commits/norlib-upstream-r20171103
>>
>> I'm looking forward to the comments or remarks.
>
> For the series:
> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
>
> I'll push it (and send an email about it) when I'm not just about to
> jump on a plane. Kick me if you haven't seen anything by end of
> Monday.
>
> /

Thanks. However the patches are depending on the NorFlashInfoLib - it
has to be merged first, otherwise we will break compilation. Do you
think there is a chance of that happening?

Best regards,
Marcin

>     Leif
>
>> Best regards,
>> Marcin
>>
>> Changelog:
>> v1 -> v2
>> 1/6
>>   - Replace NOR_FLASH_ID_DEFAULT_LEN with PcdGetSize (PcdSpiFlashId)
>>
>> 2/6
>>   - Adjust to renamed functions and macros according to NorFlashInfoLib v2
>>   - Restore handling of CMD_ERASE_32K
>>   - Check NOR_FLASH_4B_ADDR only once and use SPI_DEVICE structure instead
>>
>> 3/6
>>   - Improve commit log
>>
>> 4/6
>>   - Use global variable explicitly (mSlave)
>>
>> 5/6
>>   - Use NOR_FLASH_ID_SPANSION from EmbeddedPkg/Include/Library/NorFlashInfoLib.h
>>
>> 6/6
>>   - Add RB
>>
>> Marcin Wojtas (6):
>>   Marvell/Drivers: MvSpiFlash: Improve ReadId
>>   Marvell/Drivers: MvSpiFlash: Enable dynamic SPI Flash detection
>>   Marvell/Drivers: MvSpiFlash: Remove duplicated macros
>>   Marvell/Applications: SpiTool: Do not override existing slave device
>>   Marvell/Drivers: MvSpiFlash: Fix bank selection for Spansion
>>   Marvell/Drivers: MvSpiDxe: Keep data in SPI_DEVICE structure
>>
>>  Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c   |  25 +----
>>  Platform/Marvell/Applications/FirmwareUpdate/FUpdate.inf |   4 +-
>>  Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c      |  57 ++++------
>>  Platform/Marvell/Applications/SpiTool/SpiFlashCmd.inf    |   2 +-
>>  Platform/Marvell/Armada/Armada.dsc.inc                   |   1 +
>>  Platform/Marvell/Armada/Armada70x0.dsc                   |   5 -
>>  Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c        | 116 ++++++++++----------
>>  Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.h        |   3 +
>>  Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.inf      |   9 +-
>>  Platform/Marvell/Drivers/Spi/MvSpiDxe.c                  |  63 ++++++-----
>>  Platform/Marvell/Drivers/Spi/MvSpiDxe.h                  |   1 +
>>  Platform/Marvell/Drivers/Spi/MvSpiDxe.inf                |   2 +
>>  Platform/Marvell/Include/Protocol/Spi.h                  |   7 ++
>>  Platform/Marvell/Include/Protocol/SpiFlash.h             |  14 +--
>>  Platform/Marvell/Marvell.dec                             |   6 -
>>  Silicon/Marvell/Documentation/PortingGuide.txt           |  18 ---
>>  16 files changed, 142 insertions(+), 191 deletions(-)
>>
>> --
>> 2.7.4
>>


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2.
  2017-11-03 17:57 [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2 Marcin Wojtas
                   ` (6 preceding siblings ...)
  2017-11-05  6:13 ` [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2 Leif Lindholm
@ 2017-11-07 17:21 ` Leif Lindholm
  2017-11-07 18:10   ` Marcin Wojtas
  7 siblings, 1 reply; 11+ messages in thread
From: Leif Lindholm @ 2017-11-07 17:21 UTC (permalink / raw)
  To: Marcin Wojtas
  Cc: edk2-devel, ard.biesheuvel, nadavh, neta, kostap, jinghua, jsd

On Fri, Nov 03, 2017 at 06:57:09PM +0100, Marcin Wojtas wrote:
> Hi,
> 
> I submit corrected version of the Armada SPI improvements
> after the first round of review. There were no significant changes
> comparing to v1, please check the changelog below for the details.
> 
> Patches are available in the github:
> https://github.com/MarvellEmbeddedProcessors/edk2-open-platform/commits/spi-upstream-r20171103
> NorFlashInfoLib:
> https://github.com/MarvellEmbeddedProcessors/edk2/commits/norlib-upstream-r20171103
> 
> I'm looking forward to the comments or remarks.

For the remaining patches of the series:
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>

Pushed as f79bce44ac..6c7c803218.

> Best regards,
> Marcin
> 
> Changelog:
> v1 -> v2
> 1/6
>   - Replace NOR_FLASH_ID_DEFAULT_LEN with PcdGetSize (PcdSpiFlashId)
> 
> 2/6
>   - Adjust to renamed functions and macros according to NorFlashInfoLib v2
>   - Restore handling of CMD_ERASE_32K
>   - Check NOR_FLASH_4B_ADDR only once and use SPI_DEVICE structure instead
> 
> 3/6
>   - Improve commit log
> 
> 4/6
>   - Use global variable explicitly (mSlave)
> 
> 5/6
>   - Use NOR_FLASH_ID_SPANSION from EmbeddedPkg/Include/Library/NorFlashInfoLib.h
> 
> 6/6
>   - Add RB
> 
> Marcin Wojtas (6):
>   Marvell/Drivers: MvSpiFlash: Improve ReadId
>   Marvell/Drivers: MvSpiFlash: Enable dynamic SPI Flash detection
>   Marvell/Drivers: MvSpiFlash: Remove duplicated macros
>   Marvell/Applications: SpiTool: Do not override existing slave device
>   Marvell/Drivers: MvSpiFlash: Fix bank selection for Spansion
>   Marvell/Drivers: MvSpiDxe: Keep data in SPI_DEVICE structure
> 
>  Platform/Marvell/Applications/FirmwareUpdate/FUpdate.c   |  25 +----
>  Platform/Marvell/Applications/FirmwareUpdate/FUpdate.inf |   4 +-
>  Platform/Marvell/Applications/SpiTool/SpiFlashCmd.c      |  57 ++++------
>  Platform/Marvell/Applications/SpiTool/SpiFlashCmd.inf    |   2 +-
>  Platform/Marvell/Armada/Armada.dsc.inc                   |   1 +
>  Platform/Marvell/Armada/Armada70x0.dsc                   |   5 -
>  Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.c        | 116 ++++++++++----------
>  Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.h        |   3 +
>  Platform/Marvell/Drivers/Spi/Devices/MvSpiFlash.inf      |   9 +-
>  Platform/Marvell/Drivers/Spi/MvSpiDxe.c                  |  63 ++++++-----
>  Platform/Marvell/Drivers/Spi/MvSpiDxe.h                  |   1 +
>  Platform/Marvell/Drivers/Spi/MvSpiDxe.inf                |   2 +
>  Platform/Marvell/Include/Protocol/Spi.h                  |   7 ++
>  Platform/Marvell/Include/Protocol/SpiFlash.h             |  14 +--
>  Platform/Marvell/Marvell.dec                             |   6 -
>  Silicon/Marvell/Documentation/PortingGuide.txt           |  18 ---
>  16 files changed, 142 insertions(+), 191 deletions(-)
> 
> -- 
> 2.7.4
> 


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2.
  2017-11-07 17:21 ` Leif Lindholm
@ 2017-11-07 18:10   ` Marcin Wojtas
  0 siblings, 0 replies; 11+ messages in thread
From: Marcin Wojtas @ 2017-11-07 18:10 UTC (permalink / raw)
  To: Leif Lindholm
  Cc: edk2-devel-01, Ard Biesheuvel, nadavh, Neta Zur Hershkovits,
	Kostya Porotchkin, Hua Jing, semihalf-dabros-jan

2017-11-07 18:21 GMT+01:00 Leif Lindholm <leif.lindholm@linaro.org>:
> On Fri, Nov 03, 2017 at 06:57:09PM +0100, Marcin Wojtas wrote:
>> Hi,
>>
>> I submit corrected version of the Armada SPI improvements
>> after the first round of review. There were no significant changes
>> comparing to v1, please check the changelog below for the details.
>>
>> Patches are available in the github:
>> https://github.com/MarvellEmbeddedProcessors/edk2-open-platform/commits/spi-upstream-r20171103
>> NorFlashInfoLib:
>> https://github.com/MarvellEmbeddedProcessors/edk2/commits/norlib-upstream-r20171103
>>
>> I'm looking forward to the comments or remarks.
>
> For the remaining patches of the series:
> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
>
> Pushed as f79bce44ac..6c7c803218.
>

Thanks!

Marcin


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2017-11-07 18:06 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-03 17:57 [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2 Marcin Wojtas
2017-11-03 17:57 ` [platforms: PATCH v2 1/6] Marvell/Drivers: MvSpiFlash: Improve ReadId Marcin Wojtas
2017-11-03 17:57 ` [platforms: PATCH v2 2/6] Marvell/Drivers: MvSpiFlash: Enable dynamic SPI Flash detection Marcin Wojtas
2017-11-03 17:57 ` [platforms: PATCH v2 3/6] Marvell/Drivers: MvSpiFlash: Remove duplicated macros Marcin Wojtas
2017-11-03 17:57 ` [platforms: PATCH v2 4/6] Marvell/Applications: SpiTool: Do not override existing slave device Marcin Wojtas
2017-11-03 17:57 ` [platforms: PATCH v2 5/6] Marvell/Drivers: MvSpiFlash: Fix bank selection for Spansion Marcin Wojtas
2017-11-03 17:57 ` [platforms: PATCH v2 6/6] Marvell/Drivers: MvSpiDxe: Keep data in SPI_DEVICE structure Marcin Wojtas
2017-11-05  6:13 ` [platforms: PATCH v2 0/6] Armada 7k/8k SPI improvements pt 2 Leif Lindholm
2017-11-05  7:51   ` Marcin Wojtas
2017-11-07 17:21 ` Leif Lindholm
2017-11-07 18:10   ` Marcin Wojtas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox