From: Marcin Wojtas <mw@semihalf.com>
To: edk2-devel@lists.01.org
Cc: leif.lindholm@linaro.org, ard.biesheuvel@linaro.org,
nadavh@marvell.com, neta@marvell.com, kostap@marvell.com,
jinghua@marvell.com, mw@semihalf.com, jsd@semihalf.com
Subject: [platforms: PATCH v2 6/6] Marvell/Drivers: MvSpiDxe: Keep data in SPI_DEVICE structure
Date: Fri, 3 Nov 2017 18:57:15 +0100 [thread overview]
Message-ID: <1509731835-5664-7-git-send-email-mw@semihalf.com> (raw)
In-Reply-To: <1509731835-5664-1-git-send-email-mw@semihalf.com>
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
next prev parent reply other threads:[~2017-11-03 17:53 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
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 ` Marcin Wojtas [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1509731835-5664-7-git-send-email-mw@semihalf.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox