diff options
Diffstat (limited to 'drivers/inca-ip_sw.c')
| -rw-r--r-- | drivers/inca-ip_sw.c | 187 | 
1 files changed, 92 insertions, 95 deletions
| diff --git a/drivers/inca-ip_sw.c b/drivers/inca-ip_sw.c index 3b6397da5..f8fe52ea2 100644 --- a/drivers/inca-ip_sw.c +++ b/drivers/inca-ip_sw.c @@ -14,7 +14,7 @@   *   * This program is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   * GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License @@ -45,27 +45,27 @@  #define DMA_WRITE_REG(reg, value) *((volatile u32 *)reg) = (u32)value;  #define DMA_READ_REG(reg, value)    value = (u32)*((volatile u32*)reg)  #define SW_WRITE_REG(reg, value)   \ -	 *((volatile u32*)reg) = (u32)value;\ -	 DELAY;\ -	 *((volatile u32*)reg) = (u32)value; +	*((volatile u32*)reg) = (u32)value;\ +	DELAY;\ +	*((volatile u32*)reg) = (u32)value; -#define SW_READ_REG(reg, value)    \ -	 value = (u32)*((volatile u32*)reg);\ -	 DELAY;\ -	 value = (u32)*((volatile u32*)reg); +#define SW_READ_REG(reg, value)	   \ +	value = (u32)*((volatile u32*)reg);\ +	DELAY;\ +	value = (u32)*((volatile u32*)reg); -#define INCA_DMA_TX_POLLING_TIME       0x07 -#define INCA_DMA_RX_POLLING_TIME       0x07 +#define INCA_DMA_TX_POLLING_TIME	0x07 +#define INCA_DMA_RX_POLLING_TIME	0x07 -#define INCA_DMA_TX_HOLD   0x80000000 -#define INCA_DMA_TX_EOP    0x40000000 -#define INCA_DMA_TX_SOP    0x20000000 -#define INCA_DMA_TX_ICPT   0x10000000 -#define INCA_DMA_TX_IEOP   0x08000000 +#define INCA_DMA_TX_HOLD		0x80000000 +#define INCA_DMA_TX_EOP			0x40000000 +#define INCA_DMA_TX_SOP			0x20000000 +#define INCA_DMA_TX_ICPT		0x10000000 +#define INCA_DMA_TX_IEOP		0x08000000 -#define INCA_DMA_RX_C   0x80000000 -#define INCA_DMA_RX_SOP 0x40000000 -#define INCA_DMA_RX_EOP 0x20000000 +#define INCA_DMA_RX_C			0x80000000 +#define INCA_DMA_RX_SOP			0x40000000 +#define INCA_DMA_RX_EOP			0x20000000  #define INCA_SWITCH_PHY_SPEED_10H	0x1  #define INCA_SWITCH_PHY_SPEED_10F	0x5 @@ -73,26 +73,26 @@  #define INCA_SWITCH_PHY_SPEED_100F	0x6  /************************ Auto MDIX settings ************************/ -#define INCA_IP_AUTO_MDIX_LAN_PORTS_DIR      INCA_IP_Ports_P1_DIR -#define INCA_IP_AUTO_MDIX_LAN_PORTS_ALTSEL   INCA_IP_Ports_P1_ALTSEL -#define INCA_IP_AUTO_MDIX_LAN_PORTS_OUT      INCA_IP_Ports_P1_OUT -#define INCA_IP_AUTO_MDIX_LAN_GPIO_PIN_RXTX  16 +#define INCA_IP_AUTO_MDIX_LAN_PORTS_DIR		INCA_IP_Ports_P1_DIR +#define INCA_IP_AUTO_MDIX_LAN_PORTS_ALTSEL	INCA_IP_Ports_P1_ALTSEL +#define INCA_IP_AUTO_MDIX_LAN_PORTS_OUT		INCA_IP_Ports_P1_OUT +#define INCA_IP_AUTO_MDIX_LAN_GPIO_PIN_RXTX	16 -#define WAIT_SIGNAL_RETRIES                  100 -#define WAIT_LINK_RETRIES                    100 -#define LINK_RETRY_DELAY                     300  /* ms */ +#define WAIT_SIGNAL_RETRIES			100 +#define WAIT_LINK_RETRIES			100 +#define LINK_RETRY_DELAY			2000  /* ms */  /********************************************************************/  typedef struct  {  	union {  		struct { -			volatile u32 HOLD                :1; -			volatile u32 ICpt                :1; -			volatile u32 IEop                :1; -			volatile u32 offset              :3; -			volatile u32 reserved0           :4; -			volatile u32 NFB                 :22; +			volatile u32 HOLD		:1; +			volatile u32 ICpt		:1; +			volatile u32 IEop		:1; +			volatile u32 offset		:3; +			volatile u32 reserved0		:4; +			volatile u32 NFB		:22;  		}field;  		volatile u32 word; @@ -104,11 +104,11 @@ typedef struct  	union {  		struct { -			volatile u32 C                   :1; -			volatile u32 Sop                 :1; -			volatile u32 Eop                 :1; -			volatile u32 reserved3           :12; -			volatile u32 NBT                 :17; +			volatile u32 C			:1; +			volatile u32 Sop		:1; +			volatile u32 Eop		:1; +			volatile u32 reserved3		:12; +			volatile u32 NBT		:17;  		}field;  		volatile u32 word; @@ -121,13 +121,13 @@ typedef struct  {  	union {  		struct { -			volatile u32 HOLD                :1; -			volatile u32 Eop                 :1; -			volatile u32 Sop                 :1; -			volatile u32 ICpt                :1; -			volatile u32 IEop                :1; -			volatile u32 reserved0           :5; -			volatile u32 NBA                 :22; +			volatile u32 HOLD		:1; +			volatile u32 Eop		:1; +			volatile u32 Sop		:1; +			volatile u32 ICpt		:1; +			volatile u32 IEop		:1; +			volatile u32 reserved0		:5; +			volatile u32 NBA		:22;  		}field;  		volatile u32 word; @@ -137,8 +137,8 @@ typedef struct  	volatile u32 TxDataPtr; -	volatile u32 C                   :1; -	volatile u32 reserved3           :31; +	volatile u32 C			:1; +	volatile u32 reserved3		:31;  } inca_tx_descriptor_t; @@ -148,12 +148,11 @@ static inca_tx_descriptor_t tx_ring[NUM_TX_DESC] __attribute__ ((aligned(16)));  static int tx_new, rx_new, tx_hold, rx_hold;  static int tx_old_hold = -1; -static int initialized  = 0; +static int initialized	= 0;  static int inca_switch_init(struct eth_device *dev, bd_t * bis); -static int inca_switch_send(struct eth_device *dev, volatile void *packet, -						  int length); +static int inca_switch_send(struct eth_device *dev, volatile void *packet, int length);  static int inca_switch_recv(struct eth_device *dev);  static void inca_switch_halt(struct eth_device *dev);  static void inca_init_switch_chip(void); @@ -265,9 +264,9 @@ static int inca_switch_init(struct eth_device *dev, bd_t * bis)  		memset(tx_desc, 0, sizeof(tx_ring[i])); -		tx_desc->params.word       = 0; +		tx_desc->params.word	   = 0;  		tx_desc->params.field.HOLD = 1; -		tx_desc->C                 = 1; +		tx_desc->C		   = 1;  			/* Check if it is the last descriptor.  			 */ @@ -296,8 +295,7 @@ static int inca_switch_init(struct eth_device *dev, bd_t * bis)  	/* Writing to the COMMAND REG.  	 */ -	DMA_WRITE_REG(INCA_IP_DMA_DMA_RXCCR0, -		      INCA_IP_DMA_DMA_RXCCR0_INIT); +	DMA_WRITE_REG(INCA_IP_DMA_DMA_RXCCR0, INCA_IP_DMA_DMA_RXCCR0_INIT);  	/* Initialize TxDMA.  	 */ @@ -320,9 +318,9 @@ static int inca_switch_init(struct eth_device *dev, bd_t * bis)  #endif  	/* enable spanning tree forwarding, enable the CPU port */  	/* ST_PT: -	 *	CPS (CPU port status)   0x3 (forwarding) -	 *	LPS (LAN port status)   0x3 (forwarding) -	 *	PPS (PC port status)    0x3 (forwarding) +	 *	CPS (CPU port status)	0x3 (forwarding) +	 *	LPS (LAN port status)	0x3 (forwarding) +	 *	PPS (PC port status)	0x3 (forwarding)  	 */  	SW_WRITE_REG(INCA_IP_Switch_ST_PT,0x3f); @@ -336,11 +334,11 @@ static int inca_switch_init(struct eth_device *dev, bd_t * bis)  static int inca_switch_send(struct eth_device *dev, volatile void *packet, int length)  { -	int                    i; -	int                    res         = -1; -	u32                    command; -	u32                    regValue; -	inca_tx_descriptor_t * tx_desc     = KSEG1ADDR(&tx_ring[tx_new]); +	int		       i; +	int		       res	= -1; +	u32		       command; +	u32		       regValue; +	inca_tx_descriptor_t * tx_desc	= KSEG1ADDR(&tx_ring[tx_new]);  #if 0  	printf("Entered inca_switch_send()\n"); @@ -373,7 +371,7 @@ static int inca_switch_send(struct eth_device *dev, volatile void *packet, int l  	KSEG1ADDR(&tx_ring[tx_hold])->params.field.HOLD = 0;  	tx_hold = tx_new; -	tx_new  = (tx_new + 1) % NUM_TX_DESC; +	tx_new	= (tx_new + 1) % NUM_TX_DESC;  	if (! initialized) { @@ -409,7 +407,7 @@ Done:  static int inca_switch_recv(struct eth_device *dev)  { -	int                    length  = 0; +	int		       length  = 0;  	inca_rx_descriptor_t * rx_desc;  #if 0 @@ -450,8 +448,7 @@ static int inca_switch_recv(struct eth_device *dev)  #if 0  			printf("Received %d bytes\n", length);  #endif -			NetReceive((void*)KSEG1ADDR(NetRxPackets[rx_new]), -				    length - 4); +			NetReceive((void*)KSEG1ADDR(NetRxPackets[rx_new]), length - 4);  		} else {  #if 1  			printf("Zero length!!!\n"); @@ -516,13 +513,13 @@ static void inca_init_switch_chip(void)  #if 1  	/* init MDIO configuration: -	 *	MDS (Poll speed):       0x01 (4ms) -	 *	PHY_LAN_ADDR:           0x06 -	 *	PHY_PC_ADDR:            0x05 +	 *	MDS (Poll speed):	0x01 (4ms) +	 *	PHY_LAN_ADDR:		0x06 +	 *	PHY_PC_ADDR:		0x05  	 *	UEP (Use External PHY): 0x00 (Internal PHY is used) -	 *	PS (Port Select):       0x00 (PT/UMM for LAN) -	 *	PT (PHY Test):          0x00 (no test mode) -	 *	UMM (Use MDIO Mode):    0x00 (state machine is disabled) +	 *	PS (Port Select):	0x00 (PT/UMM for LAN) +	 *	PT (PHY Test):		0x00 (no test mode) +	 *	UMM (Use MDIO Mode):	0x00 (state machine is disabled)  	 */  	SW_WRITE_REG(INCA_IP_Switch_MDIO_CFG, 0x4c50); @@ -540,39 +537,39 @@ static void inca_init_switch_chip(void)  	/* MDIO_ACC:  	 *	RA (Request/Ack)  0x01 (Request) -	 *	RW (Read/Write)   0x01 (Write) -	 *	PHY_ADDR          0x05 (PC) -	 *	REG_ADDR          0x00 (PHY_BCR: basic control register) -	 *	PHY_DATA          0x8000 -	 *		      Reset                   - software reset -	 *		      LB (loop back)          - normal -	 *		      SS (speed select)       - 10 Mbit/s +	 *	RW (Read/Write)	  0x01 (Write) +	 *	PHY_ADDR	  0x05 (PC) +	 *	REG_ADDR	  0x00 (PHY_BCR: basic control register) +	 *	PHY_DATA	  0x8000 +	 *		      Reset		      - software reset +	 *		      LB (loop back)	      - normal +	 *		      SS (speed select)	      - 10 Mbit/s  	 *		      ANE (auto neg. enable)  - enable -	 *		      PD (power down)         - normal -	 *		      ISO (isolate)           - normal +	 *		      PD (power down)	      - normal +	 *		      ISO (isolate)	      - normal  	 *		      RAN (restart auto neg.) - normal -	 *		      DM (duplex mode)        - half duplex +	 *		      DM (duplex mode)	      - half duplex  	 *		      CT (collision test)     - enable  	 */  	SW_WRITE_REG(INCA_IP_Switch_MDIO_ACC, 0xc0a09000);  	/* MDIO_ACC:  	 *	RA (Request/Ack)  0x01 (Request) -	 *	RW (Read/Write)   0x01 (Write) -	 *	PHY_ADDR          0x06 (LAN) -	 *	REG_ADDR          0x00 (PHY_BCR: basic control register) -	 *	PHY_DATA          0x8000 -	 *		      Reset                   - software reset -	 *		      LB (loop back)          - normal -	 *		      SS (speed select)       - 10 Mbit/s +	 *	RW (Read/Write)	  0x01 (Write) +	 *	PHY_ADDR	  0x06 (LAN) +	 *	REG_ADDR	  0x00 (PHY_BCR: basic control register) +	 *	PHY_DATA	  0x8000 +	 *		      Reset		      - software reset +	 *		      LB (loop back)	      - normal +	 *		      SS (speed select)	      - 10 Mbit/s  	 *		      ANE (auto neg. enable)  - enable -	 *		      PD (power down)         - normal -	 *		      ISO (isolate)           - normal +	 *		      PD (power down)	      - normal +	 *		      ISO (isolate)	      - normal  	 *		      RAN (restart auto neg.) - normal -	 *		      DM (duplex mode)        - half duplex +	 *		      DM (duplex mode)	      - half duplex  	 *		      CT (collision test)     - enable  	 */ -   	SW_WRITE_REG(INCA_IP_Switch_MDIO_ACC, 0xc0c09000); +	SW_WRITE_REG(INCA_IP_Switch_MDIO_ACC, 0xc0c09000);  #endif @@ -723,7 +720,7 @@ static int inca_amdix(void)  				(0x6 << 21) |	/* LAN		*/  				(31  << 16));	/* PHY_SCSR	*/  			do { -        	                SW_READ_REG(INCA_IP_Switch_MDIO_ACC, phyReg31); +				SW_READ_REG(INCA_IP_Switch_MDIO_ACC, phyReg31);  			} while (phyReg31 & (1 << 31));  			switch ((phyReg31 >> 2) & 0x7) { @@ -755,7 +752,7 @@ static int inca_amdix(void)  					(0x6 << 21) |	/* LAN		*/  					(6   << 16));	/* PHY_ANER	*/  				do { -        		                SW_READ_REG(INCA_IP_Switch_MDIO_ACC, phyReg6); +					SW_READ_REG(INCA_IP_Switch_MDIO_ACC, phyReg6);  				} while (phyReg6 & (1 << 31));  				/* We are Autoneg-able. @@ -768,7 +765,7 @@ static int inca_amdix(void)  						(0x6 << 21) |	/* LAN		*/  						(4   << 16));	/* PHY_ANAR	*/  					do { -        			                SW_READ_REG(INCA_IP_Switch_MDIO_ACC, phyReg4); +						SW_READ_REG(INCA_IP_Switch_MDIO_ACC, phyReg4);  					} while (phyReg4 & (1 << 31));  					/* We advertise PAUSE capab. @@ -781,7 +778,7 @@ static int inca_amdix(void)  							(0x6 << 21) |	/* LAN		*/  							(5   << 16));	/* PHY_ANLPAR	*/  						do { -			        	                SW_READ_REG(INCA_IP_Switch_MDIO_ACC, phyReg5); +							SW_READ_REG(INCA_IP_Switch_MDIO_ACC, phyReg5);  						} while (phyReg5 & (1 << 31));  						/* Link partner is PAUSE capab. |