Ignore:
Timestamp:
Aug 16, 2012, 6:36:16 PM (12 years ago)
Author:
alain
Message:

Several bugs have been fixed to support TSAR multi-cluster architecture
such as the "tsarv4-generic_mmu" platform.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/sys/kernel_init.c

    r203 r207  
    5454{
    5555    // compute cluster and local processor index
    56     unsigned int        proc_id    = _procid();
    57     unsigned int    cluster_id = proc_id / NB_PROCS_MAX;
    58     unsigned int    lpid       = proc_id % NB_PROCS_MAX;
     56    unsigned int        global_pid = _procid();
     57    unsigned int    cluster_id = global_pid / NB_PROCS_MAX;
     58    unsigned int    proc_id    = global_pid % NB_PROCS_MAX;
     59
     60    // Step 0 : Compute number of tasks allocated to proc
     61
     62    unsigned int tasks = _get_tasks_number();
     63
     64#if GIET_DEBUG_INIT
     65_get_lock(&_tty_put_lock);
     66_puts("\n[GIET DEBUG] step 0 for processor ");
     67_putd( global_pid );
     68_puts(" : tasks = ");
     69_putd( tasks );
     70_puts("\n");
     71_release_lock(&_tty_put_lock);
     72#endif
    5973
    6074    // step 1 : Initialise scheduler physical addresses array
    61 
    62     // get scheduler physical address from register
     75    //          get scheduler physical address (from CP0 register)
     76
    6377    static_scheduler_t*         psched = (static_scheduler_t*)_get_sched();
    64     _schedulers_paddr[proc_id]     = psched;
     78    _schedulers_paddr[global_pid]  = psched;
    6579
    6680#if GIET_DEBUG_INIT
    6781_get_lock(&_tty_put_lock);
    6882_puts("\n[GIET DEBUG] step 1 for processor ");
    69 _putd( proc_id );
     83_putd( global_pid );
    7084_puts(" / scheduler pbase = ");
    71 _putw( (unsigned int)psched );
    72 _puts("\n");
    73 _release_lock(&_tty_put_lock);
    74 #endif
    75 
     85_putx( (unsigned int)psched );
     86_puts("\n");
     87_release_lock(&_tty_put_lock);
     88#endif
    7689
    7790    // step 2 : initialise page table addresse arrays
     
    8093
    8194    unsigned int ltid;
    82     unsigned int tasks = _get_tasks_number();
    8395
    8496    for ( ltid = 0 ; ltid < tasks ; ltid++ )
     
    94106_get_lock(&_tty_put_lock);
    95107_puts("\n[GIET DEBUG] step 2 for processor ");
    96 _putd( proc_id );
     108_putd( global_pid );
    97109_puts(" / vspace ");
    98110_putd( vspace_id );
    99111_puts("\n- ptab vbase = ");
    100 _putw( ptab_vaddr );
     112_putx( ptab_vaddr );
    101113_puts("\n- ptab pbase = ");
    102 _putw( ptab_paddr );
     114_putx( ptab_paddr );
    103115_puts("\n");
    104116_release_lock(&_tty_put_lock);
     
    129141        }
    130142    }
    131     _icu_set_mask( cluster_id, lpid, hwi_mask, 0 ); // set HWI_MASK
    132     _icu_set_mask( cluster_id, lpid, pti_mask, 1 );     // set PTI_MASK
     143    _icu_set_mask( cluster_id, proc_id, hwi_mask, 0 ); // set HWI_MASK
     144    _icu_set_mask( cluster_id, proc_id, pti_mask, 1 );  // set PTI_MASK
    133145   
    134146#if GIET_DEBUG_INIT
    135147_get_lock(&_tty_put_lock);
    136148_puts("\n[GIET DEBUG] step 3 for processor ");
    137 _putd( proc_id );
     149_putd( global_pid );
    138150_puts("\n - ICU HWI_MASK = ");
    139 _putw( hwi_mask );
     151_putx( hwi_mask );
    140152_puts("\n - ICU PTI_MASK = ");
    141 _putw( pti_mask );
    142 _puts("\n");
    143 _release_lock(&_tty_put_lock);
    144 #endif
    145 
     153_putx( pti_mask );
     154_puts("\n");
     155_release_lock(&_tty_put_lock);
     156#endif
    146157
    147158    // step 4 : start TICK timer if more than one task
     
    155166_get_lock(&_tty_put_lock);
    156167_puts("\n[GIET DEBUG] Step 4 for processor ");
    157 _putd( proc_id );
     168_putd( global_pid );
    158169_puts(" / context switch activated\n");
    159170_release_lock(&_tty_put_lock);
     
    169180    _set_context_slot( IDLE_TASK_INDEX, CTX_RUN_ID,  1 );
    170181    _set_context_slot( IDLE_TASK_INDEX, CTX_SR_ID,   0xFF03 );
    171     _set_context_slot( IDLE_TASK_INDEX, CTX_SP_ID,   (unsigned int)&_idle_stack[proc_id] + 64 );
     182    _set_context_slot( IDLE_TASK_INDEX, CTX_SP_ID,   (unsigned int)&_idle_stack[global_pid] + 64 );
    172183    _set_context_slot( IDLE_TASK_INDEX, CTX_RA_ID,   (unsigned int)&_ctx_eret );
    173184    _set_context_slot( IDLE_TASK_INDEX, CTX_EPC_ID,  (unsigned int)&_ctx_idle );
     
    178189_get_lock(&_tty_put_lock);
    179190_puts("\n[GIET DEBUG] Step 5 for processor ");
    180 _putd( proc_id );
     191_putd( global_pid );
    181192_puts(" / idle task context set\n");
    182193_release_lock(&_tty_put_lock);
     
    195206        _get_lock( &_tty_put_lock );
    196207        _puts("\n [GIET WARNING] No task allocated to processor ");
    197         _putw( proc_id );
     208        _putd( global_pid );
    198209        _puts(" => idle\n");
    199210        _release_lock ( &_tty_put_lock );
     
    212223_get_lock(&_tty_put_lock);
    213224_puts("\n[GIET DEBUG] step 6 for processor ");
    214 _putd( proc_id );
     225_putd( global_pid );
    215226_puts(" / registers initialised \n");
    216227_puts("- sp   = ");
    217 _putw( sp_value );
     228_putx( sp_value );
    218229_puts("\n");
    219230_puts("- sr   = ");
    220 _putw( sr_value );
     231_putx( sr_value );
    221232_puts("\n");
    222233_puts("- ptpr = ");
    223 _putw( ptpr_value<<13 );
     234_putx( ptpr_value<<13 );
    224235_puts("\n");
    225236_puts("- epc  = ");
    226 _putw( epc_value );
     237_putx( epc_value );
    227238_puts("\n");
    228239_release_lock(&_tty_put_lock);
Note: See TracChangeset for help on using the changeset viewer.