大家好。
我正在使用 v03.02.05的 PSDK、并希望降低 CPU 的功耗。
PSDK 的功耗报告仅提供三级运算:标称值、外径值、高电平、对应1GHz、1.176GHz、 1.5GHz 的 CPU 频率。
我想知道 am5728可以设置为低于1GHZ 吗?
PSDK 的内核表示它通过/sys/devices/system/cpu.支持在线热插拔 CPU
am5728的 i 离线 CPU 1、但 功耗相同。
是否可以使 am5728仅运行1个 CPU?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好。
我正在使用 v03.02.05的 PSDK、并希望降低 CPU 的功耗。
PSDK 的功耗报告仅提供三级运算:标称值、外径值、高电平、对应1GHz、1.176GHz、 1.5GHz 的 CPU 频率。
我想知道 am5728可以设置为低于1GHZ 吗?
PSDK 的内核表示它通过/sys/devices/system/cpu.支持在线热插拔 CPU
am5728的 i 离线 CPU 1、但 功耗相同。
是否可以使 am5728仅运行1个 CPU?
[引用 user="jinhu Wu"]我想知道 am5728 可以设置为低于1GHZ 吗? [/报价]
是的、可以。 1GHz 是 OPP_NOM 中支持的最大频率。 您可以在示例500MHz 中使用。
有关更多信息、请参阅以下指针:
processors.wiki.ti.com/.../Linux_Core_Power_Management_User's_Guide_(v4.4)
[引用 user="jinhu Wu"]是否可以使 am5728 仅运行1个 CPU?
是的、只能运行1个 CPU -"单核"模式。 我们有 Dhrystone 基准测试、可以在 signle 内核或双核上运行:
此致、
帕维尔
添加500MHz 操作点的最简单方法是将此代码粘贴到电路板器件树(DTS)文件的末尾。
CPU0_OPP_TABLE{ opp_low@500000000{ opp-Hz =/bits/64 <500000000>; op-microvolt =<1060000 850000 1150000>; opp-supported-HW =<0xFF 0x01>; opp-suspend; }; };
这将允许您的 CPU 根据需要降低到500MHz、并可在 Linux 内通过 cpufreq 驱动程序进行控制。 有关更多详细信息、请参阅此 wiki 的 Linux 部分: 
[引用 user="jinhu Wu"]3.清除 CPU 1的辅助控制寄存器(ACTLR)的 SMP 位
但问题是第3步:
我不知道如何仅清除 CPU 1的 SMP 位。
从"infocenter.arm.com/help/index.jsp"、我找到了 MCR、MRC 指令到清除 SMP 位、但我不知道如何选择 CPU 1?
关于对 ACTLR 寄存器 SMP 位的控制、请参考以下指针:
u-boot/arch/arm/cpU/armv7/psci.S
u-boot/arch/arm/include/asm/armv7.h
Linux-kernel/arch/arm/mach-omap2/sleep44xx.S
linux-kernel/arch/arm/mach-omap2/omap-smp.c
此致、
帕维尔
感谢您的回复。
我尝试执行以下步骤来取消 CPU 1、但它似乎失败了。
1.U-boot、关闭 CPU 1的电源并清除 ACTLR.SMP 位
文件:u-boot/arch/arm/cpU/armv7/omap5/hwinit
函数:DIO_SETTINGS、并在函数开头添加以下代码
无符号 pwr_CPU1_addr = 0x48243800;//PM_CPU1_PWRSTCTRL
unsigned pwr_cpu1_state = readl (pwr_cpu1_addr);
PWR_CPU1_STstate = pwr_CPU1_state &(~(0x3));//PM_CPU1_PWRSTCTRL[1:0]电源状态位字段更改为0x0 (关闭状态)
PWR_CPU1_state = pwr_CPU1_state |((0x1)<< 7);//PM_CPU1_PWRSTCTRL[7]强制_OFF 位更改为0x1
writel (pwr_cpu1_state、pwr_cpu1_addr);
//clear ACTLR.SMP 位
uint32_t temp、val;
/*读取辅助控制寄存器*/
asm volatile ("MRC P15、0、%0、c1、c0、 1\n\t":"=r"(val);
/*禁用 SMP */
Val &=~(1 << 6);
/*写入辅助控制寄存器*/
ASM volatile ("mcr p15、0、%0、c1、c0、 1\n\t":"r"(val);
CP15DSB;
CP15ISB;
2.内核
(1)禁用内核功能->对称多处理意味着只支持一个 CPU、对吧?
(2)文件:kernel/arch/arm/mach-omap2/clockdomains7xx_data.c、kernel/arch/arm/mach-omap2/powerdomains7xx_data.c
删除 CPU1_7xx_clkdm 和 CPU1_7xx_pwrdm。
(3)在 NFS 控制台上读取 PM_CPU1_PWRSTCTRL、值为0x30184、这意味着 CPU1的功率完全关闭、对吧?
但实际情况是:
我的电路板的电源电压为15V、并测量来自电源的电流。
对于双核:
如果 CPU 为1.5GHz (OP_HIGH)、则电流约为2.22A
如果 CPU 为1.176GHz (OP_OD)、则电流约为2.18A
如果 CPU 为1GHz (OP_NOM)、则电流约为2.18A
如果 CPU 为500MHz (OP_NOM)、则电流约为2.13A
对于单核:仅测试500MHz
电流约为2.13A、与双核电流相同。
问题:
1.我的流程是正确的? 还是有问题?
2.如何确保 CPU 1已关闭? PM_CPU1_PWRSTCTRL = 0x30184表示 CPU1完全关闭、对吧?
3.Dhrystone 单核 AM57x 散热注意事项、它使用 am571x 或 am572x? 如果使用 am572x、则设置为在测试时关闭 CPU1以降低功耗。
您好、Jinhu、
坦率地说、大多数功耗都在内核域中。 它包括存储器控制器、SoC 互连和 SoC 外设。 因此、与 MPU 中的少数晶体管相比、有一个晶体管湖消耗更多的功率。 检查 SoC 中未使用的外设将更好地节省您的时间。
使用 omapconf 工具调试 SoC 内部电源和时钟域的电源状态。 这是 omapconf wiki。
从以下命令开始:
omapconf show pwst
让我知道它是怎么发展的!
PS:我不认为我们禁用单核 Dhrystone 中的第二个内核。 没有机制可以独立于第一个内核禁用到第二个内核的电源和时钟。 因此、您将不会看到 OS IDLE 和 CORE DISABLED 状态之间的功耗降低。
此致、
Ahmad