[RTEMS Project] #2343: [Patch] Fix Zynq SMP boot

RTEMS trac trac at rtems.org
Mon May 11 05:40:43 UTC 2015

#2343: [Patch] Fix Zynq SMP boot
 Reporter:  jbrandmeyer                 |       Owner:
     Type:  defect                      |      Status:  new
 Priority:  high                        |   Milestone:  4.11.1
Component:  SMP                         |     Version:  4.10
 Severity:  normal                      |  Resolution:
 Keywords:  zynq, xilinx_zynq_zedboard  |

Comment (by jbrandmeyer):

 Replying to [comment:8 chrisj]:
 > I am not sure about this change.
 > I do not understand the logic in _CPU_SMP_Start_processor where the CPU
 index is checked for 1 (cpu1 ?) and if cpu1 has not started it is kicked.
 Why would you do this for cpu1 or is the index numbered from 1 ( so cpu0
 ?) ?
 > The change on partial handles a full SMP initialization for example the
 SMP bit in the CP15 ACTLR register.

 Yes, the CPU's are numbered from zero.  The boot sequence is as follows:
 The Zynq ROM bootloader loads and executes a single file, itself a
 fragment of a proprietary-formatted boot image, typically the Xilinx First
 Stage Bootloader (FSBL).
 The FSBL performs low-level hardware and FPGA fabric initialization and
 also loads an arbitrary ELF file (in this case, an RTEMS application) and
 starts CPU0 at the ELF's entry point.  However, CPU1 sits waiting.
 So when RTEMS starts its initialization, it is already running on CPU0.
 And the only thing that it can possibly do with regards to SMP
 initialization is to start CPU1.

 As this BSP is specific to the Zynq, there can be only one more CPU.  The
 change follows the logic from the Altera Cyclone V BSP, which is a direct
 competitor to the Zynq with a nearly identical hard processor subsystem.

 With regards to the MMU change, the user who overrides the weak symbol is
 already responsible for correctness of the entire memory map.  IMO,
 announcing the change on the mailing list is easier to manage than
 splitting the MMU initialization into two stages.

 I have confirmed that simply marking the memory with the READ_WRITE
 permissions instead of as device memory is also sufficient to work around
 the cache problems.

 Yet another alternative to this patch would be to tell users that in order
 to boot RTEMS in SMP mode, that they need to customize the Xilinx FSBL in
 a certain way.  IMO, that is less satisfactory than doing The Right Thing
 with the default tools as provided by Xilinx.

Ticket URL: <http://devel.rtems.org/ticket/2343#comment:10>
RTEMS Project <http://www.rtems.org/>
RTEMS Project

More information about the bugs mailing list