nkeynes@550: #include nkeynes@550: #include nkeynes@550: #include "lib.h" nkeynes@550: nkeynes@550: #define PTEH 0xFF000000 nkeynes@550: #define PTEL 0xFF000004 nkeynes@550: #define TTB 0xFF000008 nkeynes@550: #define TEA 0xFF00000C nkeynes@550: #define MMUCR 0xFF000010 nkeynes@550: #define PTEA 0xFF000034 nkeynes@550: nkeynes@550: #define ITLB_ADDR(entry) (0xF2000000 + (entry<<8)) nkeynes@550: #define ITLB_DATA(entry) (0xF3000000 + (entry<<8)) nkeynes@550: #define UTLB_ADDR(entry) (0xF6000000 + (entry<<8)) nkeynes@550: #define UTLB_DATA1(entry) (0xF7000000 + (entry<<8)) nkeynes@550: #define UTLB_DATA2(entry) (0xF7800000 + (entry<<8)) nkeynes@550: nkeynes@550: /* Bang on the mmio side of the TLBs to make sure the bits nkeynes@550: * respond appropriately (with AT disabled so we don't risk nkeynes@550: * doing a hard crash) */ nkeynes@550: void test_tlb_mmio() nkeynes@550: { nkeynes@550: int entry; nkeynes@550: for( entry=0; entry<64; entry++ ) { nkeynes@550: long_write( UTLB_DATA1(entry), 0 ); nkeynes@550: long_write( UTLB_ADDR(entry), 0xFFFFFFFF ); nkeynes@550: assert( long_read( UTLB_ADDR(entry) ) == 0xFFFFFFFF ); nkeynes@550: assert( long_read( UTLB_DATA1(entry) ) == 0x00000104 ); nkeynes@550: long_write( UTLB_ADDR(entry), 0x00000000 ); nkeynes@550: assert( long_read( UTLB_ADDR(entry) ) == 0x00000000 ); nkeynes@550: assert( long_read( UTLB_DATA1(entry) ) == 0x00000000 ); nkeynes@550: long_write( UTLB_DATA1(entry), 0xFFFFFFFF ); nkeynes@550: assert( long_read( UTLB_DATA1(entry) ) == 0x1FFFFDFF ); nkeynes@550: assert( long_read( UTLB_ADDR(entry) ) == 0x00000300 ); nkeynes@550: long_write( UTLB_DATA1(entry), 0x00000000 ); nkeynes@550: assert( long_read( UTLB_DATA1(entry) ) == 0x00000000 ); nkeynes@550: assert( long_read( UTLB_ADDR(entry) ) == 0x00000000 ); nkeynes@550: long_write( UTLB_DATA2(entry), 0xFFFFFFFF ); nkeynes@550: assert( long_read( UTLB_DATA2(entry) ) == 0x0000000F ); nkeynes@550: long_write( UTLB_DATA2(entry), 0x00000000 ); nkeynes@550: assert( long_read( UTLB_DATA2(entry) ) == 0x00000000 ); nkeynes@550: } nkeynes@550: nkeynes@550: for( entry=0; entry<4; entry++ ) { nkeynes@550: long_write( ITLB_DATA(entry), 0 ); nkeynes@550: long_write( ITLB_ADDR(entry), 0xFFFFFFFF ); nkeynes@550: assert( long_read( ITLB_ADDR(entry) ) == 0xFFFFFDFF ); nkeynes@550: assert( long_read( ITLB_DATA(entry) ) == 0x00000100 ); nkeynes@550: long_write( ITLB_ADDR(entry), 0x00000000 ); nkeynes@550: assert( long_read( ITLB_ADDR(entry) ) == 0x00000000 ); nkeynes@550: assert( long_read( ITLB_DATA(entry) ) == 0x00000000 ); nkeynes@550: long_write( ITLB_DATA(entry), 0xFFFFFFFF ); nkeynes@550: assert( long_read( ITLB_DATA(entry) ) == 0x1FFFFDDA ); nkeynes@550: assert( long_read( ITLB_ADDR(entry) ) == 0x00000100 ); nkeynes@550: long_write( ITLB_DATA(entry), 0x00000000 ); nkeynes@550: assert( long_read( ITLB_DATA(entry) ) == 0x00000000 ); nkeynes@550: assert( long_read( ITLB_ADDR(entry) ) == 0x00000000 ); nkeynes@550: nkeynes@550: } nkeynes@550: } nkeynes@550: nkeynes@550: int main( int argc, char *argv[] ) nkeynes@550: { nkeynes@550: test_tlb_mmio(); nkeynes@551: return 0; nkeynes@550: }