Changeset b10be06 in rtems


Ignore:
Timestamp:
Jan 31, 2011, 3:48:22 PM (9 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11, master
Children:
4c00f02
Parents:
7171baf
Message:

2011-01-31 Sebastian Huber <sebastian.huber@…>

  • e500/mmu/mmu.c: Use common defines.
Location:
c/src/lib/libcpu/powerpc
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libcpu/powerpc/ChangeLog

    r7171baf rb10be06  
     12011-01-31      Sebastian Huber <sebastian.huber@embedded-brains.de>
     2
     3        * e500/mmu/mmu.c: Use common defines.
     4
    152011-01-28      Joel Sherrill <joel.sherrilL@OARcorp.com>
    26
  • c/src/lib/libcpu/powerpc/e500/mmu/mmu.c

    r7171baf rb10be06  
    7979#include "e500_mmu.h"
    8080
    81 #if 0
    82 #define MSR_UCLE        (1<<(63-37)) /* User-mode cache lock      PPC: ?                     */
    83 #define MSR_SPE         (1<<(63-38)) /* SPE enable                PPC: VE   (altivec)        */
    84 #define MSR_WE          (1<<(63-45)) /* Wait state enable         PPC: POW  (pwr. mgmt)      */
    85 #define MSR_CE          (1<<(63-46)) /* Critical-interrupt enable PPC: TGPR (TLBupdt in use) */
    86 #define MSR_EE          (1<<(63-48)) /* External-interrupt enable PPC: EE                    */
    87 #define MSR_PR          (1<<(63-49)) /* User mode                 PPC: PR                    */
    88 #define MSR_ME          (1<<(63-51)) /* Machine-check enable      PPC: ME                    */
    89 #define MSR_UBLE        (1<<(63-53)) /* User BTB lock enable      PPC: SE   (sstep enable)   */
    90 #define MSR_DE          (1<<(63-54)) /* Debug-interrupt enable    PPC: BE   (br. tr. enbl)   */
    91 #define MSR_IS          (1<<(63-58)) /* Instruction address space PPC: IR   (inst. MMU enbl) */
    92 #define MSR_DS          (1<<(63-59)) /* Data address space        PPC: DR   (data MMU enbl)  */
    93 #define MSR_PMM         (1<<(63-61)) /* Performance-monitor mark  PPC: ?                     */
    94 #endif
    95 
    96 /* Bit definitions for MAS registers                                             */
    97 #define SPR_MAS0                624
    98 #define MAS0_TLBSEL             (           1  << (63-35))      /* Which TLB to access       */
    99 #define MAS0_ESEL(n)    ( (0xf & (n))  << (63-47))      /* Selected TLB entry        */
    100 #define MAS0_ESEL_RD(m) ( ((m) >> (63-47)) & 0xf )
    101 #define MAS0_NV                 (           1  << (63-63))      /* Next victim               */
    102 
    103 #define SPR_MAS1                625
    104 #define MAS1_V                  (           1  << (63-32))      /* Entry valid               */
    105 #define MAS1_IPROT              (           1  << (63-33))      /* Invalidate protect        */
    106 #define MAS1_TID(n)             ( (0xff & (n)) << (63-47))      /* Translation ID            */
    107 #define MAS1_TID_GET(n) ( ((n) >> (63-47)) & 0xfff)
    108 
    109 #define MAS1_TS                 (           1  << (63-51))      /* Translation space         */
    110 #define MAS1_TSIZE(n)   ( (0xf & (n))  << (63-55))      /* Translation ID            */
    111 #define MAS1_TSIZE_GET(n) ( ((n)>>(63-55)) & 0xf)
    112 
    113 #define SPR_MAS2                626
    114 #define MAS2_EPN(n)             ( (((1<<21)-1)&(n)) << (63-51)) /* EPN                   */
    115 #define MAS2_EPN_GET(n) (((n)>>(63-51)) & 0xfffff)
    116 #define MAS2_X0                 (           1  << (63-57))      /* Attr. 0                   */
    117 #define MAS2_X1                 (           1  << (63-58))      /* Attr. 1                   */
    118 #define MAS2_W                  (           1  << (63-59))      /* Write-through             */
    119 #define MAS2_I                  (           1  << (63-60))      /* Cache-inhibited           */
    120 #define MAS2_M                  (           1  << (63-61))      /* Memory-coherence req.     */
    121 #define MAS2_G                  (           1  << (63-62))      /* Guarded                   */
    122 #define MAS2_E                  (           1  << (63-63))      /* Little-endian             */
    123 #define MAS2_ATTR(x)    ( (x) & 0x7f )
    124 #define MAS2_ATTR_GET(x) ( (x) & 0x7f )
    125 
    126 #define SPR_MAS3                627
    127 #define MAS3_RPN(n)             ( (((1<<21)-1)&(n)) << (63-51)) /* RPN                   */
    128 #define MAS3_RPN_GET(n) (((n)>>(63-51)) & 0xfffff)
    129 #define MAS3_U0                 (           1  << (63-54))      /* User attr. 0              */
    130 #define MAS3_U1                 (           1  << (63-55))      /* User attr. 1              */
    131 #define MAS3_U2                 (           1  << (63-56))      /* User attr. 2              */
    132 #define MAS3_U3                 (           1  << (63-57))      /* User attr. 3              */
    133 #define MAS3_UX                 (           1  << (63-58))      /* User  exec.               */
    134 #define MAS3_SX                 (           1  << (63-59))      /* Super exec.               */
    135 #define MAS3_UW                 (           1  << (63-60))      /* User  write               */
    136 #define MAS3_SW                 (           1  << (63-61))      /* Super write               */
    137 #define MAS3_UR                 (           1  << (63-62))      /* User  read                */
    138 #define MAS3_SR                 (           1  << (63-63))      /* Super read                */
    139 
    140 #define MAS3_PERM(n)    ( (n) & 0x3ff )
    141 #define MAS3_PERM_GET(n) ( (n) & 0x3ff )
    142 
    143 #define SPR_MAS4                628
    144 #define MAS4_TLBSELD    (           1  << (63-35))      /* TLBSEL default            */
    145 #define MAS4_TIDSELD(n) ( (0x3 & (n))  << (63-47))      /* TID default               */
    146 #define MAS4_TSIZED(n)  ( (0xf & (n))  << (63-55))      /* TSIZE default             */
    147 #define MAS4_X0D                MAS2_X0
    148 #define MAS4_X1D                MAS2_X1
    149 #define MAS4_WD                 MAS2_W
    150 #define MAS4_ID                 MAS2_I
    151 #define MAS4_MD                 MAS2_M
    152 #define MAS4_GD                 MAS2_G
    153 #define MAS4_ED                 MAS2_E
    154 
    155 #define SPR_MAS6                630
    156 #define MAS6_SPID0(n)   ( (0xff & (n)) << (63-55))      /* PID used for search       */
    157 #define MAS6_SAS                (           1  << (63-63))      /* AS for search             */
    158 
    159 #define SPR_PID0                48
    160 #define SPR_PID1                633
    161 #define SPR_PID2                634
    162 
    16381#define TLBIVAX_TLBSEL  (1<<(63-60))
    16482#define TLBIVAX_INV_ALL (1<<(63-61))
     
    186104        {             asm volatile("mtspr %1, %0":: "r"(x),"i"(rmas)); }
    187105
    188 __RDWRMAS(0,SPR_MAS0)
    189 __RDWRMAS(1,SPR_MAS1)
    190 __RDWRMAS(2,SPR_MAS2)
    191 __RDWRMAS(3,SPR_MAS3)
    192 __RDWRMAS(4,SPR_MAS4)
    193 __RDWRMAS(6,SPR_MAS6)
     106__RDWRMAS(0,FSL_EIS_MAS0)
     107__RDWRMAS(1,FSL_EIS_MAS1)
     108__RDWRMAS(2,FSL_EIS_MAS2)
     109__RDWRMAS(3,FSL_EIS_MAS3)
     110__RDWRMAS(4,FSL_EIS_MAS4)
     111__RDWRMAS(6,FSL_EIS_MAS6)
    194112
    195113#undef __RDWRMAS
     
    197115static int initialized  = 0;
    198116
    199 E500_tlb_va_cache_t rtems_e500_tlb_va_cache[16] = { {{0}},};
     117E500_tlb_va_cache_t rtems_e500_tlb_va_cache[16];
    200118
    201119/* Since it is likely that these routines are used during
     
    253171
    254172        if ( key & E500_SELTLB_1 ) {
    255                 _write_MAS0( MAS0_TLBSEL | MAS0_ESEL(idx) );
     173                _write_MAS0( FSL_EIS_MAS0_TLBSEL | FSL_EIS_MAS0_ESEL(idx) );
    256174        } else {
    257                 _write_MAS0( (idx & 128) ? MAS0_ESEL(1) : MAS0_ESEL(0) );
    258                 _write_MAS2( MAS2_EPN( idx & 127 ) );
     175                _write_MAS0( (idx & 128) ? FSL_EIS_MAS0_ESEL(1) : FSL_EIS_MAS0_ESEL(0) );
     176                _write_MAS2( FSL_EIS_MAS2_EPN( idx & 127 ) );
    259177        }
    260178}
     
    311229        tlb = sel ? rtems_e500_tlb_va_cache + idx : &buf;
    312230
    313         if ( (tlb->att.v  = (MAS1_V & mas1) ? 1 : 0) ) {
    314                 tlb->va.va_epn = MAS2_EPN_GET(mas2);
    315                 tlb->rpn       = MAS3_RPN_GET(mas3);
    316                 tlb->va.va_tid = MAS1_TID_GET(mas1);
    317                 tlb->att.ts    = (MAS1_TS & mas1) ? 1 : 0;
    318                 tlb->att.sz    = sel ? MAS1_TSIZE_GET(mas1) : 1 /* 4k size */;
    319                 tlb->att.wimge = MAS2_ATTR_GET(mas2);
    320                 tlb->att.perm  = MAS3_PERM_GET(mas3);
     231        if ( (tlb->att.v  = (FSL_EIS_MAS1_V & mas1) ? 1 : 0) ) {
     232                tlb->va.va_epn = FSL_EIS_MAS2_EPN_GET(mas2);
     233                tlb->rpn       = FSL_EIS_MAS3_RPN_GET(mas3);
     234                tlb->va.va_tid = FSL_EIS_MAS1_TID_GET(mas1);
     235                tlb->att.ts    = (FSL_EIS_MAS1_TS & mas1) ? 1 : 0;
     236                tlb->att.sz    = sel ? FSL_EIS_MAS1_TSIZE_GET(mas1) : 1 /* 4k size */;
     237                tlb->att.wimge = FSL_EIS_MAS2_ATTR_GET(mas2);
     238                tlb->att.perm  = FSL_EIS_MAS3_PERM_GET(mas3);
    321239        }
    322240
     
    347265                        myprintf(f,
    348266                                "Attributes: PERM 0x%03x (ux/sx/uw/sw/ur/sr) WIMGE 0x%02x IPROT %i\r\n",
    349                                 tlb->att.perm, tlb->att.wimge, (sel && (mas1 & MAS1_IPROT) ? 1 : 0)
     267                                tlb->att.perm, tlb->att.wimge, (sel && (mas1 & FSL_EIS_MAS1_IPROT) ? 1 : 0)
    350268                        );
    351269                        myprintf(f,
     
    481399        tid = E500_TLB_ATTR_TID_GET(attr);
    482400
    483         mas1 = (attr & E500_TLB_ATTR_TS) ? MAS1_TS : 0;
     401        mas1 = (attr & E500_TLB_ATTR_TS) ? FSL_EIS_MAS1_TS : 0;
    484402
    485403        if ( sz >=0 ) {
     
    499417
    500418        /* OK to proceed */
    501         mas1 |= MAS1_IPROT | MAS1_TID(tid);
     419        mas1 |= FSL_EIS_MAS1_IPROT | FSL_EIS_MAS1_TID(tid);
    502420
    503421        if ( sz >= 0 )
    504                 mas1 |= MAS1_V | MAS1_TSIZE(sz);
    505 
    506         mas2 = MAS2_EPN( ea>>12 ) | E500_TLB_ATTR_WIMGE(attr);
    507         mas3 = MAS3_RPN( pa>>12 ) | E500_TLB_ATTR_PERM_GET(attr);
     422                mas1 |= FSL_EIS_MAS1_V | FSL_EIS_MAS1_TSIZE(sz);
     423
     424        mas2 = FSL_EIS_MAS2_EPN( ea>>12 ) | E500_TLB_ATTR_WIMGE(attr);
     425        mas3 = FSL_EIS_MAS3_RPN( pa>>12 ) | E500_TLB_ATTR_PERM_GET(attr);
    508426        /* mas4 is not really relevant; we don't use TLB replacement */
    509         mas4 = MAS4_TLBSELD | MAS4_TIDSELD(0) | MAS4_TSIZED(9) | MAS4_ID | MAS4_GD;
     427        mas4 = FSL_EIS_MAS4_TLBSELD | FSL_EIS_MAS4_TIDSELD(0) | FSL_EIS_MAS4_TSIZED(9) | FSL_EIS_MAS4_ID | FSL_EIS_MAS4_GD;
    510428
    511429        rtems_interrupt_disable(lvl);
     
    612530        for ( i=0; i<3; i++ ) {
    613531                switch (i) {
    614                         case 0: asm volatile("mfspr %0, %1":"=r"(pid):"i"(SPR_PID0)); break;
    615                         case 1: asm volatile("mfspr %0, %1":"=r"(pid):"i"(SPR_PID1)); break;
    616                         case 2: asm volatile("mfspr %0, %1":"=r"(pid):"i"(SPR_PID2)); break;
     532                        case 0: asm volatile("mfspr %0, %1":"=r"(pid):"i"(FSL_EIS_PID0)); break;
     533                        case 1: asm volatile("mfspr %0, %1":"=r"(pid):"i"(FSL_EIS_PID1)); break;
     534                        case 2: asm volatile("mfspr %0, %1":"=r"(pid):"i"(FSL_EIS_PID2)); break;
    617535                        default:
    618536                                goto bail;
    619537                }
    620538
    621                 _write_MAS6( MAS6_SPID0(pid) | (as ? MAS6_SAS : 0 ) );
     539                _write_MAS6( FSL_EIS_MAS6_SPID0(pid) | (as ? FSL_EIS_MAS6_SAS : 0 ) );
    622540
    623541                asm volatile("tlbsx 0, %0"::"r"(ea));
     
    625543                mas1 = _read_MAS1();
    626544
    627                 if ( (MAS1_V & mas1) ) {
     545                if ( (FSL_EIS_MAS1_V & mas1) ) {
    628546                        mas0 = _read_MAS0();
    629                         if ( MAS0_TLBSEL & mas0 ) {
     547                        if ( FSL_EIS_MAS0_TLBSEL & mas0 ) {
    630548                                /* TLB1 */
    631                                 rval = MAS0_ESEL_RD(mas0) | E500_SELTLB_1;
     549                                rval = FSL_EIS_MAS0_ESEL_GET(mas0) | E500_SELTLB_1;
    632550                        } else {
    633                                 rval = (ea >> (63-51)) | (( MAS0_NV & mas0 ) ? 180 : 0 ) ;
     551                                rval = (ea >> (63-51)) | (( FSL_EIS_MAS0_NV & mas0 ) ? 180 : 0 ) ;
    634552                        }
    635553                        break;
     
    696614
    697615        /* read old entries */
    698         _write_MAS1( _read_MAS1() & ~MAS1_V );
     616        _write_MAS1( _read_MAS1() & ~FSL_EIS_MAS1_V );
    699617
    700618        asm volatile(
Note: See TracChangeset for help on using the changeset viewer.