nkeynes@550 | 1 | #include <assert.h>
|
nkeynes@550 | 2 | #include <stdio.h>
|
nkeynes@550 | 3 | #include "lib.h"
|
nkeynes@550 | 4 |
|
nkeynes@550 | 5 | #define PTEH 0xFF000000
|
nkeynes@550 | 6 | #define PTEL 0xFF000004
|
nkeynes@550 | 7 | #define TTB 0xFF000008
|
nkeynes@550 | 8 | #define TEA 0xFF00000C
|
nkeynes@550 | 9 | #define MMUCR 0xFF000010
|
nkeynes@550 | 10 | #define PTEA 0xFF000034
|
nkeynes@550 | 11 |
|
nkeynes@550 | 12 | #define ITLB_ADDR(entry) (0xF2000000 + (entry<<8))
|
nkeynes@550 | 13 | #define ITLB_DATA(entry) (0xF3000000 + (entry<<8))
|
nkeynes@550 | 14 | #define UTLB_ADDR(entry) (0xF6000000 + (entry<<8))
|
nkeynes@550 | 15 | #define UTLB_DATA1(entry) (0xF7000000 + (entry<<8))
|
nkeynes@550 | 16 | #define UTLB_DATA2(entry) (0xF7800000 + (entry<<8))
|
nkeynes@550 | 17 |
|
nkeynes@550 | 18 | /* Bang on the mmio side of the TLBs to make sure the bits
|
nkeynes@550 | 19 | * respond appropriately (with AT disabled so we don't risk
|
nkeynes@550 | 20 | * doing a hard crash) */
|
nkeynes@550 | 21 | void test_tlb_mmio()
|
nkeynes@550 | 22 | {
|
nkeynes@550 | 23 | int entry;
|
nkeynes@550 | 24 | for( entry=0; entry<64; entry++ ) {
|
nkeynes@550 | 25 | long_write( UTLB_DATA1(entry), 0 );
|
nkeynes@550 | 26 | long_write( UTLB_ADDR(entry), 0xFFFFFFFF );
|
nkeynes@550 | 27 | assert( long_read( UTLB_ADDR(entry) ) == 0xFFFFFFFF );
|
nkeynes@550 | 28 | assert( long_read( UTLB_DATA1(entry) ) == 0x00000104 );
|
nkeynes@550 | 29 | long_write( UTLB_ADDR(entry), 0x00000000 );
|
nkeynes@550 | 30 | assert( long_read( UTLB_ADDR(entry) ) == 0x00000000 );
|
nkeynes@550 | 31 | assert( long_read( UTLB_DATA1(entry) ) == 0x00000000 );
|
nkeynes@550 | 32 | long_write( UTLB_DATA1(entry), 0xFFFFFFFF );
|
nkeynes@550 | 33 | assert( long_read( UTLB_DATA1(entry) ) == 0x1FFFFDFF );
|
nkeynes@550 | 34 | assert( long_read( UTLB_ADDR(entry) ) == 0x00000300 );
|
nkeynes@550 | 35 | long_write( UTLB_DATA1(entry), 0x00000000 );
|
nkeynes@550 | 36 | assert( long_read( UTLB_DATA1(entry) ) == 0x00000000 );
|
nkeynes@550 | 37 | assert( long_read( UTLB_ADDR(entry) ) == 0x00000000 );
|
nkeynes@550 | 38 | long_write( UTLB_DATA2(entry), 0xFFFFFFFF );
|
nkeynes@550 | 39 | assert( long_read( UTLB_DATA2(entry) ) == 0x0000000F );
|
nkeynes@550 | 40 | long_write( UTLB_DATA2(entry), 0x00000000 );
|
nkeynes@550 | 41 | assert( long_read( UTLB_DATA2(entry) ) == 0x00000000 );
|
nkeynes@550 | 42 | }
|
nkeynes@550 | 43 |
|
nkeynes@550 | 44 | for( entry=0; entry<4; entry++ ) {
|
nkeynes@550 | 45 | long_write( ITLB_DATA(entry), 0 );
|
nkeynes@550 | 46 | long_write( ITLB_ADDR(entry), 0xFFFFFFFF );
|
nkeynes@550 | 47 | assert( long_read( ITLB_ADDR(entry) ) == 0xFFFFFDFF );
|
nkeynes@550 | 48 | assert( long_read( ITLB_DATA(entry) ) == 0x00000100 );
|
nkeynes@550 | 49 | long_write( ITLB_ADDR(entry), 0x00000000 );
|
nkeynes@550 | 50 | assert( long_read( ITLB_ADDR(entry) ) == 0x00000000 );
|
nkeynes@550 | 51 | assert( long_read( ITLB_DATA(entry) ) == 0x00000000 );
|
nkeynes@550 | 52 | long_write( ITLB_DATA(entry), 0xFFFFFFFF );
|
nkeynes@550 | 53 | assert( long_read( ITLB_DATA(entry) ) == 0x1FFFFDDA );
|
nkeynes@550 | 54 | assert( long_read( ITLB_ADDR(entry) ) == 0x00000100 );
|
nkeynes@550 | 55 | long_write( ITLB_DATA(entry), 0x00000000 );
|
nkeynes@550 | 56 | assert( long_read( ITLB_DATA(entry) ) == 0x00000000 );
|
nkeynes@550 | 57 | assert( long_read( ITLB_ADDR(entry) ) == 0x00000000 );
|
nkeynes@550 | 58 |
|
nkeynes@550 | 59 | }
|
nkeynes@550 | 60 | }
|
nkeynes@550 | 61 |
|
nkeynes@550 | 62 | int main( int argc, char *argv[] )
|
nkeynes@550 | 63 | {
|
nkeynes@550 | 64 | test_tlb_mmio();
|
nkeynes@551 | 65 | return 0;
|
nkeynes@550 | 66 | }
|