[U-Boot] RAM burst mode problem

Frank Svendsbøe frank.svendsboe at gmail.com
Fri Sep 4 08:41:20 CEST 2009


Hi Mikhail,
Burst mode UPM setup is not trivial, and it is quite amount of work to
go through your table, so
I'm not surprised nobody has replied.

I assume you've verified the generated waveforms using a logic
analyzer/scope, and compared
them to the DRAMs datasheet (?). If you have access to a Windows
machine, you could try an
ancient Motorola tool called UPM860. It might be helpful when
verifying your UPM program.

Unless someone has experience with this certain DRAM I guess you're on
your own. Or.. you
could try to hire one of the engineers at Denx to do the job for you.

Good luck!
- Frank


On Wed, Sep 2, 2009 at 11:58 PM, Mikhail
Zaturenskiy<mzaturenskiy.st at gmail.com> wrote:
>> Hello, I am working on a board similar to the EP88xC and am having
>> trouble getting the sdram_table[] setup with the correct values (at
>> least I think that's the problem).
>>
>> The board words fine if i burst-inhibit memc_or1 so I know single
>> read/write works, but if I remove burst-inhibit, it results in a crash
>> when U-Boot transfers itself from flash to RAM and jumps to the
>> relocated code.
>>
>> My board uses the MPC875 processor and MT48LC16M16A2 for the RAM. The
>> following is my current SDRAM table:
>>
>> static uint sdram_table[] = {
>>        /* Single read  (offset 0x00 in UPM RAM) */
>>        0x0F03C004, 0x0FFFC004, 0x00FCC004, 0x0FFFC000,
>>        0x0FF30004, 0x0FFFC004, 0xFFFFC005, 0xFFFFC005,
>>
>>        /* Burst read   (offset 0x08 in UPM RAM) */
>>        0x0F03C004, 0x0FFFC004, 0x00FCC004, 0x00FFC000,
>>        0x00FFC000, 0x00FFC000, 0x00FFC000, 0x00FFC000,
>>        0x00FFC000, 0x00FFC000, 0x0FF30000, 0x0FFFC004,
>>        0xFFFFC005, 0xFFFFC005, 0xFFFFC005, 0xFFFFC005,
>>
>>        /* Single write (offset 0x18 in UPM RAM) */
>>        0x0F03C004, 0x0FFFC004, 0x00FC0004, 0x0FFFC002,
>>        0x0FF30004, 0X0FFFC004, 0xFFFFC005, 0xFFFFC005,
>>
>>        /* Burst write  (offset 0x20 in UPM RAM) */
>>        0x0F03C004, 0x0FFFC004, 0x00FC0004, 0X00FFC000,
>>        0x00FFC000, 0x00FFC000, 0x00FFC000, 0X00FFC000,
>>        0x00FFC000, 0x00FFC000, 0x0FF30002, 0x0FFFC004,
>>        0xFFFFC005, 0xFFFFC005, 0xFFFFC005, 0xFFFFC005,
>>
>>        /* Refresh      (offset 0x30 in UPM RAM) */
>>        0x0FF0C004, 0x0FFFC004, 0x0FFFC004, 0x0FFFC004,
>>        0xFFFFC005, 0x0FA30004, 0x0FFFC004, 0x0FF0C084,
>>        0x0FFFC004, 0x0FFFC004, 0x0FFFC004, 0x0FFFC084,
>>
>>        /* Exception    (offset 0x3C in UPM RAM) */
>>        0x0FFFC004, 0x0FF00004, 0x0FFFC004, 0xFFFFC005
>> };
>>
>> And the following is my ram init function:
>>
>> phys_size_t initdram (int board_type)
>> {
>>        long int msize;
>>        volatile immap_t     *immap  = (volatile immap_t *)CONFIG_SYS_IMMR;
>>        volatile memctl8xx_t *memctl = &immap->im_memctl;
>>
>>        upmconfig(UPMA, sdram_table, sizeof(sdram_table) / sizeof(uint));
>>
>>        /* Configure SDRAM refresh */
>>        memctl->memc_mptpr = MPTPR_PTP_DIV2; /* BRGCLK/2 */
>>
>>        memctl->memc_mamr = (65 << 24) | CONFIG_SYS_MAMR; /* No refresh */
>>        udelay(100);
>>
>>        /* Run MRS pattern from location 0x35 */ // MZ - was 0x36
>>        memctl->memc_mar = 0x46; // MZ - was 0x88
>>        memctl->memc_mcr = 0x80002235; // MZ - was 0x80002236
>>        udelay(100);
>>
>>        memctl->memc_mamr |=  MAMR_PTAE; /* Enable refresh */
>>        memctl->memc_or1   = ~(CONFIG_SYS_SDRAM_MAX_SIZE - 1) | OR_CSNT_SAM;
>> //      memctl->memc_or1   = ~(CONFIG_SYS_SDRAM_MAX_SIZE - 1) | OR_CSNT_SAM
>> | OR_BI; // MZ - temp, burst inhibit
>>        memctl->memc_br1   =  CONFIG_SYS_SDRAM_BASE | BR_PS_16 | BR_MS_UPMA | BR_V;
>>
>>        msize = get_ram_size(CONFIG_SYS_SDRAM_BASE, CONFIG_SYS_SDRAM_MAX_SIZE);
>>        memctl->memc_or1  |= ~(msize - 1);
>>
>>        return msize;
>> }
>>
>> Also attached is a spreadsheet which illustrates the RAM timing.
>>
>> Is there something wrong with my RAM table? Am I missing any flags?
>> Something else wrong?
>>
>> Any ideas/suggestions are appreciated. Again, sorry for the first
>> poorly-formatted post.
>>
>> Thank you,
>> Mikhail Zaturenskiy
>>
>
> Anyone?
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>


More information about the U-Boot mailing list