Very Elegant Wolfgang - I like it ... I'll take a stab and I'll try not to
tarnish it!


-M

> 
> Looking at the code it seems we have just a list of constants that
> need to get written all to the same mddrc.ddr_command register. To
> make this configurable, we should probably not try to add more such
> stuff, but separate code and data to simplify the design.
> 
> I think we should turn the existing code:
> 
>       /* Initialize DDR */
>       for (i = 0; i < 10; i++)
>               out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
> 
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_RFSH);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_RFSH);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_INIT_DEV_OP);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EM2);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EM2);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EM3);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EN_DLL);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_INIT_DEV_OP);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_RFSH);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_INIT_DEV_OP);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_OCD_DEFAULT);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
>       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
> 
> into something like this:
> 
> u32 micron_table[] = {
>       CONFIG_SYS_MICRON_NOP,
>       CONFIG_SYS_MICRON_NOP,
>       CONFIG_SYS_MICRON_NOP,
>       CONFIG_SYS_MICRON_NOP,
>       CONFIG_SYS_MICRON_NOP,
>       CONFIG_SYS_MICRON_NOP,
>       CONFIG_SYS_MICRON_NOP,
>       CONFIG_SYS_MICRON_NOP,
>       CONFIG_SYS_MICRON_NOP,
>       CONFIG_SYS_MICRON_NOP,
> 
>       CONFIG_SYS_MICRON_PCHG_ALL,
>       CONFIG_SYS_MICRON_NOP,
>       CONFIG_SYS_MICRON_RFSH,
>       CONFIG_SYS_MICRON_NOP,
>       CONFIG_SYS_MICRON_RFSH,
>       CONFIG_SYS_MICRON_NOP,
>       CONFIG_SYS_MICRON_INIT_DEV_OP,
>       CONFIG_SYS_MICRON_NOP,
>       CONFIG_SYS_MICRON_EM2,
>       CONFIG_SYS_MICRON_NOP,
>       CONFIG_SYS_MICRON_PCHG_ALL,
>       CONFIG_SYS_MICRON_EM2,
>       CONFIG_SYS_MICRON_EM3,
>       CONFIG_SYS_MICRON_EN_DLL,
>       CONFIG_SYS_MICRON_INIT_DEV_OP,
>       CONFIG_SYS_MICRON_PCHG_ALL,
>       CONFIG_SYS_MICRON_RFSH,
>       CONFIG_SYS_MICRON_INIT_DEV_OP,
>       CONFIG_SYS_MICRON_OCD_DEFAULT,
>       CONFIG_SYS_MICRON_PCHG_ALL,
>       CONFIG_SYS_MICRON_NOP,
> };
> ...
> 
> long int fixed_sdram(u32 ram_table[], int table_size)
> {
>       int i;
>       ...
>       for (i=0; i<table_size; ++i)
>               out_be32(&im->mddrc.ddr_sys_config, ram_table[i])
>       ...
> }
> 
> The board specific code would then be changed from
> 
>       fixed_sdram()
> 
> into for example
> 
>       fixed_sdram(micron_table,sizeof(micron_table)/sizeof(u32))
> 
> In board/freescale/mpc5121ads/mpc5121ads.c, you could provide an
> additional set of data (elpida_table[]), and then pass either of these
> to fixed_sdram().
> 
> What do you think?
> 
> Best regards,
> 
> Wolfgang Denk
> 
> --
> DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de
> The optimum committee has no members.
>                                                    - Norman Augustine


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

Reply via email to