OMAP3530 with no TWL4030 power controller
I have an OMAP3530 (DM3730) board which uses a very simple power controller (TPS65910A1). This controller does not support many of the power supplies, etc, that are common on the TWL4030 and similar devices.
I'm using Linux 3.0. How can I remove the reliance on the TWL devices? Simply disabling PM in my configuration isn't enough - that generates a bunch of undefined references. Also, there are many places where power supply stuff is accessed, outside of PM, in particular DSS2 which has a terrible time. Here's what I get when I disabled PM and REGULATOR support:
arch/arm/mach-omap2/built-in.o: In function `omap_set_pwrdm_state':
/local/linux-3.0/arch/arm/mach-omap2/pm.c:122: undefined reference to pwrdm_read_next_pwrst' /local/linux-3.0/arch/arm/mach-omap2/pm.c:126: undefined reference to pwrdm_read_pwrst' /local/linux-3.0/arch/arm/mach-omap2/pm.c:127: undefined reference to pwrdm_read_pwrst' /local/linux-3.0/arch/arm/mach-omap2/pm.c:133: undefined reference to pwrdm_wait_transition' /local/linux-3.0/arch/arm/mach-omap2/pm.c:138: undefined reference to pwrdm_set_next_pwrst' /local/linux-3.0/arch/arm/mach-omap2/pm.c:153: undefined reference to pwrdm_set_lowpwrstchange' /local/linux-3.0/arch/arm/mach-omap2/pm.c:159: undefined reference to pwrdm_wait_transition' /local/linux-3.0/arch/arm/mach-omap2/pm.c:160: undefined reference to pwrdm_state_switch' arch/arm/mach-omap2/built-in.o: In function `omap_hwmod_get_context_loss_count':
/local/linux-3.0/arch/arm/mach-omap2/omap_hwmod.c:2638: undefined reference to pwrdm_get_context_loss_count' arch/arm/mach-omap2/built-in.o: In function _clkdm_clk_hwmod_disable':
/local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:895: undefined reference to pwrdm_clkdm_state_switch' arch/arm/mach-omap2/built-in.o: In function clkdm_allow_idle':
/local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:786: undefined reference to pwrdm_clkdm_state_switch' arch/arm/mach-omap2/built-in.o: In function _clkdm_clk_hwmod_enable':
/local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:869: undefined reference to pwrdm_wait_transition' /local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:870: undefined reference to pwrdm_clkdm_state_switch' arch/arm/mach-omap2/built-in.o: In function `_clkdm_register':
/local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:79: undefined reference to pwrdm_lookup' /local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:93: undefined reference to pwrdm_add_clkdm' arch/arm/mach-omap2/built-in.o: In function `omap2_clk_disable_unused':
/local/linux-3.0/arch/arm/mach-omap2/clock.c:442: undefined reference to pwrdm_clkdm_state_switch' arch/arm/mach-omap2/built-in.o: In function omap2_init_common_infrastructure':
/local/linux-3.0/arch/arm/mach-omap2/io.c:355: undefined reference to omap3xxx_voltagedomains_init' /local/linux-3.0/arch/arm/mach-omap2/io.c:356: undefined reference to omap3xxx_powerdomains_init'
Any ideas? I'd like to keep my changes to the kernel to a minimum,
Signature · 4 lines
------------------------------------------------------------ Gary Thomas | Consulting for the MLB Associates | Embedded world ------------------------------------------------------------
Quoted 5 lines · Gary Thomas
I have an OMAP3530 (DM3730) board which uses a very simple power controller (TPS65910A1). This controller does not support many of the power supplies, etc, that are common on the TWL4030 and similar devices.
Quoted 7 lines
I'm using Linux 3.0. How can I remove the reliance on the TWL devices? Simply disabling PM in my configuration isn't enough - that generates a bunch of undefined references. Also, there are many places where power supply stuff is accessed, outside of PM, in particular DSS2 which has a terrible time. Here's what I get when I disabled PM and REGULATOR support:
Yes it should be possible to support other PMIC other than TWL chips too.. What you're seeing is a bug.
Quoted 28 lines
arch/arm/mach-omap2/built-in.o: In function `omap_set_pwrdm_state':
/local/linux-3.0/arch/arm/mach-omap2/pm.c:122: undefined reference topwrdm_read_next_pwrst' /local/linux-3.0/arch/arm/mach-omap2/pm.c:126: undefined reference topwrdm_read_pwrst' /local/linux-3.0/arch/arm/mach-omap2/pm.c:127: undefined reference topwrdm_read_pwrst' /local/linux-3.0/arch/arm/mach-omap2/pm.c:133: undefined reference topwrdm_wait_transition' /local/linux-3.0/arch/arm/mach-omap2/pm.c:138: undefined reference topwrdm_set_next_pwrst' /local/linux-3.0/arch/arm/mach-omap2/pm.c:153: undefined reference topwrdm_set_lowpwrstchange' /local/linux-3.0/arch/arm/mach-omap2/pm.c:159: undefined reference topwrdm_wait_transition' /local/linux-3.0/arch/arm/mach-omap2/pm.c:160: undefined reference topwrdm_state_switch'arch/arm/mach-omap2/built-in.o: In function `omap_hwmod_get_context_loss_count':
/local/linux-3.0/arch/arm/mach-omap2/omap_hwmod.c:2638: undefined reference topwrdm_get_context_loss_count' arch/arm/mach-omap2/built-in.o: In function_clkdm_clk_hwmod_disable':
/local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:895: undefined reference topwrdm_clkdm_state_switch' arch/arm/mach-omap2/built-in.o: In functionclkdm_allow_idle':
/local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:786: undefined reference topwrdm_clkdm_state_switch' arch/arm/mach-omap2/built-in.o: In function_clkdm_clk_hwmod_enable':
/local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:869: undefined reference topwrdm_wait_transition' /local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:870: undefined reference topwrdm_clkdm_state_switch'arch/arm/mach-omap2/built-in.o: In function `_clkdm_register':
/local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:79: undefined reference topwrdm_lookup' /local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:93: undefined reference topwrdm_add_clkdm'arch/arm/mach-omap2/built-in.o: In function `omap2_clk_disable_unused':
/local/linux-3.0/arch/arm/mach-omap2/clock.c:442: undefined reference topwrdm_clkdm_state_switch' arch/arm/mach-omap2/built-in.o: In functionomap2_init_common_infrastructure':
/local/linux-3.0/arch/arm/mach-omap2/io.c:355: undefined reference toomap3xxx_voltagedomains_init' /local/linux-3.0/arch/arm/mach-omap2/io.c:356: undefined reference toomap3xxx_powerdomains_init'
Quoted 2 lines
Any ideas? I'd like to keep my changes to the kernel to a minimum,
Sounds like there should be empty functions for the prdm_* functions in this case. Kevin might have some patches to fix this already.
Regards,
Tony
Quoted 14 lines · Tony Lindgren
Quoted 5 lines · Gary Thomas
I have an OMAP3530 (DM3730) board which uses a very simple power controller (TPS65910A1). This controller does not support many of the power supplies, etc, that are common on the TWL4030 and similar devices.
Quoted 7 lines
I'm using Linux 3.0. How can I remove the reliance on the TWL devices? Simply disabling PM in my configuration isn't enough - that generates a bunch of undefined references. Also, there are many places where power supply stuff is accessed, outside of PM, in particular DSS2 which has a terrible time. Here's what I get when I disabled PM and REGULATOR support:
Quoted 2 lines
Yes it should be possible to support other PMIC other than TWL chips too.. What you're seeing is a bug.
This will be a bit more of a change than just another PMIC since this device isn't much of a power manager (other than at the very lowest level to handle power up sequencing, etc). It's good to hear that it _should_ work and I look forward to ideas on how to _make_ it work.
For now, I've left PM and REGULATOR enabled so I can at least build the kernel and with just a few changes, I can get the kernel to boot to a prompt. I do need to work out the uglyness of what I've had to do though :-)
Thanks
Quoted 38 lines
Quoted 29 lines
arch/arm/mach-omap2/built-in.o: In function `omap_set_pwrdm_state':
/local/linux-3.0/arch/arm/mach-omap2/pm.c:122: undefined reference topwrdm_read_next_pwrst' /local/linux-3.0/arch/arm/mach-omap2/pm.c:126: undefined reference topwrdm_read_pwrst' /local/linux-3.0/arch/arm/mach-omap2/pm.c:127: undefined reference topwrdm_read_pwrst' /local/linux-3.0/arch/arm/mach-omap2/pm.c:133: undefined reference topwrdm_wait_transition' /local/linux-3.0/arch/arm/mach-omap2/pm.c:138: undefined reference topwrdm_set_next_pwrst' /local/linux-3.0/arch/arm/mach-omap2/pm.c:153: undefined reference topwrdm_set_lowpwrstchange' /local/linux-3.0/arch/arm/mach-omap2/pm.c:159: undefined reference topwrdm_wait_transition' /local/linux-3.0/arch/arm/mach-omap2/pm.c:160: undefined reference topwrdm_state_switch'arch/arm/mach-omap2/built-in.o: In function `omap_hwmod_get_context_loss_count':
/local/linux-3.0/arch/arm/mach-omap2/omap_hwmod.c:2638: undefined reference topwrdm_get_context_loss_count' arch/arm/mach-omap2/built-in.o: In function_clkdm_clk_hwmod_disable':
/local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:895: undefined reference topwrdm_clkdm_state_switch' arch/arm/mach-omap2/built-in.o: In functionclkdm_allow_idle':
/local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:786: undefined reference topwrdm_clkdm_state_switch' arch/arm/mach-omap2/built-in.o: In function_clkdm_clk_hwmod_enable':
/local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:869: undefined reference topwrdm_wait_transition' /local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:870: undefined reference topwrdm_clkdm_state_switch'arch/arm/mach-omap2/built-in.o: In function `_clkdm_register':
/local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:79: undefined reference topwrdm_lookup' /local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:93: undefined reference topwrdm_add_clkdm'arch/arm/mach-omap2/built-in.o: In function `omap2_clk_disable_unused':
/local/linux-3.0/arch/arm/mach-omap2/clock.c:442: undefined reference topwrdm_clkdm_state_switch' arch/arm/mach-omap2/built-in.o: In functionomap2_init_common_infrastructure':
/local/linux-3.0/arch/arm/mach-omap2/io.c:355: undefined reference toomap3xxx_voltagedomains_init' /local/linux-3.0/arch/arm/mach-omap2/io.c:356: undefined reference toomap3xxx_powerdomains_init'Quoted 2 lines
Any ideas? I'd like to keep my changes to the kernel to a minimum,
Sounds like there should be empty functions for the prdm_* functions in this case. Kevin might have some patches to fix this already.
Regards,
Tony
Signature · 4 lines
------------------------------------------------------------ Gary Thomas | Consulting for the MLB Associates | Embedded world ------------------------------------------------------------
Quoted 10 lines · Gary Thomas
This will be a bit more of a change than just another PMIC since this device isn't much of a power manager (other than at the very lowest level to handle power up sequencing, etc). It's good to hear that it _should_ work and I look forward to ideas on how to _make_ it work.
For now, I've left PM and REGULATOR enabled so I can at least build the kernel and with just a few changes, I can get the kernel to boot to a prompt. I do need to work out the uglyness of what I've had to do though :-)
You might still want to have CONFIG_PM on since it's more about things like turning off clocks when they are no longer used and is suspend to RAM prerequisite. REGULATOR also doesn't imply PMIC, it has things like always-on or GPIO controlled power sources. I think you want to disable CONFIG_TWL4030_CORE that's the actual PMIC core driver that all it's subchip drivers depend on.
Signature · 5 lines
Gražvydas -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 6 lines · Gary Thomas
I have an OMAP3530 (DM3730) board which uses a very simple power controller (TPS65910A1). This controller does not support many of the power supplies, etc, that are common on the TWL4030 and similar devices.
I'm using Linux 3.0.
Can you try what you want with current linux-omap master? I think I have fixed any assumptions about the presence of the TWL PMICs, at least from the voltage layer init.
Quoted 3 lines
How can I remove the reliance on the
TWL devices? Simply disabling PM in my configuration isn't enough - that generates a bunch of undefined references.
CONFIG_PM is about lots more stuff than PMICs. All the SoC-internal power management (power domains, clocks, CPUidle, etc.) are controlled by that as well.
Quoted 3 lines
Also, there are many places where power supply stuff is accessed, outside of PM, in particular DSS2 which has a terrible time.
Does CONFIG_REGULATOR_DUMMY help here? I believe that is for cases like this where you don't want the regulator request to fail.
Quoted 23 lines
Here's what I get when I disabled PM and
REGULATOR support:
arch/arm/mach-omap2/built-in.o: In function `omap_set_pwrdm_state':
/local/linux-3.0/arch/arm/mach-omap2/pm.c:122: undefined reference topwrdm_read_next_pwrst' /local/linux-3.0/arch/arm/mach-omap2/pm.c:126: undefined reference topwrdm_read_pwrst' /local/linux-3.0/arch/arm/mach-omap2/pm.c:127: undefined reference topwrdm_read_pwrst' /local/linux-3.0/arch/arm/mach-omap2/pm.c:133: undefined reference topwrdm_wait_transition' /local/linux-3.0/arch/arm/mach-omap2/pm.c:138: undefined reference topwrdm_set_next_pwrst' /local/linux-3.0/arch/arm/mach-omap2/pm.c:153: undefined reference topwrdm_set_lowpwrstchange' /local/linux-3.0/arch/arm/mach-omap2/pm.c:159: undefined reference topwrdm_wait_transition' /local/linux-3.0/arch/arm/mach-omap2/pm.c:160: undefined reference topwrdm_state_switch'
arch/arm/mach-omap2/built-in.o: In function `omap_hwmod_get_context_loss_count':
/local/linux-3.0/arch/arm/mach-omap2/omap_hwmod.c:2638: undefined reference topwrdm_get_context_loss_count' arch/arm/mach-omap2/built-in.o: In function_clkdm_clk_hwmod_disable':
/local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:895: undefined reference topwrdm_clkdm_state_switch' arch/arm/mach-omap2/built-in.o: In functionclkdm_allow_idle':
/local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:786: undefined reference topwrdm_clkdm_state_switch' arch/arm/mach-omap2/built-in.o: In function_clkdm_clk_hwmod_enable':
/local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:869: undefined reference topwrdm_wait_transition' /local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:870: undefined reference topwrdm_clkdm_state_switch'
Quoted 8 lines
arch/arm/mach-omap2/built-in.o: In function `_clkdm_register':
/local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:79: undefined reference topwrdm_lookup' /local/linux-3.0/arch/arm/mach-omap2/clockdomain.c:93: undefined reference topwrdm_add_clkdm'arch/arm/mach-omap2/built-in.o: In function `omap2_clk_disable_unused':
/local/linux-3.0/arch/arm/mach-omap2/clock.c:442: undefined reference topwrdm_clkdm_state_switch' arch/arm/mach-omap2/built-in.o: In functionomap2_init_common_infrastructure':
/local/linux-3.0/arch/arm/mach-omap2/io.c:355: undefined reference toomap3xxx_voltagedomains_init' /local/linux-3.0/arch/arm/mach-omap2/io.c:356: undefined reference toomap3xxx_powerdomains_init'
Can you be specific about what .config changes (compared to omap2plus_defconfig) result in these warnings?
I thought we fixed these a while ago too. Does this happen on newer kernels?
Kevin