From 78e421bdf73d5739daa25a9f71b2c323dc98e840 Mon Sep 17 00:00:00 2001 From: Edward O'Callaghan Date: Wed, 7 Sep 2022 12:51:16 +1000 Subject: tree/: Move programmer_delay() out of programmer state machine Handle the special cases of both serprog and ch341a_spi. Also rewrite programmer_delay() to handle the two base cases of zero time and no valid flashctx yet before handling per master branching. Additionally, modify the custom delay function pointer signature to allow closure over the flashctx. This allows driver specific delay implementations to recover programmer specific opaque data within their delay implementations. Therefore programmer specific delay functions can avoid programmer specific globals. Change-Id: Id059abb58b31a066a408009073912da2b224d40c Signed-off-by: Edward O'Callaghan Reviewed-on: https://review.coreboot.org/c/flashrom/+/67393 Tested-by: build bot (Jenkins) Reviewed-by: Anastasia Klimchuk --- flashrom.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'flashrom.c') diff --git a/flashrom.c b/flashrom.c index 9c22eb6e7..d0f0d2d44 100644 --- a/flashrom.c +++ b/flashrom.c @@ -256,12 +256,21 @@ static bool master_uses_physmap(const struct registered_master *mst) void programmer_delay(const struct flashctx *flash, unsigned int usecs) { - if (usecs > 0) { - if (programmer->delay) - programmer->delay(usecs); - else - internal_delay(usecs); + if (usecs == 0) + return; + + if (!flash) + return internal_delay(usecs); + + if (flash->mst->buses_supported & BUS_SPI) { + if (flash->mst->spi.delay) + return flash->mst->spi.delay(flash, usecs); + } else if (flash->mst->buses_supported & BUS_PARALLEL) { + if (flash->mst->par.delay) + return flash->mst->par.delay(flash, usecs); } + + return internal_delay(usecs); } int read_memmapped(struct flashctx *flash, uint8_t *buf, unsigned int start, -- cgit v1.2.3