Design Article
Comment
rishabhgoel
Thanks xx19xx for your feedback and response. We will surely try to bring out ...
xx19xx
Boot firmware architecture for asymmetric cores
Rishabh Goel, Pradip Singh
1/28/2013 4:27 PM EST
ISA compatibility
The first and foremost design challenge is the ISA compatibility between different cores. ISA is defined as the boundary between hardware and software and is used to convert mnemonics to machine language understood by the processor.

Figure 2. In an asymmetric multicore SoC, incompatible ISA cores require separate boot areas but compatible ISA cores can share some or all boot code.
Based on ISA, boot architecture gets divided into two sections:
- Incompatible ISA
This means that software written for one core is incomprehensible to the other core. In such systems, Boot code will be completely different for different cores. - Partially compatible ISA
This means that different cores support a common version of ISA - for example, a system containing cores like ARM Cortex-A and Cortex-M. For this type of system, boot code is divided into two parts.- Part I is the core-specific boot code. This section implements software functionality specific to an individual core.
- Part II is the common boot code implemented using common ISA. This section implements the bulk of the boot functionality. This software invokes core-specific software implemented in Part I.
Many processor architectures implement a register like Processor ID or CPU ID. SoC designers give different values to this register for different cores. Core type is identified by reading this processor identification register. On the basis of this register, boot code can then take a decision to implement core-specific features. The main idea is that the common boot code will execute the same instruction on different cores, yielding different results based on the executing core.
- Common register:
In the case where the register is memory mapped, then the address to access this register has to be same for all the cores. For example, when interfacing ARM Cortex-Ax and Cortex-Mx, the Processor ID register is accessed by a different mnemonic. Hence in such SOC designs it becomes necessary to implement memory-mapped registers. The mechanism to identify the executing core becomes hardware specific.
Figure 3. When cores use a common register, the boot architecture needs to support memory-mapped registers to support hardware-specific access to boot code. - Same instruction to read Processor ID/CPU ID:
In some cases the register is implemented as some kind of special-purpose register (as in case of PowerPC). Care should be taken such that the same instruction can be used to access this register from different cores. For example, cases where Z2 and Z4 PowerPC cores are integrated within SoC, a SPR 286 register is used for accessing Processor ID.
Figure 4. When cores use the same instruction to read the processor ID, designers need to ensure that the different cores can use the same instruction to access this processor ID register.
Next: Title-2


xx19xx
1/30/2013 12:58 PM EST
Nice article.
first relevant article:
freescale.com/files/32bit/doc/app_note/AN3542.pdf
second relevant article:
http://www.linux-arm.org/LinuxBootLoader/SMPBoot
and now this article the describing methodology of booting asymmetric multi core and its challenges.
Sign in to Reply
rishabhgoel
2/1/2013 1:40 AM EST
Thanks xx19xx for your feedback and response. We will surely try to bring out different articles on various aspects of embedded world in future. Please so share your inputs on how we can improve the article or new topics on which you would like to see some article.
Sign in to Reply