OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_47/] [or1ksim/] [testbench/] [mc_dram.c] - Diff between revs 454 and 544

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 454 Rev 544
Line 21... Line 21...
#include "support.h"
#include "support.h"
 
 
#include "mc_common.h"
#include "mc_common.h"
#include "mc_dram.h"
#include "mc_dram.h"
#include "../peripheral/mc.h"
#include "../peripheral/mc.h"
 
#include "../peripheral/gpio.h"
#include "../peripheral/fields.h"
#include "../peripheral/fields.h"
 
 
typedef volatile unsigned long *REGISTER;
typedef volatile unsigned long *REGISTER;
 
 
unsigned long nRowSize = 0;
unsigned long nRowSize = 0;
unsigned long nColumns = 0;
unsigned long nColumns = 0;
REGISTER mc_poc        = (unsigned long*)(MC_BASE + MC_POC);
REGISTER mc_poc        = (unsigned long*)(MC_BASE + MC_POC);
REGISTER mc_csr        = (unsigned long*)(MC_BASE + MC_CSR);
REGISTER mc_csr        = (unsigned long*)(MC_BASE + MC_CSR);
REGISTER mc_ba_mask    = (unsigned long*)(MC_BASE + MC_BA_MASK);
REGISTER mc_ba_mask    = (unsigned long*)(MC_BASE + MC_BA_MASK);
 
 
 
REGISTER rgpio_out     = (unsigned long*)(GPIO_BASE + RGPIO_OUT);
 
