diff options
Diffstat (limited to 'arch/powerpc/cpu/mpc8xx')
| -rw-r--r-- | arch/powerpc/cpu/mpc8xx/cpu.c | 3 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc8xx/fec.c | 47 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc8xx/i2c.c | 373 | ||||
| -rw-r--r-- | arch/powerpc/cpu/mpc8xx/spi.c | 4 | 
4 files changed, 215 insertions, 212 deletions
diff --git a/arch/powerpc/cpu/mpc8xx/cpu.c b/arch/powerpc/cpu/mpc8xx/cpu.c index 142cfa5b9..5cbf9a688 100644 --- a/arch/powerpc/cpu/mpc8xx/cpu.c +++ b/arch/powerpc/cpu/mpc8xx/cpu.c @@ -40,6 +40,7 @@  #include <commproc.h>  #include <netdev.h>  #include <asm/cache.h> +#include <linux/compiler.h>  #if defined(CONFIG_OF_LIBFDT)  #include <libfdt.h> @@ -185,7 +186,7 @@ static int check_CPU (long clock, uint pvr, uint immr)  	uint k, m;  	char buf[32];  	char pre = 'X'; -	char *mid = "xx"; +	__maybe_unused char *mid = "xx";  	char *suf;  	/* the highest 16 bits should be 0x0050 for a 8xx */ diff --git a/arch/powerpc/cpu/mpc8xx/fec.c b/arch/powerpc/cpu/mpc8xx/fec.c index a2d2bd6d8..f2a2c3a73 100644 --- a/arch/powerpc/cpu/mpc8xx/fec.c +++ b/arch/powerpc/cpu/mpc8xx/fec.c @@ -378,35 +378,39 @@ static void fec_pin_init(int fecidx)  {  	bd_t           *bd = gd->bd;  	volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR; -	volatile fec_t *fecp; - -	/* -	 * only two FECs please -	 */ -	if ((unsigned int)fecidx >= 2) -		hang(); - -	if (fecidx == 0) -		fecp = &immr->im_cpm.cp_fec1; -	else -		fecp = &immr->im_cpm.cp_fec2;  	/*  	 * Set MII speed to 2.5 MHz or slightly below. -	 * * According to the MPC860T (Rev. D) Fast ethernet controller user -	 * * manual (6.2.14), -	 * * the MII management interface clock must be less than or equal -	 * * to 2.5 MHz. -	 * * This MDC frequency is equal to system clock / (2 * MII_SPEED). -	 * * Then MII_SPEED = system_clock / 2 * 2,5 MHz. +	 * +	 * According to the MPC860T (Rev. D) Fast ethernet controller user +	 * manual (6.2.14), +	 * the MII management interface clock must be less than or equal +	 * to 2.5 MHz. +	 * This MDC frequency is equal to system clock / (2 * MII_SPEED). +	 * Then MII_SPEED = system_clock / 2 * 2,5 MHz.  	 *  	 * All MII configuration is done via FEC1 registers:  	 */  	immr->im_cpm.cp_fec1.fec_mii_speed = ((bd->bi_intfreq + 4999999) / 5000000) << 1;  #if defined(CONFIG_NETTA) || defined(CONFIG_NETPHONE) || defined(CONFIG_NETTA2) -	/* our PHYs are the limit at 2.5 MHz */ -	fecp->fec_mii_speed <<= 1; +	{ +		volatile fec_t *fecp; + +		/* +		 * only two FECs please +		 */ +		if ((unsigned int)fecidx >= 2) +			hang(); + +		if (fecidx == 0) +			fecp = &immr->im_cpm.cp_fec1; +		else +			fecp = &immr->im_cpm.cp_fec2; + +		/* our PHYs are the limit at 2.5 MHz */ +		fecp->fec_mii_speed <<= 1; +	}  #endif  #if defined(CONFIG_MPC885_FAMILY) && defined(WANT_MII) @@ -1010,11 +1014,10 @@ int fec8xx_miiphy_read(const char *devname, unsigned char addr,  int fec8xx_miiphy_write(const char *devname, unsigned char  addr,  		unsigned char  reg, unsigned short value)  { -	short rdreg;    /* register working value */  #ifdef MII_DEBUG  	printf ("miiphy_write(0x%x) @ 0x%x = ", reg, addr);  #endif -	rdreg = mii_send(mk_mii_write(addr, reg, value)); +	(void)mii_send(mk_mii_write(addr, reg, value));  #ifdef MII_DEBUG  	printf ("0x%04x\n", value); diff --git a/arch/powerpc/cpu/mpc8xx/i2c.c b/arch/powerpc/cpu/mpc8xx/i2c.c index 1ca51fdde..3e5ea3a0a 100644 --- a/arch/powerpc/cpu/mpc8xx/i2c.c +++ b/arch/powerpc/cpu/mpc8xx/i2c.c @@ -39,9 +39,6 @@  DECLARE_GLOBAL_DATA_PTR; -/* define to enable debug messages */ -#undef	DEBUG_I2C -  /* tx/rx timeout (we need the i2c early, so we don't use get_timer()) */  #define TOUT_LOOP 1000000 @@ -50,13 +47,13 @@ DECLARE_GLOBAL_DATA_PTR;  #define MAX_TX_SPACE 256  #define I2C_RXTX_LEN 128	/* maximum tx/rx buffer length */ -typedef struct I2C_BD -{ -  unsigned short status; -  unsigned short length; -  unsigned char *addr; +typedef struct I2C_BD { +	unsigned short status; +	unsigned short length; +	unsigned char *addr;  } I2C_BD; -#define BD_I2C_TX_START 0x0400  /* special status for i2c: Start condition */ + +#define BD_I2C_TX_START 0x0400	/* special status for i2c: Start condition */  #define BD_I2C_TX_CL	0x0001	/* collision error */  #define BD_I2C_TX_UN	0x0002	/* underflow error */ @@ -65,47 +62,41 @@ typedef struct I2C_BD  #define BD_I2C_RX_ERR	BD_SC_OV -typedef void (*i2c_ecb_t)(int, int);	/* error callback function */ +typedef void (*i2c_ecb_t) (int, int);	/* error callback function */  /* This structure keeps track of the bd and buffer space usage. */  typedef struct i2c_state { -	int		rx_idx;		/* index   to next free Rx BD */ -	int		tx_idx;		/* index   to next free Tx BD */ -	void		*rxbd;		/* pointer to next free Rx BD */ -	void		*txbd;		/* pointer to next free Tx BD */ -	int		tx_space;	/* number  of Tx bytes left   */ -	unsigned char	*tx_buf;	/* pointer to free Tx area    */ -	i2c_ecb_t	err_cb;		/* error callback function    */ +	int rx_idx;		/* index   to next free Rx BD */ +	int tx_idx;		/* index   to next free Tx BD */ +	void *rxbd;		/* pointer to next free Rx BD */ +	void *txbd;		/* pointer to next free Tx BD */ +	int tx_space;		/* number  of Tx bytes left   */ +	unsigned char *tx_buf;	/* pointer to free Tx area    */ +	i2c_ecb_t err_cb;	/* error callback function    */  } i2c_state_t;  /* flags for i2c_send() and i2c_receive() */ -#define I2CF_ENABLE_SECONDARY	0x01	/* secondary_address is valid		*/ -#define I2CF_START_COND		0x02	/* tx: generate start condition		*/ -#define I2CF_STOP_COND		0x04	/* tx: generate stop  condition		*/ +#define I2CF_ENABLE_SECONDARY	0x01  /* secondary_address is valid           */ +#define I2CF_START_COND		0x02  /* tx: generate start condition         */ +#define I2CF_STOP_COND		0x04  /* tx: generate stop  condition         */  /* return codes */ -#define I2CERR_NO_BUFFERS	0x01	/* no more BDs or buffer space		*/ -#define I2CERR_MSG_TOO_LONG	0x02	/* tried to send/receive to much data	*/ -#define I2CERR_TIMEOUT		0x03	/* timeout in i2c_doio()		*/ -#define I2CERR_QUEUE_EMPTY	0x04	/* i2c_doio called without send/receive */ +#define I2CERR_NO_BUFFERS	0x01  /* no more BDs or buffer space          */ +#define I2CERR_MSG_TOO_LONG	0x02  /* tried to send/receive to much data   */ +#define I2CERR_TIMEOUT		0x03  /* timeout in i2c_doio()                */ +#define I2CERR_QUEUE_EMPTY	0x04  /* i2c_doio called without send/receive */  /* error callback flags */ -#define I2CECB_RX_ERR		0x10	/* this is a receive error		*/ -#define     I2CECB_RX_ERR_OV	0x02	/* receive overrun error		*/ -#define     I2CECB_RX_MASK	0x0f	/* mask for error bits			*/ -#define I2CECB_TX_ERR		0x20	/* this is a transmit error		*/ -#define     I2CECB_TX_CL	0x01	/* transmit collision error		*/ -#define     I2CECB_TX_UN	0x02	/* transmit underflow error		*/ -#define     I2CECB_TX_NAK	0x04	/* transmit no ack error		*/ -#define     I2CECB_TX_MASK	0x0f	/* mask for error bits			*/ -#define I2CECB_TIMEOUT		0x40	/* this is a timeout error		*/ - -#ifdef DEBUG_I2C -#define PRINTD(x) printf x -#else -#define PRINTD(x) -#endif +#define I2CECB_RX_ERR		0x10  /* this is a receive error              */ +#define     I2CECB_RX_ERR_OV	0x02  /* receive overrun error                */ +#define     I2CECB_RX_MASK	0x0f  /* mask for error bits                  */ +#define I2CECB_TX_ERR		0x20  /* this is a transmit error             */ +#define     I2CECB_TX_CL	0x01  /* transmit collision error             */ +#define     I2CECB_TX_UN	0x02  /* transmit underflow error             */ +#define     I2CECB_TX_NAK	0x04  /* transmit no ack error                */ +#define     I2CECB_TX_MASK	0x0f  /* mask for error bits                  */ +#define I2CECB_TIMEOUT		0x40  /* this is a timeout error              */  /*   * Returns the best value of I2BRG to meet desired clock speed of I2C with @@ -115,53 +106,53 @@ typedef struct i2c_state {   */  static inline int  i2c_roundrate(int hz, int speed, int filter, int modval, -		int *brgval, int *totspeed) +	      int *brgval, int *totspeed)  { -    int moddiv = 1 << (5-(modval & 3)), brgdiv, div; +	int moddiv = 1 << (5 - (modval & 3)), brgdiv, div; -    PRINTD(("\t[I2C] trying hz=%d, speed=%d, filter=%d, modval=%d\n", -	hz, speed, filter, modval)); +	debug("\t[I2C] trying hz=%d, speed=%d, filter=%d, modval=%d\n", +		hz, speed, filter, modval); -    div = moddiv * speed; -    brgdiv = (hz + div - 1) / div; +	div = moddiv * speed; +	brgdiv = (hz + div - 1) / div; -    PRINTD(("\t\tmoddiv=%d, brgdiv=%d\n", moddiv, brgdiv)); +	debug("\t\tmoddiv=%d, brgdiv=%d\n", moddiv, brgdiv); -    *brgval = ((brgdiv + 1) / 2) - 3 - (2*filter); +	*brgval = ((brgdiv + 1) / 2) - 3 - (2 * filter); -    if ((*brgval < 0) || (*brgval > 255)) { -	  PRINTD(("\t\trejected brgval=%d\n", *brgval)); -	  return -1; -    } +	if ((*brgval < 0) || (*brgval > 255)) { +		debug("\t\trejected brgval=%d\n", *brgval); +		return -1; +	} -    brgdiv = 2 * (*brgval + 3 + (2 * filter)); -    div = moddiv * brgdiv ; -    *totspeed = hz / div; +	brgdiv = 2 * (*brgval + 3 + (2 * filter)); +	div = moddiv * brgdiv; +	*totspeed = hz / div; -    PRINTD(("\t\taccepted brgval=%d, totspeed=%d\n", *brgval, *totspeed)); +	debug("\t\taccepted brgval=%d, totspeed=%d\n", *brgval, *totspeed); -    return  0; +	return 0;  }  /*   * Sets the I2C clock predivider and divider to meet required clock speed.   */ -static int -i2c_setrate (int hz, int speed) +static int i2c_setrate(int hz, int speed)  { -	immap_t		*immap = (immap_t *) CONFIG_SYS_IMMR; +	immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;  	volatile i2c8xx_t *i2c = (i2c8xx_t *) & immap->im_i2c; -	int		brgval, -			modval,		/* 0-3 */ -			bestspeed_diff = speed, -			bestspeed_brgval = 0, -			bestspeed_modval = 0, -			bestspeed_filter = 0, -			totspeed, -			filter = 0;	/* Use this fixed value */ +	int	brgval, +		modval,	/* 0-3 */ +		bestspeed_diff = speed, +		bestspeed_brgval = 0, +		bestspeed_modval = 0, +		bestspeed_filter = 0, +		totspeed, +		filter = 0;	/* Use this fixed value */  	for (modval = 0; modval < 4; modval++) { -		if (i2c_roundrate(hz,speed,filter,modval,&brgval,&totspeed) == 0) { +		if (i2c_roundrate +		    (hz, speed, filter, modval, &brgval, &totspeed) == 0) {  			int diff = speed - totspeed;  			if ((diff >= 0) && (diff < bestspeed_diff)) { @@ -173,30 +164,31 @@ i2c_setrate (int hz, int speed)  		}  	} -	PRINTD (("[I2C] Best is:\n")); -	PRINTD (("[I2C] CPU=%dhz RATE=%d F=%d I2MOD=%08x I2BRG=%08x DIFF=%dhz\n", +	debug("[I2C] Best is:\n"); +	debug("[I2C] CPU=%dhz RATE=%d F=%d I2MOD=%08x I2BRG=%08x DIFF=%dhz\n",  		hz,  		speed,  		bestspeed_filter,  		bestspeed_modval,  		bestspeed_brgval, -		bestspeed_diff)); +		bestspeed_diff); -	i2c->i2c_i2mod |= ((bestspeed_modval & 3) << 1) | (bestspeed_filter << 3); +	i2c->i2c_i2mod |= +		((bestspeed_modval & 3) << 1) | (bestspeed_filter << 3);  	i2c->i2c_i2brg = bestspeed_brgval & 0xff; -	PRINTD (("[I2C] i2mod=%08x i2brg=%08x\n", i2c->i2c_i2mod, -			 i2c->i2c_i2brg)); +	debug("[I2C] i2mod=%08x i2brg=%08x\n", +		i2c->i2c_i2mod, +		i2c->i2c_i2brg);  	return 1;  } -void -i2c_init(int speed, int slaveaddr) +void i2c_init(int speed, int slaveaddr)  { -	volatile immap_t *immap = (immap_t *)CONFIG_SYS_IMMR ; +	volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;  	volatile cpm8xx_t *cp = (cpm8xx_t *)&immap->im_cpm; -	volatile i2c8xx_t *i2c	= (i2c8xx_t *)&immap->im_i2c; +	volatile i2c8xx_t *i2c = (i2c8xx_t *)&immap->im_i2c;  	volatile iic_t *iip = (iic_t *)&cp->cp_dparam[PROFF_IIC];  	ulong rbase, tbase;  	volatile I2C_BD *rxbd, *txbd; @@ -219,10 +211,10 @@ i2c_init(int speed, int slaveaddr)  #ifdef CONFIG_SYS_ALLOC_DPRAM  	dpaddr = iip->iic_rbase;  	if (dpaddr == 0) { -	    /* need to allocate dual port ram */ -	    dpaddr = dpram_alloc_align( -		(NUM_RX_BDS * sizeof(I2C_BD)) + (NUM_TX_BDS * sizeof(I2C_BD)) + -		MAX_TX_SPACE, 8); +		/* need to allocate dual port ram */ +		dpaddr = dpram_alloc_align((NUM_RX_BDS * sizeof(I2C_BD)) + +					   (NUM_TX_BDS * sizeof(I2C_BD)) + +					   MAX_TX_SPACE, 8);  	}  #else  	dpaddr = CPM_I2C_BASE; @@ -255,25 +247,25 @@ i2c_init(int speed, int slaveaddr)  	 * and current CPU rate (we assume sccr dfbgr field is 0;  	 * divide BRGCLK by 1)  	 */ -	PRINTD(("[I2C] Setting rate...\n")); -	i2c_setrate (gd->cpu_clk, CONFIG_SYS_I2C_SPEED) ; +	debug("[I2C] Setting rate...\n"); +	i2c_setrate(gd->cpu_clk, CONFIG_SYS_I2C_SPEED);  	/* Set I2C controller in master mode */  	i2c->i2c_i2com = 0x01;  	/* Set SDMA bus arbitration level to 5 (SDCR) */ -	immap->im_siu_conf.sc_sdcr = 0x0001 ; +	immap->im_siu_conf.sc_sdcr = 0x0001;  	/* Initialize Tx/Rx parameters */  	iip->iic_rbase = rbase;  	iip->iic_tbase = tbase; -	rxbd = (I2C_BD *)((unsigned char *)&cp->cp_dpmem[iip->iic_rbase]); -	txbd = (I2C_BD *)((unsigned char *)&cp->cp_dpmem[iip->iic_tbase]); +	rxbd = (I2C_BD *) ((unsigned char *) &cp->cp_dpmem[iip->iic_rbase]); +	txbd = (I2C_BD *) ((unsigned char *) &cp->cp_dpmem[iip->iic_tbase]); -	PRINTD(("[I2C] rbase = %04x\n", iip->iic_rbase)); -	PRINTD(("[I2C] tbase = %04x\n", iip->iic_tbase)); -	PRINTD(("[I2C] rxbd = %08x\n", (int)rxbd)); -	PRINTD(("[I2C] txbd = %08x\n", (int)txbd)); +	debug("[I2C] rbase = %04x\n", iip->iic_rbase); +	debug("[I2C] tbase = %04x\n", iip->iic_tbase); +	debug("[I2C] rxbd = %08x\n", (int)rxbd); +	debug("[I2C] txbd = %08x\n", (int)txbd);  	/* Set big endian byte order */  	iip->iic_tfcr = 0x10; @@ -286,14 +278,14 @@ i2c_init(int speed, int slaveaddr)  	/*  	 *  Initialize required parameters if using microcode patch.  	 */ -	iip->iic_rbptr  = iip->iic_rbase; -	iip->iic_tbptr  = iip->iic_tbase; +	iip->iic_rbptr = iip->iic_rbase; +	iip->iic_tbptr = iip->iic_tbase;  	iip->iic_rstate = 0;  	iip->iic_tstate = 0;  #else  	cp->cp_cpcr = mk_cr_cmd(CPM_CR_CH_I2C, CPM_CR_INIT_TRX) | CPM_CR_FLG;  	do { -		__asm__ __volatile__ ("eieio"); +		__asm__ __volatile__("eieio");  	} while (cp->cp_cpcr & CPM_CR_FLG);  #endif @@ -302,29 +294,28 @@ i2c_init(int speed, int slaveaddr)  	i2c->i2c_i2cmr = 0x00;  } -static void -i2c_newio(i2c_state_t *state) +static void i2c_newio(i2c_state_t *state)  { -	volatile immap_t *immap = (immap_t *)CONFIG_SYS_IMMR ; +	volatile immap_t *immap = (immap_t *)CONFIG_SYS_IMMR;  	volatile cpm8xx_t *cp = (cpm8xx_t *)&immap->im_cpm;  	volatile iic_t *iip = (iic_t *)&cp->cp_dparam[PROFF_IIC]; -	PRINTD(("[I2C] i2c_newio\n")); +	debug("[I2C] i2c_newio\n");  #ifdef CONFIG_SYS_I2C_UCODE_PATCH  	iip = (iic_t *)&cp->cp_dpmem[iip->iic_rpbase];  #endif  	state->rx_idx = 0;  	state->tx_idx = 0; -	state->rxbd = (void*)&cp->cp_dpmem[iip->iic_rbase]; -	state->txbd = (void*)&cp->cp_dpmem[iip->iic_tbase]; +	state->rxbd = (void *)&cp->cp_dpmem[iip->iic_rbase]; +	state->txbd = (void *)&cp->cp_dpmem[iip->iic_tbase];  	state->tx_space = MAX_TX_SPACE; -	state->tx_buf = (uchar*)state->txbd + NUM_TX_BDS * sizeof(I2C_BD); +	state->tx_buf = (uchar *)state->txbd + NUM_TX_BDS * sizeof(I2C_BD);  	state->err_cb = NULL; -	PRINTD(("[I2C] rxbd = %08x\n", (int)state->rxbd)); -	PRINTD(("[I2C] txbd = %08x\n", (int)state->txbd)); -	PRINTD(("[I2C] tx_buf = %08x\n", (int)state->tx_buf)); +	debug("[I2C] rxbd = %08x\n", (int)state->rxbd); +	debug("[I2C] txbd = %08x\n", (int)state->txbd); +	debug("[I2C] tx_buf = %08x\n", (int)state->tx_buf);  	/* clear the buffer memory */  	memset((char *)state->tx_buf, 0, MAX_TX_SPACE); @@ -334,69 +325,71 @@ static int  i2c_send(i2c_state_t *state,  	 unsigned char address,  	 unsigned char secondary_address, -	 unsigned int flags, -	 unsigned short size, -	 unsigned char *dataout) +	 unsigned int flags, unsigned short size, unsigned char *dataout)  {  	volatile I2C_BD *txbd; -	int i,j; +	int i, j; -	PRINTD(("[I2C] i2c_send add=%02d sec=%02d flag=%02d size=%d\n", -			address, secondary_address, flags, size)); +	debug("[I2C] i2c_send add=%02d sec=%02d flag=%02d size=%d\n", +		address, secondary_address, flags, size);  	/* trying to send message larger than BD */  	if (size > I2C_RXTX_LEN) -	  return I2CERR_MSG_TOO_LONG; +		return I2CERR_MSG_TOO_LONG;  	/* no more free bds */  	if (state->tx_idx >= NUM_TX_BDS || state->tx_space < (2 + size)) -	  return I2CERR_NO_BUFFERS; +		return I2CERR_NO_BUFFERS; -	txbd = (I2C_BD *)state->txbd; +	txbd = (I2C_BD *) state->txbd;  	txbd->addr = state->tx_buf; -	PRINTD(("[I2C] txbd = %08x\n", (int)txbd)); +	debug("[I2C] txbd = %08x\n", (int)txbd);  	if (flags & I2CF_START_COND) { -		PRINTD(("[I2C] Formatting addresses...\n")); +		debug("[I2C] Formatting addresses...\n");  		if (flags & I2CF_ENABLE_SECONDARY) { -			txbd->length = size + 2;  /* Length of msg + dest addr */ +			/* Length of msg + dest addr */ +			txbd->length = size + 2; +  			txbd->addr[0] = address << 1;  			txbd->addr[1] = secondary_address;  			i = 2;  		} else { -			txbd->length = size + 1;  /* Length of msg + dest addr */ -			txbd->addr[0] = address << 1;  /* Write dest addr to BD */ +			/* Length of msg + dest addr */ +			txbd->length = size + 1; +			/* Write dest addr to BD */ +			txbd->addr[0] = address << 1;  			i = 1;  		}  	} else { -		txbd->length = size;  /* Length of message */ +		txbd->length = size;	/* Length of message */  		i = 0;  	}  	/* set up txbd */  	txbd->status = BD_SC_READY;  	if (flags & I2CF_START_COND) -	  txbd->status |= BD_I2C_TX_START; +		txbd->status |= BD_I2C_TX_START;  	if (flags & I2CF_STOP_COND) -	  txbd->status |= BD_SC_LAST | BD_SC_WRAP; +		txbd->status |= BD_SC_LAST | BD_SC_WRAP;  	/* Copy data to send into buffer */ -	PRINTD(("[I2C] copy data...\n")); +	debug("[I2C] copy data...\n");  	for(j = 0; j < size; i++, j++) -	  txbd->addr[i] = dataout[j]; +		txbd->addr[i] = dataout[j]; -	PRINTD(("[I2C] txbd: length=0x%04x status=0x%04x addr[0]=0x%02x addr[1]=0x%02x\n", -		   txbd->length, -		   txbd->status, -		   txbd->addr[0], -		   txbd->addr[1])); +	debug("[I2C] txbd: length=0x%04x status=0x%04x addr[0]=0x%02x addr[1]=0x%02x\n", +		txbd->length, +		txbd->status, +		txbd->addr[0], +		txbd->addr[1]);  	/* advance state */  	state->tx_buf += txbd->length;  	state->tx_space -= txbd->length;  	state->tx_idx++; -	state->txbd = (void*)(txbd + 1); +	state->txbd = (void *) (txbd + 1);  	return 0;  } @@ -406,35 +399,35 @@ i2c_receive(i2c_state_t *state,  	    unsigned char address,  	    unsigned char secondary_address,  	    unsigned int flags, -	    unsigned short size_to_expect, -	    unsigned char *datain) +	    unsigned short size_to_expect, unsigned char *datain)  {  	volatile I2C_BD *rxbd, *txbd; -	PRINTD(("[I2C] i2c_receive %02d %02d %02d\n", address, secondary_address, flags)); +	debug("[I2C] i2c_receive %02d %02d %02d\n", +		address, secondary_address, flags);  	/* Expected to receive too much */  	if (size_to_expect > I2C_RXTX_LEN) -	  return I2CERR_MSG_TOO_LONG; +		return I2CERR_MSG_TOO_LONG;  	/* no more free bds */  	if (state->tx_idx >= NUM_TX_BDS || state->rx_idx >= NUM_RX_BDS -		 || state->tx_space < 2) -	  return I2CERR_NO_BUFFERS; +	    || state->tx_space < 2) +		return I2CERR_NO_BUFFERS; -	rxbd = (I2C_BD *)state->rxbd; -	txbd = (I2C_BD *)state->txbd; +	rxbd = (I2C_BD *) state->rxbd; +	txbd = (I2C_BD *) state->txbd; -	PRINTD(("[I2C] rxbd = %08x\n", (int)rxbd)); -	PRINTD(("[I2C] txbd = %08x\n", (int)txbd)); +	debug("[I2C] rxbd = %08x\n", (int)rxbd); +	debug("[I2C] txbd = %08x\n", (int)txbd);  	txbd->addr = state->tx_buf;  	/* set up TXBD for destination address */  	if (flags & I2CF_ENABLE_SECONDARY) {  		txbd->length = 2; -		txbd->addr[0] = address << 1;   /* Write data */ -		txbd->addr[1] = secondary_address;  /* Internal address */ +		txbd->addr[0] = address << 1;	/* Write data */ +		txbd->addr[1] = secondary_address;	/* Internal address */  		txbd->status = BD_SC_READY;  	} else {  		txbd->length = 1 + size_to_expect; @@ -454,24 +447,24 @@ i2c_receive(i2c_state_t *state,  		rxbd->status |= BD_SC_WRAP;  	} -	PRINTD(("[I2C] txbd: length=0x%04x status=0x%04x addr[0]=0x%02x addr[1]=0x%02x\n", -		   txbd->length, -		   txbd->status, -		   txbd->addr[0], -		   txbd->addr[1])); -	PRINTD(("[I2C] rxbd: length=0x%04x status=0x%04x addr[0]=0x%02x addr[1]=0x%02x\n", -		   rxbd->length, -		   rxbd->status, -		   rxbd->addr[0], -		   rxbd->addr[1])); +	debug("[I2C] txbd: length=0x%04x status=0x%04x addr[0]=0x%02x addr[1]=0x%02x\n", +		txbd->length, +		txbd->status, +		txbd->addr[0], +		txbd->addr[1]); +	debug("[I2C] rxbd: length=0x%04x status=0x%04x addr[0]=0x%02x addr[1]=0x%02x\n", +		rxbd->length, +		rxbd->status, +		rxbd->addr[0], +		rxbd->addr[1]);  	/* advance state */  	state->tx_buf += txbd->length;  	state->tx_space -= txbd->length;  	state->tx_idx++; -	state->txbd = (void*)(txbd + 1); +	state->txbd = (void *) (txbd + 1);  	state->rx_idx++; -	state->rxbd = (void*)(rxbd + 1); +	state->rxbd = (void *) (rxbd + 1);  	return 0;  } @@ -479,21 +472,21 @@ i2c_receive(i2c_state_t *state,  static int i2c_doio(i2c_state_t *state)  { -	volatile immap_t *immap = (immap_t *)CONFIG_SYS_IMMR ; +	volatile immap_t *immap = (immap_t *)CONFIG_SYS_IMMR;  	volatile cpm8xx_t *cp = (cpm8xx_t *)&immap->im_cpm; -	volatile i2c8xx_t *i2c	= (i2c8xx_t *)&immap->im_i2c; +	volatile i2c8xx_t *i2c = (i2c8xx_t *)&immap->im_i2c;  	volatile iic_t *iip = (iic_t *)&cp->cp_dparam[PROFF_IIC];  	volatile I2C_BD *txbd, *rxbd;  	volatile int j = 0; -	PRINTD(("[I2C] i2c_doio\n")); +	debug("[I2C] i2c_doio\n");  #ifdef CONFIG_SYS_I2C_UCODE_PATCH  	iip = (iic_t *)&cp->cp_dpmem[iip->iic_rpbase];  #endif  	if (state->tx_idx <= 0 && state->rx_idx <= 0) { -		PRINTD(("[I2C] No I/O is queued\n")); +		debug("[I2C] No I/O is queued\n");  		return I2CERR_QUEUE_EMPTY;  	} @@ -501,7 +494,7 @@ static int i2c_doio(i2c_state_t *state)  	iip->iic_tbptr = iip->iic_tbase;  	/* Enable I2C */ -	PRINTD(("[I2C] Enabling I2C...\n")); +	debug("[I2C] Enabling I2C...\n");  	i2c->i2c_i2mod |= 0x01;  	/* Begin transmission */ @@ -511,23 +504,29 @@ static int i2c_doio(i2c_state_t *state)  	if (state->tx_idx > 0) {  		txbd = ((I2C_BD*)state->txbd) - 1; -		PRINTD(("[I2C] Transmitting...(txbd=0x%08lx)\n", (ulong)txbd)); -		while((txbd->status & BD_SC_READY) && (j++ < TOUT_LOOP)) { -			if (ctrlc()) { + +		debug("[I2C] Transmitting...(txbd=0x%08lx)\n", +			(ulong)txbd); + +		while ((txbd->status & BD_SC_READY) && (j++ < TOUT_LOOP)) { +			if (ctrlc())  				return (-1); -			} -			__asm__ __volatile__ ("eieio"); + +			__asm__ __volatile__("eieio");  		}  	}  	if ((state->rx_idx > 0) && (j < TOUT_LOOP)) {  		rxbd = ((I2C_BD*)state->rxbd) - 1; -		PRINTD(("[I2C] Receiving...(rxbd=0x%08lx)\n", (ulong)rxbd)); -		while((rxbd->status & BD_SC_EMPTY) && (j++ < TOUT_LOOP)) { -			if (ctrlc()) { + +		debug("[I2C] Receiving...(rxbd=0x%08lx)\n", +			(ulong)rxbd); + +		while ((rxbd->status & BD_SC_EMPTY) && (j++ < TOUT_LOOP)) { +			if (ctrlc())  				return (-1); -			} -			__asm__ __volatile__ ("eieio"); + +			__asm__ __volatile__("eieio");  		}  	} @@ -544,22 +543,24 @@ static int i2c_doio(i2c_state_t *state)  		if ((n = state->tx_idx) > 0) {  			for (i = 0; i < n; i++) { -				txbd = ((I2C_BD*)state->txbd) - (n - i); +				txbd = ((I2C_BD *) state->txbd) - (n - i);  				if ((b = txbd->status & BD_I2C_TX_ERR) != 0) -					(*state->err_cb)(I2CECB_TX_ERR|b, i); +					(*state->err_cb) (I2CECB_TX_ERR | b, +							  i);  			}  		}  		if ((n = state->rx_idx) > 0) {  			for (i = 0; i < n; i++) { -				rxbd = ((I2C_BD*)state->rxbd) - (n - i); +				rxbd = ((I2C_BD *) state->rxbd) - (n - i);  				if ((b = rxbd->status & BD_I2C_RX_ERR) != 0) -					(*state->err_cb)(I2CECB_RX_ERR|b, i); +					(*state->err_cb) (I2CECB_RX_ERR | b, +							  i);  			}  		}  		if (j >= TOUT_LOOP) -			(*state->err_cb)(I2CECB_TIMEOUT, 0); +			(*state->err_cb) (I2CECB_TIMEOUT, 0);  	}  	return (j >= TOUT_LOOP) ? I2CERR_TIMEOUT : 0; @@ -567,8 +568,7 @@ static int i2c_doio(i2c_state_t *state)  static int had_tx_nak; -static void -i2c_test_callback(int flags, int xnum) +static void i2c_test_callback(int flags, int xnum)  {  	if ((flags & I2CECB_TX_ERR) && (flags & I2CECB_TX_NAK))  		had_tx_nak = 1; @@ -587,7 +587,8 @@ int i2c_probe(uchar chip)  	state.err_cb = i2c_test_callback;  	had_tx_nak = 0; -	rc = i2c_receive(&state, chip, 0, I2CF_START_COND|I2CF_STOP_COND, 1, buf); +	rc = i2c_receive(&state, chip, 0, I2CF_START_COND | I2CF_STOP_COND, 1, +			 buf);  	if (rc != 0)  		return (rc); @@ -612,8 +613,8 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)  	xaddr[0] = (addr >> 24) & 0xFF;  	xaddr[1] = (addr >> 16) & 0xFF; -	xaddr[2] = (addr >>  8) & 0xFF; -	xaddr[3] =  addr        & 0xFF; +	xaddr[2] = (addr >> 8) & 0xFF; +	xaddr[3] = addr & 0xFF;  #ifdef CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW  	/* @@ -626,12 +627,13 @@ int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)  	 * be one byte because the extra address bits are hidden in the  	 * chip address.  	 */ -	 chip |= ((addr >> (alen * 8)) & CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW); +	chip |= ((addr >> (alen * 8)) & CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW);  #endif  	i2c_newio(&state); -	rc = i2c_send(&state, chip, 0, I2CF_START_COND, alen, &xaddr[4-alen]); +	rc = i2c_send(&state, chip, 0, I2CF_START_COND, alen, +		      &xaddr[4 - alen]);  	if (rc != 0) {  		printf("i2c_read: i2c_send failed (%d)\n", rc);  		return 1; @@ -659,8 +661,8 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)  	xaddr[0] = (addr >> 24) & 0xFF;  	xaddr[1] = (addr >> 16) & 0xFF; -	xaddr[2] = (addr >>  8) & 0xFF; -	xaddr[3] =  addr        & 0xFF; +	xaddr[2] = (addr >> 8) & 0xFF; +	xaddr[3] = addr & 0xFF;  #ifdef CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW  	/* @@ -673,12 +675,13 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)  	 * be one byte because the extra address bits are hidden in the  	 * chip address.  	 */ -	 chip |= ((addr >> (alen * 8)) & CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW); +	chip |= ((addr >> (alen * 8)) & CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW);  #endif  	i2c_newio(&state); -	rc = i2c_send(&state, chip, 0, I2CF_START_COND, alen, &xaddr[4-alen]); +	rc = i2c_send(&state, chip, 0, I2CF_START_COND, alen, +		      &xaddr[4 - alen]);  	if (rc != 0) {  		printf("i2c_write: first i2c_send failed (%d)\n", rc);  		return 1; @@ -698,4 +701,4 @@ int i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)  	return 0;  } -#endif	/* CONFIG_HARD_I2C */ +#endif /* CONFIG_HARD_I2C */ diff --git a/arch/powerpc/cpu/mpc8xx/spi.c b/arch/powerpc/cpu/mpc8xx/spi.c index b2ac23e5e..db34852d6 100644 --- a/arch/powerpc/cpu/mpc8xx/spi.c +++ b/arch/powerpc/cpu/mpc8xx/spi.c @@ -139,14 +139,10 @@ void spi_init_f (void)  	volatile spi_t *spi;  	volatile immap_t *immr; -	volatile cpic8xx_t *cpi;  	volatile cpm8xx_t *cp; -	volatile iop8xx_t *iop;  	volatile cbd_t *tbdf, *rbdf;  	immr = (immap_t *)  CONFIG_SYS_IMMR; -	cpi  = (cpic8xx_t *)&immr->im_cpic; -	iop  = (iop8xx_t *) &immr->im_ioport;  	cp   = (cpm8xx_t *) &immr->im_cpm;  #ifdef CONFIG_SYS_SPI_UCODE_PATCH  |