Hi Boris On 5/10/21 11:22 AM, Boris Brezillon wrote: > On Mon, 10 May 2021 10:46:48 +0200 > Patrice CHOTARD <patrice.chotard@xxxxxxxxxxx> wrote: > >>> >>>> + >>>> + if (ctlr->mem_ops && ctlr->mem_ops->poll_status) { >>>> + ret = spi_mem_access_start(mem); >>>> + if (ret) >>>> + return ret; >>>> + >>>> + reinit_completion(&ctlr->xfer_completion); >>>> + >>>> + ret = ctlr->mem_ops->poll_status(mem, op, mask, match, >>>> + timeout_ms); >>>> + >>>> + ms = wait_for_completion_timeout(&ctlr->xfer_completion, >>>> + msecs_to_jiffies(timeout_ms)); >>> >>> Why do you need to wait here? I'd expect the poll_status to take care >>> of this wait. >> >> It was a request from Mark Brown [1]. The idea is to implement >> similar mechanism already used in SPI framework. > > Well, you have to choose, either you pass a timeout to ->poll_status() > and let the driver wait for the status change (and return -ETIMEDOUT if > it didn't happen in time), or you do it here and the driver only has to > signal the core completion object. I think it's preferable to let the > driver handle the timeout though, because you don't know how the > status check will be implemented, and it's not like the > reinit_completion()+wait_for_completion_timeout() done here would > greatly simplify the drivers wait logic anyway. > Ok i will remove the reinit/wait_completion() as you suggested. Thanks Patrice