Ignore:
Timestamp:
Jan 21, 2014, 7:20:06 PM (11 years ago)
Author:
cfuguet
Message:
  • Adding volatile attribute for pointers used to address memory mapped hardware registers.
  • Removing the activation of interruptions before the execution of the ctx_switch function on the ioc_access function. This is to avoid been interrupted during the modification of task context variables.
Location:
soft/giet_vm/giet_drivers
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/giet_drivers/fbf_driver.c

    r263 r275  
    276276#endif
    277277
    278     // SYNC request for channel descriptor
    279     _memc_sync( desc_paddr, 32 );
     278    if ( USE_IOB )
     279    {
     280        // SYNC request for channel descriptor
     281        _memc_sync( desc_paddr, 32 );
     282    }
    280283
    281284    // CMA channel activation
  • soft/giet_vm/giet_drivers/ioc_driver.c

    r263 r275  
    155155    }
    156156
    157     unsigned int * ioc_address = (unsigned int *) &seg_ioc_base ;
     157    volatile unsigned int * ioc_address = (unsigned int *) &seg_ioc_base ;
    158158
    159159    unsigned int length = count << 9;  // count * 512 bytes
     
    358358        else             ioc_address[BLOCK_DEVICE_OP] = BLOCK_DEVICE_READ;
    359359
    360         // Exit critical section
    361         _it_enable();
    362 
    363360        // deschedule task
    364361        _ctx_switch();                     
  • soft/giet_vm/giet_drivers/xcu_driver.c

    r271 r275  
    7272
    7373#if USE_XICU
    74     unsigned int* xcu_address = (unsigned int *) ((unsigned int)&seg_xcu_base +
    75                                 (cluster_xy * (unsigned int)&vseg_cluster_increment));
     74    volatile unsigned int* xcu_address =
     75        (unsigned int *) ((unsigned int)&seg_xcu_base +
     76        (cluster_xy * (unsigned int)&vseg_cluster_increment));
     77
    7678    unsigned int func;
    7779    if      (irq_type == IRQ_TYPE_PTI) func = XICU_MSK_PTI_ENABLE;
     
    109111
    110112#if USE_XICU
    111     unsigned int* xcu_address = (unsigned int *) ((unsigned int)&seg_xcu_base +
    112                                 (cluster_xy * (unsigned int)&vseg_cluster_increment));
     113    volatile unsigned int* xcu_address =
     114        (unsigned int *) ((unsigned int)&seg_xcu_base +
     115        (cluster_xy * (unsigned int)&vseg_cluster_increment));
    113116
    114117    unsigned int prio = xcu_address[XICU_REG(XICU_PRIO, proc_id)];
     
    151154
    152155#if USE_XICU
    153     unsigned int* xcu_address = (unsigned int *) ((unsigned int)&seg_xcu_base +
    154                                  (cluster_xy * (unsigned int)&vseg_cluster_increment));
     156    volatile unsigned int* xcu_address =
     157        (unsigned int *) ((unsigned int)&seg_xcu_base +
     158        (cluster_xy * (unsigned int)&vseg_cluster_increment));
     159
    155160    xcu_address[XICU_REG(XICU_WTI_REG, proc_id)] = wdata;
    156161    return 0;
     
    180185
    181186#if USE_XICU
    182     unsigned int* xcu_address = (unsigned int *) ((unsigned int)&seg_xcu_base +
    183                                 (cluster_xy * (unsigned int)&vseg_cluster_increment));
     187    volatile unsigned int* xcu_address =
     188        (unsigned int *) ((unsigned int)&seg_xcu_base +
     189        (cluster_xy * (unsigned int)&vseg_cluster_increment));
     190
    184191    xcu_address[XICU_REG(XICU_PTI_PER, pti_index)] = period;
    185192    return 0;
     
    208215
    209216#if USE_XICU
    210     unsigned int * xcu_address = (unsigned int *) ((unsigned int)&seg_xcu_base +
    211                                  (cluster_xy * (unsigned int)&vseg_cluster_increment));
     217    volatile unsigned int * xcu_address =
     218        (unsigned int *) ((unsigned int)&seg_xcu_base +
     219        (cluster_xy * (unsigned int)&vseg_cluster_increment));
     220
    212221    xcu_address[XICU_REG(XICU_PTI_PER, pti_index)] = 0;
    213222    return 0;
     
    271280
    272281#if USE_XICU
    273     unsigned int * xcu_address = (unsigned int *) ((unsigned int) &seg_xcu_base +
    274                                  (cluster_xy * (unsigned int)&vseg_cluster_increment));
     282    volatile unsigned int * xcu_address =
     283        (unsigned int *) ((unsigned int) &seg_xcu_base +
     284        (cluster_xy * (unsigned int)&vseg_cluster_increment));
    275285
    276286    unsigned int period = xcu_address[XICU_REG(XICU_PTI_PER, pti_index)];
Note: See TracChangeset for help on using the changeset viewer.