Gregory, On Fri, 03 Jul 2015 13:39:49 +0200, Gregory CLEMENT wrote:
> Having 2 initcall does not work because, there is a dependency between these > 2 calls. And actually the suspend_ops is registered before the board specific > hook. As soon as the suspend_ops is registered, mvebu_pm_valid() is called but > at this point mvebu_board_pm_enter is NULL so PM_SUSPEND_MEM is not available. And? It will become available soon afterwards. > All the complexity of the original patch was to allow registering a handler > without needed to get the resource(gpio device) that are not available when > using > arch_initcall(). However the device_initcall_sync comes latter enough to > get all the devices registered but it still happens before the late_initcall, > so I will use this one and I will add a comment around it. I don't think we care about the order in which the initcalls are called. If the SoC level init call registering the suspend_ops gets called first, then at the beginning there is only support for standby. The support for suspend to RAM will be enabled once the board-level init call gets called. If the board level init call is called first, then it will set mvebu_board_pm_enter. It is not useful at this point. Until the SoC level init call registers the suspend_ops. I believe that the ->valid() method of suspend_ops gets called when the user actually enters the suspend state by writing to /sys/power/state. And by that time, both init calls will have been called. Best regards, Thomas -- Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/