diff options
Diffstat (limited to 'board/lwmon5/sdram.c')
| -rw-r--r-- | board/lwmon5/sdram.c | 64 | 
1 files changed, 64 insertions, 0 deletions
| diff --git a/board/lwmon5/sdram.c b/board/lwmon5/sdram.c index 85811adad..9a4a8eea8 100644 --- a/board/lwmon5/sdram.c +++ b/board/lwmon5/sdram.c @@ -474,8 +474,27 @@ static void program_ecc(u32 start_address,  		blank_string(strlen(str));  	} else {  		/* ECC bit set method for cached memory */ +#if 1 /* test-only: will remove this define later, when ECC problems are solved! */ +		/* +		 * Some boards (like lwmon5) need to preserve the memory +		 * content upon ECC generation (for the log-buffer). +		 * Therefore we don't fill the memory with a pattern or +		 * just zero it, but write the same values back that are +		 * already in the memory cells. +		 */ +		address_increment = CFG_CACHELINE_SIZE; +		end_address = current_address + num_bytes; + +		current_address = start_address; +		while (current_address < end_address) { +			ppcDcbi(current_address); +			ppcDcbf(current_address); +			current_address += CFG_CACHELINE_SIZE; +		} +#else  		dcbz_area(start_address, num_bytes);  		dflush(); +#endif  	}  	sync(); @@ -518,6 +537,8 @@ long int initdram (int board_type)  {  	u32 val; +#if 0 /* test-only: will remove this define later, when ECC problems are solved! */ +	/* CL=3 */  	mtsdram(DDR0_02, 0x00000000);  	mtsdram(DDR0_00, 0x0000190A); @@ -558,6 +579,49 @@ long int initdram (int board_type)  	mtsdram(DDR0_43, 0x030A0200);  	mtsdram(DDR0_44, 0x00000003);  	mtsdram(DDR0_02, 0x00000001); /* Activate the denali core */ +#else +	/* CL=4 */ +	mtsdram(DDR0_02, 0x00000000); + +	mtsdram(DDR0_00, 0x0000190A); +	mtsdram(DDR0_01, 0x01000000); +	mtsdram(DDR0_03, 0x02040803); /* A suitable burst length was taken. CAS is right for our board */ + +	mtsdram(DDR0_04, 0x0B030300); +	mtsdram(DDR0_05, 0x02020308); +	mtsdram(DDR0_06, 0x0003C812); +	mtsdram(DDR0_07, 0x00090100); +	mtsdram(DDR0_08, 0x03c80001); +	mtsdram(DDR0_09, 0x00011D5F); +	mtsdram(DDR0_10, 0x00000300); +	mtsdram(DDR0_11, 0x000CC800); +	mtsdram(DDR0_12, 0x00000003); +	mtsdram(DDR0_14, 0x00000000); +	mtsdram(DDR0_17, 0x1e000000); +	mtsdram(DDR0_18, 0x1e1e1e1e); +	mtsdram(DDR0_19, 0x1e1e1e1e); +	mtsdram(DDR0_20, 0x0B0B0B0B); +	mtsdram(DDR0_21, 0x0B0B0B0B); +#ifdef CONFIG_DDR_ECC +	mtsdram(DDR0_22, 0x00267F0B | DDR0_22_CTRL_RAW_ECC_ENABLE); /* enable ECC       */ +#else +	mtsdram(DDR0_22, 0x00267F0B); +#endif + +	mtsdram(DDR0_23, 0x01000000); +	mtsdram(DDR0_24, 0x01010001); + +	mtsdram(DDR0_26, 0x2D93028A); +	mtsdram(DDR0_27, 0x0784682B); + +	mtsdram(DDR0_28, 0x00000080); +	mtsdram(DDR0_31, 0x00000000); +	mtsdram(DDR0_42, 0x01000008); + +	mtsdram(DDR0_43, 0x050A0200); +	mtsdram(DDR0_44, 0x00000005); +	mtsdram(DDR0_02, 0x00000001); /* Activate the denali core */ +#endif  	wait_for_dlllock(); |