AP核MAILBOX地址的初始化和启动过程(基于ARM64 的 APCI Parking protocol)

105 篇文章 2 订阅
84 篇文章 7 订阅
ARM64 AP核MAILBOX地址的初始化和启动过程(Parking protocol)


start_kernel
-> setup_arch
   -> smp_init_cpus
      -> acpi_table_parse_madt( ACPI_MADT_TYPE_GENERIC_INTERRUPT,acpi_parse_gic_cpu_interface, 0);
         -> acpi_table_parse_entries(ACPI_SIG_MADT)
            -> acpi_parse_entries
               -> 遍历ACPI中标明的所有CORE,对每个core调用handler(entry, table_end) 也就是acpi_parse_gic_cpu_interface


acpi_parse_gic_cpu_interface
-> acpi_map_gic_cpu_interface
   ->  arm64_cpu_parking_addr[cpu_count] = processor->parked_address; //将当前处理器的mailbox地址初始化为parked_address; 




在smp_init中,会对每个AP核调用boot_secondary


boot_secondary
-> cpu_ops[cpu]->cpu_boot(cpu); //对于Parking protocol,调用smp_parking_protocol_cpu_boot
   -> mailbox = ioremap_cache(arm64_cpu_parking_addr[cpu], sizeof(*mailbox)); //得到mailbox映射的虚拟地址
      writeq(__pa(secondary_entry), &mailbox->entry_point); //写入AP核启动地址
      writel(cpu, &mailbox->cpu_id); // 写入目标AP核

      __smp_boot_wakeup(cpu);//对于GICV3 在gic_smp_init中初始化为 gic_wakeup_parked_cpu,也就是调用gic_wakeup_parked_cpu


gic_wakeup_parked_cpu
-> gic_raise_softirq(cpumask_of(cpu), 0); //发送软中断,通知AP核启动
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值