This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM5748: ECC memory configuration

Part Number: AM5748

hi

We have a custom AM574 board with 2GB DRAM working fine. Only EMIF1 is used. We use EMIF config sheet 2.0.2

Now I enabled EMIF (by setting Detail 10 to "yes")  for the entire region 0x8000'0000 - 0xFFFF'FFFF and DRAM does not work anymore (TI SDK 5.1 RT Linux U-Boot MLO does not start).

Are my settings correct? Should I use 2 regions?

Best regards, Chris

Revision: 2.0.2
  • Christian, make sure your code follows the steps outlined in Table 15-131 EMIF ECC Configuration in the AM574x TRM.  Especially need to make sure you initialize the entire ECC protected region after ECC is enabled and clear out any status afterwards, otherwise you'll get false errors

    Regards,

    James

  • Hi James

    sure I can set the registers. Because this is cumbersome and error prone, TI provides an Excel-based config sheet, see

    So, based on the Excel sheet snipped I showed in my Q, could you pls. tell me how to set the Detail 11..14.

    Thanks, Chris

  • Christian, i think you have the spreadsheet filled out properly. I think the issue may be elsewhere as i described above.

    Do you get different results if you set the ECC region smaller?

    Regards,
    James
  • Christian, any progress on this?

    Thanks,
    James
  • Hi James,

    yes, I talked back to Ron Birkett and he suggested to post my findings here.

    1.

    TI'sExcel-based config sheet suggests the following LISA settings:

    const struct dmm_lisa_map_regs AM574x_DDR3L_666MHz_NGI_CPM_dmm_regs = {

       .dmm_lisa_map_0 = 0x00000000,

       .dmm_lisa_map_1 = 0x00000000,

       .dmm_lisa_map_2 = 0x80700100,

       .dmm_lisa_map_3 = 0xFF020100,

       .is_ma_present = 0x1

    };

    With these settings the Bootloader fixes up the memory node of the device tree such that only 2G-16Mb (i.e. 0x8000 0000 - 0xfeff ffff) are reported:

    hexdump /proc/device-tree/memory@0/reg

    0000000 0000 0000 0080 0000 0000 0000 007f 0000

    If I spare out these uppermost 16MB in the ECC range, board works fine.

      .emif_ecc_ctrl_reg = 0xD0000001,

      .emif_ecc_address_range_1 = 0x7EFF0000, // For 16MB Lisa carve-out

      .emif_ecc_address_range_2 = 0x00000000,

    If I set ".emif_ecc_address_range_1 = 0x7FFF0000" it crashes.

    As a reference I checked how LISA is set for IDK574 (which also has 2GB, differently organized):

    static const struct dmm_lisa_map_regs am574x_idk_lisa_regs = {

                   .dmm_lisa_map_2 = 0xc0600200,

                   .dmm_lisa_map_3 = 0x80600100,

                   .is_ma_present  = 0x1

    };

    The full 2 GB are reported in DT.

    hexdump /proc/device-tree/memory@0/reg

    0000000 0000 0000 0080 0000 0000 0000 0080 0000

    0000010 0000 0000 0000 0000 0000 0000 0000 0000

    Can you please elaborate on why LISA settings are such? Complete Excel sheet is inserted.

    SPRAC36A_EMIF_RegisterConfig_NGI_x4_2GB (V2.0.2).xls

    2. The Excel sheet does not set Bit 28 (REG_RMW_EN). If this bit is not set, the board crashed.

    Excel sheet:  .emif_ecc_ctrl_reg = 0xC0000001,

    Corrected setting:  .emif_ecc_ctrl_reg = 0xD0000001,

    Best regards, Chris

        .emif_ecc_ctrl_reg = 0xC0000001,
  • Christian, thanks for the feedback.

    James