Hi AngeloGioacchino, Thanks for your review. On Mon, 2021-12-06 at 16:08 +0100, AngeloGioacchino Del Regno wrote: > Il 03/12/21 07:40, Yong Wu ha scritto: > > sleep control means that when the larb go to sleep, we should wait > > a bit > > until all the current commands are finished. thus, when the larb > > runtime > > suspend, we need enable this function to wait until all the existed > > command are finished. when the larb resume, just disable this > > function. > > This function only improve the safe of bus. Add a new flag for this > > function. Prepare for mt8186. > > > > Signed-off-by: Anan Sun <anan.sun@xxxxxxxxxxxx> > > Signed-off-by: Yong Wu <yong.wu@xxxxxxxxxxxx> > > --- > > drivers/memory/mtk-smi.c | 39 > > +++++++++++++++++++++++++++++++++++---- > > 1 file changed, 35 insertions(+), 4 deletions(-) [snip] > > static int __maybe_unused mtk_smi_larb_suspend(struct device > > *dev) > > { > > struct mtk_smi_larb *larb = dev_get_drvdata(dev); > > + int ret = 0; > > + > > + if (MTK_SMI_CAPS(larb->larb_gen->flags_general, > > MTK_SMI_FLAG_SLEEP_CTL)) > > + ret = mtk_smi_larb_sleep_ctrl(dev, true); > > Sorry but what happens if SLP_PROT_RDY is not getting set properly? > From what I can understand in the commit description that you wrote, > if we reach > the timeout, then the LARB transactions are not over.... > > I see that you are indeed returning a failure here, but you are also > turning off > the clocks regardless of whether we get a failure or a success; I'm > not sure that > this is right, as this may leave the hardware in an unpredictable > state (since > there were some more LARB transactions that didn't go through), > leading to crashes > at system resume (or when retyring to suspend). Thanks for this question. In theory you are right. In this case, the bus already hang. We only printed a fail log in this patch. If this fail happens, we should request the master to check which case cause the larb hang. If the master has a good reason or limitation, the hang is expected, I think we have to add larb reset in this fail case: Reset the larb when the larb runtime resume. Fortunately, we have never got this issue. We could add this reset when necessary. Is this OK for you? Thanks. > > > > > clk_bulk_disable_unprepare(larb->smi.clk_num, larb->smi.clks); > > - return 0; > > + return ret; > > } > > > > static const struct dev_pm_ops smi_larb_pm_ops = { > > > >