Angel Pons has uploaded this change for review. ( https://review.coreboot.org/c/flashrom/+/49268 )
Change subject: bitbang_spi: Drop `set_mosi` and `get_miso` operations ......................................................................
bitbang_spi: Drop `set_mosi` and `get_miso` operations
The bitbang_spi code always sets SCK before doing either of these two operations. Make `set_sck_set_mosi` and `set_sck_get_miso` mandatory and implement them everywhere, and remove `set_mosi` and `get_miso`.
Change-Id: Id6b1edb1e01330feffc5f1ed2ca2c2ebc4fb3b66 Signed-off-by: Angel Pons th3fanbus@gmail.com --- M bitbang_spi.c M developerbox_spi.c M mcp6x_spi.c M nicintel_spi.c M ogp_spi.c M pony_spi.c M programmer.h M rayer_spi.c 8 files changed, 36 insertions(+), 90 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/68/49268/1
diff --git a/bitbang_spi.c b/bitbang_spi.c index c402119..1b0692c 100644 --- a/bitbang_spi.c +++ b/bitbang_spi.c @@ -46,22 +46,12 @@
static void bitbang_spi_set_sck_set_mosi(const struct bitbang_spi_master * const master, int sck, int mosi) { - if (master->set_sck_set_mosi) { - master->set_sck_set_mosi(sck, mosi); - return; - } - - master->set_sck(sck); - master->set_mosi(mosi); + master->set_sck_set_mosi(sck, mosi); }
static int bitbang_spi_set_sck_get_miso(const struct bitbang_spi_master * const master, int sck) { - if (master->set_sck_get_miso) - return master->set_sck_get_miso(sck); - - master->set_sck(sck); - return master->get_miso(); + return master->set_sck_get_miso(sck); }
static uint8_t bitbang_spi_read_byte(const struct bitbang_spi_master *master) @@ -147,7 +137,7 @@ struct spi_master mst = spi_master_bitbang; /* If someone forgot to initialize a bitbang function, we catch it here. */ if (!master || !master->set_cs || - !master->set_sck || !master->set_mosi || !master->get_miso || + !master->set_sck || !master->set_sck_set_mosi || !master->set_sck_get_miso || (master->request_bus && !master->release_bus) || (!master->request_bus && master->release_bus)) { msg_perr("Incomplete SPI bitbang master setting!\n" diff --git a/developerbox_spi.c b/developerbox_spi.c index 4ff2fb6..7011c9a 100644 --- a/developerbox_spi.c +++ b/developerbox_spi.c @@ -104,28 +104,23 @@ cp210x_gpio_set(val << DEVELOPERBOX_SPI_SCK, 1 << DEVELOPERBOX_SPI_SCK); }
-static void cp210x_bitbang_set_mosi(int val) -{ - cp210x_gpio_set(val << DEVELOPERBOX_SPI_MOSI, 1 << DEVELOPERBOX_SPI_MOSI); -} - -static int cp210x_bitbang_get_miso(void) -{ - return !!(cp210x_gpio_get() & (1 << DEVELOPERBOX_SPI_MISO)); -} - static void cp210x_bitbang_set_sck_set_mosi(int sck, int mosi) { cp210x_gpio_set(sck << DEVELOPERBOX_SPI_SCK | mosi << DEVELOPERBOX_SPI_MOSI, 1 << DEVELOPERBOX_SPI_SCK | 1 << DEVELOPERBOX_SPI_MOSI); }
+static int cp210x_bitbang_set_sck_get_miso(int sck) +{ + cp210x_bitbang_set_sck(sck); + return !!(cp210x_gpio_get() & (1 << DEVELOPERBOX_SPI_MISO)); +} + static const struct bitbang_spi_master bitbang_spi_master_cp210x = { .set_cs = cp210x_bitbang_set_cs, .set_sck = cp210x_bitbang_set_sck, - .set_mosi = cp210x_bitbang_set_mosi, - .get_miso = cp210x_bitbang_get_miso, .set_sck_set_mosi = cp210x_bitbang_set_sck_set_mosi, + .set_sck_get_miso = cp210x_bitbang_set_sck_get_miso, };
static int developerbox_spi_shutdown(void *data) diff --git a/mcp6x_spi.c b/mcp6x_spi.c index 4f82095..a0e51fc 100644 --- a/mcp6x_spi.c +++ b/mcp6x_spi.c @@ -74,19 +74,6 @@ mmio_writeb(mcp_gpiostate, mcp6x_spibar + 0x530); }
-static void mcp6x_bitbang_set_mosi(int val) -{ - mcp_gpiostate &= ~(1 << MCP6X_SPI_MOSI); - mcp_gpiostate |= (val << MCP6X_SPI_MOSI); - mmio_writeb(mcp_gpiostate, mcp6x_spibar + 0x530); -} - -static int mcp6x_bitbang_get_miso(void) -{ - mcp_gpiostate = mmio_readb(mcp6x_spibar + 0x530); - return (mcp_gpiostate >> MCP6X_SPI_MISO) & 0x1; -} - static void mcp6x_bitbang_set_sck_set_mosi(int sck, int mosi) { mcp_gpiostate &= ~(1 << MCP6X_SPI_SCK); @@ -108,8 +95,6 @@ static const struct bitbang_spi_master bitbang_spi_master_mcp6x = { .set_cs = mcp6x_bitbang_set_cs, .set_sck = mcp6x_bitbang_set_sck, - .set_mosi = mcp6x_bitbang_set_mosi, - .get_miso = mcp6x_bitbang_get_miso, .set_sck_set_mosi = mcp6x_bitbang_set_sck_set_mosi, .set_sck_get_miso = mcp6x_bitbang_set_sck_get_miso, .request_bus = mcp6x_request_spibus, diff --git a/nicintel_spi.c b/nicintel_spi.c index c068e75..f16c2cd 100644 --- a/nicintel_spi.c +++ b/nicintel_spi.c @@ -148,25 +148,6 @@ pci_mmio_writel(tmp, nicintel_spibar + FLA); }
-static void nicintel_bitbang_set_mosi(int val) -{ - uint32_t tmp; - - tmp = pci_mmio_readl(nicintel_spibar + FLA); - tmp &= ~BIT(FL_SI); - tmp |= (val << FL_SI); - pci_mmio_writel(tmp, nicintel_spibar + FLA); -} - -static int nicintel_bitbang_get_miso(void) -{ - uint32_t tmp; - - tmp = pci_mmio_readl(nicintel_spibar + FLA); - tmp = (tmp >> FL_SO) & 0x1; - return tmp; -} - static void nicintel_bitbang_set_sck_set_mosi(int sck, int mosi) { uint32_t tmp; @@ -193,8 +174,6 @@ 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, - .get_miso = nicintel_bitbang_get_miso, .set_sck_set_mosi = nicintel_bitbang_set_sck_set_mosi, .set_sck_get_miso = nicintel_bitbang_set_sck_get_miso, .request_bus = nicintel_request_spibus, diff --git a/ogp_spi.c b/ogp_spi.c index e603edb..c2a4d18 100644 --- a/ogp_spi.c +++ b/ogp_spi.c @@ -69,13 +69,16 @@ pci_mmio_writel(val, ogp_spibar + ogp_reg_sck); }
-static void ogp_bitbang_set_mosi(int val) +static void ogp_bitbang_set_sck_set_mosi(int sck, int mosi) { - pci_mmio_writel(val, ogp_spibar + ogp_reg_siso); + ogp_bitbang_set_sck(sck); + pci_mmio_writel(mosi, ogp_spibar + ogp_reg_siso); }
-static int ogp_bitbang_get_miso(void) +static int ogp_bitbang_set_sck_get_miso(int sck) { + ogp_bitbang_set_sck(sck); + uint32_t tmp;
tmp = pci_mmio_readl(ogp_spibar + ogp_reg_siso); @@ -85,8 +88,8 @@ static const struct bitbang_spi_master bitbang_spi_master_ogp = { .set_cs = ogp_bitbang_set_cs, .set_sck = ogp_bitbang_set_sck, - .set_mosi = ogp_bitbang_set_mosi, - .get_miso = ogp_bitbang_get_miso, + .set_sck_set_mosi = ogp_bitbang_set_sck_set_mosi, + .set_sck_get_miso = ogp_bitbang_set_sck_get_miso, .request_bus = ogp_request_spibus, .release_bus = ogp_release_spibus, .half_period = 0, diff --git a/pony_spi.c b/pony_spi.c index ed9d326..37d0f08 100644 --- a/pony_spi.c +++ b/pony_spi.c @@ -72,16 +72,20 @@ sp_set_pin(PIN_RTS, val); }
-static void pony_bitbang_set_mosi(int val) +static void pony_bitbang_set_sck_set_mosi(int sck, int mosi) { - if (pony_negate_mosi) - val ^= 1; + pony_bitbang_set_sck(sck);
- sp_set_pin(PIN_DTR, val); + if (pony_negate_mosi) + mosi ^= 1; + + sp_set_pin(PIN_DTR, mosi); }
-static int pony_bitbang_get_miso(void) +static int pony_bitbang_set_sck_get_miso(int sck) { + pony_bitbang_set_sck(sck); + int tmp = sp_get_pin(PIN_CTS);
if (pony_negate_miso) @@ -93,8 +97,8 @@ static const struct bitbang_spi_master bitbang_spi_master_pony = { .set_cs = pony_bitbang_set_cs, .set_sck = pony_bitbang_set_sck, - .set_mosi = pony_bitbang_set_mosi, - .get_miso = pony_bitbang_get_miso, + .set_sck_set_mosi = pony_bitbang_set_sck_set_mosi, + .set_sck_get_miso = pony_bitbang_set_sck_get_miso, .half_period = 0, };
@@ -193,8 +197,7 @@ * Detect if there is a compatible hardware programmer connected. */ pony_bitbang_set_cs(1); - pony_bitbang_set_sck(1); - pony_bitbang_set_mosi(1); + pony_bitbang_set_sck_set_mosi(1, 1);
switch (type) { case TYPE_AJAWE: diff --git a/programmer.h b/programmer.h index d66d239..51e7e88 100644 --- a/programmer.h +++ b/programmer.h @@ -184,13 +184,10 @@ /* Note that CS# is active low, so val=0 means the chip is active. */ void (*set_cs) (int val); void (*set_sck) (int val); - void (*set_mosi) (int val); - int (*get_miso) (void); - void (*request_bus) (void); - void (*release_bus) (void); - /* optional functions to optimize xfers */ void (*set_sck_set_mosi) (int sck, int mosi); int (*set_sck_get_miso) (int sck); + void (*request_bus) (void); + void (*release_bus) (void); /* Length of half a clock period in usecs. */ unsigned int half_period; }; diff --git a/rayer_spi.c b/rayer_spi.c index 8c7f53e..1649f1b 100644 --- a/rayer_spi.c +++ b/rayer_spi.c @@ -140,13 +140,6 @@ OUTB(lpt_outbyte, lpt_iobase); }
-static void rayer_bitbang_set_mosi(int val) -{ - lpt_outbyte &= ~(1 << pinout->mosi_bit); - lpt_outbyte |= (val << pinout->mosi_bit); - OUTB(lpt_outbyte, lpt_iobase); -} - static void rayer_bitbang_set_sck_set_mosi(int sck, int mosi) { lpt_outbyte &= ~(1 << pinout->sck_bit); @@ -156,8 +149,10 @@ OUTB(lpt_outbyte, lpt_iobase); }
-static int rayer_bitbang_get_miso(void) +static int rayer_bitbang_set_sck_get_miso(int sck) { + rayer_bitbang_set_sck(sck); + uint8_t tmp;
tmp = INB(lpt_iobase + 1) ^ 0x80; // bit.7 inverted @@ -168,9 +163,8 @@ static const struct bitbang_spi_master bitbang_spi_master_rayer = { .set_cs = rayer_bitbang_set_cs, .set_sck = rayer_bitbang_set_sck, - .set_mosi = rayer_bitbang_set_mosi, .set_sck_set_mosi = rayer_bitbang_set_sck_set_mosi, - .get_miso = rayer_bitbang_get_miso, + .set_sck_get_miso = rayer_bitbang_set_sck_get_miso, .half_period = 0, };