Hi Lokesh,

> AM574x-idk has the following DDR parts attached:
> EMIF1: MT41K256M16HA (1GB with ECC)
> EMIF2: MT41K256M16HA (1GB without ECC)
> 
> Enabling 2GB DDR without interleaving between EMIFs. And
> enabling ECC on EMIF1.
> 
> Signed-off-by: Lokesh Vutla <lokeshvu...@ti.com>
> Signed-off-by: Krunal Bhargav <k-bhar...@ti.com>
> ---
>  board/ti/am57xx/board.c | 47
> ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44
> insertions(+), 3 deletions(-)
> 
> diff --git a/board/ti/am57xx/board.c b/board/ti/am57xx/board.c
> index 2d14ae54fe..1377c7b1fe 100644
> --- a/board/ti/am57xx/board.c
> +++ b/board/ti/am57xx/board.c
> @@ -89,10 +89,18 @@ static const struct dmm_lisa_map_regs
> am571x_idk_lisa_regs = { .is_ma_present  = 0x1
>  };
>  
> +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
> +};
> +
>  void emif_get_dmm_regs(const struct dmm_lisa_map_regs
> **dmm_lisa_regs) {
>       if (board_is_am571x_idk())
>               *dmm_lisa_regs = &am571x_idk_lisa_regs;
> +     else if (board_is_am574x_idk())
> +             *dmm_lisa_regs = &am574x_idk_lisa_regs;
>       else
>               *dmm_lisa_regs = &beagle_x15_lisa_regs;
>  }
> @@ -231,8 +239,8 @@ static const struct emif_regs
> am571x_emif1_ddr3_666mhz_emif_regs =
> { .ref_ctrl                   =
> 0x0000514d, .ref_ctrl_final                   =
> 0x0000144a, .sdram_tim1                       = 0xd333887c,
> -     .sdram_tim2                     = 0x40b37fe3,
> -     .sdram_tim3                     = 0x409f8ada,
> +     .sdram_tim2                     = 0x30b37fe3,
> +     .sdram_tim3                     = 0x409f8ad8,
>       .read_idle_ctrl                 = 0x00050000,
>       .zq_config                      = 0x5007190b,
>       .temp_alert_config              = 0x00000000,
> @@ -249,17 +257,50 @@ static const struct emif_regs
> am571x_emif1_ddr3_666mhz_emif_regs =
> { .emif_rd_wr_exec_thresh             = 0x00000305 };
>  
> +static const struct emif_regs am574x_emif1_ddr3_666mhz_emif_ecc_regs
> = {
> +     .sdram_config_init              = 0x61863332,
> +     .sdram_config                   = 0x61863332,
> +     .sdram_config2                  = 0x08000000,
> +     .ref_ctrl                       = 0x0000514d,
> +     .ref_ctrl_final                 = 0x0000144a,
> +     .sdram_tim1                     = 0xd333887c,
> +     .sdram_tim2                     = 0x30b37fe3,
> +     .sdram_tim3                     = 0x409f8ad8,
> +     .read_idle_ctrl                 = 0x00050000,
> +     .zq_config                      = 0x5007190b,
> +     .temp_alert_config              = 0x00000000,
> +     .emif_ddr_phy_ctlr_1_init       = 0x0024400f,
> +     .emif_ddr_phy_ctlr_1            = 0x0e24400f,
> +     .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,
> +     .emif_ecc_address_range_1       = 0x3FFF0000,
> +     .emif_ecc_address_range_2       = 0x00000000
> +};

I'm wondering if it would be possible to:

Embed this memory setup (even as binary blob) to SPL FIT -> Those
values are generated from TI supplied excel sheet (when memory details
are provided).


Pros:
----

- Since the same EMIF controller is used, one could only adjust the
  binary blob, when new memory (faster, slower, from other manufacturer)
  is used in the product.

- There would be no need to add such code to the board file.

> +
>  void emif_get_reg_dump(u32 emif_nr, const struct emif_regs **regs)
>  {
>       switch (emif_nr) {
>       case 1:
>               if (board_is_am571x_idk())
>                       *regs = &am571x_emif1_ddr3_666mhz_emif_regs;
> +             else if (board_is_am574x_idk())
> +                     *regs =
> &am574x_emif1_ddr3_666mhz_emif_ecc_regs; else
>                       *regs =
> &beagle_x15_emif1_ddr3_532mhz_emif_regs; break;
>       case 2:
> -             *regs = &beagle_x15_emif2_ddr3_532mhz_emif_regs;
> +             if (board_is_am574x_idk())
> +                     *regs = &am571x_emif1_ddr3_666mhz_emif_regs;
> +             else
> +                     *regs =
> &beagle_x15_emif2_ddr3_532mhz_emif_regs; break;
>       }
>  }



Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de

Attachment: pgpvfcIJHel_s.pgp
Description: OpenPGP digital signature

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to