Changes between Version 55 and Version 56 of boot_procedure


Ignore:
Timestamp:
Mar 2, 2019, 3:49:27 PM (5 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • boot_procedure

    v55 v56  
    3535
    3636The TSAR boot_loader allocates - in each cluster containing a physical memory bank - six fixed size memory zones, to store various
    37 binary files or data structures. The two first zones are permanently allocated: The '''PRE_LOADER''' zone is only defined in cluster 0, and contains the pre-loader code. The '''KERNEL_CODE''' zone containing the ''kcode'' and ''kdata'' sgments is directly used by the kernel when the boot_loader transfers control - in each cluster - to the kernel_init procedure. The '''BOOT_CODE''', '''ARCH_INFO''', '''KERNEL_ELF''', and '''BOOT_STACK''' zones are temporary: they are only used - in each cluster - by the boot-loader code, and the corresponding physical memory can be freely used and re-allocated by the local kernel instance when it starts execution.
     37binary files or data structures. The two first zones are permanently allocated: The '''PRE_LOADER''' zone is only defined in cluster 0, and contains the pre-loader code. The '''KERNEL_CODE''' zone containing the ''kcode'' and ''kdata'' sgments is directly used by the kernel when the boot_loader transfers control - in each cluster - to the kernel_init procedure. The '''BOOT_CODE''', '''ARCH_INFO''', '''KERNEL_ELF''', and '''BOOT_STACK''' zones are temporary: they are only used - in each cluster - by the boot-loader code, and the corresponding physical memory can be freely re-allocated by the local kernel instance when it starts execution.
    3838
    3939 || name                        || description                            ||  base address (physical)          || size                                                             ||
     
    4747The values given in this array are indicative. The actual values are defined by configuration parameters in the ''boot_config.h'' file.
    4848The two main constraint are the following:
    49    * the ''kcode''  segment (in the KERNEL_CODE zone) must be entirely contained in one single big physical page (2 Mbytes), because it will be mapped as one single big page in all process virtual spaces.
    50    * the BOOT_CODE region (containing the boot loader instructions and data) must be entirely contained in the
    51 next big physical page, because it will be mapped in the boot-loader virtual space yo allow the cores to access locally the boot code as soon as it has been copied in the local cluster.
     49   * the ''kcode'' and ''kdata'' segments (in the KERNEL_CODE zone) must be entirely contained in one single big physical page (2 Mbytes), because it will be mapped as one single big page in all process virtual spaces.
     50   * the BOOT_CODE zone (containing the boot loader instructions and data) must be entirely contained in the
     51next big physical page, because it will be mapped in the boot-loader page table to allow the cores to access locally the boot code as soon as it has been copied in the local cluster.
    5252
    5353A core is identified by  two indexes: '''cxy''' is the cluster identifier, an '''lid''' is the core local index in cluster.
     
    5555
    5656All cores contribute to the boot procedure, but all cores are not simultaneously active:
    57  * in a first phase, only core[0][0] is running (core 0 in cluster 0).
    58  * In a second phase, only core[cxy][0] are running (one core per cluster).
    59  * in last phase, all core[cxy][lid] are running.
     57 * in the first phase - fully sequencial - only core[0][0] is running (core 0 in cluster 0).
     58 * In the second phase - partially parallel - only core[cxy][0] is running in each cluster.
     59 * in the last phase - fully parallel - all core[cxy][lid] are running.
    6060
    6161We describe below the four phases of the TSAR boot-loader:
     
    6363=== B1. Pre-loader phase ===
    6464
    65  * In the TSAR_LETI architecture, the preloader is loaded in the first 16 kbytes of the physical address space in cluster 0.
     65 * In the TSAR_LETI architecture, the pre-loader code is stored in the first 16 kbytes of the physical address space in cluster 0.
    6666 * In the TSAR_IOB architecture, the preloader is stored in an external ROM, that is accessed throug the IO_bridge located in cluster 0.
    6767
     
    6969Therefore, all cores can only access the physical address space of cluster 0.
    7070
    71 All cores execute the same preloader code (stored in cluster 0, but the work done depends on the core identifier:
     71All cores execute the same pre-loader code, but the work done depends on the core identifier:
    7272   * The core[0][0] load in the BOOT_CODE zone of cluster 0, the boot-loader code stored on disk.
    7373   * All other cores do only one task before going to sleep (i.e. low-power state): each core activates its private WTI channel in the local ICU (Interrupt Controller Unit) to be later activated by an IPI (Inter Processor Interrupt). 
     
    7777In this phase, only core [0][0] is running, while all other cores are blocked in the preloaded, waiting to be activated by an IPI.
    7878
    79 The first instructions of the boot-loader are defined in the ''boot_entry.S'' file. This assembly code is executed by all cores entering the boot loader, but not at the same time.
     79The first instructions of the boot-loader are defined in the ''boot_entry.S'' file. This assembly code is executed by all cores entering the boot-loader, but not at the same time.
    8080
    8181Each core running this code makes the 3 following actions: