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.

[参考译文] AM5728:功耗

Guru**** 2609285 points
Other Parts Discussed in Thread: AM5728

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/653017/am5728-power-consumption

主题中讨论的其他器件:AM5728

大家好。

我正在使用 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?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是哪个 SDK? Linux 还是 RTOS?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Linux
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 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 部分:  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我根据上面的文章进行测试。

    降低 CPU 的频率是可以的、但如果 CPU 以500MHz 运行、则功耗比1GHz 低0.1-0.2W。

    但一个 CPU 失效失败、即使我在内核/SMP.c 中只修复了一个 CPU、Linux 也只显示了一个 CPU、但功耗与两个 CPU 相同。

    现在、我要尝试:
    1.PM_CPU1_PWRSTCTRL[1:0]电源状态位字段更改为0x0 (关闭状态)
    2.PM_CPU1_PWRSTCTRL[7]强制_OFF 位更改为0x1
    清除 CPU 1的辅助控制寄存器(ACTLR)的 SMP 位

    但问题是第3步:
    我不知道如何仅清除 CPU 1的 SMP 位。
    从 infocenter.arm.com/help/index.jsp"、我找到了 MCR、MRC 指令到清除 SMP 位、但我不知道如何选择 CPU 1?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。

    抱歉、来自 omapconf wiki 的最新 omapconf 不支持命令"omapconf show pwst"。

    CPU 是 am5728、它是 dra7xx 系列、omapconf/help_dra7xx.c 内没有 show pwst
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="jinhu Wu"]2.How to ensure that CPU 1 is closed?(如何确保 CPU 1已关闭?) PM_CPU1_PWRSTCTRL = 0x30184意味着 CPU1完全关闭、对吧?[/QUERT]

    同时检查寄存器 PM_CPU1_PWRSTST、位域[1:0] POWERSTATEST 应为0x0