Search
lxdream.org :: lxdream/test/testmmu.c
lxdream 0.9.1
released Jun 29
Download Now
filename test/testmmu.c
changeset 551:07125ce718da
prev550:a27e31340147
author nkeynes
date Thu Jan 31 09:35:01 2008 +0000 (16 years ago)
permissions -rw-r--r--
last change Update release notes for 0.8.3
file annotate diff log raw
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
}
.