1813190_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

1813190_ja-JP

1813190_ja-JP

iMX8MのCPU周波数を下げる方法

 

一部のアプリケーションではCPU周波数を下げる必要がありますが、当社のBSPやデバイスに慣れていない方は設定の際にサポートが必要かもしれません。

 

この投稿では、iMX8MP、iMX8MN、iMX8MMで低周波数(100MHz、200MHz、400MHz、600MHz、800MHz、1000MHz)を設定するための構成を共有します。

 

注意:カーネル6.1.xxで動作します(最も古いBSPではテストされていません)

 

1- 低い周波数に適切なパラメータを設定するために、PLLドライバーを変更する必要があります。

修正するファイルは「clk-pll14xx.c」です。次の行を追加します:

 

https://github.com/nxp-imx/linux-imx/blob/770c5fe2c1d1529fae21b7043911cd50c6cf087e/drivers/clk/imx/c...

 

static const struct imx_pll14xx_rate_table imx_pll1416x_tbl[] = {

        PLL_1416X_RATE(1800000000U, 225, 3, 0),

        PLL_1416X_RATE(1600000000U, 200, 3, 0),

        PLL_1416X_RATE(1500000000U, 375, 3, 1),

        PLL_1416X_RATE(1400000000U, 350, 3, 1),

        PLL_1416X_RATE(1200000000U, 300, 3, 1),

        PLL_1416X_RATE(1000000000U, 250, 3, 1),

        PLL_1416X_RATE(800000000U, 200, 3, 1),

        PLL_1416X_RATE(750000000U, 250, 2, 2),

        PLL_1416X_RATE(700000000U, 350, 3, 2),

        PLL_1416X_RATE(600000000U, 300, 3, 2),

+ PLL_1416X_RATE(400000000U, 200, 3, 2),

+ PLL_1416X_RATE(200000000U, 200, 3, 3),

+ PLL_1416X_RATE(100000000U, 200, 3, 4),

};

 

2- pllドライバーを変更したら、使用するデバイスに応じてoppテーブルに値を追加するだけです。

 

2.1- iMX 8MPの場合:

 

