移植最新版OPENWRT,TFA内存初始化不过
使用的TFA源码为NXP开源的。地址为:https://source.codeaurora.org/external/qoriq/qoriq-components/atf
INFO: RCW BOOT SRC is SD/EMMC
INFO: RCW BOOT SRC is SD/EMMC
INFO: esdhc_emmc_init
INFO: Card detected successfully
INFO: init done:
INFO: platform clock 600000000
INFO: DDR PLL1 2100000000
INFO: DDR PLL2 0
INFO: time base 38 ms
INFO: Parse DIMM SPD(s)
INFO: cal cs
INFO: cs_in_use = 1
INFO: cs_on_dimm = 1
NOTICE:Fixed DDR on board
INFO: Time after parsing SPD 13 ms
INFO: Synthesize configurations
INFO: cs 0
INFO: odt_rd_cfg 0x0
INFO: odt_wr_cfg 0x4
INFO: odt_rtt_norm 0x3
INFO: odt_rtt_wr 0x0
INFO: auto_precharge 0
INFO: ctlr_init_ecc 1
INFO: x4_en 0
INFO: ap_en 0
INFO: ctlr_intlv 0
INFO: ctlr_intlv_mode 0
INFO: ba_intlv 0x0
INFO: data_bus_used 0
INFO: otf_burst_chop_en 1
INFO: burst_length 0x6
INFO: dbw_cap_shift 0
INFO: Assign binding addresses
INFO: ctlr_intlv 0
INFO: rank density 0x80000000
INFO: CS 0
INFO: base_addr 0x0
INFO: size 0x80000000
INFO: base 0x0
INFO: Total mem by assignment is 0x80000000
INFO: Calculate controller registers
INFO: Skip CL mask for this speed 0x4000
INFO: Skip caslat 0x4000
INFO: cs_in_use = 0x1
INFO: cs0
INFO: _config = 0x80040312
INFO: cs.bnds = 0x7f
INFO: sdram_cfg = 0xe5000000
INFO: sdram_cfg = 0x401150
INFO: sdram_cfg = 0x0
INFO: timing_cfg = 0xd1770018
INFO: timing_cfg = 0xf2fc8245
INFO: timing_cfg = 0x594197
INFO: timing_cfg = 0x2161100
INFO: timing_cfg = 0x220002
INFO: timing_cfg = 0x5401400
INFO: timing_cfg = 0x0
INFO: timing_cfg = 0x26600000
INFO: timing_cfg = 0x5446a00
INFO: timing_cfg = 0x0
INFO: dq_map = 0x5b65b658
INFO: dq_map = 0xd96d8000
INFO: dq_map = 0x0
INFO: dq_map = 0x1600000
INFO: sdram_mode = 0x3010631
INFO: sdram_mode = 0x100200
INFO: sdram_mode = 0x8400000
INFO: sdram_mode = 0x500
INFO: interval = 0x1ffe0000
INFO: zq_cntl = 0x8a090705
INFO: ddr_sr_cntr = 0x0
INFO: clk_cntl = 0x2000000
INFO: cdr = 0x80040000
INFO: cdr = 0xc1
INFO: wrlvl_cntl = 0x86750609
INFO: wrlvl_cntl = 0xa0b0c0d
INFO: wrlvl_cntl = 0xf10110e
INFO: debug = 0x61
INFO: Time before programming controller 182 ms
INFO: Program controller registers
INFO: total size 2 GB
INFO: Need to wait up to 480 ms
ERROR: Found training error(s): 0x2100
ERROR: Error: Waiting for D_INIT timeout.
ERROR: Writing DDR register(s) failed
ERROR: Programing DDRC error
ERROR: DDR init failed.
NOTICE:Incorrect DRAM0 size is defined in platfor_def.h
ERROR: mmap_add_region_check() failed. error -22
ASSERT: lib/xlat_tables_v2/xlat_tables_internal.c:753
使用的DDR配置参数
struct dimm_params ddr_raw_timing = {
.n_ranks = 1,
.rank_density = 0x80000000u,
.capacity = 0x80000000u,
.primary_sdram_width = 64,
.ec_sdram_width = 16,
.rdimm = 0,
.mirrored_dimm = 0,
.n_row_addr = 15,
.n_col_addr = 10,
.bank_group_bits = 1,
.edc_config = 2,
.burst_lengths_bitmask = 0x0c,
.tckmin_x_ps = 750,
.tckmax_ps = 1900,
.caslat_x = 0x0001FFE00,
.taa_ps = 13500,
.trcd_ps = 13500,
.trp_ps = 13500,
.tras_ps = 32000,
.trc_ps = 45500,
.twr_ps = 15000,
.trfc1_ps = 350000,
.trfc2_ps = 260000,
.trfc4_ps = 160000,
.tfaw_ps = 21000,
.trrds_ps = 3000,
.trrdl_ps = 4900,
.tccdl_ps = 5000,
.refresh_rate_ps = 7800000,
.dq_mapping[0] = 0x16,
.dq_mapping[1] = 0x36,
.dq_mapping[2] = 0x16,
.dq_mapping[3] = 0x36,
.dq_mapping[4] = 0x16,
.dq_mapping[5] = 0x36,
.dq_mapping[6] = 0x16,
.dq_mapping[7] = 0x36,
.dq_mapping[8] = 0x16,
.dq_mapping[9] = 0x0,
.dq_mapping[10] = 0x0,
.dq_mapping[11] = 0x0,
.dq_mapping[12] = 0x0,
.dq_mapping[13] = 0x0,
.dq_mapping[14] = 0x0,
.dq_mapping[15] = 0x0,
.dq_mapping[16] = 0x0,
.dq_mapping[17] = 0x0,
.dq_mapping_ors = 0,
.rc = 0x04,
};
uboot的内存参数不一样,建议您使用我们的uboot,去引导您的内核和文件系统 djh 发表于 2021-7-2 08:49
uboot的内存参数不一样,建议您使用我们的uboot,去引导您的内核和文件系统
能否提供一下你们内存的组合方式吗? baidxi 发表于 2021-7-2 09:49
能否提供一下你们内存的组合方式吗?
您指的是这个吗?
djh 发表于 2021-7-2 13:38
您指的是这个吗?
不是这意思。
OK1046A-C2上面不是有4颗DDR4颗粒吗?
之前问你要了颗粒型号。我看了一下是单颗512MB 16bit位宽。
那么,你们组合的64位宽还是32位宽?
djh 发表于 2021-7-2 13:38
您指的是这个吗?
我看ATF的代码里边,关于DDR,需要配置有几个RANK, 然后RANK的大小,位宽这些。时序这些DDR颗粒的手册中有。就是不清楚里边几个关于位宽和容量这些怎么填。 baidxi 发表于 2021-7-2 15:20
我看ATF的代码里边,关于DDR,需要配置有几个RANK, 然后RANK的大小,位宽这些。时序这些DDR颗粒的手册中 ...
是32位的位宽,抱歉,内存参数是不开源的 djh 发表于 2021-7-3 10:18
是32位的位宽,抱歉,内存参数是不开源的
你好,我修改好参数以后,现在遇到一个奇怪的问题。
NOTICE:2 GB DDR4, 32-bit, CL=15, ECC off
INFO: Time used by DDR driver 428 ms
NOTICE:BL2: v1.5(debug):v21.02.0-rc3-33-ga75928d125-dirty
NOTICE:BL2: Built : 21:46:45, Jun 27 2021
INFO: Configuring TrustZone Controller
INFO: Value of region base = ffe00000
INFO: Value of region base = 1ffe00000
INFO: Value of region base = fbe00000
INFO: BL2: Doing platform setup
INFO: BL2: Loading image id 3
INFO: BL2: fip_dev_init(209)
INFO: sd-mmc read done.
INFO: BL2: header name = 0xaa640030 sn = 12345600
WARNING: Firmware Image Package header check failed.
WARNING: Failed to obtain reference to image id=3 (-2)
ERROR: BL2: Failed to load image (-2)
Authentication failure
这个header name和sn不是我编译出来的。
我没有擦除EMMC,用的是SD卡。
baidxi 发表于 2021-7-4 18:21
你好,我修改好参数以后,现在遇到一个奇怪的问题。
NOTICE:2 GB DDR4, 32-bit, CL=15, ECC off
INFO ...
我细看了我的RCW配置,组合启动日志,发现问题在于,为何以SD卡启动之后,EMMC的读取本来应该读取SD卡的内容,这里为何会读取EMMC的东西。
我记得你们在手册里说过,EMMC和SD卡是复用的。插了SD卡就会从SD卡启动,
可否告知一下,你们硬件这里是通过何种方式来切换的。为何SOC启动默认是读的SD的启动代码,但是后面读取FIP文件时会读到EMMC的内容的。 baidxi 发表于 2021-7-4 22:09
我细看了我的RCW配置,组合启动日志,发现问题在于,为何以SD卡启动之后,EMMC的读取本来应该读取SD卡的 ...
您是自己做的底板吗?
我们的底板是通过拨码开关控制的,详看硬件资料里面的硬件用户手册
djh 发表于 2021-7-5 08:41
您是自己做的底板吗?
我们的底板是通过拨码开关控制的,详看硬件资料里面的硬件用户手册
用的是你们的底板和核心板。
我把启动拔到了SD/EMMC,我把我做好的固件,初初阶段正常,但是到了读取FIP文件的时候,就会读到EMMC里边的内容。请这是还有什么地方没有改好吗?还是这个能通过修改RCW文件,达到虽然插入SD卡,但是还是使用EMMC? baidxi 发表于 2021-7-5 09:12
用的是你们的底板和核心板。
我把启动拔到了SD/EMMC,我把我做好的固件,初初阶段正常,但是到了读取FIP ...
烧写固件的话需要用U盘来进行烧写,
1046A-C2的TF卡只能用作引导卡,引导系统启动,启动之后拔出 TF 卡,系统自动将 Flash 切换到 eMMC djh 发表于 2021-7-5 09:22
烧写固件的话需要用U盘来进行烧写,
1046A-C2的TF卡只能用作引导卡,引导系统启动,启动之后拔出 TF 卡 ...
自动?是系统更改了SD_CD_B的电平吗? baidxi 发表于 2021-7-5 14:06
自动?是系统更改了SD_CD_B的电平吗?
是硬件电路通过SD_CD_B检测有没有SD卡,来改变电平的 baidxi 发表于 2021-7-2 15:17
不是这意思。
OK1046A-C2上面不是有4颗DDR4颗粒吗?
之前问你要了颗粒型号。我看了一下是单颗512MB 16b ...
@djh 我也遇到这个问题了,需要DDR的时序。能否提供一下? const struct ddr_cfg_regs static_2100 = {
.cs.bnds = U(0x7f),
.cs.config = U(0x80040322),
.cs.bnds = U(0x008000BF),
.cs.config = U(0x00000202),
.cs.bnds = U(0x00C000FF),
.cs.config = U(0x00000202),
.cs.bnds = U(0x0100013F),
.cs.config = U(0x00000202),
.sdram_cfg = U(0x850C0008),
.sdram_cfg = U(0x00401000),
.timing_cfg = U(0xE0770018),
.timing_cfg = U(0xF2FC4044),
.timing_cfg = U(0x00590199),
.timing_cfg = U(0x02121100),
.timing_cfg = U(0x00008002),
.timing_cfg = U(0x06401400),
.timing_cfg = U(0x20000000),
.timing_cfg = U(0x05116800),
// .dq_map = U(0x32C57554),
// .dq_map = U(0xD4BB0BD4),
// .dq_map = U(0x2EC2F554),
// .dq_map = U(0xD95D4001),
.sdram_mode = U(0x01010630),
// .sdram_mode = U(0x100200),
.sdram_mode = U(0x00000500),
// .sdram_mode = U(0x500),
.sdram_mode = U(0x00100000),
// .sdram_mode = U(0x100200),
.sdram_mode = U(0x08000000),
// .sdram_mode = U(0x8400000),
// .sdram_mode = U(0x10631),
// .sdram_mode = U(0x100200),
// .sdram_mode = U(0x400),
// .sdram_mode = U(0x8400000),
// .sdram_mode = U(0x10631),
// .sdram_mode = U(0x100200),
// .sdram_mode = U(0x400),
// .sdram_mode = U(0x8400000),
.interval = U(0x1FFE07FF),
.zq_cntl = U(0x01C00000),
.clk_cntl = U(0x2000000),
// .cdr = U(0x80040000),
// .cdr = U(0xC1),
.wrlvl_cntl = U(0xC675F60A),
.wrlvl_cntl = U(0x09070600),
// .wrlvl_cntl = U(0xF10110E),
};
以上参数是连接JTAG后从寄存器读出来的,经测试正常使用 我的打印跟你一样 请问你最终是怎么解决的
页:
[1]