[...] >> > +static int tmio_mmc_execute_tuning(struct mmc_host *mmc, u32 opcode) >> > +{ >> > + struct tmio_mmc_host *host = mmc_priv(mmc); >> > + unsigned int num; >> > + int i, ret = 0; >> > + bool *tap; >> > + >> > + if (!host->init_tuning || !host->select_tuning) >> >> When defining these callbacks, it would be nice to know which ones are >> optional and which ones are required. > > Would some comments in struct tmio_mmc_host be an appropriate way > to achieve that? Yes, that would be nice! [...] >> > static int tmio_mmc_init_ocr(struct tmio_mmc_host *host) >> > @@ -1202,6 +1276,9 @@ int tmio_mmc_host_runtime_suspend(struct device *dev) >> > struct mmc_host *mmc = dev_get_drvdata(dev); >> > struct tmio_mmc_host *host = mmc_priv(mmc); >> > >> > + mmc_retune_timer_stop(host->mmc); >> > + mmc_retune_needed(host->mmc); >> >> I am wondering whether it would it be possible to keep a cache of the >> currently used tuning values and then restore these values at >> runtime_resume? >> >> In that way you wouldn't need to force new re-tuning cycle here. > > I will check with the hardware people to see if it is practical from > that POV. Okay! > > From a software POV that ought to be simple enough: a small bitmap ought > to be sufficient to save the values for the hardware covered by this > series. Yes, indeed! Kind regards Uffe