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
		
			
				
	
	
		
			37 lines
		
	
	
		
			829 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			829 B
		
	
	
	
		
			C
		
	
	
	
	
	
void outl(unsigned int value, unsigned short port)
 | 
						|
{
 | 
						|
	__builtin_outl(value, port);
 | 
						|
}
 | 
						|
 | 
						|
#define PIIX4_DEVFN 0x90
 | 
						|
#define SMBUS_MEM_DEVICE_START 0x50
 | 
						|
#define SMBUS_MEM_DEVICE_END 0x53
 | 
						|
#define SMBUS_MEM_DEVICE_INC 1
 | 
						|
 | 
						|
 | 
						|
static void spd_set_drb(void)
 | 
						|
{
 | 
						|
	/*
 | 
						|
	 * Effects:	Uses serial presence detect to set the
 | 
						|
	 *              DRB registers which holds the ending memory address assigned
 | 
						|
	 *              to each DIMM.
 | 
						|
	 */
 | 
						|
	unsigned end_of_memory;
 | 
						|
	unsigned device;
 | 
						|
 | 
						|
	end_of_memory = 0; /* in multiples of 8MiB */
 | 
						|
	device = SMBUS_MEM_DEVICE_START;
 | 
						|
	while (device <= SMBUS_MEM_DEVICE_END) {
 | 
						|
		unsigned side1_bits;
 | 
						|
 | 
						|
		side1_bits =  -1;
 | 
						|
 | 
						|
		/* Compute the end address for the DRB register */
 | 
						|
		/* Only process dimms < 2GB (2^8 * 8MB) */
 | 
						|
		if (side1_bits < 8) {
 | 
						|
			end_of_memory += (1 << side1_bits);
 | 
						|
		}
 | 
						|
		outl(end_of_memory, 0x1234);
 | 
						|
	}
 | 
						|
}
 |