diff options
author | Aaron Durbin <adurbin@chromium.org> | 2018-04-19 21:15:25 -0600 |
---|---|---|
committer | Aaron Durbin <adurbin@chromium.org> | 2018-04-23 20:58:58 +0000 |
commit | 851dde8255efda7ecf9b37a3b7b22f4edab8881f (patch) | |
tree | 10a4d241f9af25db1fb9c71b696dfecb7ca5cf44 /src/soc | |
parent | 6c2b10e98933569f028d2ee78efb4cc660d2f9ac (diff) | |
download | coreboot-851dde8255efda7ecf9b37a3b7b22f4edab8881f.tar.xz |
drivers/spi: reduce confusion in the API
Julius brought up confusion about the current spi api in [1]. In order
alleviate the confusion stemming from supporting x86 spi flash
controllers:
- Remove spi_xfer_two_vectors() which was fusing transactions to
accomodate the limitations of the spi controllers themselves.
- Add spi_flash_vector_helper() for the x86 spi flash controllers to
utilize in validating driver/controller current assumptions.
- Remove the xfer() callback in the x86 spi flash drivers which
will trigger an error as these controllers can't support the api.
[1] https://mail.coreboot.org/pipermail/coreboot/2018-April/086561.html
Change-Id: Id88adc6ad5234c29a739d43521c5f344bb7d3217
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: https://review.coreboot.org/25745
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
Diffstat (limited to 'src/soc')
-rw-r--r-- | src/soc/amd/stoneyridge/spi.c | 9 | ||||
-rw-r--r-- | src/soc/intel/baytrail/spi.c | 9 | ||||
-rw-r--r-- | src/soc/intel/braswell/spi.c | 9 | ||||
-rw-r--r-- | src/soc/intel/broadwell/spi.c | 9 | ||||
-rw-r--r-- | src/soc/intel/fsp_baytrail/spi.c | 9 | ||||
-rw-r--r-- | src/soc/intel/fsp_broadwell_de/spi.c | 9 |
6 files changed, 42 insertions, 12 deletions
diff --git a/src/soc/amd/stoneyridge/spi.c b/src/soc/amd/stoneyridge/spi.c index c94f5e7f69..718ad94bec 100644 --- a/src/soc/amd/stoneyridge/spi.c +++ b/src/soc/amd/stoneyridge/spi.c @@ -181,9 +181,14 @@ int chipset_volatile_group_end(const struct spi_flash *flash) return 0; } +static int xfer_vectors(const struct spi_slave *slave, + struct spi_op vectors[], size_t count) +{ + return spi_flash_vector_helper(slave, vectors, count, spi_ctrlr_xfer); +} + static const struct spi_ctrlr spi_ctrlr = { - .xfer = spi_ctrlr_xfer, - .xfer_vector = spi_xfer_two_vectors, + .xfer_vector = xfer_vectors, .max_xfer_size = SPI_FIFO_DEPTH, .flags = SPI_CNTRLR_DEDUCT_CMD_LEN | SPI_CNTRLR_DEDUCT_OPCODE_LEN, }; diff --git a/src/soc/intel/baytrail/spi.c b/src/soc/intel/baytrail/spi.c index 73847e9b8e..918e6d6134 100644 --- a/src/soc/intel/baytrail/spi.c +++ b/src/soc/intel/baytrail/spi.c @@ -607,9 +607,14 @@ static int spi_ctrlr_xfer(const struct spi_slave *slave, const void *dout, return 0; } +static int xfer_vectors(const struct spi_slave *slave, + struct spi_op vectors[], size_t count) +{ + return spi_flash_vector_helper(slave, vectors, count, spi_ctrlr_xfer); +} + static const struct spi_ctrlr spi_ctrlr = { - .xfer = spi_ctrlr_xfer, - .xfer_vector = spi_xfer_two_vectors, + .xfer_vector = xfer_vectors, .max_xfer_size = member_size(ich9_spi_regs, fdata), }; diff --git a/src/soc/intel/braswell/spi.c b/src/soc/intel/braswell/spi.c index 3fc9ba1114..b9e1627d15 100644 --- a/src/soc/intel/braswell/spi.c +++ b/src/soc/intel/braswell/spi.c @@ -591,9 +591,14 @@ static int spi_ctrlr_xfer(const struct spi_slave *slave, const void *dout, return 0; } +static int xfer_vectors(const struct spi_slave *slave, + struct spi_op vectors[], size_t count) +{ + return spi_flash_vector_helper(slave, vectors, count, spi_ctrlr_xfer); +} + static const struct spi_ctrlr spi_ctrlr = { - .xfer = spi_ctrlr_xfer, - .xfer_vector = spi_xfer_two_vectors, + .xfer_vector = xfer_vectors, .max_xfer_size = member_size(ich9_spi_regs, fdata), }; diff --git a/src/soc/intel/broadwell/spi.c b/src/soc/intel/broadwell/spi.c index 2bcbebac31..7a764f1e60 100644 --- a/src/soc/intel/broadwell/spi.c +++ b/src/soc/intel/broadwell/spi.c @@ -650,9 +650,14 @@ static int spi_flash_protect(const struct spi_flash *flash, return 0; } +static int xfer_vectors(const struct spi_slave *slave, + struct spi_op vectors[], size_t count) +{ + return spi_flash_vector_helper(slave, vectors, count, spi_ctrlr_xfer); +} + static const struct spi_ctrlr spi_ctrlr = { - .xfer = spi_ctrlr_xfer, - .xfer_vector = spi_xfer_two_vectors, + .xfer_vector = xfer_vectors, .max_xfer_size = member_size(ich9_spi_regs, fdata), .flash_protect = spi_flash_protect, }; diff --git a/src/soc/intel/fsp_baytrail/spi.c b/src/soc/intel/fsp_baytrail/spi.c index 96e0671c4a..6787dcbe18 100644 --- a/src/soc/intel/fsp_baytrail/spi.c +++ b/src/soc/intel/fsp_baytrail/spi.c @@ -588,9 +588,14 @@ spi_xfer_exit: return 0; } +static int xfer_vectors(const struct spi_slave *slave, + struct spi_op vectors[], size_t count) +{ + return spi_flash_vector_helper(slave, vectors, count, spi_ctrlr_xfer); +} + static const struct spi_ctrlr spi_ctrlr = { - .xfer = spi_ctrlr_xfer, - .xfer_vector = spi_xfer_two_vectors, + .xfer_vector = xfer_vectors, .max_xfer_size = member_size(ich9_spi_regs, fdata), }; diff --git a/src/soc/intel/fsp_broadwell_de/spi.c b/src/soc/intel/fsp_broadwell_de/spi.c index b87ae90bc5..26c6e65741 100644 --- a/src/soc/intel/fsp_broadwell_de/spi.c +++ b/src/soc/intel/fsp_broadwell_de/spi.c @@ -604,9 +604,14 @@ spi_xfer_exit: return 0; } +static int xfer_vectors(const struct spi_slave *slave, + struct spi_op vectors[], size_t count) +{ + return spi_flash_vector_helper(slave, vectors, count, spi_ctrlr_xfer); +} + static const struct spi_ctrlr spi_ctrlr = { - .xfer = spi_ctrlr_xfer, - .xfer_vector = spi_xfer_two_vectors, + .xfer_vector = xfer_vectors, .max_xfer_size = member_size(ich9_spi_regs, fdata), }; |