[PATCHv4 6/7] S5P DRAM support

Alexey Galakhov agalakhov at gmail.com
Tue May 22 05:17:32 EDT 2012


On 22.05.2012 02:02, Sascha Hauer wrote:
> On Fri, May 18, 2012 at 03:43:30PM +0600, Alexey Galakhov wrote:
>> +void __bare_init s5p_init_dram_bank(uint32_t base, uint32_t mc0, uint32_t mc1)
>> +{
>> +#ifdef S5P_DRAM_LPDDR
>> +	uint32_t reg = 0x100;
>> +#endif
>> +#ifdef S5P_DRAM_LPDDR2
>> +	uint32_t reg = 0x200;
>> +#endif
>> +#ifdef S5P_DRAM_DDR2
>> +	uint32_t reg = 0x400;
>> +#endif
>> +	reg |= (S5P_DRAM_BURST) << 20;
>> +#ifdef S5P_DRAM_16BIT
>> +	reg |= 0x1000;
>> +#else /* 32-bit */
>> +	reg |= 0x2000;
>> +#endif
> 
> Since this function is called from board specific code, can we pass in
> the DDR/DDR2 16BIT/32BIT settings as arguments to this function and
> get rid of these ifdefs?
> 
> Sascha

Thank you for the question. Most likely not.

According to the datasheet, LPDDR/LPDDR2/DDR2 initialization sequence is
completely different. It is in init_seq() function. Since I have no
LPDDR(2) hardware to test, I coded the DDR2 version only. A runtime
switch like that:

switch(mode) {
case LPDDR:
	lpddr_init_seq();
	break;
case LPDDR2:
	lpddr2_init_seq();
	break;
case DDR2:
	ddr2_init_seq();
	break;
}

is too expensive for S5PV210's __bare_init which is very limited in
space. Thus it is better to have only one function compiled in.

Of course, it is possible to get rid of #ifdefs in s5p_init_dram_bank()
but #ifdef is still needed for init_seq(). Ot is there any better solution?

Regards,
--
Alex



More information about the barebox mailing list