[coreboot-gerrit] Patch set updated for coreboot: spi: Get rid of rw flag in spi_slave structure
Furquan Shaikh (furquan@google.com)
gerrit at coreboot.org
Fri Nov 18 00:21:27 CET 2016
Furquan Shaikh (furquan at google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/17462
-gerrit
commit 4c1d83f02f8547a524ae6d1d20561df53b192bc5
Author: Furquan Shaikh <furquan at chromium.org>
Date: Thu Nov 17 15:13:03 2016 -0800
spi: Get rid of rw flag in spi_slave structure
RW flag was introduced to inform claim/release operations of SPI
controller about whether the SPI operation to be performed involves
read or write. This rw flag is not a property or attribute of the SPI
slave or controller. It is a property of the SPI operation. Thus,
instead of saving it in spi_slave structure pass it explicitly to
spi_{claim,release}_bus functions so that the SPI controllers which care
about that flag can use it.
This rw flag seemed to have been used incorrectly in a lot of
places (some SoCs seem to have assumed that the flag was a constant
attribute of the controller). Thus, get rid of all these assignments and
only pass the appropriate READ/WRITE flag depending upon operation to
claim and release bus functions.
BUG=None
BRANCH=None
TEST=All boards compile successfully using abuild.
Change-Id: Idfc052e82ec15b6c9fa874cee7a61bd06e923fbf
Signed-off-by: Furquan Shaikh <furquan at chromium.org>
---
src/cpu/amd/pi/spi.c | 6 ++----
src/drivers/spi/adesto.c | 5 ++---
src/drivers/spi/amic.c | 5 ++---
src/drivers/spi/atmel.c | 5 ++---
src/drivers/spi/eon.c | 2 --
src/drivers/spi/gigadevice.c | 2 --
src/drivers/spi/macronix.c | 2 --
src/drivers/spi/spansion.c | 2 --
src/drivers/spi/spi_flash.c | 14 ++++++------
src/drivers/spi/spiconsole.c | 2 +-
src/drivers/spi/sst.c | 4 ----
src/drivers/spi/stmicro.c | 4 ++--
src/drivers/spi/winbond.c | 2 --
src/ec/google/chromeec/ec_spi.c | 4 ++--
src/include/spi-generic.h | 10 +++++----
src/northbridge/amd/agesa/oem_s3.c | 6 ++----
src/northbridge/amd/amdmct/mct_ddr3/s3utils.c | 6 ++----
src/soc/broadcom/cygnus/spi.c | 4 ++--
src/soc/imgtec/pistachio/spi.c | 5 ++---
src/soc/intel/apollolake/spi.c | 4 ++--
src/soc/intel/baytrail/spi.c | 4 ++--
src/soc/intel/braswell/spi.c | 4 ++--
src/soc/intel/broadwell/spi.c | 4 ++--
src/soc/intel/fsp_baytrail/spi.c | 4 ++--
src/soc/intel/fsp_broadwell_de/spi.c | 4 ++--
src/soc/intel/skylake/flash_controller.c | 10 ++++-----
src/soc/marvell/armada38x/spi.c | 4 ++--
src/soc/marvell/bg4cd/spi.c | 4 ++--
src/soc/mediatek/mt8173/spi.c | 4 ++--
src/soc/nvidia/tegra124/spi.c | 4 ++--
src/soc/nvidia/tegra210/spi.c | 4 ++--
src/soc/qualcomm/ipq40xx/spi.c | 4 ++--
src/soc/qualcomm/ipq806x/spi.c | 4 ++--
src/soc/rockchip/common/spi.c | 31 +++++++--------------------
src/soc/samsung/exynos5420/spi.c | 13 ++++++-----
src/southbridge/amd/agesa/hudson/spi.c | 8 +++----
src/southbridge/amd/cimx/sb800/spi.c | 8 +++----
src/southbridge/amd/sb700/spi.c | 4 ++--
src/southbridge/amd/sb700/spi.h | 4 ++--
src/southbridge/intel/common/spi.c | 9 ++++----
src/southbridge/intel/fsp_rangeley/spi.c | 4 ++--
41 files changed, 98 insertions(+), 135 deletions(-)
diff --git a/src/cpu/amd/pi/spi.c b/src/cpu/amd/pi/spi.c
index f571805..f4c0c01 100644
--- a/src/cpu/amd/pi/spi.c
+++ b/src/cpu/amd/pi/spi.c
@@ -31,15 +31,13 @@ void spi_SaveS3info(u32 pos, u32 size, u8 *buf, u32 len)
return;
}
- flash->spi->rw = SPI_WRITE_FLAG;
- spi_claim_bus(flash->spi);
+ spi_claim_bus(flash->spi, SPI_WRITE_FLAG);
flash->erase(flash, pos, size);
flash->write(flash, pos, sizeof(len), &len);
flash->write(flash, pos + sizeof(len), len, buf);
- flash->spi->rw = SPI_WRITE_FLAG;
- spi_release_bus(flash->spi);
+ spi_release_bus(flash->spi, SPI_WRITE_FLAG);
return;
}
diff --git a/src/drivers/spi/adesto.c b/src/drivers/spi/adesto.c
index fdde90f..78be0ba 100644
--- a/src/drivers/spi/adesto.c
+++ b/src/drivers/spi/adesto.c
@@ -92,8 +92,7 @@ static int adesto_write(struct spi_flash *flash,
page_size = 1 << stm->params->l2_page_size;
byte_addr = offset % page_size;
- flash->spi->rw = SPI_WRITE_FLAG;
- ret = spi_claim_bus(flash->spi);
+ ret = spi_claim_bus(flash->spi, SPI_WRITE_FLAG);
if (ret) {
printk(BIOS_WARNING, "SF: Unable to claim SPI bus\n");
return ret;
@@ -141,7 +140,7 @@ static int adesto_write(struct spi_flash *flash,
ret = 0;
out:
- spi_release_bus(flash->spi);
+ spi_release_bus(flash->spi, SPI_WRITE_FLAG);
return ret;
}
diff --git a/src/drivers/spi/amic.c b/src/drivers/spi/amic.c
index e5f6672..7e4d6c1 100644
--- a/src/drivers/spi/amic.c
+++ b/src/drivers/spi/amic.c
@@ -74,8 +74,7 @@ static int amic_write(struct spi_flash *flash,
page_size = 1 << amic->params->l2_page_size;
byte_addr = offset % page_size;
- flash->spi->rw = SPI_WRITE_FLAG;
- ret = spi_claim_bus(flash->spi);
+ ret = spi_claim_bus(flash->spi, SPI_WRITE_FLAG);
if (ret) {
printk(BIOS_WARNING, "SF: Unable to claim SPI bus\n");
return ret;
@@ -123,7 +122,7 @@ static int amic_write(struct spi_flash *flash,
ret = 0;
out:
- spi_release_bus(flash->spi);
+ spi_release_bus(flash->spi, SPI_WRITE_FLAG);
return ret;
}
diff --git a/src/drivers/spi/atmel.c b/src/drivers/spi/atmel.c
index 0286e09..04b87c5 100644
--- a/src/drivers/spi/atmel.c
+++ b/src/drivers/spi/atmel.c
@@ -119,8 +119,7 @@ static int atmel_write(struct spi_flash *flash,
page_size = 1 << stm->params->l2_page_size;
byte_addr = offset % page_size;
- flash->spi->rw = SPI_WRITE_FLAG;
- ret = spi_claim_bus(flash->spi);
+ ret = spi_claim_bus(flash->spi, SPI_WRITE_FLAG);
if (ret) {
printk(BIOS_WARNING, "SF: Unable to claim SPI bus\n");
return ret;
@@ -168,7 +167,7 @@ static int atmel_write(struct spi_flash *flash,
ret = 0;
out:
- spi_release_bus(flash->spi);
+ spi_release_bus(flash->spi, SPI_WRITE_FLAG);
return ret;
}
diff --git a/src/drivers/spi/eon.c b/src/drivers/spi/eon.c
index 923b0a5..f3204b5 100644
--- a/src/drivers/spi/eon.c
+++ b/src/drivers/spi/eon.c
@@ -89,8 +89,6 @@ static int eon_write(struct spi_flash *flash,
page_size = 1 << eon->params->page_size;
byte_addr = offset % page_size;
- flash->spi->rw = SPI_WRITE_FLAG;
-
for (actual = 0; actual < len; actual += chunk_len) {
chunk_len = min(len - actual, page_size - byte_addr);
chunk_len = spi_crop_chunk(sizeof(cmd), chunk_len);
diff --git a/src/drivers/spi/gigadevice.c b/src/drivers/spi/gigadevice.c
index 780cc82..6137053 100644
--- a/src/drivers/spi/gigadevice.c
+++ b/src/drivers/spi/gigadevice.c
@@ -132,8 +132,6 @@ static int gigadevice_write(struct spi_flash *flash, u32 offset,
page_size = 1 << stm->params->l2_page_size;
byte_addr = offset % page_size;
- flash->spi->rw = SPI_WRITE_FLAG;
-
for (actual = 0; actual < len; actual += chunk_len) {
chunk_len = min(len - actual, page_size - byte_addr);
chunk_len = spi_crop_chunk(sizeof(cmd), chunk_len);
diff --git a/src/drivers/spi/macronix.c b/src/drivers/spi/macronix.c
index 09cb80c..99cffd7 100644
--- a/src/drivers/spi/macronix.c
+++ b/src/drivers/spi/macronix.c
@@ -159,8 +159,6 @@ static int macronix_write(struct spi_flash *flash,
page_size = mcx->params->page_size;
byte_addr = offset % page_size;
- flash->spi->rw = SPI_WRITE_FLAG;
-
for (actual = 0; actual < len; actual += chunk_len) {
chunk_len = min(len - actual, page_size - byte_addr);
chunk_len = spi_crop_chunk(sizeof(cmd), chunk_len);
diff --git a/src/drivers/spi/spansion.c b/src/drivers/spi/spansion.c
index fc6cef9..61351b8 100644
--- a/src/drivers/spi/spansion.c
+++ b/src/drivers/spi/spansion.c
@@ -214,8 +214,6 @@ static int spansion_write(struct spi_flash *flash,
page_addr = offset / page_size;
byte_addr = offset % page_size;
- flash->spi->rw = SPI_WRITE_FLAG;
-
for (actual = 0; actual < len; actual += chunk_len) {
chunk_len = min(len - actual, page_size - byte_addr);
diff --git a/src/drivers/spi/spi_flash.c b/src/drivers/spi/spi_flash.c
index 6006420..a00ff02 100644
--- a/src/drivers/spi/spi_flash.c
+++ b/src/drivers/spi/spi_flash.c
@@ -50,8 +50,14 @@ static int do_spi_flash_cmd(struct spi_slave *spi, const void *dout,
unsigned int bytes_out, void *din, unsigned int bytes_in)
{
int ret = 1;
+ int rw = 0;
- if (spi_claim_bus(spi))
+ if (dout && bytes_out)
+ rw |= SPI_WRITE_FLAG;
+ if (din && bytes_in)
+ rw |= SPI_READ_FLAG;
+
+ if (spi_claim_bus(spi, rw))
return ret;
#if CONFIG_SPI_ATOMIC_SEQUENCING == 1
@@ -71,7 +77,7 @@ static int do_spi_flash_cmd(struct spi_slave *spi, const void *dout,
ret = 0;
done:
- spi_release_bus(spi);
+ spi_release_bus(spi, rw);
return ret;
}
@@ -207,8 +213,6 @@ int spi_flash_cmd_erase(struct spi_flash *flash, u32 offset, size_t len)
return -1;
}
- flash->spi->rw = SPI_WRITE_FLAG;
-
cmd[0] = flash->erase_cmd;
start = offset;
end = start + len;
@@ -325,8 +329,6 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs)
return NULL;
}
- spi->rw = SPI_READ_FLAG;
-
if (spi->force_programmer_specific && spi->programmer_specific_probe) {
flash = spi->programmer_specific_probe (spi);
if (!flash)
diff --git a/src/drivers/spi/spiconsole.c b/src/drivers/spi/spiconsole.c
index a2a1eff..5383716 100644
--- a/src/drivers/spi/spiconsole.c
+++ b/src/drivers/spi/spiconsole.c
@@ -54,7 +54,7 @@ void spiconsole_tx_byte(unsigned char c) {
if (c == '\n' || (sizeof(struct em100_msg_header) +
msg.header.msg_length == spi_crop_chunk(0,
MAX_MSG_LENGTH))) {
- struct spi_slave spi = {.rw = SPI_READ_FLAG};
+ struct spi_slave spi;
spi_xfer(&spi, &msg, sizeof(struct em100_msg_header) +
msg.header.msg_length, NULL, 0);
diff --git a/src/drivers/spi/sst.c b/src/drivers/spi/sst.c
index 87c1c5b..338345c 100644
--- a/src/drivers/spi/sst.c
+++ b/src/drivers/spi/sst.c
@@ -170,8 +170,6 @@ sst_write_256(struct spi_flash *flash, u32 offset, size_t len, const void *buf)
page_size = 256;
byte_addr = offset % page_size;
- flash->spi->rw = SPI_WRITE_FLAG;
-
/* If the data is not word aligned, write out leading single byte */
actual = offset % 2;
if (actual) {
@@ -241,8 +239,6 @@ sst_write_ai(struct spi_flash *flash, u32 offset, size_t len, const void *buf)
int ret = 0;
u8 cmd[4];
- flash->spi->rw = SPI_WRITE_FLAG;
-
/* If the data is not word aligned, write out leading single byte */
actual = offset % 2;
if (actual) {
diff --git a/src/drivers/spi/stmicro.c b/src/drivers/spi/stmicro.c
index 6ab601c..6fb3737 100644
--- a/src/drivers/spi/stmicro.c
+++ b/src/drivers/spi/stmicro.c
@@ -188,7 +188,7 @@ static int stmicro_write(struct spi_flash *flash,
page_size = stm->params->page_size;
byte_addr = offset % page_size;
- flash->spi->rw = SPI_WRITE_FLAG;
+ spi_claim_bus(flash->spi, SPI_WRITE_FLAG);
for (actual = 0; actual < len; actual += chunk_len) {
chunk_len = min(len - actual, page_size - byte_addr);
@@ -232,7 +232,7 @@ static int stmicro_write(struct spi_flash *flash,
ret = 0;
out:
- spi_release_bus(flash->spi);
+ spi_release_bus(flash->spi, SPI_WRITE_FLAG);
return ret;
}
diff --git a/src/drivers/spi/winbond.c b/src/drivers/spi/winbond.c
index defb8a5..bbec69d 100644
--- a/src/drivers/spi/winbond.c
+++ b/src/drivers/spi/winbond.c
@@ -150,8 +150,6 @@ static int winbond_write(struct spi_flash *flash,
page_size = 1 << stm->params->l2_page_size;
byte_addr = offset % page_size;
- flash->spi->rw = SPI_WRITE_FLAG;
-
for (actual = 0; actual < len; actual += chunk_len) {
chunk_len = min(len - actual, page_size - byte_addr);
chunk_len = spi_crop_chunk(sizeof(cmd), chunk_len);
diff --git a/src/ec/google/chromeec/ec_spi.c b/src/ec/google/chromeec/ec_spi.c
index a0049c6..1f68118 100644
--- a/src/ec/google/chromeec/ec_spi.c
+++ b/src/ec/google/chromeec/ec_spi.c
@@ -53,7 +53,7 @@ static int crosec_spi_io(size_t req_size, size_t resp_size, void *context)
while (!stopwatch_expired(&cs_cooldown_sw))
/* Wait minimum delay between CS assertions. */;
- spi_claim_bus(slave);
+ spi_claim_bus(slave, SPI_WRITE_FLAG | SPI_READ_FLAG);
/* Allow EC to ramp up clock after being awaken.
* See chrome-os-partner:32223 for more details. */
@@ -94,7 +94,7 @@ static int crosec_spi_io(size_t req_size, size_t resp_size, void *context)
}
out:
- spi_release_bus(slave);
+ spi_release_bus(slave, SPI_WRITE_FLAG | SPI_READ_FLAG);
stopwatch_init_usecs_expire(&cs_cooldown_sw, cs_cooldown_us);
return ret;
}
diff --git a/src/include/spi-generic.h b/src/include/spi-generic.h
index 9097f48..497e332 100644
--- a/src/include/spi-generic.h
+++ b/src/include/spi-generic.h
@@ -34,7 +34,6 @@
*
* bus: ID of the bus that the slave is attached to.
* cs: ID of the chip select connected to the slave.
- * rw: Read or Write flag
* max_transfer_size: maximum amount of bytes which can be sent in a single
* read or write transaction, usually this is a controller
* property, kept in the slave structure for convenience. Zero in
@@ -43,7 +42,6 @@
struct spi_slave {
unsigned int bus;
unsigned int cs;
- unsigned int rw;
unsigned int max_transfer_size;
int force_programmer_specific;
struct spi_flash * (*programmer_specific_probe) (struct spi_slave *spi);
@@ -81,11 +79,13 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs);
* the bus in between.
*
* slave: The SPI slave
+ * rw: Read/write flag indicating operation that will be performed
+ * after claiming bus
*
* Returns: 0 if the bus was claimed successfully, or a negative value
* if it wasn't.
*/
-int spi_claim_bus(struct spi_slave *slave);
+int spi_claim_bus(struct spi_slave *slave, int rw);
/*-----------------------------------------------------------------------
* Release the SPI bus
@@ -95,8 +95,10 @@ int spi_claim_bus(struct spi_slave *slave);
* appropriate.
*
* slave: The SPI slave
+ * rw: Read/write flag indicating operation that was performed after
+ * claiming bus
*/
-void spi_release_bus(struct spi_slave *slave);
+void spi_release_bus(struct spi_slave *slave, int rw);
/*-----------------------------------------------------------------------
* SPI transfer
diff --git a/src/northbridge/amd/agesa/oem_s3.c b/src/northbridge/amd/agesa/oem_s3.c
index fcf8ada..68c10d3 100644
--- a/src/northbridge/amd/agesa/oem_s3.c
+++ b/src/northbridge/amd/agesa/oem_s3.c
@@ -97,15 +97,13 @@ static int spi_SaveS3info(u32 pos, u32 size, u8 *buf, u32 len)
if (!flash)
return -1;
- flash->spi->rw = SPI_WRITE_FLAG;
- spi_claim_bus(flash->spi);
+ spi_claim_bus(flash->spi, SPI_WRITE_FLAG);
flash->erase(flash, pos, size);
flash->write(flash, pos, sizeof(len), &len);
flash->write(flash, pos + sizeof(len), len, buf);
- flash->spi->rw = SPI_WRITE_FLAG;
- spi_release_bus(flash->spi);
+ spi_release_bus(flash->spi, SPI_WRITE_FLAG);
return 0;
#else
return -1;
diff --git a/src/northbridge/amd/amdmct/mct_ddr3/s3utils.c b/src/northbridge/amd/amdmct/mct_ddr3/s3utils.c
index 97cadcb..1fc9bf7 100644
--- a/src/northbridge/amd/amdmct/mct_ddr3/s3utils.c
+++ b/src/northbridge/amd/amdmct/mct_ddr3/s3utils.c
@@ -1141,8 +1141,7 @@ int8_t save_mct_information_to_nvram(void)
}
/* Set up SPI flash access */
- flash->spi->rw = SPI_WRITE_FLAG;
- spi_claim_bus(flash->spi);
+ spi_claim_bus(flash->spi, SPI_WRITE_FLAG);
/* Erase and write data structure */
flash->erase(flash, s3nv_offset, CONFIG_S3_DATA_SIZE);
@@ -1152,8 +1151,7 @@ int8_t save_mct_information_to_nvram(void)
free(persistent_data);
/* Tear down SPI flash access */
- flash->spi->rw = SPI_WRITE_FLAG;
- spi_release_bus(flash->spi);
+ spi_release_bus(flash->spi, SPI_WRITE_FLAG);
/* Allow training bypass if DIMM configuration is unchanged on next boot */
nvram = 1;
diff --git a/src/soc/broadcom/cygnus/spi.c b/src/soc/broadcom/cygnus/spi.c
index d7c0a8d..76b9a73 100644
--- a/src/soc/broadcom/cygnus/spi.c
+++ b/src/soc/broadcom/cygnus/spi.c
@@ -156,7 +156,7 @@ static int mspi_enable(struct qspi_priv *priv)
return 0;
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
struct qspi_priv *priv = to_qspi_slave(slave);
@@ -175,7 +175,7 @@ int spi_claim_bus(struct spi_slave *slave)
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
struct qspi_priv *priv = to_qspi_slave(slave);
diff --git a/src/soc/imgtec/pistachio/spi.c b/src/soc/imgtec/pistachio/spi.c
index f38607c..d6842f9 100644
--- a/src/soc/imgtec/pistachio/spi.c
+++ b/src/soc/imgtec/pistachio/spi.c
@@ -444,7 +444,6 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs)
img_slave->base = base;
slave->bus = bus;
slave->cs = cs;
- slave->rw = SPI_READ_FLAG | SPI_WRITE_FLAG;
slave->max_transfer_size = IMGTEC_SPI_MAX_TRANSFER_SIZE;
device_parameters->bitrate = 64;
@@ -460,7 +459,7 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs)
}
/* Claim the bus and prepare it for communication */
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
int ret;
struct img_spi_slave *img_slave;
@@ -491,7 +490,7 @@ int spi_claim_bus(struct spi_slave *slave)
}
/* Release the SPI bus */
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
struct img_spi_slave *img_slave;
diff --git a/src/soc/intel/apollolake/spi.c b/src/soc/intel/apollolake/spi.c
index d60176a..13ec626 100644
--- a/src/soc/intel/apollolake/spi.c
+++ b/src/soc/intel/apollolake/spi.c
@@ -213,13 +213,13 @@ void spi_init(void)
pci_write_config32(ctx->pci_dev, SPIBAR_BIOS_CONTROL, bios_ctl);
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
/* There's nothing we need to to here. */
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
/* No magic needed here. */
}
diff --git a/src/soc/intel/baytrail/spi.c b/src/soc/intel/baytrail/spi.c
index ffe6198..c2d0875 100644
--- a/src/soc/intel/baytrail/spi.c
+++ b/src/soc/intel/baytrail/spi.c
@@ -316,13 +316,13 @@ static void spi_init_cb(void *unused)
BOOT_STATE_INIT_ENTRY(BS_DEV_INIT, BS_ON_ENTRY, spi_init_cb, NULL);
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
/* Handled by ICH automatically. */
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
/* Handled by ICH automatically. */
}
diff --git a/src/soc/intel/braswell/spi.c b/src/soc/intel/braswell/spi.c
index 01fe773..02f2ce8 100644
--- a/src/soc/intel/braswell/spi.c
+++ b/src/soc/intel/braswell/spi.c
@@ -295,13 +295,13 @@ static void spi_init_cb(void *unused)
BOOT_STATE_INIT_ENTRY(BS_DEV_INIT, BS_ON_ENTRY, spi_init_cb, NULL);
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
/* Handled by ICH automatically. */
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
/* Handled by ICH automatically. */
}
diff --git a/src/soc/intel/broadwell/spi.c b/src/soc/intel/broadwell/spi.c
index e07b425..6fe1d50 100644
--- a/src/soc/intel/broadwell/spi.c
+++ b/src/soc/intel/broadwell/spi.c
@@ -312,13 +312,13 @@ static void spi_init_cb(void *unused)
BOOT_STATE_INIT_ENTRY(BS_DEV_INIT, BS_ON_ENTRY, spi_init_cb, NULL);
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
/* Handled by ICH automatically. */
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
/* Handled by ICH automatically. */
}
diff --git a/src/soc/intel/fsp_baytrail/spi.c b/src/soc/intel/fsp_baytrail/spi.c
index 374e7f6..46d9528 100644
--- a/src/soc/intel/fsp_baytrail/spi.c
+++ b/src/soc/intel/fsp_baytrail/spi.c
@@ -296,13 +296,13 @@ void spi_init(void)
cntlr.preop = &ich9_spi->preop;
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
/* Handled by ICH automatically. */
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
/* Handled by ICH automatically. */
}
diff --git a/src/soc/intel/fsp_broadwell_de/spi.c b/src/soc/intel/fsp_broadwell_de/spi.c
index 116001f..f2d840c 100644
--- a/src/soc/intel/fsp_broadwell_de/spi.c
+++ b/src/soc/intel/fsp_broadwell_de/spi.c
@@ -312,13 +312,13 @@ void spi_init(void)
pci_write_config_byte(dev, 0xdc, bios_cntl | 0x1);
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
/* Handled by ICH automatically. */
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
/* Handled by ICH automatically. */
}
diff --git a/src/soc/intel/skylake/flash_controller.c b/src/soc/intel/skylake/flash_controller.c
index 56c7c69..64a65f3 100644
--- a/src/soc/intel/skylake/flash_controller.c
+++ b/src/soc/intel/skylake/flash_controller.c
@@ -170,13 +170,13 @@ void spi_init(void)
pci_write_config_byte(dev, SPIBAR_BIOS_CNTL, bios_cntl);
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
/* Handled by PCH automatically. */
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
/* Handled by PCH automatically. */
}
@@ -192,11 +192,11 @@ int pch_hwseq_erase(struct spi_flash *flash, u32 offset, size_t len)
return -1;
}
- flash->spi->rw = SPI_WRITE_FLAG;
-
start = offset;
end = start + len;
+ spi_claim_bus(flash->spi, SPI_WRITE_FLAG);
+
while (offset < end) {
if (spi_do_operation(HSFC_FCYCLE_4KE, offset, 0, 5000)) {
printk(BIOS_ERR, "SF: Erase failed at %x\n", offset);
@@ -211,7 +211,7 @@ int pch_hwseq_erase(struct spi_flash *flash, u32 offset, size_t len)
len, start);
out:
- spi_release_bus(flash->spi);
+ spi_release_bus(flash->spi, SPI_WRITE_FLAG);
return ret;
}
diff --git a/src/soc/marvell/armada38x/spi.c b/src/soc/marvell/armada38x/spi.c
index 6a0e062..e58c670 100644
--- a/src/soc/marvell/armada38x/spi.c
+++ b/src/soc/marvell/armada38x/spi.c
@@ -454,14 +454,14 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs)
return slave;
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
mv_spi_cs_set(slave->bus, slave->cs);
mv_spi_cs_assert(slave->bus);
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
mv_spi_cs_deassert(slave->bus);
}
diff --git a/src/soc/marvell/bg4cd/spi.c b/src/soc/marvell/bg4cd/spi.c
index 53f46c7..9ff2ba5 100644
--- a/src/soc/marvell/bg4cd/spi.c
+++ b/src/soc/marvell/bg4cd/spi.c
@@ -20,12 +20,12 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs)
return NULL;
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
}
diff --git a/src/soc/mediatek/mt8173/spi.c b/src/soc/mediatek/mt8173/spi.c
index c35b1fc..cbed7dd 100644
--- a/src/soc/mediatek/mt8173/spi.c
+++ b/src/soc/mediatek/mt8173/spi.c
@@ -181,7 +181,7 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs)
};
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
struct mtk_spi_bus *mtk_slave = to_mtk_spi(slave);
struct mtk_spi_regs *regs = mtk_slave->regs;
@@ -300,7 +300,7 @@ int spi_xfer(struct spi_slave *slave, const void *dout, unsigned int bytes_out,
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
struct mtk_spi_bus *mtk_slave = to_mtk_spi(slave);
struct mtk_spi_regs *regs = mtk_slave->regs;
diff --git a/src/soc/nvidia/tegra124/spi.c b/src/soc/nvidia/tegra124/spi.c
index d5be4a6..92f76fb 100644
--- a/src/soc/nvidia/tegra124/spi.c
+++ b/src/soc/nvidia/tegra124/spi.c
@@ -209,7 +209,7 @@ static unsigned int tegra_spi_speed(unsigned int bus)
return 50000000;
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
struct tegra_spi_regs *regs = to_tegra_spi(slave->bus)->regs;
u32 val;
@@ -232,7 +232,7 @@ int spi_claim_bus(struct spi_slave *slave)
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
struct tegra_spi_regs *regs = to_tegra_spi(slave->bus)->regs;
u32 val;
diff --git a/src/soc/nvidia/tegra210/spi.c b/src/soc/nvidia/tegra210/spi.c
index b01289c..8e70b58 100644
--- a/src/soc/nvidia/tegra210/spi.c
+++ b/src/soc/nvidia/tegra210/spi.c
@@ -208,7 +208,7 @@ static struct tegra_spi_channel * const to_tegra_spi(int bus) {
return &tegra_spi_channels[bus - 1];
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
struct tegra_spi_regs *regs = to_tegra_spi(slave->bus)->regs;
u32 val;
@@ -231,7 +231,7 @@ int spi_claim_bus(struct spi_slave *slave)
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
struct tegra_spi_regs *regs = to_tegra_spi(slave->bus)->regs;
u32 val;
diff --git a/src/soc/qualcomm/ipq40xx/spi.c b/src/soc/qualcomm/ipq40xx/spi.c
index 8d39f77..ea4d371 100644
--- a/src/soc/qualcomm/ipq40xx/spi.c
+++ b/src/soc/qualcomm/ipq40xx/spi.c
@@ -319,7 +319,7 @@ static int spi_hw_init(struct ipq_spi_slave *ds)
return SUCCESS;
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
struct ipq_spi_slave *ds = to_ipq_spi(slave);
unsigned int ret;
@@ -331,7 +331,7 @@ int spi_claim_bus(struct spi_slave *slave)
return SUCCESS;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
struct ipq_spi_slave *ds = to_ipq_spi(slave);
diff --git a/src/soc/qualcomm/ipq806x/spi.c b/src/soc/qualcomm/ipq806x/spi.c
index 4a35313..9126beb 100644
--- a/src/soc/qualcomm/ipq806x/spi.c
+++ b/src/soc/qualcomm/ipq806x/spi.c
@@ -617,7 +617,7 @@ static int spi_hw_init(struct ipq_spi_slave *ds)
return SUCCESS;
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
struct ipq_spi_slave *ds = to_ipq_spi(slave);
unsigned int ret;
@@ -640,7 +640,7 @@ int spi_claim_bus(struct spi_slave *slave)
return SUCCESS;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
struct ipq_spi_slave *ds = to_ipq_spi(slave);
diff --git a/src/soc/rockchip/common/spi.c b/src/soc/rockchip/common/spi.c
index 57e9ca1..63f45d4 100644
--- a/src/soc/rockchip/common/spi.c
+++ b/src/soc/rockchip/common/spi.c
@@ -37,45 +37,30 @@ struct rockchip_spi_slave {
static struct rockchip_spi_slave rockchip_spi_slaves[] = {
{
- .slave = {
- .bus = 0,
- .rw = SPI_READ_FLAG | SPI_WRITE_FLAG,
- },
+ .slave = { .bus = 0, },
.regs = (void *)SPI0_BASE,
},
{
- .slave = {.bus = 1, .rw = SPI_READ_FLAG,},
+ .slave = { .bus = 1, },
.regs = (void *)SPI1_BASE,
},
{
- .slave = {
- .bus = 2,
- .rw = SPI_READ_FLAG | SPI_WRITE_FLAG,
- },
+ .slave = { .bus = 2, },
.regs = (void *)SPI2_BASE,
},
#ifdef SPI3_BASE
{
- .slave = {
- .bus = 3,
- .rw = SPI_READ_FLAG | SPI_WRITE_FLAG,
- },
+ .slave = { .bus = 3, },
.regs = (void *)SPI3_BASE,
},
#ifdef SPI4_BASE
{
- .slave = {
- .bus = 4,
- .rw = SPI_READ_FLAG | SPI_WRITE_FLAG,
- },
+ .slave = { .bus = 4, },
.regs = (void *)SPI4_BASE,
},
#ifdef SPI5_BASE
{
- .slave = {
- .bus = 5,
- .rw = SPI_READ_FLAG | SPI_WRITE_FLAG,
- },
+ .slave = { .bus = 5, },
.regs = (void *)SPI5_BASE,
},
#endif
@@ -172,13 +157,13 @@ void rockchip_spi_set_sample_delay(unsigned int bus, unsigned int delay_ns)
rsd << SPI_RXDSD_OFFSET);
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
spi_cs_activate(slave);
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
spi_cs_deactivate(slave);
}
diff --git a/src/soc/samsung/exynos5420/spi.c b/src/soc/samsung/exynos5420/spi.c
index 589809d..3f36783 100644
--- a/src/soc/samsung/exynos5420/spi.c
+++ b/src/soc/samsung/exynos5420/spi.c
@@ -48,13 +48,12 @@ static struct exynos_spi_slave exynos_spi_slaves[3] = {
},
// SPI 1
{
- .slave = { .bus = 1, .rw = SPI_READ_FLAG, },
+ .slave = { .bus = 1, },
.regs = (void *)EXYNOS5_SPI1_BASE,
},
// SPI 2
{
- .slave = { .bus = 2,
- .rw = SPI_READ_FLAG | SPI_WRITE_FLAG, },
+ .slave = { .bus = 2, },
.regs = (void *)EXYNOS5_SPI2_BASE,
},
};
@@ -129,7 +128,7 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs)
return &eslave->slave;
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
struct exynos_spi *regs = to_exynos_spi(slave)->regs;
// TODO(hungte) Add some delay if too many transactions happen at once.
@@ -214,7 +213,7 @@ int spi_xfer(struct spi_slave *slave, const void *dout, unsigned int bytes_out,
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
struct exynos_spi *regs = to_exynos_spi(slave)->regs;
setbits_le32(®s->cs_reg, SPI_SLAVE_SIG_INACT);
@@ -225,7 +224,7 @@ static int exynos_spi_read(struct spi_slave *slave, void *dest, uint32_t len,
{
struct exynos_spi *regs = to_exynos_spi(slave)->regs;
u32 command;
- spi_claim_bus(slave);
+ spi_claim_bus(slave, SPI_READ_FLAG);
// Send address.
ASSERT(off < (1 << 24));
@@ -234,7 +233,7 @@ static int exynos_spi_read(struct spi_slave *slave, void *dest, uint32_t len,
// Read the data.
spi_transfer(regs, dest, NULL, len);
- spi_release_bus(slave);
+ spi_release_bus(slave, SPI_READ_FLAG);
return len;
}
diff --git a/src/southbridge/amd/agesa/hudson/spi.c b/src/southbridge/amd/agesa/hudson/spi.c
index 31160bd..fde5b7a 100644
--- a/src/southbridge/amd/agesa/hudson/spi.c
+++ b/src/southbridge/amd/agesa/hudson/spi.c
@@ -149,11 +149,11 @@ int spi_xfer(struct spi_slave *slave, const void *dout,
return 0;
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
#if IS_ENABLED (CONFIG_HUDSON_IMC_FWM)
- if (slave->rw == SPI_WRITE_FLAG) {
+ if (rw == SPI_WRITE_FLAG) {
bus_claimed++;
if (bus_claimed == 1)
ImcSleep(NULL);
@@ -163,11 +163,11 @@ int spi_claim_bus(struct spi_slave *slave)
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
#if IS_ENABLED (CONFIG_HUDSON_IMC_FWM)
- if (slave->rw == SPI_WRITE_FLAG) {
+ if (rw == SPI_WRITE_FLAG) {
bus_claimed--;
if (bus_claimed <= 0) {
bus_claimed = 0;
diff --git a/src/southbridge/amd/cimx/sb800/spi.c b/src/southbridge/amd/cimx/sb800/spi.c
index f689892..3b4ca47 100644
--- a/src/southbridge/amd/cimx/sb800/spi.c
+++ b/src/southbridge/amd/cimx/sb800/spi.c
@@ -144,11 +144,11 @@ static void ImcWakeup(void)
}
#endif
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
#if IS_ENABLED (CONFIG_SB800_IMC_FWM)
- if (slave->rw == SPI_WRITE_FLAG) {
+ if (rw == SPI_WRITE_FLAG) {
bus_claimed++;
if (bus_claimed == 1)
ImcSleep();
@@ -158,11 +158,11 @@ int spi_claim_bus(struct spi_slave *slave)
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
#if IS_ENABLED (CONFIG_SB800_IMC_FWM)
- if (slave->rw == SPI_WRITE_FLAG) {
+ if (rw == SPI_WRITE_FLAG) {
bus_claimed--;
if (bus_claimed <= 0) {
bus_claimed = 0;
diff --git a/src/southbridge/amd/sb700/spi.c b/src/southbridge/amd/sb700/spi.c
index fa316f1..d22a96e 100644
--- a/src/southbridge/amd/sb700/spi.c
+++ b/src/southbridge/amd/sb700/spi.c
@@ -65,13 +65,13 @@ static void execute_command(void)
(read8((void *)(spibar+3)) & 0x80));
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
/* Handled internally by the SB700 */
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
/* Handled internally by the SB700 */
}
diff --git a/src/southbridge/amd/sb700/spi.h b/src/southbridge/amd/sb700/spi.h
index ed5b858..f202c12 100644
--- a/src/southbridge/amd/sb700/spi.h
+++ b/src/southbridge/amd/sb700/spi.h
@@ -13,5 +13,5 @@
* GNU General Public License for more details.
*/
-int spi_claim_bus(struct spi_slave *slave);
-void spi_release_bus(struct spi_slave *slave);
+int spi_claim_bus(struct spi_slave *slave, int rw);
+void spi_release_bus(struct spi_slave *slave, int rw);
diff --git a/src/southbridge/intel/common/spi.c b/src/southbridge/intel/common/spi.c
index 1ab151b..0ed3224 100644
--- a/src/southbridge/intel/common/spi.c
+++ b/src/southbridge/intel/common/spi.c
@@ -360,13 +360,13 @@ static void spi_init_cb(void *unused)
BOOT_STATE_INIT_ENTRY(BS_DEV_INIT, BS_ON_ENTRY, spi_init_cb, NULL);
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
/* Handled by ICH automatically. */
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
/* Handled by ICH automatically. */
}
@@ -750,8 +750,7 @@ static int ich_hwseq_erase(struct spi_flash *flash, u32 offset, size_t len)
return -1;
}
- flash->spi->rw = SPI_WRITE_FLAG;
- ret = spi_claim_bus(flash->spi);
+ ret = spi_claim_bus(flash->spi, SPI_WRITE_FLAG);
if (ret) {
printk(BIOS_ERR, "SF: Unable to claim SPI bus\n");
return ret;
@@ -784,7 +783,7 @@ static int ich_hwseq_erase(struct spi_flash *flash, u32 offset, size_t len)
printk(BIOS_DEBUG, "SF: Successfully erased %zu bytes @ %#x\n", len, start);
out:
- spi_release_bus(flash->spi);
+ spi_release_bus(flash->spi, SPI_WRITE_FLAG);
return ret;
}
diff --git a/src/southbridge/intel/fsp_rangeley/spi.c b/src/southbridge/intel/fsp_rangeley/spi.c
index 007c612..45e5185 100644
--- a/src/southbridge/intel/fsp_rangeley/spi.c
+++ b/src/southbridge/intel/fsp_rangeley/spi.c
@@ -428,13 +428,13 @@ void spi_init(void)
}
}
-int spi_claim_bus(struct spi_slave *slave)
+int spi_claim_bus(struct spi_slave *slave, int rw)
{
/* Handled by ICH automatically. */
return 0;
}
-void spi_release_bus(struct spi_slave *slave)
+void spi_release_bus(struct spi_slave *slave, int rw)
{
/* Handled by ICH automatically. */
}
More information about the coreboot-gerrit
mailing list