On Thu, 30 Mar 2023 at 11:34, Sudeep Holla <sudeep.holla@xxxxxxx> wrote: > > On Thu, Mar 30, 2023 at 02:12:49PM +0530, Maulik Shah wrote: > > A switch from OSI to PC mode is only possible if all CPUs other than the > > calling one are OFF, either through a call to CPU_OFF or not yet booted. > > > > As per the spec, all cores are in one of the following states: > - Running > - OFF, either through a call to CPU_OFF or not yet booted > - Suspended, through a call to CPU_DEFAULT_SUSPEND > > Better to provide full information. > > > Currently OSI mode is enabled before power domains are created. In cases > > where CPUidle states are not using hierarchical CPU topology the bail out > > path tries to switch back to PC mode which gets denied by firmware since > > other CPUs are online at this point and creates inconsistent state as > > firmware is in OSI mode and Linux in PC mode. > > > > OK what is the issue if the other cores are online ? As long as they are > running, it is allowed in the spec, so your statement is incorrect. > > Is CPUidle enabled before setting the OSI mode. I see only that can cause > issue as we don't use CPU_DEFAULT_SUSPEND. If idle is not yet enabled, it > shouldn't be a problem. Sudeep, you may very well be correct here. Nevertheless, it looks like the current public TF-A implementation doesn't work exactly like this, as it reports an error in Maulik's case. We should fix it too, I think. Although, to me it doesn't really matter as I think $subject patch makes sense anyway. It's always nice to simplify code when it's possible. Note also that, before commit 70c179b49870 ("cpuidle: psci: Allow PM domain to be initialized even if no OSI mode"), it made sense to call psci_pd_try_set_osi_mode() before creating the genpds, but beyond that it doesn't really matter anymore. Kind regards Uffe