工具/软件:
您好、
我们有一个基于 AM5749 SoC 的定制电路板和一个基于 AM57XX-EVM 板的定制 U-Boot。
使用 SDK 6.x 和 U-Boot v2019 时、存储器 ECC 可以正常工作。
最近、我们迁移到了 SDK 8.X、并将所有 U-Boot 更改移植到 v2021。
我们的电路板卡在 arch/arm/mach-OMAP2/emif-common.c 中的 dra7_enable_ecc () 函数中
如果我们在 EMIF 配置中禁用 ECC、则电路板再次引导、但 ECC 显然无法正常工作。
这是我们的 EMIF 配置:
/*
* MT41K512M16VRN-107 (with ECC enabled) memory timings
* This is a twin die of MT41K512M8 (also used for the ECC), so see that
* datasheet for most timings.
*/
const struct emif_regs am57xx_emif_532mhz_512m16_ecc_regs = {
.sdram_config_init = 0x61851bb2,
.sdram_config = 0x61851bb2,
.sdram_config2 = 0x08000000,
.ref_ctrl = 0x000040f1,
.ref_ctrl_final = 0x00001035,
.sdram_tim1 = 0xeeef265b,
.sdram_tim2 = 0x308f7fda,
.sdram_tim3 = 0x409f88a8,
.read_idle_ctrl = 0x00090000,
.zq_config = 0x5007190b,
.temp_alert_config = 0x00000000,
.emif_ddr_phy_ctlr_1_init = 0x0024400b,
.emif_ddr_phy_ctlr_1 = 0x0e24400b,
.emif_ddr_ext_phy_ctrl_1 = 0x10040100,
.emif_ddr_ext_phy_ctrl_2 = 0x00910091,
.emif_ddr_ext_phy_ctrl_3 = 0x00950095,
.emif_ddr_ext_phy_ctrl_4 = 0x009b009b,
.emif_ddr_ext_phy_ctrl_5 = 0x009e009e,
.emif_rd_wr_lvl_rmp_win = 0x00000000,
.emif_rd_wr_lvl_rmp_ctl = 0x80000000,
.emif_rd_wr_lvl_ctl = 0x00000000,
.emif_rd_wr_exec_thresh = 0x00000305,
.emif_ecc_ctrl_reg = 0xD0000001,
// This needs to be not quite 2G due to LISA3 carve out
.emif_ecc_address_range_1 = 0x7EFF0000,
.emif_ecc_address_range_2 = 0x00000000,
};
和 DMM 配置:
const struct dmm_lisa_map_regs am574x_2gx1_ecc_lisa_regs = {
.dmm_lisa_map_3 = 0xFF020100,
.dmm_lisa_map_2 = 0x80700100,
.is_ma_present = 0x1
};
我们将使用以下命令禁用 ECC:
- .emif_rd_wr_exec_thresh = 0x00000305, - .emif_ecc_ctrl_reg = 0xd0000001, - // This needs to be not quite 2G due to LISA3 carve out - .emif_ecc_address_range_1 = 0x7EFF0000, - .emif_ecc_address_range_2 = 0x00000000, + .emif_rd_wr_exec_thresh = 0x00000305 };
是否知道 SDK 8.x 中有关 ECC 的问题可能出在哪里?
我们根本没有更改 DRAM 配置。