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.

[参考译文] AM3358:更改 AM3358的 CPU 频率

Guru**** 2541610 points
Other Parts Discussed in Thread: AM3358, TPS65218

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1380293/am3358-change-cpu-frequency-of-am3358

器件型号:AM3358
Thread 中讨论的其他器件: TPS65218

工具与软件:

我使用的是 AM3358。 并且该项目使用 SDK 6.0.0。
我想更改 CPU 频率以在使用期间进行测试。

但是、cpufreq 在 sysfs 中不可见。

root@AptusLx:/sys/devices/system/cpu/cpu0# ls
crash_notes       of_node           subsystem         uevent
crash_notes_size  power             topology

我记得之前通过 sysfs 更改 CPU 频率了。
但是、AM3358中不存在该接口。
AM3358不支持更改 cpufreq 吗?
如果它可以更改、如何更改?

此致、
南承珉

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

    您好!

    是的、AM3358支持 DVFS。 请确保您的内核已启用 cpufreq 配置。

    SDK 内核 defconfig "tisdk_am335x-evm_defconfig"会启用 cpufreq。

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

    尊敬的 Bin Liu:

    我再次进行了检查、项目使用的是 TI SDK v8.2.0.24。
    我使用的配置是根据 AM335x-EVM 进行修改的。
    我正在连接所使用的配置。 (config.zip (.config))

    e2e.ti.com/.../0537.config.zip

    在此配置中、似乎启用了 cpufreq。

    #
    # CPU 频率缩放
    #
    CONFIG_CPU_FREQ=y
    CONFIG_CPU_FREQ_GOV_ATTR_SET=y
    CONFIG_CPU_FREQ_GOV_COMMON=y
    CONFIG_CPU_FREQ_STAT=y
    CONFIG_CPU_FREQ_DEFAULT_GOV_performance=y
    # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE 未设置
    # CONFIG_CPU_FREQ_DEFAULT_GOV_userspace 未设置
    未设置# CONFIG_CPU_FREQ_DEFAULT_GOV_OnDemand
    未设置# CONFIG_CPU_FREQ_DEFAULT_GOV_CONPROPERTY
    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_PROCOVERY=y


    我是否需要更多地启用其他器件?

    此致、

    南承珉

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

    您好!

    请仔细检查 SDK 内核中的 tisdk_am335x-evm_defconfig、以了解还缺少什么。 例如:

    $ grep 'cpufreq.*=y' arch/arm/configs/tisdk_am335x-evm_defconfig
    CONFIG_cpufreq_DT=y
    CONFIG_cpufreq_DT_PLATDEV=y
    CONFIG_ARM_TI_cpufreq=y

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

    我刚刚检查了您的 config.zip、看来您已经启用了这些选项。

    内核启动日志中是否显示 cpufreq 有任何问题?

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

    尊敬的 Bin Liu:

    感谢您的检查。
    引导日志中没有 cpufreq 错误日志。

    附加的引导日志。

    e2e.ti.com/.../74382.boot.log

    然后我下载

    我从 Git 下载了内核5.10.100。
    网址:Git://git.ti.com/ti-linux-kernel/ti-linux-kernel.git
    但 tisdk_am335x-evm_defconfig 不可见。

    请告诉我可以在哪里检查 tisdk_am335x-evm_defconfig。

    此致、
    南承珉

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

    TISDK_AM335x-evm_defconfig 为内核 defconfig、并在处理器 SDK 的内核源目录中提供:

    https://www.ti.com/tool/PROCESSOR-SDK-AM335X

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

    尊敬的 Bin Liu:

    您是否已查看随附的引导日志?
    我在 defconfig 中找不到任何特定问题。
    是否有任何方法可以进一步启用调试日志或检查其他方法?

    此致、

    南承珉

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    tisdk_am335x-evm_defconfig 是内核 defconfig、并在 Processor SDK 的内核源目录中提供:

    您是否已尝试使用此 defconfig 来构建内核? cpufreq 是否与此 defconfig 一起显示在 sysfs 中?

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

    尊敬的 Bin Liu:

    即使您使用 tisdk_am335x-evm_defconfig 构建内核、sysfs 也不可见。
    在其他情况下是否还需要考虑其他事项?

    在 sysfs 中有一个 cpufreq 文件夹。 但其中没有内容。

    root@AptusLx:~# ls /sys/devices/system/cpu/
    cpu0        cpuidle     kernel_max  offline     possible    present
    cpufreq     isolated    modalias    online      power       uevent
    root@AptusLx:~# ls -al /sys/devices/system/cpu/
    cpu0/       cpuidle/    kernel_max  offline     possible    present
    cpufreq/    isolated    modalias    online      power/      uevent
    root@AptusLx:~# ls -al /sys/devices/system/cpu/cpufreq/
    drwxr-xr-x    2 root     intellia         0 Jan  1 00:05 .
    drwxr-xr-x    6 root     intellia         0 Mar 14  2024 ..

    e2e.ti.com/.../tisdk_5F00_am335x_2D00_evm_5F00_defconfig_5F00_kernel_5F00_log.log

    此致、
    南承珉

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

    尊敬的 Bin Liu:

    为了进行调试、我将调试代码添加到了 cpufreq-dt.c 中、如下所示并进行了检查。

    dev、"FAILED dt_cpufreq_early_init:%d\n"、ret)>


     static int dt_cpufreq_probe(struct platform_device *pdev)
     {
       struct cpufreq_dt_platform_data *data = dev_get_platdata(&pdev->dev);
       int ret, cpu;
    
       dev_info(&pdev->dev, "dt_cpufreq_probe\n");
    
       /* Request resources early so we can return in case of -EPROBE_DEFER */
       for_each_possible_cpu(cpu) {
         ret = dt_cpufreq_early_init(&pdev->dev, cpu);
         if (ret) {
           dev_err(&pdev->dev, "failed dt_cpufreq_early_init : %d\n", ret);
           goto err;
         }
       }
    
       if (data) {
         if (data->have_governor_per_policy)
           dt_cpufreq_driver.flags |= CPUFREQ_HAVE_GOVERNOR_PER_POLICY;
    
         dt_cpufreq_driver.resume = data->resume;
         if (data->suspend)
           dt_cpufreq_driver.suspend = data->suspend;
         if (data->get_intermediate) {
           dt_cpufreq_driver.target_intermediate = data->target_intermediate;
           dt_cpufreq_driver.get_intermediate = data->get_intermediate;
         }
       }
    
       ret = cpufreq_register_driver(&dt_cpufreq_driver);
       if (ret) {
         dev_err(&pdev->dev, "failed register driver: %d\n", ret);
         goto err;
       }
    
       dev_info(&pdev->dev, "dt_cpufreq_probe complete\n");
    
       return 0;
     err:
       dt_cpufreq_release();
       return ret;
     }
    

    dt_cpufreq_early_init 中发生错误、如下所示。

    [    6.014174] ti_cpufreq_probe
    [    6.017228] cpu cpu0: CPU freq dt register
    [    6.021611] cpufreq-dt cpufreq-dt: dt_cpufreq_probe
    [    6.026545] cpufreq-dt cpufreq-dt: failed dt_cpufreq_early_init : -517
    ...
    
    [    7.110192] cpufreq-dt cpufreq-dt: dt_cpufreq_probe
    [    7.115148] cpufreq-dt cpufreq-dt: failed dt_cpufreq_early_init : -517
    [    7.138977] cpufreq-dt cpufreq-dt: dt_cpufreq_probe
    [    7.143985] cpufreq-dt cpufreq-dt: failed dt_cpufreq_early_init : -517
    [    7.150847] cpufreq-dt cpufreq-dt: dt_cpufreq_probe
    [    7.155772] cpufreq-dt cpufreq-dt: failed dt_cpufreq_early_init : -517
    ...
    


    这不是原因吗?

    因此、dt_cpufreq_probe 无法正常工作。
    最后、未执行 dt_cpufreq_probe complete。

    请求您进行检查。

    此致、
    南承珉

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

    您好!

    [报价 userid="611416" url="~/support/processors-group/processors/f/processors-forum/1380293/am3358-change-cpu-frequency-of-am3358/5281344 #5281344"]
    这不是原因吗?

    这可能是原因。

    本周我有一个工作队列、但下周将审核该代码、以了解导致此延迟调查的原因。

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

    尊敬的 Bin Liu:

    您是否曾进行过代码审查?
    我想看看这个问题。
    如果还有其他需要检查的内容、请告知我。

    此致、
    南承珉

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

    尊敬的 Seungmin:

    抱歉、我还没有机会这样做。 我的截止日期是下星期一。 我不会在下周中/晚些时候讨论这个问题。

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

    尊敬的 Bin Liu:

    您是否仍有机会查看此问题?
    我仍然希望解决此问题。

    如果有机会、请查看该应用手册。

    此致、
    南承珉

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

    尊敬的 Seungmin:

    很抱歉我的响应延迟了。

    我刚刚检查了 cpufreq-dt.c 中的函数 dt_cpufreq_early_init ()、它有4个地方可以返回-eprobe_defer (-517)。 您能否在这些位置添加一个 dev_err()来查看哪个函数调用失败?

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

    尊敬的 Bin Liu:

    当我进行检查时、代码下方的位置发生了错误。

       /*
        * OPP layer will be taking care of regulators now, but it needs to know
        * the name of the regulator first.
        */
       reg_name = find_supply_name(cpu_dev);
       if (reg_name) {
         priv->reg_opp_table = dev_pm_opp_set_regulators(cpu_dev,
                     &reg_name, 1);
         if (IS_ERR(priv->reg_opp_table)) {
           ret = PTR_ERR(priv->reg_opp_table);
           if (ret != -EPROBE_DEFER)
             dev_err(cpu_dev, "failed to set regulators: %d\n",
               ret);
           else
             dev_err(cpu_dev, "failed to set regulators: %d\n",
           goto put_table;
         }
       }

    似乎未导入 dev_pm_opp_set_regulators。
    我将所使用的 DTS 文件附后。
    - gmdss_sdt_igt.dts

    e2e.ti.com/.../gmdss_5F00_sdt_5F00_igt.zip
    请求您进行检查。

    此致、
    南承珉

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

    尊敬的 Seungmin:

    似乎未导入 dev_pm_opp_set_regulators。

    您的意思是 dev_pm_opp_set_regulators()返回-EPROBE_DEP? 如果是、您能否调试该函数以查看它在此函数中失败的位置? 它位于 drivers/opp/core.c 中

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

    尊敬的 Bin Liu:

    我通过以下其他错误进行了检查、发现了 regulator_dev_lookup 函数中出现-EPROBE_DEFER。

    regulator_dev_lookup

       /* first do a dt based lookup */
       if (dev && dev->of_node) {
         node = of_get_regulator(dev, supply);
         if (node) {
           r = of_find_regulator_by_node(node);
           if (r)
             return r;
    
           /*
            * We have a node, but there is no device.
            * assume it has not registered yet.
            */
           dev_err(dev, "We have a node, but there is no device.\n");
           return ERR_PTR(-EPROBE_DEFER);
         }
       }

    此致、
    南承珉

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

    尊敬的 Seungmin:

    您的电路板上的以下命令的输出是什么?

    # cat /sys/kernel/debug/regulator/regulator_summary

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

    尊敬的 Seungmin:

    问题似乎是由内核设备树中的 PMIC 设置引起的。

    我刚尝试在 BeagleBone Black 内核设备树中禁用"dc2_reg"稳压器。 此稳压器用于电源轨"VDD_MPU"。 现在、我在 BeagleBone Black 开发板上看到相同的症状:cpufreq 目录为空、内核日志显示消息"cpufreq-dt:delayed probe pending (cpufreq-dt:延迟探测器挂起)"。

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

    尊敬的 Bin Liu:

    添加结果。

    root@AptusLx:~# cat /sys/kernel/debug/regulator/regulator_summary
     regulator                      use open bypass  opmode voltage current     min     max
    ---------------------------------------------------------------------------------------
     regulator-dummy                  3    4      0 unknown     0mV     0mA     0mV     0mV
        1-005d-VDDIO                  1                                 0mA     0mV     0mV
        1-005d-AVDD28                 1                                 0mA     0mV     0mV
        47401b00.usb-phy-vcc          0                                 0mA     0mV     0mV
        47401300.usb-phy-vcc          0                                 0mA     0mV     0mV
     vddfix_3v3                       5    4      0 unknown  3300mV     0mA  3300mV  3300mV
        0-000a-VDDIO                  1                                 0mA     0mV     0mV
        0-000a-VDDA                   1                                 0mA     0mV     0mV
        481d8000.mmc-vmmc             1                                 0mA  3300mV  3400mV
        backlight-power               1                                 0mA     0mV     0mV
     vddfix_1v8                       2    1      0 unknown  1800mV     0mA  1800mV  1800mV
        0-000a-VDDD                   1                                 0mA     0mV     0mV
     vddfix_5v0                       1    0      0 unknown  5000mV     0mA  5000mV  5000mV
     DCDC1                            0    0      0 unknown  1100mV     0mA     0mV     0mV
     DCDC2                            0    0      0 unknown  1330mV     0mA     0mV     0mV
     DCDC3                            0    0      0 unknown  1500mV     0mA     0mV     0mV
     DCDC4                            0    0      0 unknown  3300mV     0mA     0mV     0mV
     DCDC5                            0    0      0 unknown  1000mV     0mA     0mV     0mV
     DCDC6                            0    0      0 unknown  1800mV     0mA     0mV     0mV
     LDO1                             0    0      0 unknown  1800mV     0mA     0mV     0mV
     LS2                              0    0      0 unknown     0mV   100mA     0mA     0mA
     LS3                              0    0      0 unknown     0mV   100mA     0mA     0mA
    

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

    尊敬的 Bin Liu:

    我发现 PMIC 设置存在问题。
    但我的 dts 中存在 dc2_reg。
    您能否在我之前添加的 DTS 中确认哪个部件有问题?

    如何调试 PMIC 设置?

    此致、
    南承珉

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

    尊敬的 Seungmin:

    regulator_summary 输出显示 DCDC2的最小值和最大值为0。 正确启用 PMIC 后、它应该是在器件树中的 dcdc2_reg 中定义的最小值和最大值。

    遗憾的是、我只支持 AM335x 处理器、但不熟悉 PMIC 器件。 我看到 AM437x GP EVM 也使用 tps65218、因此、您可以参阅内核器件树 AM437X-gp-evm.dts 来检查如何在器件树中配置此 PMIC。 您也可以在设备树中检查其 i2c 配置。