標籤:注意 tsm 平台 star return signed 完全 com span
在上一篇博文中,研究了xapp1078,它的目標平台是zc702。本文分析在zc706實現AMP時需要修改的關鍵點。參考資料:http://www.wiki.xilinx.com/XAPP1078+Latest+Information
1,zc706中的bootROM中,採用了V2版本。該版本使用了不同的WFE loop,CPU1被喚醒(中斷、sev或者其他事件)後,會讀取0xFFFFFFF0位置的資料與0xFFFFFF2C比較,如果與0xFFFFFF2C相同,則回到WFE狀態(待機)。如果與0xFFFFFF2C不同,則CPU1跳轉到與2C不同的新地址開始執行程式。因此,流程上首先將CPU1待執行程式的地址寫入0xFFFFFFF0,然後中斷或者sev喚醒CPU1。xapp1078中使用的是0xFFFFFF00,因此,需要將cpu1_bootvec.bin中的00改為2C。
2,CPU0的Linux kernel核心含有CPU1的初始化代碼,需要修改代碼使核心啟動時,CPU1回到0xFFFFFF2C位置的WFE loop代碼。
Edit the file arch/arm/mach-zynq/platsmp.c, search for the following line:
ret=zynq_cpu1_start(virt_to_phys(secondary_startup));
and change the line to: ret = zynq_cpu1_start(0xFFFFFF2C);
注意:adi-linux-2016-r2核心中,相應位置的代碼與參考資訊不完全相同,如下所示:
static int zynq_boot_secondary(unsigned int cpu, struct task_struct *idle){
return zynq_cpun_start(virt_to_phys(secondary_startup), cpu);}
分析實現zc706 AMP-linux和裸奔的注意點更新-參考xapp1078 latest info.