In the previous blog post, the xapp1078 was studied, and its target platform was zc702. This article analyzes the key points that need to be modified when zc706 implements AMP. Reference: Http://www.wiki.xilinx.com/XAPP1078+Latest+Information
The V2 version is used in the bootrom in 1,zc706. This version uses a different WFE loop,cpu1 is awakened (interrupt, SEv, or other event), the data that reads the 0XFFFFFFF0 location is compared to 0XFFFFFF2C, and if the same as 0XFFFFFF2C, it returns to the WFE State (standby). If it is different from 0xffffff2c, CPU1 jumps to a new address different from 2C to start executing the program. Therefore, the process first writes the address of the CPU1 program to the 0XFFFFFFF0, and then interrupts or SEv wakes the CPU1. 0XFFFFFF00 is used in xapp1078, so it is necessary to change 00 in Cpu1_bootvec.bin to 2C.
The 2,cpu0 Linux kernel kernel contains CPU1 initialization code that requires the code to be modified so that the 0XFFFFFF2C loop code CPU1 back to the WFE location when the kernel is booted.
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);
Note: In the ADI-LINUX-2016-R2 kernel, the corresponding location code is not exactly the same as the reference information, as follows:
static int zynq_boot_secondary (unsigned int cpu, struct task_struct *idle) {
Return Zynq_cpun_start (Virt_to_phys (secondary_startup), CPU);}
Analyze to implement zc706 Amp-linux and bare-ben Note Update-refer to xapp1078 latest info.