Ignore:
Timestamp:
Sep 29, 2014, 10:47:26 AM (10 years ago)
Author:
alain
Message:

Introducing a physical memory allocator (pmem.c & pmem.h files).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/giet_common/utils.c

    r399 r408  
    2222extern static_scheduler_t* _schedulers[NB_PROCS_MAX<<(X_WIDTH+Y_WIDTH)];
    2323
    24 
    2524///////////////////////////////////////////////////////////////////////////////////
    2625//         CP0 registers access functions
    2726///////////////////////////////////////////////////////////////////////////////////
    2827
    29 ///////////////////////////////////////////////////////////////////////////////////
    30 // Returns the value contained in CP0 SCHED register
    31 // (virtual base address of the processor scheduler).
    32 ///////////////////////////////////////////////////////////////////////////////////
     28/////////////////////////
    3329unsigned int _get_sched()
    3430{
     
    3834    return ret;
    3935}
    40 ///////////////////////////////////////////////////////////////////////////////////
    41 // Returns EPC register content.
    42 ///////////////////////////////////////////////////////////////////////////////////
     36///////////////////////
    4337unsigned int _get_epc()
    4438{
     
    4842    return ret;
    4943}
    50 ///////////////////////////////////////////////////////////////////////////////////
    51 // Returns BVAR register content.
    52 ///////////////////////////////////////////////////////////////////////////////////
     44////////////////////////
    5345unsigned int _get_bvar()
    5446{
     
    5850    return ret;
    5951}
    60 ///////////////////////////////////////////////////////////////////////////////////
    61 // Returns CR register content.
    62 ///////////////////////////////////////////////////////////////////////////////////
     52//////////////////////
    6353unsigned int _get_cr()
    6454{
     
    6858    return ret;
    6959}
    70 ///////////////////////////////////////////////////////////////////////////////////
    71 // Returns SR register content
    72 ///////////////////////////////////////////////////////////////////////////////////
     60//////////////////////
    7361unsigned int _get_sr()
    7462{
     
    7866    return ret;
    7967}
    80 //////////////////////////////////////////////////////////////////////////////
    81 // This function set a new value for the CP0 status register.
    82 //////////////////////////////////////////////////////////////////////////////
    83 void _set_sr(unsigned int val)
    84 {
    85     asm volatile( "mtc0      %0,     $12    \n"
    86                   :
    87                   :"r" (val) );
    88 }
    89 //////////////////////////////////////////////////////////////////////////////
    90 // Returns processor index
    91 //////////////////////////////////////////////////////////////////////////////
     68//////////////////////////
    9269unsigned int _get_procid()
    9370{
     
    9774    return (ret & 0x3FF);
    9875}
    99 //////////////////////////////////////////////////////////////////////////////
    100 // Returns local time (32 bits value)
    101 // boot_proctime()
    102 //////////////////////////////////////////////////////////////////////////////
     76////////////////////////////
    10377unsigned int _get_proctime()
    10478{
     
    10882    return ret;
    10983}
    110 //////////////////////////////////////////////////////////////////////////////
    111 // Save SR value into save_sr_ptr variable and disable IRQs.
    112 //////////////////////////////////////////////////////////////////////////////
     84
     85/////////////////////////////////////////////
    11386void _it_disable( unsigned int * save_sr_ptr)
    11487{
     
    12396    *save_sr_ptr = sr;
    12497}
    125 
    126 //////////////////////////////////////////////////////////////////////////////
    127 // Restores previous SR value.
    128 //////////////////////////////////////////////////////////////////////////////
     98//////////////////////////////////////////////
    12999void _it_restore( unsigned int * save_sr_ptr )
    130100{
     
    136106}
    137107
    138 //////////////////////////////////////////////////////////////////////////////
    139 // This function set a new value in CP0 SCHED register.
    140 // (virtual base address of the processor scheduler).
    141 //////////////////////////////////////////////////////////////////////////////
     108/////////////////////////////////
    142109void _set_sched(unsigned int val)
    143110{
     
    146113                   :"r" (val) );
    147114}
     115//////////////////////////////
     116void _set_sr(unsigned int val)
     117{
     118    asm volatile ( "mtc0     %0,     $12            \n"
     119                   :
     120                   :"r" (val) );
     121}
     122
    148123
    149124///////////////////////////////////////////////////////////////////////////////////
     
    151126///////////////////////////////////////////////////////////////////////////////////
    152127
    153 ///////////////////////////////////////////////////////////////////////////////////
    154 // Returns PTPR register content.
    155 ///////////////////////////////////////////////////////////////////////////////////
     128////////////////////////////
    156129unsigned int _get_mmu_ptpr()
    157130{
     
    161134    return ret;
    162135}
    163 ///////////////////////////////////////////////////////////////////////////////////
    164 // Returns MODE register content.
    165 ///////////////////////////////////////////////////////////////////////////////////
     136////////////////////////////
    166137unsigned int _get_mmu_mode()
    167138{
     
    171142    return ret;
    172143}
    173 //////////////////////////////////////////////////////////////////////////////
    174 // This function set a new value for the MMU PTPR register.
    175 //////////////////////////////////////////////////////////////////////////////
     144////////////////////////////////////
    176145void _set_mmu_ptpr(unsigned int val)
    177146{
    178     asm volatile ( "mtc2     %0,     $0            \n"
     147    asm volatile ( "mtc2     %0,     $0      \n"
    179148                   :
    180149                   :"r" (val)
    181150                   :"memory" );
    182151}
    183 //////////////////////////////////////////////////////////////////////////////
    184 // This function set a new value for the MMU MODE register.
    185 //////////////////////////////////////////////////////////////////////////////
     152////////////////////////////////////
    186153void _set_mmu_mode(unsigned int val)
    187154{
    188     asm volatile ( "mtc2     %0,     $1             \n"
     155    asm volatile ( "mtc2     %0,     $1      \n"
    189156                   :
    190157                   :"r" (val)
    191158                   :"memory" );
    192159}
     160////////////////////////////////////////////
     161void _set_mmu_dcache_inval(unsigned int val)
     162{
     163    asm volatile ( "mtc2     %0,     $7      \n"
     164                   :
     165                   :"r" (val)
     166                   :"memory" );
     167}
     168
    193169
    194170////////////////////////////////////////////////////////////////////////////
     
    10331009///////////////////////////////////////////////////////////////////////////////////
    10341010// Invalidate all data cache lines corresponding to a memory
    1035 // buffer (identified by an address and a size).
    1036 // TODO This should be replaced by a write to the CP2 MMU_DCACHE_INVAL
    1037 // register, to be more processor independant.
    1038 ///////////////////////////////////////////////////////////////////////////////////
    1039 void _dcache_buf_invalidate( void * buffer,
    1040                              unsigned int size)
    1041 {
    1042     unsigned int i;
     1011// buffer (identified by virtual base address and size).
     1012///////////////////////////////////////////////////////////////////////////////////
     1013void _dcache_buf_invalidate( unsigned int buf_vbase,
     1014                             unsigned int buf_size )
     1015{
     1016    unsigned int offset;
    10431017    unsigned int tmp;
    1044     unsigned int line_size;
     1018    unsigned int line_size;   // bytes
    10451019
    10461020    // compute data cache line size based on config register (bits 12:10)
     
    10481022                 "mfc0 %0, $16, 1"
    10491023                 : "=r" (tmp) );
     1024
    10501025    tmp = ((tmp >> 10) & 0x7);
    10511026    line_size = 2 << tmp;
    10521027
    10531028    // iterate on cache lines
    1054     for (i = 0; i < size; i += line_size)
    1055     {
    1056         asm volatile(
    1057                 " cache %0, %1"
    1058                 : :"i" (0x11), "R" (*((unsigned char *) buffer + i)) );
     1029    for ( offset = 0; offset < buf_size; offset += line_size)
     1030    {
     1031        _set_mmu_dcache_inval( buf_vbase + offset );
    10591032    }
    10601033}
     
    11101083    if ( vobj_id != 0xFFFFFFFF )
    11111084    {
    1112         *vaddr  = vobjs[vobj_id].vaddr;
     1085        *vaddr  = vobjs[vobj_id].vbase;
    11131086        *length = vobjs[vobj_id].length;
    11141087        return 0;
Note: See TracChangeset for help on using the changeset viewer.