while others dislike them being extra commits, let's clean them up once and for all for the existing code. If it's ugly, let it only be ugly once :-) Signed-off-by: Stefan Reinauer <stepan@coresystems.de> Acked-by: Stefan Reinauer <stepan@coresystems.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5507 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
 | 
						|
static void spd_enable_refresh(void)
 | 
						|
{
 | 
						|
	/*
 | 
						|
	 * Effects:	Uses serial presence detect to set the
 | 
						|
	 *              refresh rate in the DRAMC register.
 | 
						|
	 *		see spd_set_dramc for the other values.
 | 
						|
	 * FIXME:	Check for illegal/unsupported ram configurations and abort
 | 
						|
	 */
 | 
						|
	static const unsigned char refresh_rates[] = {
 | 
						|
		0x01, /* Normal        15.625 us -> 15.6 us */
 | 
						|
		0x05, /* Reduced(.25X) 3.9 us    -> 7.8 us */
 | 
						|
		0x05, /* Reduced(.5X)  7.8 us    -> 7.8 us */
 | 
						|
		0x02, /* Extended(2x)  31.3 us   -> 31.2 us */
 | 
						|
		0x03, /* Extended(4x)  62.5 us   -> 62.4 us */
 | 
						|
		0x04, /* Extended(8x)  125 us    -> 124.8 us */
 | 
						|
	};
 | 
						|
	/* Find the first dimm and assume the rest are the same */
 | 
						|
	int byte;
 | 
						|
	unsigned device;
 | 
						|
	unsigned refresh_rate;
 | 
						|
	byte = -1;
 | 
						|
	device = 0x50;
 | 
						|
	while ((byte < 0) && (device <= 0x57)) {
 | 
						|
		byte = __builtin_inl(device);
 | 
						|
		device += 1;
 | 
						|
	}
 | 
						|
	if (byte < 0) {
 | 
						|
		/* We couldn't find anything we must have no memory */
 | 
						|
		while(1);
 | 
						|
	}
 | 
						|
	byte &= 0x7f;
 | 
						|
	/* Default refresh rate be conservative */
 | 
						|
	refresh_rate = 5;
 | 
						|
	/* see if the ram refresh is a supported one */
 | 
						|
	if (byte < 6) {
 | 
						|
		refresh_rate = refresh_rates[byte];
 | 
						|
	}
 | 
						|
	byte = __builtin_inb(0x57);
 | 
						|
	byte &= 0xf8;
 | 
						|
	byte |= refresh_rate;
 | 
						|
	__builtin_outb(byte, 0x57);
 | 
						|
}
 |