Hi community,
I'm working on i.MX6 DL sabreSD board without PMIC.
I build image with Android 6 source code.
After I read the document "i.MX Linux® Reference Manual" I tried to modify Power Management configuration in menuconfig to disabled it.
These were what I had done.
disabled CONFIG_PM
disabled CONFIG_SUSPEND
disabled PF100 Regulator Driver
disabled Anatop Regulator Driver
But after I disabled all this configuration and rebuild image, it showed error to me and said there is something undeclared.
I am afraid that it will cause the system cannot reboot normally or it would dead when I starting the kernel.
Here are my questions:
Thanks in Advanced!
Hi victor
for debugging kernel hanging one can use AN4553 Using Open Source Debugging Tools
for Linux on i.MX Processors
https://www.nxp.com/docs/en/application-note/AN4553.pdf
As pmic is highly integrated to linux codes, I am afraid it is not possible to use the same image
which included power management on the board which have no PMIC. One look at codes and remove
all pmic related functions and references, note uboot also has such codes.
Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
Thanks for your reply.
And I had try to set Power Management disabled and compile it.
But I got an error here.
host C++: libicuuc-host_32 <= external/icu/icu4c/source/common/ustrenum.cpp
drivers/pci/host/pci-imx6.c:1413:10: error: 'pci_imx_pm_ops' undeclared here (not in a function)
.pm = &pci_imx_pm_ops,
^
make[4]: *** [drivers/pci/host/pci-imx6.o] Error 1
make[4]: *** Waiting for unfinished jobs....
make[3]: *** [drivers/pci/host] Error 2
make[3]: *** Waiting for unfinished jobs....
After I traced the code I found that "pci_imx_pm_ops" is defined at pci-imx6.c
#ifdef CONFIG_PM_SLEEP
.
.
.
static const struct dev_pm_ops pci_imx_pm_ops = {
.suspend_noirq = pci_imx_suspend_noirq,
.resume_noirq = pci_imx_resume_noirq,
.freeze_noirq = pci_imx_suspend_noirq,
.thaw_noirq = pci_imx_resume_noirq,
.poweroff_noirq = pci_imx_suspend_noirq,
.restore_noirq = pci_imx_resume_noirq,
};
#endif
.
.
.
static struct platform_driver imx6_pcie_driver = {
.driver = {
.name = "imx6q-pcie",
.of_match_table = imx6_pcie_of_match,
.pm = &pci_imx_pm_ops,
},
.shutdown = imx6_pcie_shutdown,
};
As you can see pci_imx_pm_ops is defined in CONFIG_PM_SLEEP but since I disabled CONFIG_PM the CONFIG_PM_SLEEP will also be disabled.
That means code will not defined pci_imx_pm_ops.
But imx6_pcie_driver still defined ".pm = &pci_imx_pm_ops" at the end of the code even pci_imx_pm_ops do not be defined at all.
This is what I can not understand.
If pci_imx_pm_ops is defined in CONFIG_PM_SLEEP why did imx6_pcie_driver's ".pm = &pci_imx_pm_ops" do not defined in CONFIG_PM_SLEEP.
What if I mark out ".pm = &pci_imx_pm_ops", would kernel system appear with error that I didn't know?
Thanks in Advanced!