嵌入式爱好者

查看: 14884|回复: 16

[OpenWrt] 移植最新版OPENWRT,TFA内存初始化不过

[复制链接]

1

主题

10

帖子

29

积分

i.MX6UL通行证LS1043A\46A通行证

扫一扫,手机访问本帖
发表于 2021-7-1 21:46:49 | 显示全部楼层 |阅读模式
使用的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[0] = 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[0].bnds = 0x7f
INFO:    sdram_cfg[0] = 0xe5000000
INFO:    sdram_cfg[1] = 0x401150
INFO:    sdram_cfg[2] = 0x0
INFO:    timing_cfg[0] = 0xd1770018
INFO:    timing_cfg[1] = 0xf2fc8245
INFO:    timing_cfg[2] = 0x594197
INFO:    timing_cfg[3] = 0x2161100
INFO:    timing_cfg[4] = 0x220002
INFO:    timing_cfg[5] = 0x5401400
INFO:    timing_cfg[6] = 0x0
INFO:    timing_cfg[7] = 0x26600000
INFO:    timing_cfg[8] = 0x5446a00
INFO:    timing_cfg[9] = 0x0
INFO:    dq_map[0] = 0x5b65b658
INFO:    dq_map[1] = 0xd96d8000
INFO:    dq_map[2] = 0x0
INFO:    dq_map[3] = 0x1600000
INFO:    sdram_mode[0] = 0x3010631
INFO:    sdram_mode[1] = 0x100200
INFO:    sdram_mode[9] = 0x8400000
INFO:    sdram_mode[8] = 0x500
INFO:    interval = 0x1ffe0000
INFO:    zq_cntl = 0x8a090705
INFO:    ddr_sr_cntr = 0x0
INFO:    clk_cntl = 0x2000000
INFO:    cdr[0] = 0x80040000
INFO:    cdr[1] = 0xc1
INFO:    wrlvl_cntl[0] = 0x86750609
INFO:    wrlvl_cntl[1] = 0xa0b0c0d
INFO:    wrlvl_cntl[2] = 0xf10110e
INFO:    debug[28] = 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,
};



回复

使用道具 举报

0

主题

471

帖子

919

积分

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

点评

能否提供一下你们内存的组合方式吗?  详情 回复 发表于 2021-7-2 09:49
点评回复 支持 反对

使用道具 举报

1

主题

10

帖子

29

积分

i.MX6UL通行证LS1043A\46A通行证

 楼主| 发表于 2021-7-2 09:49:03 来自手机 | 显示全部楼层
djh 发表于 2021-7-2 08:49
uboot的内存参数不一样,建议您使用我们的uboot,去引导您的内核和文件系统

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

点评

djh
您指的是这个吗? [attachimg]11668[/attachimg]  详情 回复 发表于 2021-7-2 13:38
点评回复 支持 反对

使用道具 举报

0

主题

471

帖子

919

积分

发表于 2021-7-2 13:38:38 | 显示全部楼层
baidxi 发表于 2021-7-2 09:49
能否提供一下你们内存的组合方式吗?

您指的是这个吗?

Flash存储器分区表.png

点评

我看ATF的代码里边,关于DDR,需要配置有几个RANK, 然后RANK的大小,位宽这些。时序这些DDR颗粒的手册中有。就是不清楚里边几个关于位宽和容量这些怎么填。  详情 回复 发表于 2021-7-2 15:20
不是这意思。 OK1046A-C2上面不是有4颗DDR4颗粒吗? 之前问你要了颗粒型号。我看了一下是单颗512MB 16bit位宽。 那么,你们组合的64位宽还是32位宽?  详情 回复 发表于 2021-7-2 15:17
点评回复 支持 反对

使用道具 举报

1

主题

10

帖子

29

积分

i.MX6UL通行证LS1043A\46A通行证

 楼主| 发表于 2021-7-2 15:17:55 | 显示全部楼层
djh 发表于 2021-7-2 13:38
您指的是这个吗?

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

点评

@djh 我也遇到这个问题了,需要DDR的时序。能否提供一下?  详情 回复 发表于 2022-11-16 17:09
点评回复 支持 反对

使用道具 举报

1

主题

10

帖子

29

积分

i.MX6UL通行证LS1043A\46A通行证

 楼主| 发表于 2021-7-2 15:20:28 | 显示全部楼层
djh 发表于 2021-7-2 13:38
您指的是这个吗?

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

点评

djh
是32位的位宽,抱歉,内存参数是不开源的  详情 回复 发表于 2021-7-3 10:18
点评回复 支持 反对

使用道具 举报

0

主题

471

帖子

919

积分

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

是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 NOTI  详情 回复 发表于 2021-7-4 18:21
点评回复 支持 反对

使用道具 举报

1

主题

10

帖子

29

积分

i.MX6UL通行证LS1043A\46A通行证

 楼主| 发表于 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卡。 Screenshot-20210704181952-534x276.png

点评

我细看了我的RCW配置,组合启动日志,发现问题在于,为何以SD卡启动之后,EMMC的读取本来应该读取SD卡的内容,这里为何会读取EMMC的东西。 我记得你们在手册里说过,EMMC和SD卡是复用的。插了SD卡就会从SD卡启动,  详情 回复 发表于 2021-7-4 22:09
点评回复 支持 反对

使用道具 举报

1

主题

10

帖子

29

积分

i.MX6UL通行证LS1043A\46A通行证

 楼主| 发表于 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
