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.
我们有一个使用 AM3351的板。 我们已成功配置 u-boot 和 Arago Linux。 我们将使用 03.00.00.04 SDK。
我们正在寻找 CPU 频率的确认方法、以及设置频率的方法。
我在其他论坛帖子中发现、您可以在此处看到 CPU 频率:
我知道 BogoMips 应该大致等于 MHz、对吗?
根据内核配置、cpufreq 看起来被启用:
[*] CPU 频率缩放││
││<*> CPU 频率转换统计信息││
││[*] CPU 频率转换统计信息详细信息││
││默认 cpufreq 调节器(按需)-->││
││-*-“性能”调速器││
││<*>"powersave"调节器││
││<*>用于用户空间频率缩放的'userspace'调节器││
││-*-“点播”cpufreq 政策总监││
││<*>“保守”cpufreq 调节器││
││*** CPU 频率调节驱动器***││
││<*>基于通用 DT 的 cpufreq 驱动程序││
││[] TI OMAP2+││
││<*>德州仪器(TI) cpufreq 支持││
││<>用于 Freescale QorIQ SoC 的 CPU 频率调节驱动器
但我看不到
/sys/devices/system/cpu/cpu0/cpufreq/
文件夹。
有什么建议吗? 我们是否需要在器件树中提供特定的功能才能使其正常工作?
谢谢、
Tim
感谢您的回复、我们正在使用该配置、我之前已经查看过这些链接。 从原始帖子中可以看出、在内核配置中启用了 cpufreq、但由于某种原因、路径不存在。
Tim、
检查您的 Linux-4.4.4.12/.config 文件、确保它具有以下选项:
编号
# CPU 频率缩放
编号
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_GOV_common=y
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ_STAT_Details=y
未设置# CONFIG_CPU_FREQ_DEFAULT_GOV_performance
未设置# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE
未设置# CONFIG_CPU_FREQ_DEFAULT_GOV_userspace
CONFIG_CPU_FREQ_DEFAULT_GOV_OnDemand=y
未设置# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSTICATION
CONFIG_CPU_FREQ_GOV_performance=y
CONFIG_CPU_FREQ_GOV_POWERSAVe=y
CONFIG_CPU_FREQ_GOV_userspace=y
CONFIG_CPU_FREQ_GOV_OnDemand=y
CONFIG_CPU_FREQ_GOV_保守= y
编号
#个 CPU 频率调节驱动器
编号
CONFIG_cpufreq_DT=y
未设置# CONFIG_ARM_Kirkwood_cpufreq
未设置# CONFIG_ARM_OMAP2PLUS_cpufreq
CONFIG_ARM_TI_cpufreq=y
未设置# CONFIG_QorIQ_cpufreq
此外、在 DTS 文件中、请确保您具有 AM335x TI EVM DTS 文件 am33xx.dtsi 中定义的 opp 表
CPU{
#address-cells =<1>;
#size-cells =<0>;
CPU@0{
兼容="arm、cortex-A8";
enable-method ="ti、am3352";
DEVICE_TYPE ="CPU";
reg =<0>;
运行点-v2 =<&CPU0_opp_table>;
TI、SYSCON-efuse =<&SCM_conf 0x7fc 0x1fff 0>;
TI、SYSCON-rev =<&SCM_conf 0x600>;
时钟=<&DPLL_MPU_ck >;
时钟名称="cpu";
时钟延迟=<300000>;/*来自 OMAP-cpufreq 驱动程序*/
CPU 空闲状态=<&MPU_GATE;
};
空闲状态{
MPU_GATE:MPU_GATE{
兼容="arm、idle-state";
entry-latere-us =<40>;
exit-latite-us =<90>;
最小居住时间-us =<300>;
ti、idle-wkup-m3;
};
};
};
CPU0_opp_table:opp_table0{
兼容="操作点-v2";
/*
*以下三个节点标有 opp-suspend
因为不能在上同时启用
*单个 SoC。
*
50@300000000{
opp-Hz =/bits/64 <300000000>;
op-microvolt =<950000 931000 96900000>;
opp-supported-HW =<0x06 0x0010>;
opp-suspend;
};
opp100@275000000{
opp-Hz =/bits/64 <275000000>;
op-microvolt =<1100000 1078000 1122000>;
opp-supported-HW =<0x01 0x00FF>;
opp-suspend;
};
opp100@300000000{
opp-Hz =/bits/64 <300000000>;
op-microvolt =<1100000 1078000 1122000>;
opp-supported-HW =<0x06 0x0020>;
opp-suspend;
};
opp100@500000000{
opp-Hz =/bits/64 <500000000>;
op-microvolt =<1100000 1078000 1122000>;
opp-supported-HW =<0x01 0xFFF>;
};
opp100@600000000{
opp-Hz =/bits/64 <6000000000000>;
op-microvolt =<1100000 1078000 1122000>;
opp-supported-HW =<0x06 0x0040>;
};
opp120@600000000{
opp-Hz =/bits/64 <6000000000000>;
op-microvolt =<1200000 1176000 1224000>;
opp-supported-HW =<0x01 0xFFF>;
};
120@720000000{
opp-Hz =/bits/64 <720000000>;
op-microvolt =<1200000 1176000 1224000>;
opp-supported-HW =<0x06 0x0080>;
};
涡轮增压器@720000000{
opp-Hz =/bits/64 <720000000>;
op-microvolt =<1260000 1234800 1285200>;
opp-supported-HW =<0x01 0xFFF>;
};
涡轮增压器@800000000{
opp-Hz =/bits/64 <80000000000>;
op-microvolt =<1260000 1234800 1285200>;
opp-supported-HW =<0x06 0x0100>;
};
硝基平@1000000000{
opp-Hz =/bits/64 <1000000000>;
op-microvolt =<1325000 1298500 1351500>;
opp-supported-HW =<0x04 0x0200>;
};
};
PMU{
兼容="arm、cortex-A8-PMU";
中断=<3>;
};
此致、
帕维尔
你(们)好。
感谢您的回复。 以下是 dtsi 文件的相关部分:
CPU{ | |
#address-cells =<1>; | |
#size-cells =<0>; | |
CPU@0{ | |
兼容="arm、cortex-A8"; | |
enable-method ="ti、am3352"; | |
DEVICE_TYPE ="CPU"; | |
reg =<0>; | |
运行点-v2 =<&CPU0_opp_table>; | |
TI、SYSCON-efuse =<&SCM_conf 0x7fc 0x1fff 0>; | |
TI、SYSCON-rev =<&SCM_conf 0x600>; | |
时钟=<&DPLL_MPU_ck >; | |
时钟名称="cpu"; | |
时钟延迟=<300000>;/*来自 OMAP-cpufreq 驱动程序*/ | |
CPU 空闲状态=<&MPU_GATE; | |
}; | |
空闲状态{ | |
MPU_GATE:MPU_GATE{ | |
兼容="arm、idle-state"; | |
entry-latere-us =<40>; | |
exit-latite-us =<90>; | |
最小居住时间-us =<300>; | |
ti、idle-wkup-m3; | |
}; | |
}; | |
}; | |
CPU0_opp_table:opp_table0{ | |
兼容="操作点-v2"; | |
/* | |
*以下三个节点标有 opp-suspend | |
因为不能在上同时启用 | |
*单个 SoC。 | |
* | |
50@300000000{ | |
opp-Hz =/bits/64 <300000000>; | |
op-microvolt =<950000 931000 96900000>; | |
opp-supported-HW =<0x06 0x0010>; | |
opp-suspend; | |
}; | |
opp100@275000000{ | |
opp-Hz =/bits/64 <275000000>; | |
op-microvolt =<1100000 1078000 1122000>; | |
opp-supported-HW =<0x01 0x00FF>; | |
opp-suspend; | |
}; | |
opp100@300000000{ | |
opp-Hz =/bits/64 <300000000>; | |
op-microvolt =<1100000 1078000 1122000>; | |
opp-supported-HW =<0x06 0x0020>; | |
opp-suspend; | |
}; | |
opp100@500000000{ | |
opp-Hz =/bits/64 <500000000>; | |
op-microvolt =<1100000 1078000 1122000>; | |
opp-supported-HW =<0x01 0xFFF>; | |
}; | |
opp100@600000000{ | |
opp-Hz =/bits/64 <6000000000000>; | |
op-microvolt =<1100000 1078000 1122000>; | |
opp-supported-HW =<0x06 0x0040>; | |
}; | |
opp120@600000000{ | |
opp-Hz =/bits/64 <6000000000000>; | |
op-microvolt =<1200000 1176000 1224000>; | |
opp-supported-HW =<0x01 0xFFF>; | |
}; | |
120@720000000{ | |
opp-Hz =/bits/64 <720000000>; | |
op-microvolt =<1200000 1176000 1224000>; | |
opp-supported-HW =<0x06 0x0080>; | |
}; | |
涡轮增压器@720000000{ | |
opp-Hz =/bits/64 <720000000>; | |
op-microvolt =<1260000 1234800 1285200>; | |
opp-supported-HW =<0x01 0xFFF>; | |
}; | |
涡轮增压器@800000000{ | |
opp-Hz =/bits/64 <80000000000>; | |
op-microvolt =<1260000 1234800 1285200>; | |
opp-supported-HW =<0x06 0x0100>; | |
}; | |
硝基平@1000000000{ | |
opp-Hz =/bits/64 <1000000000>; | |
op-microvolt =<1325000 1298500 1351500>; | |
opp-supported-HW =<0x04 0x0200>; | |
}; | |
}; |
这似乎与您建议的内容相同。 它也包含在我们的 DTS 文件中:"#include "am33xx.dtsi"
下面是我们配置文件的相关部分:
编号 | |
# CPU 频率缩放 | |
编号 | |
CONFIG_CPU_FREQ=y | |
CONFIG_CPU_FREQ_GOV_common=y | |
CONFIG_CPU_FREQ_STAT=y | |
CONFIG_CPU_FREQ_STAT_Details=y | |
未设置# CONFIG_CPU_FREQ_DEFAULT_GOV_performance | |
未设置# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE | |
未设置# CONFIG_CPU_FREQ_DEFAULT_GOV_userspace | |
CONFIG_CPU_FREQ_DEFAULT_GOV_OnDemand=y | |
未设置# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSTICATION | |
CONFIG_CPU_FREQ_GOV_performance=y | |
CONFIG_CPU_FREQ_GOV_POWERSAVe=y | |
CONFIG_CPU_FREQ_GOV_userspace=y | |
CONFIG_CPU_FREQ_GOV_OnDemand=y | |
CONFIG_CPU_FREQ_GOV_保守= y | |
编号 | |
#个 CPU 频率调节驱动器 | |
编号 | |
CONFIG_cpufreq_DT=y | |
未设置# CONFIG_ARM_Kirkwood_cpufreq | |
未设置# CONFIG_ARM_OMAP2PLUS_cpufreq | |
CONFIG_ARM_TI_cpufreq=y | |
未设置# CONFIG_QorIQ_cpufreq |
这似乎也是您建议的。
还有其他想法/建议吗? 提前感谢您的参与。
您好、Pavel、
感谢您的回复。 我已经查看了主题帖。 在第二个线程中、请注意应存在以下选项:
CONFIG_generic_cpufreq_cpu0=y
但您之前的答复中没有这种情况。 您能否确认我在几篇文章之前发布的内核配置选项都是必需的?
在第三个线程中、我发现:
"cpufreq"依赖于稳压器框架来改变电压。 反过来、稳压器框架使用 I2C0与 PMIC 通信。 在电路板上、您是否将 I2C0连接到 PMIC? 内核配置中是否启用了 I2C0、以及引脚多路复用是否正确?
我不确定我们是否有 PMIC。 我将与硬件工程师核实这一点。
我已附加请求的引导日志。
编辑:我们使用 的是 AM3351BZCE60、哪一个应该能够处理600Mhz?
[引用用户="Tim Elmore "]
感谢您的回复。 我已经查看了主题帖。 在第二个线程中、请注意应存在以下选项:
CONFIG_generic_cpufreq_cpu0=y
但您之前的答复中没有这种情况。 您能否确认我在几篇文章之前发布的内核配置选项都是必需的?
[/报价]
此选项对旧版内核(3.x)和 SDK 有效。 内核4.4.4.12没有此类选项。 您的内核配置选项看起来是正确的。
[引用用户="Tim Elmore "]
"cpufreq"依赖于稳压器框架来改变电压。 反过来、稳压器框架使用 I2C0与 PMIC 通信。 在电路板上、您是否将 I2C0连接到 PMIC? 内核配置中是否启用了 I2C0、以及引脚多路复用是否正确?
我不确定我们是否有 PMIC。 我将与硬件工程师核实这一点。
[/报价]
是的、问题可能出在 PMIC (或缺少 PMIC)。 在 TPS65910随附的 AM335x EVM 上、我们具有以下引导日志以及 PSDK 3.00.00.04中预构建的 zImage
[1.959123] tps65910 0-002D:无中断支持、无内核 IRQ
[1.988005] OMAP-i2c 44e0b000。i2c:400kHz 时的总线0 rev0.11
[1.995859] omap_i2c 4802a000.i2c:100kHz 时的总线1 rev0.11
[2.002424] omap_hsmmc 48060000.mmc:获得 CD GPIO
[2.007508] VMMC:由 VBAT 供电
[2.049688] VDD_MPU:由 VBAT 供电
启动后、我们将:
AM335x-EVM 登录:root
根目录@AM335x-EVM:~# CD /sys/devices/system/cpu/cpu0/cpufreq
root@AM335x-EVM:/sys/devices/system/cpu/cpu0/cpufreq ls
受影响的 CPU cpuinfo_min_freq scaling_available 频率 scaling_driver scaling_min_freq
cpuinfo_cur_freq cpuinfo_translation_lency scaling_available 调节 器 scaling_governor scaling_setspeed
cpuinfo_max_freq 相关 CPU scaling_cur_freq scaling_max_freq 统计信息
root@AM335x-EVM:/sys/devices/system/cpu/cpu0/cpufreq
[报价用户="Tim Elmore "]我们使用 的是 AM3351BZCE60、它应该能够达到600Mhz?[/quot]
是的、此器件支持600MHz Cortex-A8
确保您的电路板上还安装了 sysfs。
此致、
摊铺
感谢您的回复。 因此、在我们的当前电路板上、cpufreq 似乎不是一个选项。
CPU 频率在哪里设置? 我在 u-boot 中看到电子保险丝被检查的位置:
[引用用户="Tim Elmore ]*因此我拉了 CM_CLKSEL_DPLL_MPU 寄存器(0x44E0042c)
它产生了:
0x00012C17
它乘以300、除数为24、输入时钟为24、因此时钟速度为300MHz。[/引用]
Tim、
您能否提供以下寄存器值:
DEVICE_ID/0x44E10600
CONTRAL_STATUS/0x44E10040
CM_IDLEST_DPLL_MPU/0x44E00420
CM_CLKMODE_DPLL_MPU/0x44E00488
CM_DIV_M2_DPLL_MPU/0x44E004A8
您可以使用 MD 命令从 u-boot 提示符中获取这些值、例如:
按空格键可在2秒钟内中止自动引导
=> MD 0x44E10600 1
44e10600:0b94402e @……
在 AM335x EVM 1.4a 版本上、我具有以下值:
DEVICE_ID[31:28] DEVREV = 0 -器件版本1.0
CONTRAL_STATUS[23:22] sysboot1 = 0x1 - 24MHz CLK_M_OSC
CM_CLKSEL_DPLL_MPU = 0x0002D017
CM_IDLEST_DPLL_MPU = 0x00000001
CM_CLKMODE_DPLL_MPU = 0x00000007
CM_DIV_M2_DPLL_MPU = 0x00000201 (M2 = 1)
因此、Cortex-A8具有720MHz。
AM335x_get_efuse_mpu_max_freq ()返回 MPUPLL_M_720、因为我在 AM335x EVM 1.4a 版:XAM3359ZCZ 上有 PG 1.0 (器件修订版1.0)器件
此致、
帕维尔
[引用用户="Tim Elmore "]
CPU 频率在哪里设置? 我在 u-boot 中看到电子保险丝被检查的位置:
[/报价]
因此 AM335x_get_efuse_mpu_max_freq ()返回 MPUPLL_M_600、这在您的情况下是正确的- AM3351BZCE60器件。 然后、我认为由于缺少 PMIC、u-boot 无法设置这个600MHz。
您的板级配置文件是什么? 在 AM335x EVM 上、板级配置文件为:
u-boot-2016.05/board/ti/AM335x/board.c
/*获取频率*/
DPLL_MPU_opp100.m = AM335x_get_efuse_MPU_max_freq (cdev);//此处为 MPUPLL_M_600
.
否则{
int sil_rev;
/*
* GP EVM、IDK 和 EVM SK 使用 TPS65910 PMIC。 为所有人提供服务
*我们支持的 MPU 频率我们使用的内核电压
* 1.1375V。 对于 MPU 电压、我们需要根据进行切换
*运行频率。
*
IF (i2c_probe (TPS65910_CTRL_I2C_ADDR))
返回;
/*
*根据 MPU 时钟和 PG 的不同、我们将需要不同的时钟
* VDD 以该速度驱动。
*
SIL_rev = readl (&cdev->deviceid)>> 28;
MPU_VDD = AM335x_get_tps65910_MPU_VDD (sil_rev、
DPLL_MPU_opp100.m);
/*告诉 TPS65910使用 i2c */
tps65910_set_i2c_control();
/*首次更新 MPU 电压。 *
IF (tps65910_VOLTAGE_UPDATE (MPU、MPU_VDD))
返回;
/*第二,更新内核电压。 *
IF (tps65910_VOLTAGE_UPDATE (内核、TPS65910_OP_REG_SEL_1_1_3))
返回;
/*将核心频率设置为 OPP100 */
do_setup_DPLL (&DPLL_CORE_reg、&DPLL_CORE_opp100);
}
/*将 MPU 频率设置为我们现在检测到的值,此时电压已设置*/
do_setup_DPLL (&DPLL_MPU_regs、&DPLL_MPU_opp100);
如您所见、设置这些600MHz 的代码取决于 PMIC。 另请注意、要设置600MHz (OPP100)、VDD_MPU 和 VDD_CORE 应处于1.1V、而对于300MHz (OPP50)、它们应处于0.95V。 您也可以检查那里的电压。
此致、
帕维尔
Brad、您好、感谢您的回复。 我已连接这些命令的输出、它似乎也指示300MHz。
感谢您的回复-这很有帮助!
我们使用 u-boot-2016.05/board/ti/AM335x/board.c
我已确认我们将为 VDD_CORE 提供1.1V 电压。 在不使用 PMIC 的情况下、修改 board.c 以设置600Mhz 的建议方法是什么?
或者、如果有一种方法可以在引导后更改时钟速度、这也是可以接受的。 启动后只需要600Mhz。
Tim、
您是否还可以在 u-boot 提示符下(使用 MD 命令获取)确认 CM_CLKSEL_DPLL_MPU 中具有0x00012C17值?
[报价用户="Tim Elmore "]我已确认、我们将为 VDD_CORE 提供1.1V 电压[/quot]
确保您符合 AM335x 数据表中有关上电序列的要求、请参阅第6.1节"电源"
[引用 user="Tim Elmore "]我们使用的是 u-boot-2016.05/board/ti/AM335x/board.c.
[引用用户="Tim Elmore "]修改 board.c 以在不使用 PMIC 的情况下设置600Mhz 的建议方法是什么?[/quot]
您的定制板基于哪个板(EVM、SK、BBB)? 在 am33xx_spl_board_init()中,在哪种情况下,您的流程会发生,在(board_is_Bone ()|board_is_Bon_lt())或"else"中?
TI EVM 属于"其他"情况、因此我假设您也是如此。 您能否检查(使用 printf 或 CCS 断点) i2c_probe (TPS65910_CTRL_I2C_ADDR)函数的结果。 您可能会返回那里、因此未使用正确的设置配置 MPU DPLL。 确保执行 do_setup_DPLL (&DPLL_MPU_regs、&DPLL_MPU_opp100);
另请注意、我们还有两个用于设置 MPU DPLL 的函数:
u-boot-2016.05/arch/arm/cpU/armv7/am33xx/board.c
am33xx_spl_board_init ()-> do_setup_DPLL (&DPLL_MPU_reg、&DPLL_MPU_opp100);
u-boot-2016.05/arch/arm/cpU/armv7/am33xx/clock.c
setup_dplls ()-> DO_setup_DPLL (&DPLL_MPU_regs、params);
您能否检查这两个 do_setup_DPLL()函数是否也是在您的一侧以及按哪个顺序执行的? 其中一些函数可能会覆盖 u-boot-2016.05/board/ti/AM335x/board.c 文件中的 do_setup_DPLL()函数
[引用 USER="Tim Elmore ]或者、如果有一种方法可以在启动后更改时钟速度、这也是可以接受的。 启动后仅需要600Mhz。
在用户空间中、您可以尝试使用 devmem2工具、该工具可用于在 DPLL_MPU 寄存器中进行读取/写入。 首先解锁 MPU PLL、然后写入新设置、然后再次锁定。 我没有尝试过这种方法、但这可能是您的选择。 检查 TRM 的解锁/锁定顺序是否正确。
您还可以尝试使用时钟框架从 Linux 内核更改 MPU 时钟频率:
此致、
帕维尔
您好、Pavel、
感谢所有的帮助-解决了这个问题。 由于在对 PMIC 进行 i2c 检查后返回、未设置时钟。 因此、我修改了代码以在返回之前设置时钟、因为在我们的情况下、我们始终以600Mhz 运行、并提供正确的电压。
再次感谢您的帮助。