From 724a24d70215e86db587957402d04085fad8f64e Mon Sep 17 00:00:00 2001 From: Angel Pons Date: Mon, 21 Jun 2021 13:01:45 +0200 Subject: nicintel_spi.c: Implement `set_sck_set_mosi` and `set_sck_get_miso` Tested on a 8086:1533 (i210 GbE), reads still return the same data. This cuts the time to read a Winbond W25Q80.V (1 MiB, SPI) from 66 seconds down to 48 seconds, i.e. a 37.5% increase in speed. Change-Id: I52a0ae5ff331ee2ed41652eb5c2ed7ebe7253d74 Signed-off-by: Angel Pons Reviewed-on: https://review.coreboot.org/c/flashrom/+/49267 Tested-by: build bot (Jenkins) Reviewed-by: Nico Huber --- nicintel_spi.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'nicintel_spi.c') diff --git a/nicintel_spi.c b/nicintel_spi.c index 2f4fd101..5dcdf7dd 100644 --- a/nicintel_spi.c +++ b/nicintel_spi.c @@ -165,6 +165,19 @@ static void nicintel_bitbang_set_mosi(int val, void *spi_data) pci_mmio_writel(tmp, data->spibar + FLA); } +static void nicintel_bitbang_set_sck_set_mosi(int sck, int mosi, void *spi_data) +{ + struct nicintel_spi_data *data = spi_data; + uint32_t tmp; + + tmp = pci_mmio_readl(data->spibar + FLA); + tmp &= ~BIT(FL_SCK); + tmp &= ~BIT(FL_SI); + tmp |= (sck << FL_SCK); + tmp |= (mosi << FL_SI); + pci_mmio_writel(tmp, data->spibar + FLA); +} + static int nicintel_bitbang_get_miso(void *spi_data) { struct nicintel_spi_data *data = spi_data; @@ -175,10 +188,24 @@ static int nicintel_bitbang_get_miso(void *spi_data) return tmp; } +static int nicintel_bitbang_set_sck_get_miso(int sck, void *spi_data) +{ + struct nicintel_spi_data *data = spi_data; + uint32_t tmp; + + tmp = pci_mmio_readl(data->spibar + FLA); + tmp &= ~BIT(FL_SCK); + tmp |= (sck << FL_SCK); + pci_mmio_writel(tmp, data->spibar + FLA); + return (tmp >> FL_SO) & 0x1; +} + static const struct bitbang_spi_master bitbang_spi_master_nicintel = { .set_cs = nicintel_bitbang_set_cs, .set_sck = nicintel_bitbang_set_sck, .set_mosi = nicintel_bitbang_set_mosi, + .set_sck_set_mosi = nicintel_bitbang_set_sck_set_mosi, + .set_sck_get_miso = nicintel_bitbang_set_sck_get_miso, .get_miso = nicintel_bitbang_get_miso, .request_bus = nicintel_request_spibus, .release_bus = nicintel_release_spibus, -- cgit v1.2.3