https://github.com/nxp-imx/linux-imx/blob/lf-6.1.y/arch/arm64/boot/dts/freescale/imx8mp.dtsi

 

     

 a53_opp_table: opp-table {

                compatible = "operating-points-v2";

                opp-shared;

 

+ opp-100000000 {

+ opp-hz = /bits/ 64 <100000000>;

+ opp-microvolt = <850000>;

+ opp-supported-hw = <0x8a0>, <0x7>;

+ clock-latency-ns = <150000>;

+ opp-suspend;

+ };

 

+ opp-200000000 {

+ opp-hz = /bits/ 64 <200000000>;

+ opp-microvolt = <850000>;

+ opp-supported-hw = <0x8a0>, <0x7>;

+ clock-latency-ns = <150000>;

+ opp-suspend;

+ };

 

+ opp-400000000 {

+ opp-hz = /bits/ 64 <400000000>;

+ opp-microvolt = <850000>;

+ opp-supported-hw = <0x8a0>, <0x7>;

+ clock-latency-ns = <150000>;

+ opp-suspend;

+ };

 

+ opp-600000000 {

+ opp-hz = /bits/ 64 <600000000>;

+ opp-microvolt = <850000>;

+ opp-supported-hw = <0x8a0>, <0x7>;

+ clock-latency-ns = <150000>;

+ opp-suspend;

+ };

 

+ opp-800000000 {

+ opp-hz = /bits/ 64 <800000000>;

+ opp-microvolt = <850000>;

+ opp-supported-hw = <0x8a0>, <0x7>;

+ clock-latency-ns = <150000>;

+ opp-suspend;

+ };

 

+ opp-1000000000 {

+ opp-hz = /bits/ 64 <1000000000>;

+ opp-microvolt = <850000>;

+ opp-supported-hw = <0x8a0>, <0x7>;

+ clock-latency-ns = <150000>;

+ opp-suspend;

+ };

 

                opp-1200000000 {

                        opp-hz = /bits/ 64 <1200000000>;

 

2.2 iMX8MMの場合:

 

https://github.com/nxp-imx/linux-imx/blob/lf-6.1.y/arch/arm64/boot/dts/freescale/imx8mm.dtsi

 

 

      a53_opp_table:

                opp-table {

                compatible = "operating-points-v2";

                opp-shared;

 

+ opp-100000000 {

+ opp-hz = /bits/ 64 <100000000>;

+ opp-microvolt = <850000>;

+ opp-supported-hw = <0xe>, <0x7>;

+ clock-latency-ns = <150000>;

+ opp-suspend;

+ };

 

+ opp-200000000 {

+ opp-hz = /bits/ 64 <200000000>;

+ opp-microvolt = <850000>;

+ opp-supported-hw = <0xe>, <0x7>;

+ clock-latency-ns = <150000>;

+ opp-suspend;

+ };

 

+ opp-400000000 {

+ opp-hz = /bits/ 64 <400000000>;

+ opp-microvolt = <850000>;

+ opp-supported-hw = <0xe>, <0x7>;

+ clock-latency-ns = <150000>;

+ opp-suspend;

+ };

 

+ opp-600000000 {

+ opp-hz = /bits/ 64 <600000000>;

+ opp-microvolt = <850000>;

+ opp-supported-hw = <0xe>, <0x7>;

+ clock-latency-ns = <150000>;

+ opp-suspend;

+ };

 

+ opp-800000000 {

+ opp-hz = /bits/ 64 <800000000>;

+ opp-microvolt = <850000>;

+ opp-supported-hw = <0xe>, <0x7>;

+ clock-latency-ns = <150000>;

+ opp-suspend;

+ };

 

+ opp-1000000000 {

+ opp-hz = /bits/ 64 <1000000000>;

+ opp-microvolt = <850000>;

+ opp-supported-hw = <0xe>, <0x7>;

+ clock-latency-ns = <150000>;

+ opp-suspend;

+ };

 

                opp-1200000000 {

                        opp-hz = /bits/ 64 <1200000000>;

 

2.3- iMX8MNの場合:

 

https://github.com/nxp-imx/linux-imx/blob/lf-6.1.y/arch/arm64/boot/dts/freescale/imx8mn.dtsi

 

compatible = "operating-points-v2";
 		opp-shared;
 
+                opp-100000000 {
+                        opp-hz = /bits/ 64 <100000000>;
+                        opp-microvolt = <850000>;
+                        opp-supported-hw = <0xb00>, <0x7>;
+                        clock-latency-ns = <150000>;
+                        opp-suspend;
+                };
+
+                opp-200000000 {
+                        opp-hz = /bits/ 64 <200000000>;
+                        opp-microvolt = <850000>;
+                        opp-supported-hw = <0xb00>, <0x7>;
+                        clock-latency-ns = <150000>;
+                        opp-suspend;
+                };
+
+                opp-400000000 {
+                        opp-hz = /bits/ 64 <400000000>;
+                        opp-microvolt = <850000>;
+                        opp-supported-hw = <0xb00>, <0x7>;
+                        clock-latency-ns = <150000>;
+                        opp-suspend;
+                };
+
+                opp-600000000 {
+                        opp-hz = /bits/ 64 <600000000>;
+                        opp-microvolt = <850000>;
+                        opp-supported-hw = <0xb00>, <0x7>;
+                        clock-latency-ns = <150000>;
+                        opp-suspend;
+                };
+
+                opp-800000000 {
+                        opp-hz = /bits/ 64 <800000000>;
+                        opp-microvolt = <850000>;
+                        opp-supported-hw = <0xb00>, <0x7>;
+                        clock-latency-ns = <150000>;
+                        opp-suspend;
+                };
+
+                opp-1000000000 {
+                        opp-hz = /bits/ 64 <1000000000>;
+                        opp-microvolt = <850000>;
+                        opp-supported-hw = <0xb00>, <0x7>;
+                        clock-latency-ns = <150000>;
+                        opp-suspend;
+                };
+
 		opp-1200000000 {
 			opp-hz = /bits/ 64 <1200000000>;
 			opp-microvolt = <850000>;

 

その後、Linuxでの変更点を記録してください。

 

これらのコマンドはシステムおよび現在の設定に関する情報を返します。

 

• カーネルは特定周波数のみに対応するように事前構成されています。現在サポートされている周波数一覧の

入手先:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

 

• 利用可能なスケーリングガバナーを取得するには:

cat /sys/devices/system/cpu/*/cpufreq/scaling_available_governors

 

• 現在のCPU周波数を確認する:

cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_cur_freq

 

周波数は、ガバナーの設定に応じて表示されます。

 

・最大周波数を確認するには:

cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_max_freq

 

・最小周波数を確認するには:

cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_min_freq

 

一定CPU周波数を設定するコマンド:

 

• 最大周波数を使用する:

echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

 

• 現在の周波数を一定周波数として使用する:

echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

 

• 以下2つのコマンドは、スケーリング・ガバナーを指定の周波数に設定します(その周波数がサポートされている場合)。

 

その周波数がサポートされていない場合、サポートされている周波数で最も近いものが使用されます:

 

echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo  > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed

Chavira_0-1708555234422.png
i.MX 8M | i.MX 8M Mini | i.MX 8M NanoLinuxRe: iMX8MのCPU周波数を下げる方法

これは本当に有用で役立つ情報です。

同様の方法を使ってIMX8M CPUで800 MHz、1 GHz、1.5 GHzを有効化しました。

異なる周波数で動作させた場合、消費電力に変化はありましたか?私の方では変化していません。


Tags (1)
No ratings
Version history
Last update:
‎01-05-2026 01:03 AM
Updated by: