return 0;
+}
+late_initcall(imx_cpuidle_init);
We have a late_initcall here which needs to be protected from other cpus. On the other hand we depend on board code calling imx_cpuidle_board_params() before this initcall. I think the board code should call a imx_cpuidle_init(struct imx_cpuidle_params *cpuidle_params) instead which makes the flow of execution more clear.
imx_cpuidle_init can not be called directly in board code, since it is too
early to register cpuidle driver and device which depend on some other system resource.
Yong