Ignore:
Timestamp:
Jan 30, 2014, 5:32:13 PM (11 years ago)
Author:
cfuguet
Message:

Modifications in GIET_VM:

  • Supporting platforms with more than one IRQ per processor from the XICU.

When this is the case, the IRQ per processor can be signalled
by the XCU peripheric number of channels on the XML file.

The xml_parser will generate a constant on the hard_config.h
file, called IRQ_PER_PROCESSOR and this constant will be use
by the GIET_VM to create accordingly the irq masks on the
ICU

Location:
soft/giet_vm/giet_kernel
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/giet_kernel/irq_handler.c

    r279 r281  
    2121#include <ioc_driver.h>
    2222#include <dma_driver.h>
    23 #include<mapping_info.h>
     23#include <mapping_info.h>
    2424#include <utils.h>
    2525
     
    5959    // get the highest priority active IRQ index
    6060
     61    unsigned int icu_out_index = local_id * IRQ_PER_PROCESSOR;
     62
    6163#if USE_XICU
    62     ko = _xcu_get_index( cluster_id, local_id, &irq_id );
     64    ko = _xcu_get_index( cluster_id, icu_out_index, &irq_id );
    6365#else
    64     ko = _icu_get_index( cluster_id, local_id, &irq_id );
     66    ko = _icu_get_index( cluster_id, icu_out_index, &irq_id );
    6567#endif
    6668
  • soft/giet_vm/giet_kernel/kernel_init.c

    r274 r281  
    261261#endif
    262262
    263     // GIET-VM consraint : only one IRQ type per irq_id
     263    // GIET-VM constraint : only one IRQ type per irq_id
    264264    if ( hwi_mask & swi_mask & pti_mask )
    265265    {
     
    268268    }
    269269
     270
     271    // The ICU output index is computed as the local processor id multiplied by
     272    // the number of ICU outputs connected to each processor.
     273    int icu_out_index = local_pid * IRQ_PER_PROCESSOR;
     274
    270275#if USE_XICU
    271     _xcu_set_mask(cluster_xy, local_pid, hwi_mask, IRQ_TYPE_HWI); // set HWI_MASK
    272     _xcu_set_mask(cluster_xy, local_pid, swi_mask, IRQ_TYPE_SWI); // set SWI_MASK
    273     _xcu_set_mask(cluster_xy, local_pid, pti_mask, IRQ_TYPE_PTI); // set PTI_MASK
     276    _xcu_set_mask(cluster_xy, icu_out_index, hwi_mask, IRQ_TYPE_HWI); // set HWI_MASK
     277    _xcu_set_mask(cluster_xy, icu_out_index, swi_mask, IRQ_TYPE_SWI); // set SWI_MASK
     278    _xcu_set_mask(cluster_xy, icu_out_index, pti_mask, IRQ_TYPE_PTI); // set PTI_MASK
    274279#else
    275     _icu_set_mask(cluster_xy, local_pid, (hwi_mask | pti_mask | swi_mask) );   
     280    _icu_set_mask(cluster_xy, icu_out_index, (hwi_mask | pti_mask | swi_mask) );   
    276281#endif
    277282
Note: See TracChangeset for help on using the changeset viewer.