Search
lxdream.org :: lxdream/test/sh4/mmummio.c
lxdream 0.9.1
released Jun 29
Download Now
filename test/sh4/mmummio.c
changeset 976:e57a25d9eb7d
author nkeynes
date Mon Jan 26 12:32:23 2009 +0000 (15 years ago)
permissions -rw-r--r--
last change Add some initial TLB test cases
file annotate diff log raw
nkeynes@976
     1
#include <assert.h>
nkeynes@976
     2
#include <stdio.h>
nkeynes@976
     3
#include "../lib.h"
nkeynes@976
     4
nkeynes@976
     5
#define PTEH  0xFF000000
nkeynes@976
     6
#define PTEL  0xFF000004
nkeynes@976
     7
#define TTB   0xFF000008
nkeynes@976
     8
#define TEA   0xFF00000C
nkeynes@976
     9
#define MMUCR 0xFF000010
nkeynes@976
    10
#define PTEA  0xFF000034
nkeynes@976
    11
nkeynes@976
    12
#define ITLB_ADDR(entry) (0xF2000000 + (entry<<8))
nkeynes@976
    13
#define ITLB_DATA(entry) (0xF3000000 + (entry<<8))
nkeynes@976
    14
#define UTLB_ADDR(entry) (0xF6000000 + (entry<<8))
nkeynes@976
    15
#define UTLB_DATA1(entry) (0xF7000000 + (entry<<8))
nkeynes@976
    16
#define UTLB_DATA2(entry) (0xF7800000 + (entry<<8))
nkeynes@976
    17
nkeynes@976
    18
/* Bang on the mmio side of the TLBs to make sure the bits
nkeynes@976
    19
 * respond appropriately (with AT disabled so we don't risk
nkeynes@976
    20
 * doing a hard crash) */
nkeynes@976
    21
void test_tlb_mmio()
nkeynes@976
    22
{
nkeynes@976
    23
    int entry;
nkeynes@976
    24
    for( entry=0; entry<64; entry++ ) {
nkeynes@976
    25
	long_write( UTLB_DATA1(entry), 0 );
nkeynes@976
    26
	long_write( UTLB_ADDR(entry), 0xFFFFFFFF );
nkeynes@976
    27
	assert( long_read( UTLB_ADDR(entry) ) == 0xFFFFFFFF );
nkeynes@976
    28
	assert( long_read( UTLB_DATA1(entry) ) == 0x00000104 );
nkeynes@976
    29
	long_write( UTLB_ADDR(entry), 0x00000000 );
nkeynes@976
    30
	assert( long_read( UTLB_ADDR(entry) ) == 0x00000000 );
nkeynes@976
    31
	assert( long_read( UTLB_DATA1(entry) ) == 0x00000000 );
nkeynes@976
    32
	long_write( UTLB_DATA1(entry), 0xFFFFFFFF );
nkeynes@976
    33
	assert( long_read( UTLB_DATA1(entry) ) == 0x1FFFFDFF );
nkeynes@976
    34
	assert( long_read( UTLB_ADDR(entry) ) == 0x00000300 );
nkeynes@976
    35
	long_write( UTLB_DATA1(entry), 0x00000000 );
nkeynes@976
    36
	assert( long_read( UTLB_DATA1(entry) ) == 0x00000000 );
nkeynes@976
    37
	assert( long_read( UTLB_ADDR(entry) ) == 0x00000000 );
nkeynes@976
    38
	long_write( UTLB_DATA2(entry), 0xFFFFFFFF );
nkeynes@976
    39
	assert( long_read( UTLB_DATA2(entry) ) == 0x0000000F );
nkeynes@976
    40
	long_write( UTLB_DATA2(entry), 0x00000000 );
nkeynes@976
    41
	assert( long_read( UTLB_DATA2(entry) ) == 0x00000000 );
nkeynes@976
    42
    }
nkeynes@976
    43
    
nkeynes@976
    44
    for( entry=0; entry<4; entry++ ) {
nkeynes@976
    45
	long_write( ITLB_DATA(entry), 0 );
nkeynes@976
    46
	long_write( ITLB_ADDR(entry), 0xFFFFFFFF );
nkeynes@976
    47
	assert( long_read( ITLB_ADDR(entry) ) == 0xFFFFFDFF );
nkeynes@976
    48
	assert( long_read( ITLB_DATA(entry) ) == 0x00000100 );
nkeynes@976
    49
	long_write( ITLB_ADDR(entry), 0x00000000 );
nkeynes@976
    50
	assert( long_read( ITLB_ADDR(entry) ) == 0x00000000 );
nkeynes@976
    51
	assert( long_read( ITLB_DATA(entry) ) == 0x00000000 );
nkeynes@976
    52
	long_write( ITLB_DATA(entry), 0xFFFFFFFF );
nkeynes@976
    53
	assert( long_read( ITLB_DATA(entry) ) == 0x1FFFFDDA );
nkeynes@976
    54
	assert( long_read( ITLB_ADDR(entry) ) == 0x00000100 );
nkeynes@976
    55
	long_write( ITLB_DATA(entry), 0x00000000 );
nkeynes@976
    56
	assert( long_read( ITLB_DATA(entry) ) == 0x00000000 );
nkeynes@976
    57
	assert( long_read( ITLB_ADDR(entry) ) == 0x00000000 );
nkeynes@976
    58
	
nkeynes@976
    59
    }
nkeynes@976
    60
}
nkeynes@976
    61
.