Changes between Version 40 and Version 41 of VirtualMemory


Ignore:
Timestamp:
Oct 29, 2009, 8:10:38 PM (15 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • VirtualMemory

    v40 v41  
    257257||                                                ||             ||                                                                         ||            ||
    258258|| MMU_PTPR                           ||    0       || Page Table Pointer Register                       || R/W   ||
    259 || MMU_MODE                        ||    1       || Data & Inst TLBs and caches Mode Register                || R/W   ||
     259|| MMU_MODE                        ||    1       ||  Mode Register                                             || R/W   ||
    260260|| MMU_ICACHE_FLUSH          ||    2      || Instruction Cache flush                            || W       ||
    261261|| MMU_DCACHE_FLUSH        ||      3       || Data Cache flush                                          || W       ||
     
    267267|| MMU_DCACHE_PREFETCH ||    9       || Data Cache line prefetch                             || W     ||
    268268|| MMU_SYNC                           ||  10      || Complete pending writes                            || W     ||
    269 || MMU_IETR                                ||  11      || Instruction Exception Type Register          || R      ||
     269|| MMU_IETR                                ||  11      || Instruction Exception Type Register           || R      ||
    270270|| MMU_DETR                           ||  12      || Data Exception Type Register                        || R      ||
    271 || MMU_IBVAR                          ||  13      || Instruction Bad Virtual Address Register  || R      ||
    272 || MMU_DBVAR                        ||  14      || Data Bad Virtual Address Register             || R      ||
    273 || MMU_PARAMS                      ||  15      || Caches & TLBs hardware parameters        || R      ||
    274 || MMU_RELEASE                      ||  16      || Generic MMU release number                    || R      ||
    275 || MMU_
     271|| MMU_IBVAR                          ||  13      || Instruction Bad Virtual Address Register   || R      ||
     272|| MMU_DBVAR                        ||  14      || Data Bad Virtual Address Register               || R      ||
     273|| MMU_PARAMS                      ||  15      || Caches & TLBs hardware parameters           || R      ||
     274|| MMU_RELEASE                      ||  16      || Generic MMU release number                       || R      ||
     275|| MMU_WORD_LO                  ||  17      || Lowest part of a double word                        || R/W ||
     276|| MMU_WORD_HI                    ||  18      || Highest part of a double word                        || R/W ||
     277|| MMU_DOUBLE_LL                ||  21      ||  Double word linked load                                  || W     ||
     278|| MMU_DOUBLE_SC                ||  21      ||  Double word store conditional                       || W     ||
     279|| MMU_ICACHE_PA_INV         ||  19      || Instruction cache inval physical adressing    || W    ||
     280|| MMU_DCACHE_PA_INV       ||  20      || Data cache inval physical addressing             || W     ||
    276281
    277282'''Note''': A change to this table should be kept in sync with https://www.soclib.fr/trac/dev/wiki/Component/Iss2Api
     
    285290|| 00000 || BASE_ADDRESS[39:13] ||
    286291
    287 === 3.3.2 MMU_MODE ===
     292==== 3.3.2 MMU_MODE ====
    288293
    289294The '''MMU_MODE''' register has four bits and these 16 values are described as below.
     
    292297|| (INS TLB) || (DATA TLB) || (INS CACHE) || (DATA CACHE) ||
    293298
    294 === 3.3.3 MMU_ICACHE_FLUSH & MMU_DCACHE_FLUSH ===
     299==== 3.3.3 MMU_ICACHE_FLUSH & MMU_DCACHE_FLUSH ====
    295300
    296301Writing any value  in the '''MMU_ICACHE_FLUSH''' register (resp. '''MMU_DCACHE_FLUSH''' register) invalidates all cache lines stored in the  instruction cache (resp. data cache).
    297302
    298 === 3.3.4 MMU_ITLB_INVAL & MMU_DTLB_INVAL ===
    299 
    300 The value written in the 32 bits '''MMU_ITLB_INVAL''' register (resp. '''MMU_DTLB_INVAL''' register) is interpreted as a virtual address. If the instruction TLB (resp. the data TLB) contains an entry corresponding to this address, this entry is invalidated.
    301 
    302 === 3.3.5 MMU_ICACHE_INVAL & MMU_DCACHE_INVAL ===
    303 
    304 The value written in the 32 bits '''MMU_ICACHE_INVAL''' register (resp. '''MMU_DCACHE_INVAL''' register) is interpreted as a virtual address. This address is translated to a physical address. If the instruction cache (resp. the data cache) contains an entry corresponding to this address, this entry is invalidated.
    305 
    306 === 3.3.6 MMU_ICACHE_PREFETCH & MMU_DCACHE_PREFETCH ===
     303==== 3.3.4 MMU_ITLB_INVAL & MMU_DTLB_INVAL ====
     304
     305The value written in the 32 bits '''MMU_ITLB_INVAL''' register (resp. '''MMU_DTLB_INVAL''' register) is interpreted as a virtual address. If the instruction TLB (resp. the data TLB) contains an entry corresponding to this address, this entry is invalidated. This is a blocking request for the processor.
     306
     307==== 3.3.5 MMU_ICACHE_INVAL & MMU_DCACHE_INVAL ====
     308
     309The value written in the 32 bits '''MMU_ICACHE_INVAL''' register (resp. '''MMU_DCACHE_INVAL''' register) is interpreted as a virtual address. This address is translated to a physical address. If the instruction cache (resp. the data cache) contains an entry corresponding to this address, this entry is invalidated. This is a blocking request for the processor.
     310
     311==== 3.3.6 MMU_ICACHE_PREFETCH & MMU_DCACHE_PREFETCH ====
    307312
    308313The value written in the 32 bits '''MMU_ICACHE_PREFETCH''' register (resp. '''MMU_DCACHE_PREFETCH''' register) is interpreted as a virtual address. This address is translated to a physical address. If the instruction cache (resp. the data cache) does not contain the corresponding cache line, this cache line is fetched from memory.
    309 
    310 === 3.3.x MMU_PARAMS ===
     314This is a non-blocking request for the processor.
     315
     316==== 3.3.7 MMU_SYNC ====
     317
     318Writing any value in this '''MMU_SYNC''' register will force execution of posted write requests.
     319This is a blocking request for the processor.
     320
     321==== 3.3.8 MMU_IETR & MMU_DETR ====
     322
     323MMU exceptions are reported in these two registers, as described in section 3.2.
     324
     325==== 3.3.9 MMU_IBVAR & MMU_DBVAR ====
     326
     327Faulty virtual adresses will be written in these two registers.
     328
     329==== 3.3.10 MMU_PARAMS ====
    311330
    312331The '''MMU_PARAMS''' register define the instruction and data caches & TLBs characteristics :
     
    323342 * NBL (4 bits) : Ln(number of bytes per Data or Instruction cache line)
    324343
     344==== 3.3.11 MMU_RELEASE ====
     345
    325346The '''MMU_RELEASE''' register contains the release number for a given hardware implementation :
    326347|| SPECIFICATION_INDEX || IMPLEMENTATION_INDEX ||
    327348 * SPECIFICATION_INDEX (16 bits)
    328349 * IMPLEMENTATION_INDEX (16 bits)
     350
     351==== 3.3.12 MMU_WORD_HI & MMU_WORD_LO ====
     352
     353The two 32 bits '''MMU_DOUBLE_HI''' & MMU_DOUBLE_LO''' registers implement a double word data storage.
     354They are used to support cache line invalidation in physical adressing (section 3.3.15), and to support
     355double words LL & SC accesses (section 3.3.13 & section 3.3.14).
     356
     357==== 3.3.13 MMU_DOUBLE_LL ====
     358
     359The value written in the '''MMU_DOUBLE_LL''' register is interpreted as a virtual address. It is translated to a physical address, and a double word (64 bits) Linked Load transaction is initiated. The access must be aligned on a double word boundary (the 3 LSB bits of the address are ignored). The read value is written in the MMU_WORD_HI & MMU_WORD_LO registers. This is a blocking transaction for the processor.
     360
     361==== 3.4.14 MMU_DOUBLE_SC ====
     362
     363The value written in the'''MMU_DOUBLE_SC''' register is interpreted as a virtual address. It is translated to a physical address, and a double word (64 bits) Store Conditionnal transaction is initiated. The access must be aligned on a double word boundary (the 3 LSB bits of the address are ignored). The transmitted data are the values stored in the he MMU_WORD_HI & MMU_WORD_LO registers. The returned value is written in the MMU_WORD_LO register. This is a blocking transaction for the processor.
     364
     365==== 3.4.15 MMU_ICACHE_PA_INV & MMU_DCACHE_PA_INV ====
     366
     367Writing any value in the '''MMU_ICACHE_PA_INV''' register (resp. '''MMU_DCACHE_PA_INV''' register) can invalidate a cache line in the instruction cache (resp. data cache).
     368The values stored in the MMU_WORD_HI & MMU_WORD_LO registers is interpreted as a physical address.
     369If the instruction cache (resp. data cache) contains a cache line corresponding to this address, it is invalidated.
     370This is a blocking request for the processor.
     371