diff options
| author | Scott Wood <scottwood@freescale.com> | 2013-05-17 20:01:54 -0500 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2013-06-11 22:01:45 +0200 | 
| commit | a166fbca20e40937bf37cc18c389f68e995c1821 (patch) | |
| tree | ca90c9999014f7172aefabf257c9c0d2533aecf4 /arch/powerpc/cpu/mpc8260/i2c.c | |
| parent | e1208c2fe5e07f9a248cfbf9bbb212aa34ad2806 (diff) | |
| download | olio-uboot-2014.01-a166fbca20e40937bf37cc18c389f68e995c1821.tar.xz olio-uboot-2014.01-a166fbca20e40937bf37cc18c389f68e995c1821.zip | |
powerpc: fix 8xx and 82xx type-punning warnings with GCC 4.7
C99's strict aliasing rules are insane to use in low-level code such as a
bootloader, but as Wolfgang has rejected -fno-strict-aliasing in the
past, add a union so that 16-bit accesses can be performed.
Compile-tested only.
Signed-off-by: Scott Wood <scottwood@freescale.com>
Acked-by: Wolfgang Denk <wd@denx.de>
Diffstat (limited to 'arch/powerpc/cpu/mpc8260/i2c.c')
| -rw-r--r-- | arch/powerpc/cpu/mpc8260/i2c.c | 8 | 
1 files changed, 4 insertions, 4 deletions
| diff --git a/arch/powerpc/cpu/mpc8260/i2c.c b/arch/powerpc/cpu/mpc8260/i2c.c index b720b1fb8..e2341e9c3 100644 --- a/arch/powerpc/cpu/mpc8260/i2c.c +++ b/arch/powerpc/cpu/mpc8260/i2c.c @@ -221,14 +221,14 @@ void i2c_init(int speed, int slaveadd)  	i2c_init_board();  #endif -	dpaddr = *((unsigned short *) (&immap->im_dprambase[PROFF_I2C_BASE])); +	dpaddr = immap->im_dprambase16[PROFF_I2C_BASE / sizeof(u16)];  	if (dpaddr == 0) {  		/* need to allocate dual port ram */  		dpaddr = m8260_cpm_dpalloc(64 +  					(NUM_RX_BDS * sizeof(I2C_BD)) +  					(NUM_TX_BDS * sizeof(I2C_BD)) +  					MAX_TX_SPACE, 64); -		*((unsigned short *)(&immap->im_dprambase[PROFF_I2C_BASE])) = +		immap->im_dprambase16[PROFF_I2C_BASE / sizeof(u16)] =  			dpaddr;  	} @@ -305,7 +305,7 @@ void i2c_newio(i2c_state_t *state)  	debug("[I2C] i2c_newio\n"); -	dpaddr = *((unsigned short *)(&immap->im_dprambase[PROFF_I2C_BASE])); +	dpaddr = immap->im_dprambase16[PROFF_I2C_BASE / sizeof(u16)];  	iip = (iic_t *)&immap->im_dprambase[dpaddr];  	state->rx_idx = 0;  	state->tx_idx = 0; @@ -480,7 +480,7 @@ int i2c_doio(i2c_state_t *state)  		return I2CERR_QUEUE_EMPTY;  	} -	dpaddr = *((unsigned short *)(&immap->im_dprambase[PROFF_I2C_BASE])); +	dpaddr = immap->im_dprambase16[PROFF_I2C_BASE / sizeof(u16)];  	iip = (iic_t *)&immap->im_dprambase[dpaddr];  	iip->iic_rbptr = iip->iic_rbase;  	iip->iic_tbptr = iip->iic_tbase; |