baidxi 发表于 2021-7-1 21:46:49

移植最新版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,
};



djh 发表于 2021-7-2 08:49:45

uboot的内存参数不一样,建议您使用我们的uboot,去引导您的内核和文件系统

baidxi 发表于 2021-7-2 09:49:03

djh 发表于 2021-7-2 08:49
uboot的内存参数不一样,建议您使用我们的uboot,去引导您的内核和文件系统

能否提供一下你们内存的组合方式吗?

djh 发表于 2021-7-2 13:38:38

baidxi 发表于 2021-7-2 09:49
能否提供一下你们内存的组合方式吗?

您指的是这个吗?


baidxi 发表于 2021-7-2 15:17:55

djh 发表于 2021-7-2 13:38
您指的是这个吗?

不是这意思。
OK1046A-C2上面不是有4颗DDR4颗粒吗?
之前问你要了颗粒型号。我看了一下是单颗512MB 16bit位宽。
那么,你们组合的64位宽还是32位宽?

baidxi 发表于 2021-7-2 15:20:28

djh 发表于 2021-7-2 13:38
您指的是这个吗?

我看ATF的代码里边,关于DDR,需要配置有几个RANK, 然后RANK的大小,位宽这些。时序这些DDR颗粒的手册中有。就是不清楚里边几个关于位宽和容量这些怎么填。

djh 发表于 2021-7-3 10:18:41

baidxi 发表于 2021-7-2 15:20
我看ATF的代码里边,关于DDR,需要配置有几个RANK, 然后RANK的大小,位宽这些。时序这些DDR颗粒的手册中 ...

是32位的位宽,抱歉,内存参数是不开源的

baidxi 发表于 2021-7-4 18:21:11

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 22:09:26

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的内容的。

djh 发表于 2021-7-5 08:41:25

baidxi 发表于 2021-7-4 22:09
我细看了我的RCW配置,组合启动日志,发现问题在于,为何以SD卡启动之后,EMMC的读取本来应该读取SD卡的 ...

您是自己做的底板吗?
我们的底板是通过拨码开关控制的,详看硬件资料里面的硬件用户手册

baidxi 发表于 2021-7-5 09:12:44

djh 发表于 2021-7-5 08:41
您是自己做的底板吗?
我们的底板是通过拨码开关控制的,详看硬件资料里面的硬件用户手册

用的是你们的底板和核心板。
我把启动拔到了SD/EMMC,我把我做好的固件,初初阶段正常,但是到了读取FIP文件的时候,就会读到EMMC里边的内容。请这是还有什么地方没有改好吗?还是这个能通过修改RCW文件,达到虽然插入SD卡,但是还是使用EMMC?

djh 发表于 2021-7-5 09:22:22

baidxi 发表于 2021-7-5 09:12
用的是你们的底板和核心板。
我把启动拔到了SD/EMMC,我把我做好的固件,初初阶段正常,但是到了读取FIP ...

烧写固件的话需要用U盘来进行烧写,
1046A-C2的TF卡只能用作引导卡,引导系统启动,启动之后拔出 TF 卡,系统自动将 Flash 切换到 eMMC

baidxi 发表于 2021-7-5 14:06:22

djh 发表于 2021-7-5 09:22
烧写固件的话需要用U盘来进行烧写,
1046A-C2的TF卡只能用作引导卡,引导系统启动,启动之后拔出 TF 卡 ...

自动?是系统更改了SD_CD_B的电平吗?

djh 发表于 2021-7-5 15:19:32

baidxi 发表于 2021-7-5 14:06
自动?是系统更改了SD_CD_B的电平吗?

是硬件电路通过SD_CD_B检测有没有SD卡,来改变电平的

coarlqq 发表于 2022-11-16 17:09:53

baidxi 发表于 2021-7-2 15:17
不是这意思。
OK1046A-C2上面不是有4颗DDR4颗粒吗?
之前问你要了颗粒型号。我看了一下是单颗512MB 16b ...

@djh 我也遇到这个问题了,需要DDR的时序。能否提供一下?

baidxi 发表于 2022-12-16 09:38:38

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),
};

baidxi 发表于 2022-12-16 21:15:17

以上参数是连接JTAG后从寄存器读出来的,经测试正常使用

yazhou 发表于 2024-5-10 17:41:29

我的打印跟你一样 请问你最终是怎么解决的
页: [1]
查看完整版本: 移植最新版OPENWRT,TFA内存初始化不过