Hi Claudiu, On Thu, 10 Apr 2025 at 16:06, Claudiu <claudiu.beznea@xxxxxxxxx> wrote: > From: Claudiu Beznea <claudiu.beznea.uj@xxxxxxxxxxxxxx> > > The RZ/{G2L, V2L, G3S} CPG versions support a feature called MSTOP. Each > module has one or more MSTOP bits associated with it, and these bits need > to be configured along with the module clocks. Setting the MSTOP bits > switches the module between normal and standby states. > > Previously, MSTOP support was abstracted through power domains > (struct generic_pm_domain::{power_on, power_off} APIs). With this > abstraction, the order of setting the MSTOP and CLKON bits was as follows: > > Previous Order: > A/ Switching to Normal State (e.g., during probe): > 1/ Clear module MSTOP bits > 2/ Set module CLKON bits > > B/ Switching to Standby State (e.g., during remove): > 1/ Clear CLKON bits > 2/ Set MSTOP bits > > However, in some cases (when the clock is disabled through devres), the > order may have been (due to the issue described in link section): > > 1/ Set MSTOP bits > 2/ Clear CLKON bits > > Recently, the hardware team has suggested that the correct order to set > the MSTOP and CLKON bits is: > > Updated Order: > A/ Switching to Normal State (e.g., during probe): > 1/ Set CLKON bits > 2/ Clear MSTOP bits What is the recommended order in case multiple clocks map to the same module? Clear the MSTOP bit(s) after enabling the first clock, or clear the MSTOP bit(s) after enabling all clocks? I believe the code implements the former? > > B/ Switching to Standby State (e.g., during remove): > 1/ Set MSTOP bits > 2/ Clear CLKON bits > > To prevent future issues due to incorrect ordering, the MSTOP setup has > now been implemented in rzg2l_mod_clock_endisable(), ensuring compliance > with the sequence suggested in Figure 41.5: Module Standby Mode Procedure > from the RZ/G3S HW manual. > > Additionally, since multiple clocks of a single module may be mapped to a > single MSTOP bit, MSTOP setup is reference-counted. > > Furthermore, as all modules start in the normal state after reset, if the > module clocks are disabled, the module state is switched to standby. This > prevents keeping the module in an invalid state, as recommended by the > hardware team. > > Link: https://lore.kernel.org/all/20250215130849.227812-1-claudiu.beznea.uj@xxxxxxxxxxxxxx/ > Signed-off-by: Claudiu Beznea <claudiu.beznea.uj@xxxxxxxxxxxxxx> 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