0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

secondary cpu初始化状态设置

麦辣鸡腿堡 来源:TrustZone 作者:Hcoco 2023-12-05 15:27 次阅读

spin-table

spin-table启动流程的示意图如下:

图片

芯片上电后primary cpu开始执行启动流程,而secondary cpu则将自身设置为WFE睡眠状态,并且为内核准备了一块内存,用于填写secondary cpu的入口地址。

uboot负责将这块内存的地址写入devicetree中,当内核初始化完成,需要启动secondary cpu时,就将其内核入口地址写到那块内存中,然后唤醒cpu。

secondary cpu被唤醒后,检查该内存的内容,确认内核已经向其写入了启动地址,就跳转到该地址执行启动流程。

secondary cpu初始化状态设置

uboot启动时,secondary cpu会通过以下流程进入wfe状态(arch/arm/cpu/armv8/start.S):

#if defined(CONFIG_ARMV8_SPIN_TABLE) && !defined(CONFIG_SPL_BUILD)
	branch_if_master x0, x1, master_cpu1b	spin_table_secondary_jump2)
	…
master_cpu:                                                  (3bl	_main

(1)若当前cpu为primary cpu,则跳转到step 3,继续执行启动流程。其中cpu id是通过mpidr区分的,而启动流程中哪个cpu作为primary cpu可以任意指定。当指定完成后,此处就可以根据其身份确定相应的执行流程

(2)若当前cpu为slave cpu,则执行spin流程。它是由spin_table_secondary_jump函数实现的(arch/arm/cpu/armv8/start.S)。以下为其代码实现:

ENTRY(spin_table_secondary_jump)
.globl spin_table_reserve_begin
spin_table_reserve_begin:
0:	wfe                                           (1)
	ldr	x0, spin_table_cpu_release_addr       (2)
	cbz	x0, 0b                                (3)
	br	x0                                    (4)
.globl spin_table_cpu_release_addr                    (5)
	.align	3
spin_table_cpu_release_addr:
	.quad	0
.globl spin_table_reserve_end
spin_table_reserve_end:
ENDPROC(spin_table_secondary_jump)

(1)secondary cpu当前没有事情要做,因此执行wfe指令进入睡眠模式,以降低功耗

(2)spin_table_cpu_release_addr将由uboot传递给内核,根据step 5的定义可知,其长度为8个字节,在64位系统中正好可以保存一个指针。而它的内容在启动时会被初始化为0,当内核初始化完成后,在启动secondary cpu之前,会在uboot中将其入口地址写到该位置,并唤醒它

(3)当secondary cpu从wfe状态唤醒后,会校验内核是否在spin_table_cpu_release_addr处填写了它的启动入口。若未填写,则其会继续进入wfe状态

(4)若内核填入了启动地址,则其直接跳转到该地址开始执行内核初始化流程

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    455

    文章

    50812

    浏览量

    423546
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10863

    浏览量

    211740
  • SMP
    SMP
    +关注

    关注

    0

    文章

    74

    浏览量

    19662
收藏 人收藏

    评论

    相关推荐

    CW32L083 RTC初始化设置

    介绍CW32L083的RTC初始化设置
    的头像 发表于 06-24 10:16 1546次阅读
    CW32L083 RTC<b class='flag-5'>初始化</b><b class='flag-5'>设置</b>

    手机模块初始化向导

    手机模块初始化向导:为了刚好的对手机模块进行初始化,所以把最基本的向导写下来.本向导适用于本公司的西门子TC35I和华为GT9000模块。一、在初始化手机模块前,请先确定DT
    发表于 09-18 09:41 17次下载

    FPGA的ROM初始化问题讨论

    本文讨论FPGA的ROM初始化问题,详细介绍mit文件的创建与使用。利用FPGA实现的ROM只能认为器件处于用户状态时具备ROM功能。使用时不必要刻意划分,而ROM单元的初始化则是设计人员必须面
    发表于 02-08 14:24 5497次阅读
    FPGA的ROM<b class='flag-5'>初始化</b>问题讨论

    RDA1846S初始化设置

    RDA1846S初始化设置RDA1846S初始化设置RDA1846S初始化设置
    发表于 01-15 17:08 0次下载

    UCOS_III_配置与初始化

    UCOS_III_配置与初始化
    发表于 12-20 22:53 5次下载

    ROVA烧录工具的应用程序和注册及初始化MCU说明和配置设置详细概述

    本文档的主要内容介绍的是ROVA烧录工具的应用程序和注册及初始化MCU说明和配置设置,安装信息的详细概述
    发表于 06-06 10:00 11次下载

    霍尔无刷电机如何进行程序初始化

    频率下的振荡周期的16倍2. 对PWM模块进行初始化,对PWM模块进行初始化的过程中需要进行设置的主要PWM的时钟,对其方式,PWM的极性,同时还需要对占空比和载波的周期值以及使能端来进行
    的头像 发表于 10-15 17:29 7703次阅读

    【嵌入式07】寄存器映射原理详解,GPIO端口的初始化设置步骤

    本文主要介绍STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化设置三步骤(时钟配置、输入输出模式设置、最大速率设置)。
    发表于 12-04 12:06 11次下载
    【嵌入式07】寄存器映射原理详解,GPIO端口的<b class='flag-5'>初始化</b><b class='flag-5'>设置</b>步骤

    如何在Segger J-Flash中设置芯片初始化序列?

    许多微控制器在烧录之前需要一个自定义的初始化序列来初始化目标硬件,例如初始化PLL时钟,关闭看门狗或定义Flash的等待状态。在使用这些对初始化
    的头像 发表于 12-12 10:56 2317次阅读

    什么是指定初始化

    按照这种固定的顺序,我们可以依次给 a[0] 和 a[8] 赋值。因为没有对 a[9] 赋值,所以编译器会将 a[9] 默认设置为0。当数组长度比较小时,使用这种方式初始化比较方便。
    的头像 发表于 02-17 09:32 893次阅读

    CPU CACHE策略的初始化

    build_mem_type_table()函数的功能是获取当前CPU的CACHE类型,据此初始化mem_type。
    的头像 发表于 06-05 15:03 1432次阅读
    <b class='flag-5'>CPU</b> CACHE策略的<b class='flag-5'>初始化</b>

    复位威廉希尔官方网站 如何回到初始化状态

    单片机最小系统中复位威廉希尔官方网站 属于必不可少的部分。数字威廉希尔官方网站 中只有高低电平两个状态,威廉希尔官方网站 刚上电或者威廉希尔官方网站 不能正常工作时,需要复位威廉希尔官方网站 使威廉希尔官方网站 进入回到初始化状态。由下图可以看出复位可以分为系统复位,外部复位和看门狗复位。
    的头像 发表于 06-22 09:02 1298次阅读
    复位威廉希尔官方网站
如何回到<b class='flag-5'>初始化</b>的<b class='flag-5'>状态</b>

    如何在内核中启动secondary cpu

    启动secondary cpu 内核在启动secondary cpu之前当然需要为其准备好执行环境,因为内核中cpu最终都将由调度器管理,故
    的头像 发表于 12-05 15:46 607次阅读
    如何在内核中启动<b class='flag-5'>secondary</b> <b class='flag-5'>cpu</b>

    secondary cpu执行流程介绍

    : 由于其底层相关初始化流程与primary cpu类似,因此此处不再介绍。我们这里主要看一下它是如何通过secondary_start_kernel启动idle线程的: asmlinkage
    的头像 发表于 12-05 16:12 846次阅读
    <b class='flag-5'>secondary</b> <b class='flag-5'>cpu</b>执行流程介绍

    SMP多核secondary cpu启动流程

    ,详细分析可以参考上篇博文。其中以下流程执行secondary cpu启动相关的一些初始化工作: 在初始化完成且hotplug线程创建完成后,就可通过以下流程唤醒
    的头像 发表于 12-05 17:41 873次阅读
    SMP多核<b class='flag-5'>secondary</b> <b class='flag-5'>cpu</b>启动流程