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

Subversion Repositories or1k

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

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

Rev 544 Rev 552
Line 34... Line 34...
 
 
REGISTER rgpio_out     = (unsigned long*)(GPIO_BASE + RGPIO_OUT);
REGISTER rgpio_out     = (unsigned long*)(GPIO_BASE + RGPIO_OUT);
REGISTER rgpio_in      = (unsigned long*)(GPIO_BASE + RGPIO_IN);
REGISTER rgpio_in      = (unsigned long*)(GPIO_BASE + RGPIO_IN);
 
 
unsigned long lpoc;
unsigned long lpoc;
 
unsigned char mc_cs;
 
 
unsigned long set_config()
unsigned long set_config()
{
{
    REGISTER mc_csc;
    REGISTER mc_csc;
    unsigned char ch;
    unsigned char ch;
Line 45... Line 46...
    lpoc = *mc_poc;
    lpoc = *mc_poc;
 
 
    for (ch=0; ch<8; ch++) {
    for (ch=0; ch<8; ch++) {
        if (MC_SYNC_CSMASK & (0x01 << ch) ) {
        if (MC_SYNC_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, SEL, mc_async_cs[ch].M);
            SET_FIELD(*mc_csc, MC_CSC, SEL, mc_sync_cs[ch].M);
            SET_FIELD(*mc_csc, MC_CSC, BW,  2);
            SET_FIELD(*mc_csc, MC_CSC, BW,  2);
            SET_FLAG(*mc_csc, MC_CSC, EN);
            SET_FLAG(*mc_csc, MC_CSC, EN);
            printf ("Channel Config %d - CSC = 0x%08lX\n", ch, *mc_csc);
            printf ("Channel Config %d - CSC = 0x%08lX\n", ch, *mc_csc);
        }
        }
    }
    }
 
 
    return 0;
    return 0;
}
}
 
 
 
unsigned long get_config()
 