REGISTER rgpio_in      = (unsigned long*)(GPIO_BASE + RGPIO_IN);
 
 
unsigned long lpoc;
unsigned long lpoc;
 
 
unsigned long set_config()
unsigned long set_config()
{
{
    REGISTER mc_csc;
    REGISTER mc_csc;
    unsigned char ch;
    unsigned char ch;
 
 
    lpoc = *mc_poc;
 
 
 
    for (ch=0; ch<8; ch++) {
    for (ch=0; ch<8; ch++) {
        if (MC_SDRAM_CSMASK & (0x01 << ch) ) {
        if (MC_SDRAM_CSMASK & (0x01 << ch) ) {
            mc_csc = (unsigned long*)(MC_BASE + MC_CSC(ch));
            mc_csc = (unsigned long*)(MC_BASE + MC_CSC(ch));
            SET_FIELD(*mc_csc, MC_CSC, MS,  mc_sdram_cs[ch].MS);
            SET_FIELD(*mc_csc, MC_CSC, MS,  mc_sdram_cs[ch].MS);
            SET_FIELD(*mc_csc, MC_CSC, BW,  mc_sdram_cs[ch].BW);
            SET_FIELD(*mc_csc, MC_CSC, BW,  mc_sdram_cs[ch].BW);
Line 61... Line 63...
    unsigned long ret;
    unsigned long ret;
    unsigned char ch;
    unsigned char ch;
 
 
    unsigned long j, i;
    unsigned long j, i;
    unsigned long test;
    unsigned long test;
 
    unsigned long gpio_pat = 0;
 
 
    unsigned long nRowSize = 0;
    unsigned long nRowSize = 0;
    unsigned long nRows    = 0;
    unsigned long nRows    = 0;
    unsigned long nRowSh   = 0;
    unsigned long nRowSh   = 0;
    unsigned long nRowGrp  = 0;
    unsigned long nRowGrp  = 0;
Line 73... Line 76...
    unsigned long nAddress;
    unsigned long nAddress;
    unsigned long mc_sel;
    unsigned long mc_sel;
    REGISTER mc_tms;
    REGISTER mc_tms;
    REGISTER mc_cs;
    REGISTER mc_cs;
 
 
 
    *rgpio_out = 0xFFFFFFFF;
 
 
    /* set configuration */
    /* set configuration */
    randomin(7435);
    randomin(7435);
    /*
    lpoc = *mc_poc;
 
    /* MC configuration set in except_mc.S prior to execution of main()
    if ( (ret = set_config()) != 0) {
    if ( (ret = set_config()) != 0) {
        exit(ret);
        exit(ret);
    }
    }
    */
    */
 
 
    for (ch=0; ch<8; ch++) {
    for (ch=0; ch<8; ch++) {
        if (MC_SDRAM_CSMASK & (0x01 << ch) ) {
        if (MC_SDRAM_CSMASK & (0x01 << ch) ) {
            printf ("--- Begin Test on CS%d ---\n", ch);
            printf ("--- Begin Test on CS%d ---\n", ch);
 
 
            mc_cs  = (unsigned long*)(MC_BASE + MC_CSC(ch));
            mc_cs  = (unsigned long*)(MC_BASE + MC_CSC(ch));
Line 245... Line 250...
                    printf("Seuential Row\n");
                    printf("Seuential Row\n");
                    for (j=MC_SDRAM_ROW_OFF; j<nRows/2; j++) {
                    for (j=MC_SDRAM_ROW_OFF; j<nRows/2; j++) {
                        nAddress  = mc_sel << 21;
                        nAddress  = mc_sel << 21;
                        nAddress |= MC_MEM_BASE;
                        nAddress |= MC_MEM_BASE;
                        nAddress += (j << nRowSh);
                        nAddress += (j << nRowSh);
 
 
 
                        gpio_pat ^= 0x00000008;
 
                        *rgpio_out = gpio_pat;
                        ret = mc_test_row(nAddress, nAddress + nRowSize, MC_SDRAM_FLAGS);
                        ret = mc_test_row(nAddress, nAddress + nRowSize, MC_SDRAM_FLAGS);
 
 
                        printf("\trow - %lu: nAddress = 0x%08lX, ret = 0x%08lX\n", j, nAddress, ret);
                        printf("\trow - %lu: nAddress = 0x%08lX, ret = 0x%08lX\n", j, nAddress, ret);
 
 
                        if (ret) {
                        if (ret) {
 
                            gpio_pat ^= 0x00000080;
 
                            *rgpio_out = gpio_pat;
                            report(ret);
                            report(ret);
                            return ret;
                            return ret;
                        }
                        }
                    }
                    }
                }
                }
Line 263... Line 273...
                    printf("Random Row\n");
                    printf("Random Row\n");
                    for (j=MC_SDRAM_ROW_OFF; j<nRows/2; j++) {
                    for (j=MC_SDRAM_ROW_OFF; j<nRows/2; j++) {
                        nAddress = mc_sel << 21;
                        nAddress = mc_sel << 21;
                        nAddress |= MC_MEM_BASE;
                        nAddress |= MC_MEM_BASE;
                        nAddress += ( (MC_SDRAM_ROW_OFF + random(nRows)) << nRowSh);
                        nAddress += ( (MC_SDRAM_ROW_OFF + random(nRows)) << nRowSh);
 
 
 
                        gpio_pat ^= 0x00000008;
 
                        *rgpio_out = gpio_pat;
                        ret = mc_test_row(nAddress, nAddress + nRowSize, MC_SDRAM_FLAGS);
                        ret = mc_test_row(nAddress, nAddress + nRowSize, MC_SDRAM_FLAGS);
 
 
                        printf("\trow - %lu: nAddress = 0x%08lX, ret = 0x%08lX\n", j, nAddress, ret);
                        printf("\trow - %lu: nAddress = 0x%08lX, ret = 0x%08lX\n", j, nAddress, ret);
 
 
                        if (ret) {
                        if (ret) {
 
                            gpio_pat ^= 0x00000080;
 
                            *rgpio_out = gpio_pat;
                            return ret;
                            return ret;
                        }
                        }
                    }
                    }
                }
                }
 
 
Line 285... Line 300...
                        nRowGrp = random(nRows - nGroups) + MC_SDRAM_ROW_OFF;
                        nRowGrp = random(nRows - nGroups) + MC_SDRAM_ROW_OFF;
                        for (j=0; j<nGroups; j++) {
                        for (j=0; j<nGroups; j++) {
                            nAddress = mc_sel << 21;
                            nAddress = mc_sel << 21;
                            nAddress |= MC_MEM_BASE;
                            nAddress |= MC_MEM_BASE;
                            nAddress += ((nRowGrp+j) << nRowSh);
                            nAddress += ((nRowGrp+j) << nRowSh);
 
 
 
                            gpio_pat ^= 0x00000008;
 
                            *rgpio_out = gpio_pat;
                            ret = mc_test_row(nAddress, nAddress + nRowSize, MC_SDRAM_FLAGS);
                            ret = mc_test_row(nAddress, nAddress + nRowSize, MC_SDRAM_FLAGS);
 
 
                            printf("\trow - %lu: nAddress = 0x%08lX, ret = 0x%08lX\n", j, nAddress, ret);
                            printf("\trow - %lu: nAddress = 0x%08lX, ret = 0x%08lX\n", j, nAddress, ret);
 
 
                            if (ret) {
                            if (ret) {
 
                                gpio_pat ^= 0x00000080;
 
                                *rgpio_out = gpio_pat;
                                report(ret);
                                report(ret);
                                return ret;
                                return ret;
                            }
                            }
                        }
                        }
                    }
                    }
Line 309... Line 329...
                        nRowGrp = random(nRows - nGroups) + MC_SDRAM_ROW_OFF;
                        nRowGrp = random(nRows - nGroups) + MC_SDRAM_ROW_OFF;
                        for (j=0; j<nGroups; j++) {
                        for (j=0; j<nGroups; j++) {
                            nAddress = mc_sel << 21;
                            nAddress = mc_sel << 21;
                            nAddress |= MC_MEM_BASE;
                            nAddress |= MC_MEM_BASE;
                            nAddress += ((nRowGrp + random(nGroups)) << nRowSh);
                            nAddress += ((nRowGrp + random(nGroups)) << nRowSh);
 
 
 
                            gpio_pat ^= 0x00000008;
 
                            *rgpio_out = gpio_pat;
                            ret = mc_test_row(nAddress, nAddress + nRowSize, MC_SDRAM_FLAGS);
                            ret = mc_test_row(nAddress, nAddress + nRowSize, MC_SDRAM_FLAGS);
 
 
                            printf("\trow - %lu: nAddress = 0x%08lX, ret = 0x%08lX\n", j, nAddress, ret);
                            printf("\trow - %lu: nAddress = 0x%08lX, ret = 0x%08lX\n", j, nAddress, ret);
 
 
                            if (ret) {
                            if (ret) {
 
                                gpio_pat ^= 0x00000080;
 
                                *rgpio_out = gpio_pat;
                                report(ret);
                                report(ret);
                                return ret;
                                return ret;
                            }
                            }
                        }
                        }
                    }
                    }
Line 326... Line 351...
            } /*for test*/
            } /*for test*/
        } /*if*/
        } /*if*/
    } /*for CS*/
    } /*for CS*/
    printf("--- End SDRAM tests ---\n");
    printf("--- End SDRAM tests ---\n");
    report(0xDEADDEAD);
    report(0xDEADDEAD);
 
 
 
    gpio_pat ^= 0x00000020;
 
    *rgpio_out = gpio_pat;
 
 
    return 0;
    return 0;
} /* main */
} /* main */
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.