Ignore:
Timestamp:
Apr 19, 2013, 12:17:09 PM (7 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11, master
Children:
92d8038
Parents:
d4a4811
git-author:
Sebastian Huber <sebastian.huber@…> (04/19/13 12:17:09)
git-committer:
Sebastian Huber <sebastian.huber@…> (04/23/13 07:59:57)
Message:

bsp/mpc5200: Change SDRAM initialization

Change SDRAM initialization according to application note AN3221.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/powerpc/gen5200/start/start.S

    rd4a4811 r7a44d06  
    147147.set    ADREN_WSE,              (1 << (31 - 31))
    148148
    149 .set    CTRL_PRECHARGE,         (1<<1)
    150 .set    CTRL_REFRESH,           (1<<2)
    151 .set    CTRL_BA1,               (1<<31)
     149.set    CTRL_PRECHARGE_ALL,     (1 << (31 - 30))
     150.set    CTRL_REFRESH,           (1 << (31 - 29))
     151.set    CTRL_MODE_EN,           (1 << (31 - 0))
    152152
    153153.set    CSCONF_CE,              (1<<12)
     
    497497#if defined(NEED_LOW_LEVEL_INIT)
    498498SDRAM_init:
     499        mflr    r12
     500
    499501#if defined(MPC5200_BOARD_BRS5L)
    500502      /* set GPIO_WKUP7 pin low for 66MHz buffering */
     
    527529        #define SDELAY_VAL 0x00000004
    528530
     531        /*
     532         * Single Read2Read/Write delay=0xC, Single Write2Read/Prec. delay=0x4
     533         * Read CAS latency=0x2, Active2Read delay=0x2, Prec.2active delay=0x2
     534         */
     535        #define CFG1_VAL 0xC4222600
     536
     537        /* Refr.2No-Read delay=0x06, Write latency=0x0 */
     538        /* Burst2Read Prec.delay=0x8, Burst Write delay=0x8 */
     539        /* Burst Read2Write delay=0xB, Burst length=0x7, Read Tap=0x4 */
     540        #define CFG2_VAL 0xCCC70004
     541
     542#if defined(MPC5200_BOARD_BRS5L)
     543        /* Mode Set enabled, Clock enabled, Auto refresh enabled, Mem. data drv */
     544        /* Refresh counter=0xFFFF */
     545        #define CTRL_VAL 0xD1470000
     546#else
     547        /* Mode Set enabled, Clock enabled, Auto refresh enabled, Mem. data drv */
     548        /* Refresh counter=0xFFFF */
     549        #define CTRL_VAL 0xD04F0000
     550#endif
     551
     552        /* Op.Mode=0x0, Read CAS latency=0x2, Burst length=0x3, Write strobe puls */
     553        #define MODE_VAL 0x008D0000
     554
     555        /* SDRAM initialization according to application note AN3221 */
     556
     557        /* SDRAM controller setup */
     558
    529559        LWI     r3, SDELAY_VAL
    530560        stw     r3, SDELAY(r31)
    531561
    532         LWI     r30, 0xC4222600                 /* Single Read2Read/Write delay=0xC, Single Write2Read/Prec. delay=0x4 */
    533         stw     r30, CFG1(r31)                  /* Read CAS latency=0x2, Active2Read delay=0x2, Prec.2active delay=0x2 */
    534                                                 /* Refr.2No-Read delay=0x06, Write latency=0x0 */
    535        
    536         LWI     r30, 0xCCC70004                 /* Burst2Read Prec.delay=0x8, Burst Write delay=0x8 */
    537         stw     r30, CFG2(r31)                  /* Burst Read2Write delay=0xB, Burst length=0x7, Read Tap=0x4 */
    538 
    539 #ifdef MPC5200_BOARD_BRS5L
    540         LWI     r30, 0xD1470000                 /* Mode Set enabled, Clock enabled, Auto refresh enabled, Mem. data drv */
    541         stw     r30, CTRL(r31)                  /* Refresh counter=0xFFFF */
    542 
    543 
    544 #else
    545         LWI     r30, 0xD04F0000                 /* Mode Set enabled, Clock enabled, Auto refresh enabled, Mem. data drv */
    546         stw     r30, CTRL(r31)                  /* Refresh counter=0xFFFF */
    547 
    548 
     562        LWI     r3, CFG1_VAL
     563        stw     r3, CFG1(r31)
     564
     565        LWI     r3, CFG2_VAL
     566        stw     r3, CFG2(r31)
     567
     568        LWI     r11, CTRL_VAL
     569        stw     r11, CTRL(r31)
     570        lwz     r3, CTRL(r31)
     571
     572        /* Perform a PRECHARGE ALL command */
     573        ori     r3, r11, CTRL_PRECHARGE_ALL
     574        stw     r3, CTRL(r31)
     575        lwz     r3, CTRL(r31)
     576
     577        /* Wait at least tRP time */
     578        li      r3, 15
     579        bl      ndelay
     580
     581#if defined(EMODE_VAL)
     582        /* Write EMODE register */
     583        LWI     r3, EMODE_VAL
     584        stw     r3, MOD(r31)
     585
     586        /* Wait at least tMRD time */
     587        li      r3, 10
     588        bl      ndelay
    549589#endif
    550         lwz     r30, CTRL(r31)
    551 
    552 
    553         SETBITS r30, r29, CTRL_PRECHARGE        /* send two times precharge */
    554         stw     r30, CTRL(r31)
    555 
    556 
    557         stw     r30, CTRL(r31)
    558 
    559 
    560 
    561         lwz     r30, CTRL(r31)
    562 
    563 
    564         SETBITS r30, r29, CTRL_REFRESH          /* send two times refresh */
    565         stw     r30, CTRL(r31)
    566 
    567 
    568         stw     r30, CTRL(r31)
    569 
    570 
    571 
    572         LWI     r30, 0x008D0000                 /* Op.Mode=0x0, Read CAS latency=0x2, Burst length=0x3, Write strobe puls */
    573         stw     r30, MOD(r31)
    574 
    575 
    576 
    577         lwz     r30, CTRL(r31)                  /* Clock enabled, Auto refresh enabled, Mem. data drv. Refresh counter=0xFFFF */
    578 
    579 
    580         CLRBITS r30, r29, CTRL_BA1
    581         stw     r30, CTRL(r31)
    582 
    583 
    584 
    585         blr
    586 
     590
     591        /* Write MODE register */
     592        LWI     r3, MODE_VAL
     593        stw     r3, MOD(r31)
     594
     595        /* Wait at least tMRD time */
     596        li      r3, 10
     597        bl      ndelay
     598
     599        /* Perform a PRECHARGE ALL command */
     600        ori     r3, r11, CTRL_PRECHARGE_ALL
     601        stw     r3, CTRL(r31)
     602        lwz     r3, CTRL(r31)
     603
     604        /* Wait at least tRP time */
     605        li      r3, 15
     606        bl      ndelay
     607
     608        /* Perform an AUTO REFRESH */
     609        ori     r3, r11, CTRL_REFRESH
     610        stw     r3, CTRL(r31)
     611        lwz     r3, CTRL(r31)
     612
     613        /* Wait at least tRFC time */
     614        li      r3, 70
     615        bl      ndelay
     616
     617        /* Perform an AUTO REFRESH */
     618        ori     r3, r11, CTRL_REFRESH
     619        stw     r3, CTRL(r31)
     620        lwz     r3, CTRL(r31)
     621
     622        /* Wait at least tRFC time */
     623        li      r3, 70
     624        bl      ndelay
     625
     626#if defined(SECOND_MODE_VAL)
     627        /* Write MODE register */
     628        LWI     r3, SECOND_MODE_VAL
     629        stw     r3, MOD(r31)
     630#endif
     631
     632        /* Disable MODE register access */
     633        lis     r4, CTRL_MODE_EN@h
     634        andc    r3, r11, r4
     635        stw     r3, CTRL(r31)
     636        lwz     r3, CTRL(r31)
     637
     638        mtlr    r12
     639        blr
    587640
    588641copy_image:
     
    902955
    903956        blr
     957
     958ndelay:
     959        /*
     960         * The maximum core frequency is 396MHz.
     961         * We have (396MHz * 1024) / 10**9 == 405.
     962         */
     963        mulli   r3, r3, 405
     964        srwi.   r3, r3, 10
     965
     966        beqlr
     967
     968        mtctr   r3
     969
     970ndelay_loop:
     971        bdnz    ndelay_loop
     972
     973        blr
Note: See TracChangeset for help on using the changeset viewer.