Hi Chris, On Tue, Jan 24, 2017 at 3:20 PM, Chris Brandt <Chris.Brandt@xxxxxxxxxxx> wrote: > On Tuesday, January 24, 2017, Geert Uytterhoeven wrote: >> > Therefore, before I start firing off patches to remove runtime PM for >> RZ/A, does anyone have an opinion one way of the other???? >> >> Please have a look at Section 55.3.5 ("Module Standby Function"), which I >> had never read myself, apparently... >> >> Seem like there is some kind of status register, the STBCR register >> itself: >> >> Canceling Module Standby Function: >> 1. Clear the MSTP bit to 0. >> 2. After that, dummy-read the same register. >> >> Does it help if you add the dummy read when enabling the clock? > > Already tried that. And put a barrier() call just to make sure > everything was done. > It seems that might be enough for the RSPI, but the RIIC still has issues. :-( > From what I can tell, that makes the register space readable...but the IP block > is not fully functional unless you delay a little. If you know the minimum delay needed, and it's not too long, it can be added to the enable path. >> However, that section reveals another complicating factor for some >> modules: >> if the module has a bit in a STBREQn/STBACKn register, a module standy >> request must be sent to the module before stopping the module clock. >> >> Looks like you're gonna need a whole new RZ/A1-specific clock driver to >> handle all those details... > > There are only a couple IP blocks called out in the STBREQn/STBACKn registers, > and I think they are not really crucial for runtime pm (Ethenret, LCD, > Coresight, etc..). > So in my opinion it's not worth a new driver just yet. OK. > But, I think I'd like to disable runtime pm for RZ/A1 in the drivers for now > Because 'functional' is better than 'lower-power-but-broken' I prefer not doing that in the individual drivers, as they're shared with other SoCs. I think you can handle that in drivers/clk/renesas/clk-mstp.c: - in cpg_mstp_attach_dev(), add a call to pm_clk_resume(dev) after the call to pm_clk_add_clk(), - in cpg_mstp_detach_dev(), add a call to pm_clk_suspend(dev) before the call to pm_clk_destroy(). Yes, that means the module clocks are enabled all the time. Of course when running on RZ/A1H ;-) Good luck! Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds