ST意法半导体
直播中

贾飞世

8年用户 1887经验值
私信 关注
[问答]

为什么STM32MP157A-DK1到M4的远程处理会失败呢?如何使其正常工作呢

您好,我正在尝试使用在 Linux 下工作的 A7 内核中的 M4 内核。
我从 openSTlinux 发行版开始,它运行良好(我可以使用 rproc 将固件上传到 M4),但由于某些原因,我需要制作一个非常小的发行版(小于 16 mb)。为此,我开始使用 buildroot 构建系统,我将其配置为使用 linux 内核
(我试过使用 5.10 和 5.4 分支)
我尝试使用 openstlinux (/proc/config.gz) 中的原始 .config 来构建我自己的内核,它构建得很好。但是当系统启动时,我收到了一条令人遗憾的消息:
[1.667275]STM32-rproc 10000000.m4:错误-EINVAL:无法重置单片机
[1.674148]remoteproc remoteproc0:释放m4
[ 1.678863] stm32-rproc: 10000000.m4 探测失败,错误为 -22
一些调查让我找到了文件 drivers/reset/core.c 和函数
static int of_reset_simple_xlate(struct reset_controller_dev *rcdev,
              const struct of_phandle_args *reset_spec)
我打印了一些变量:
reset_spec->args_count = 1
reset_spec->args[0] = 11
rcdev->nr_resets = 11
reset_spec->np->full_name = 协议@16
好的,它看起来类似于我在其中找到定义的 stm32mp151.dtsi
    固件{
        scmi0: scmi0 {
            compatible = "arm,scmi-smc";
            #address-cells = <1>;
            #size-cells = <0>;
            手臂,smc-id = <0x82002000>;
            shmem = <&scmi0_shm>;
            scmi0_clk: 协议@14 {
                reg = <0x14>;
                #clock-cells = <1>;
            };
            scmi0_reset:协议@16 {
                reg = <0x16>;
                #reset-cells = <1>;
            };
        };
正如你所记得的:
reset_spec->args[0] = 11
这是
#define RST_SCMI0_MCU_HOLD_BOOT 11来自文件 include/dt-bindings/reset/stm32mp1-resets.h
但由于某些原因,过程发现功能(我不确定术语)“hold_boot”在一条线上废墟
    如果 (reset_spec->args[0] >= rcdev->nr_resets)
        返回-EINVAL;
问题是:为什么?如何使其正常工作?










更多回帖

发帖
×
20
完善资料,
赚取积分