您是自己做的底板吗? 我们的底板是通过拨码开关控制的,详看硬件资料里面的硬件用户手册[attachimg]11683[/attachimg]  详情 回复 发表于 2021-7-5 08:41
点评回复 支持 反对

使用道具 举报

0

主题

471

帖子

919

积分

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

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

点评

用的是你们的底板和核心板。 我把启动拔到了SD/EMMC,我把我做好的固件,初初阶段正常,但是到了读取FIP文件的时候,就会读到EMMC里边的内容。请这是还有什么地方没有改好吗?还是这个能通过修改RCW文件,达到虽然插  详情 回复 发表于 2021-7-5 09:12
点评回复 支持 反对

使用道具 举报

1

主题

10

帖子

29

积分

i.MX6UL通行证LS1043A\46A通行证

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

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

点评

djh
烧写固件的话需要用U盘来进行烧写, 1046A-C2的TF卡只能用作引导卡,引导系统启动,启动之后拔出 TF 卡,系统自动将 Flash 切换到 eMMC  详情 回复 发表于 2021-7-5 09:22
点评回复 支持 反对

使用道具 举报

0

主题

471

帖子

919

积分

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

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

点评

自动?是系统更改了SD_CD_B的电平吗?  详情 回复 发表于 2021-7-5 14:06
点评回复 支持 反对

使用道具 举报

1

主题

10

帖子

29

积分

i.MX6UL通行证LS1043A\46A通行证

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

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

点评

djh
是硬件电路通过SD_CD_B检测有没有SD卡,来改变电平的  详情 回复 发表于 2021-7-5 15:19
点评回复 支持 反对

使用道具 举报

0

主题

471

帖子

919

积分

发表于 2021-7-5 15:19:32 | 显示全部楼层
baidxi 发表于 2021-7-5 14:06
自动?是系统更改了SD_CD_B的电平吗?

是硬件电路通过SD_CD_B检测有没有SD卡,来改变电平的
SD_CD_B.png
点评回复 支持 反对

使用道具 举报

1

主题

2

帖子

9

积分

LS1043A\46A通行证

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

@djh 我也遇到这个问题了,需要DDR的时序。能否提供一下?
点评回复 支持 反对

使用道具 举报

1

主题

10

帖子

29

积分

i.MX6UL通行证LS1043A\46A通行证

 楼主| 发表于 2022-12-16 09:38:38 | 显示全部楼层
  1. const struct ddr_cfg_regs static_2100 = {
  2.     .cs[0].bnds = U(0x7f),
  3.     .cs[0].config = U(0x80040322),
  4.     .cs[1].bnds = U(0x008000BF),
  5.     .cs[1].config = U(0x00000202),
  6.     .cs[2].bnds = U(0x00C000FF),
  7.     .cs[2].config = U(0x00000202),
  8.     .cs[3].bnds = U(0x0100013F),
  9.     .cs[3].config = U(0x00000202),
  10.     .sdram_cfg[0] = U(0x850C0008),
  11.     .sdram_cfg[1] = U(0x00401000),
  12.     .timing_cfg[0] = U(0xE0770018),
  13.     .timing_cfg[1] = U(0xF2FC4044),
  14.     .timing_cfg[2] = U(0x00590199),
  15.     .timing_cfg[3] = U(0x02121100),
  16.     .timing_cfg[4] = U(0x00008002),
  17.     .timing_cfg[5] = U(0x06401400),
  18.     .timing_cfg[7] = U(0x20000000),
  19.     .timing_cfg[8] = U(0x05116800),
  20.     // .dq_map[0] = U(0x32C57554),
  21.     // .dq_map[1] = U(0xD4BB0BD4),
  22.     // .dq_map[2] = U(0x2EC2F554),
  23.     // .dq_map[3] = U(0xD95D4001),
  24.     .sdram_mode[0] = U(0x01010630),
  25.     // .sdram_mode[1] = U(0x100200),
  26.     .sdram_mode[9] = U(0x00000500),
  27.     // .sdram_mode[8] = U(0x500),
  28.     .sdram_mode[2] = U(0x00100000),
  29.     // .sdram_mode[3] = U(0x100200),
  30.     .sdram_mode[10] = U(0x08000000),
  31.     // .sdram_mode[11] = U(0x8400000),
  32.     // .sdram_mode[4] = U(0x10631),
  33.     // .sdram_mode[5] = U(0x100200),
  34.     // .sdram_mode[12] = U(0x400),
  35.     // .sdram_mode[13] = U(0x8400000),
  36.     // .sdram_mode[6] = U(0x10631),
  37.     // .sdram_mode[7] = U(0x100200),
  38.     // .sdram_mode[14] = U(0x400),
  39.     // .sdram_mode[15] = U(0x8400000),
  40.     .interval = U(0x1FFE07FF),
  41.     .zq_cntl = U(0x01C00000),
  42.     .clk_cntl = U(0x2000000),
  43.     // .cdr[0] = U(0x80040000),
  44.     // .cdr[1] = U(0xC1),
  45.     .wrlvl_cntl[0] = U(0xC675F60A),
  46.     .wrlvl_cntl[1] = U(0x09070600),
  47.     // .wrlvl_cntl[2] = U(0xF10110E),
  48. };
复制代码

点评回复 支持 反对

使用道具 举报

1

主题

10

帖子

29

积分

i.MX6UL通行证LS1043A\46A通行证

 楼主| 发表于 2022-12-16 21:15:17 来自手机 | 显示全部楼层
以上参数是连接JTAG后从寄存器读出来的,经测试正常使用
点评回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-4-19 06:03

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表