AnsweredAssumed Answered

Problem with LS1088a and DDR4 without ECC on own board

Question asked by Radoslaw Adamczyk on Sep 13, 2019
Latest reply on Sep 19, 2019 by Yiping Wang

Hello,
We design own board with LS1088A Processor and DDR4 inhouse (Four chips MT40A512M16JY-083E:B 0  - no ECC).
I use LSDK 19.06 to make firmware.

 

My problem is with DDR controller that won't to train write_leveling with any settings clk_adj and wl_start),

 

I get error:
Found training error(s): 0x3102 or 0x2001 (What that means?)
ERROR:   Writing DDR register(s) failed
ERROR:   Programming DDRC error
ERROR:   DDR init failed

 

And debug registers are:
VERBOSE: Reading debug[9] as 0x10101010
VERBOSE: Reading debug[10] as 0x10101010
VERBOSE: Reading debug[11] as 0x10101010
VERBOSE: Reading debug[12] as 0x10101010

 

Training errors is dump from debug[1] register.

 

Anybody can explain us what is description of debug registers 1, 9, 10,11 and 12?

Anybody have suggestions what maybe wrong in DDR controller configuration?

 

We have checked:
1. Check list to design according to suggestions of AMF-NET-T3267 document,
2. DDR clock,
3. Voltage,
4. Reset lines

 


Registers DDR controller dumps:

VERBOSE: Parse DIMM SPD(s)
VERBOSE: cal cs
VERBOSE: cs_in_use = 1
VERBOSE: cs_on_dimm[0] = 1
NOTICE:  Fixed DDR on board
INFO:    Time after parsing SPD 14 ms
VERBOSE: Synthesize configurations
VERBOSE: cs 0
VERBOSE:      odt_rd_cfg 0x0
VERBOSE:      odt_wr_cfg 0x4
VERBOSE:      odt_rtt_norm 0x3
VERBOSE:      odt_rtt_wr 0x4
VERBOSE:      auto_precharge 1
VERBOSE: ctlr_init_ecc 0
VERBOSE: x4_en 0
VERBOSE: ap_en 0
VERBOSE: ctlr_intlv 0
VERBOSE: ctlr_intlv_mode 0
VERBOSE: ba_intlv 0x0
VERBOSE: data_bus_used 0
VERBOSE: otf_burst_chop_en 1
VERBOSE: burst_length 0x6
VERBOSE: dbw_cap_shift 0
VERBOSE: Assign binding addresses
VERBOSE: ctlr_intlv 0
VERBOSE: rank density 0x100000000
VERBOSE: CS 0
VERBOSE:     base_addr 0x0
VERBOSE:     size 0x100000000
VERBOSE: base 0x0
VERBOSE: Total mem by assignment is 0x100000000
VERBOSE: Calculate controller registers
VERBOSE: Skip CL mask for this speed 0x400
VERBOSE: Skip caslat 0x400
VERBOSE: cs_in_use = 0x1
VERBOSE: cs0
VERBOSE:    _config = 0x80840412
VERBOSE: cs[0].bnds = 0xff
VERBOSE: sdram_cfg[0] = 0xc5000008
VERBOSE: sdram_cfg[1] = 0x401150
VERBOSE: sdram_cfg[2] = 0x0
VERBOSE: timing_cfg[0] = 0x91550018
VERBOSE: timing_cfg[1] = 0xbac48e54
VERBOSE: timing_cfg[2] = 0x490118
VERBOSE: timing_cfg[3] = 0x10c1000
VERBOSE: timing_cfg[4] = 0x220002
VERBOSE: timing_cfg[5] = 0x3401400
VERBOSE: timing_cfg[6] = 0x0
VERBOSE: timing_cfg[7] = 0x13300000
VERBOSE: timing_cfg[8] = 0x2336800
VERBOSE: timing_cfg[9] = 0x0
VERBOSE: dq_map[0] = 0x7053658
VERBOSE: dq_map[1] = 0xd10d0ed8
VERBOSE: dq_map[2] = 0x3b407700
VERBOSE: dq_map[3] = 0xed0000
VERBOSE: sdram_mode[0] = 0x3030211
VERBOSE: sdram_mode[1] = 0x8000000
VERBOSE: sdram_mode[9] = 0x4000000
VERBOSE: sdram_mode[8] = 0x500
VERBOSE: interval = 0x18600000
VERBOSE: zq_cntl = 0x8a090705
VERBOSE: ddr_sr_cntr = 0x0
VERBOSE: clk_cntl = 0x1c00000
VERBOSE: cdr[0] = 0x80040000
VERBOSE: cdr[1] = 0x8d81
VERBOSE: wrlvl_cntl[0] = 0x86750609
VERBOSE: wrlvl_cntl[1] = 0x9090909
VERBOSE: wrlvl_cntl[2] = 0x9090909
VERBOSE: debug[28] = 0x37
INFO:    Time before programming controller 184 ms
VERBOSE: Program controller registers
INFO:    ddrc version: 00050201
VERBOSE: sdram_cfg_2 0x00401150
VERBOSE: wrlvl_cntl[0] 0xc6750609
VERBOSE: total size 4 GB
VERBOSE: Need to wait up to 1320 ms
VERBOSE: Reading debug[9] as 0x10101010
VERBOSE: Reading debug[10] as 0x10101010
VERBOSE: Reading debug[11] as 0x10101010
VERBOSE: Reading debug[12] as 0x10101010
VERBOSE: cpo_min 0x10
VERBOSE: cpo_max 0x10
VERBOSE: debug[28] 0x700037
VERBOSE: Optimal cpo_sample 0x37
VERBOSE: Err_detect 0x80
ERROR:   Found training error(s): 0x3102
ERROR:   Writing DDR register(s) failed
ERROR:   Programing DDRC error
ERROR:   DDR init failed.

 

Thanks

Outcomes