{
 
  REGISTER mc_csc;
 
  REGISTER mc_tms;
 
  unsigned char ch;
 
 
 
  mc_cs = 0;
 
  for (ch=0; ch<8; ch++) {
 
    mc_csc = (unsigned long*)(MC_BASE + MC_CSC(ch));
 
    mc_tms = (unsigned long*)(MC_BASE + MC_TMS(ch));
 
    if ( (GET_FIELD(*mc_csc, MC_CSC, MEMTYPE) == 3) &&
 
         (TEST_FLAG(*mc_csc, MC_CSC, EN) == 1     ) ) {
 
      mc_sync_cs[ch].M  = GET_FIELD(*mc_csc, MC_CSC, SEL);
 
      mc_cs |= (1 << ch);
 
 
 
      printf("get_config(%d) : M=0x%0lx\n", ch,
 
             mc_sync_cs[ch].M);
 
    }
 
  }
 
  printf("get_config() : cs=0x%0x\n", mc_cs);
 
  return 0;
 
}
 
 
int main()
int main()
{
{
    unsigned long ret;
    unsigned long ret;
    unsigned char ch;
    unsigned char ch;
 
 
Line 67... Line 91...
 
 
    unsigned long nAddress;
    unsigned long nAddress;
    unsigned long nMemSize;
    unsigned long nMemSize;
    unsigned long mc_sel;
    unsigned long mc_sel;
    REGISTER mc_tms;
    REGISTER mc_tms;
    REGISTER mc_cs;
    REGISTER mc_csc;
 
 
    *rgpio_out = 0xFFFFFFFF;
    *rgpio_out = 0xFFFFFFFF;
    /* set configuration */
 
    /* MC configuration set by except_mc.S prior to execution of main()
 
    if ( (ret = set_config()) != 0) {
 
        exit(ret);
 
    }
 
    */
 
 
 
 
#ifdef MC_READ_CONF
 
    if (get_config()) {
 
      printf("Error reading MC configuration.\n");
 
      report(1);
 
      return(1);
 
    }
 
#else
 
    mc_cs = MC_ASYNC_CSMASK;
 
#endif
 
 
 
    *rgpio_out = 0;
    for (ch=0; ch<8; ch++) {
    for (ch=0; ch<8; ch++) {
        if (MC_SYNC_CSMASK & (0x01 << ch) ) {
        if (MC_SYNC_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_csc = (unsigned long*)(MC_BASE + MC_CSC(ch));
            mc_tms = (unsigned long*)(MC_BASE + MC_TMS(ch));
            mc_tms = (unsigned long*)(MC_BASE + MC_TMS(ch));
            mc_sel = GET_FIELD(*mc_cs, MC_CSC, SEL);
            mc_sel = GET_FIELD(*mc_csc, MC_CSC, SEL);
 
 
            printf ("CS configuration : CSC - 0x%08lX, TMS - 0x%08lXu\n",
            printf ("CS configuration : CSC - 0x%08lX, TMS - 0x%08lXu\n",
                    *mc_cs, *mc_tms);
                    *mc_csc, *mc_tms);
 
 
            for (test=0; test<4; test++) {
            for (test=0; test<4; test++) {
                /* configure MC*/
                /* configure MC*/
                CLEAR_FLAG(*mc_cs, MC_CSC, PEN); /* no parity */
                CLEAR_FLAG(*mc_csc, MC_CSC, PEN); /* no parity */
                CLEAR_FLAG(*mc_cs, MC_CSC, BAS); /* bank after column */
                CLEAR_FLAG(*mc_csc, MC_CSC, BAS); /* bank after column */
                CLEAR_FLAG(*mc_cs, MC_CSC, WP);  /* write enable */
                CLEAR_FLAG(*mc_csc, MC_CSC, WP);  /* write enable */
 
 
                switch (test) {
                switch (test) {
                case 0:
                case 0:
                    if ((MC_SYNC_TESTS & MC_SYNC_TEST0) != MC_SYNC_TEST0)
                    if ((MC_SYNC_TESTS & MC_SYNC_TEST0) != MC_SYNC_TEST0)
                        continue;
                        continue;
                    break;
                    break;
                case 1:
                case 1:
                    if ((MC_SYNC_TESTS & MC_SYNC_TEST1) != MC_SYNC_TEST1)
                    if ((MC_SYNC_TESTS & MC_SYNC_TEST1) != MC_SYNC_TEST1)
                        continue;
                        continue;
                    SET_FLAG(*mc_cs, MC_CSC, PEN); /* parity */
                    SET_FLAG(*mc_csc, MC_CSC, PEN); /* parity */
                    break;
                    break;
                case 2:
                case 2:
                    if ((MC_SYNC_TESTS & MC_SYNC_TEST2) != MC_SYNC_TEST2)
                    if ((MC_SYNC_TESTS & MC_SYNC_TEST2) != MC_SYNC_TEST2)
                        continue;
                        continue;
                    SET_FLAG(*mc_cs, MC_CSC, BAS); /* bank after row */
                    SET_FLAG(*mc_csc, MC_CSC, BAS); /* bank after row */
                    break;
                    break;
                case 3:
                case 3:
                    if ((MC_SYNC_TESTS & MC_SYNC_TEST3) != MC_SYNC_TEST3)
                    if ((MC_SYNC_TESTS & MC_SYNC_TEST3) != MC_SYNC_TEST3)
                        continue;
                        continue;
                    SET_FLAG(*mc_cs, MC_CSC, WP);  /* RO */
                    SET_FLAG(*mc_csc, MC_CSC, WP);  /* RO */
                    break;
                    break;
                } /*switch test*/
                } /*switch test*/
 
 
                printf ("Begin TEST %lu : CSC - 0x%08lX, TMS - 0x%08lX\n", test, *mc_cs, *mc_tms);
                printf ("Begin TEST %lu : CSC - 0x%08lX, TMS - 0x%08lX\n", test, *mc_csc, *mc_tms);
 
 
                nAddress = mc_sel << 21;
                nAddress = mc_sel << 21;
                nAddress |= MC_MEM_BASE;
                nAddress |= MC_MEM_BASE;
                nMemSize = ( ((*mc_ba_mask & 0x000000FF) + 1) << 21);
                nMemSize = ( ((*mc_ba_mask & 0x000000FF) + 1) << 21);
 
 

powered by: WebSVN 2.1.0

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