My team and I are looking into the feasibility of shutting down one of the cores on our dual-core i.MX6 processor to reduce current consumption and thermal output.
I’ve been using the i.MX6DQ Reference Manual (Rev 2) as my main source of information. From searching through this document, it is my understanding that the two cores share the same clock (PLL1) and voltage rail (VDD_ARM_IN) and the only way to control their state is through the System Reset Control Register (SRC_SCR register 0x020D8000) shown in section 60.7.1. This register appears to have the ability to reset and enable/disable individual cores, expect for core0 which cannot be disabled. I don’t see anything else in the document related to disabling cores.
The OS we are using has an option to run on one or two cores. I have verified that changing this option in the OS changes the respective bit (bit 22: core1_enable) in the SRC_SCR register. I’ve also noticed little to no change in current when running on one core instead of two. The change in current was on the order of ~50 µA and which could have been caused by other variables in the system. In section 12.3.1, I see that the ‘POWER_DOMAIN_WRAPPER’ defined as ‘Wrappers to support power off of individual cores’ is not selected for the Cortex-A9 configuration. Does this mean that we cannot gate power to individual cores (i.e. cut power to the silicon of the second core)?
Unless I’m missing something, I’m inclined to think that disabling a core does not necessarily correspond to decreased current consumption and thermal output.
The questions my team has are:
Any input is appreciated!
Thank you,
Adam
Solved! Go to Solution.
Hi Adam
1. yes
2. clock is not applied to core. Power may be cut for whole
Cortex-A9 Core Platform and this is described in sect.10.4.1.4.3.1 Cortex-A9
Core Platform, Power Gating Domain Management IMX6DQRM
3. yes
5. I believe one can also look at attached Linux Manual Chapters 16-20.
Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------
Hi Igor,
Thanks for the answers to Adam's initial post. They were very helpful! I have a few follow-up questions for you related to power management on the i.MX6:
I have provided screenshots of the two sections referenced above for your convenience.
Thank you,
Scott
Hi Scott
as you correctly noted with reference to RM sect.12.3.1
power off individual cores is not supported by i.MX6.
>When an individual core is disabled through the SRC_SCR Control Register (0x020D8000),
>I see a reduction in dynamic power (when apps are running), but not static power (while in
>it's WAIT/idle state). Is this expected?
Yes.
Best regards
igor
Hi Igor,
Thanks for the information. Does Freescale have an estimate of how much static power is consumed by each individual core?
If it is significant (more than just a few mW), we may be forced to switch from an i.MX6 Dual to a Solo for our project.
Thank you,
Scott
Hi Scott;
Any updates on this? Have you figured out how to disable power to one of the cores?
I have already designed and developed using the Dual but would like to cut power further also.
Did you go with the Solo?
Thanks!
Brent
Hi Brent,
The terminology here appears to be key. Typically, when people hear 'shutting down a core', they tend to think of de-clocking it. Even though a core is de-clocked, it still draws static power and I have been unable to get an estimate of how much this is. This post specifically relates to cutting power to an individual core so it is consuming absolutely no power.
To answer your questions:
1) I don't believe you can disable power to an indivudual core due to Freescale's implementation of the power domains.
2) Since I am unable to get an estimate of static power consumption, I will likely have to populate a few boards with a Solo to answer my own question which will take time, money, and some SW modification.
Documentation worth looking at (in case you haven't yet):
1) AN4579: i.MX6 Thermal Management Guidelines http://cache.freescale.com/files/32bit/doc/app_note/AN4579.pdf
2) IMX6DQRM Section 10.4.2: Power Management Techniques
This processor can do a lot, but it will take both HW and SW to optimize it... something I am still working through.
I love to be proved wrong so if anyone has additional insight or recommendations, I'm all ears :smileyhappy:
Thanks,
Scott
put the maxcpus in the uboot. And it is linux common technology.
maxcpus=1 maxcpus=n : n >= 0 limits the kernel to
using 'n' processors. n=0 is a special
case. It is equivalent to "nosmp".