mirror of
				https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
				synced 2025-11-03 18:55:00 -05:00 
			
		
		
		
	* Fix SDRAM timings for LITE5200 / IceCube board
* Handle Auti-MDIX / connection status for INCA-IP * Fix USB problems when attempting to read 0 bytes
This commit is contained in:
		
							parent
							
								
									e7c85689bb
								
							
						
					
					
						commit
						f8d813e34f
					
				@ -2,6 +2,12 @@
 | 
				
			|||||||
Changes for U-Boot 1.0.2:
 | 
					Changes for U-Boot 1.0.2:
 | 
				
			||||||
======================================================================
 | 
					======================================================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Fix SDRAM timings for LITE5200 / IceCube board
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Handle Auti-MDIX / connection status for INCA-IP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Fix USB problems when attempting to read 0 bytes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* Patch by Travis Sawyer, 26 Feb 2004:
 | 
					* Patch by Travis Sawyer, 26 Feb 2004:
 | 
				
			||||||
  Fix broken compile for XPEDITE1K target.
 | 
					  Fix broken compile for XPEDITE1K target.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -54,16 +54,16 @@ static void sdram_start (int hi_addr)
 | 
				
			|||||||
	*(vu_long *)MPC5XXX_SDRAM_CTRL = 0xd04f0002 | hi_addr_bit;
 | 
						*(vu_long *)MPC5XXX_SDRAM_CTRL = 0xd04f0002 | hi_addr_bit;
 | 
				
			||||||
	/* set mode register */
 | 
						/* set mode register */
 | 
				
			||||||
#if defined(CONFIG_MPC5200)
 | 
					#if defined(CONFIG_MPC5200)
 | 
				
			||||||
	*(vu_long *)MPC5XXX_SDRAM_MODE = 0x408d0000;
 | 
						*(vu_long *)MPC5XXX_SDRAM_MODE = 0x00cd0000;
 | 
				
			||||||
#elif defined(CONFIG_MGT5100)
 | 
					#elif defined(CONFIG_MGT5100)
 | 
				
			||||||
	*(vu_long *)MPC5XXX_SDRAM_MODE = 0x008d0000;
 | 
						*(vu_long *)MPC5XXX_SDRAM_MODE = 0x008d0000;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	/* precharge all banks */
 | 
						/* auto refresh */
 | 
				
			||||||
	*(vu_long *)MPC5XXX_SDRAM_CTRL = 0xd04f0002 | hi_addr_bit;
 | 
						*(vu_long *)MPC5XXX_SDRAM_CTRL = 0xd04f0004 | hi_addr_bit;
 | 
				
			||||||
	/* auto refresh */
 | 
						/* auto refresh */
 | 
				
			||||||
	*(vu_long *)MPC5XXX_SDRAM_CTRL = 0xd04f0004 | hi_addr_bit;
 | 
						*(vu_long *)MPC5XXX_SDRAM_CTRL = 0xd04f0004 | hi_addr_bit;
 | 
				
			||||||
	/* set mode register */
 | 
						/* set mode register */
 | 
				
			||||||
	*(vu_long *)MPC5XXX_SDRAM_MODE = 0x008d0000;
 | 
						*(vu_long *)MPC5XXX_SDRAM_MODE = 0x00cd0000;
 | 
				
			||||||
	/* normal operation */
 | 
						/* normal operation */
 | 
				
			||||||
	*(vu_long *)MPC5XXX_SDRAM_CTRL = 0x504f0000 | hi_addr_bit;
 | 
						*(vu_long *)MPC5XXX_SDRAM_CTRL = 0x504f0000 | hi_addr_bit;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@ -93,8 +93,8 @@ long int initdram (int board_type)
 | 
				
			|||||||
	*(vu_long *)MPC5XXX_CDM_PORCFG = 0x10000000;
 | 
						*(vu_long *)MPC5XXX_CDM_PORCFG = 0x10000000;
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	/* setup config registers */
 | 
						/* setup config registers */
 | 
				
			||||||
	*(vu_long *)MPC5XXX_SDRAM_CONFIG1 = 0xc2233a00;
 | 
						*(vu_long *)MPC5XXX_SDRAM_CONFIG1 = 0xd2322800;
 | 
				
			||||||
	*(vu_long *)MPC5XXX_SDRAM_CONFIG2 = 0x88b70004;
 | 
						*(vu_long *)MPC5XXX_SDRAM_CONFIG2 = 0x8ad70000;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#elif defined(CONFIG_MGT5100)
 | 
					#elif defined(CONFIG_MGT5100)
 | 
				
			||||||
 | 
				
			|||||||
@ -899,8 +899,12 @@ unsigned long usb_stor_read(int device, unsigned long blknr, unsigned long blkcn
 | 
				
			|||||||
	unsigned short smallblks;
 | 
						unsigned short smallblks;
 | 
				
			||||||
	struct usb_device *dev;
 | 
						struct usb_device *dev;
 | 
				
			||||||
	int retry,i;
 | 
						int retry,i;
 | 
				
			||||||
	ccb *srb=&usb_ccb;
 | 
						ccb *srb = &usb_ccb;
 | 
				
			||||||
	device&=0xff;
 | 
					
 | 
				
			||||||
 | 
						if (blkcnt == 0)
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						device &= 0xff;
 | 
				
			||||||
	/* Setup  device
 | 
						/* Setup  device
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	USB_STOR_PRINTF("\nusb_read: dev %d \n",device);
 | 
						USB_STOR_PRINTF("\nusb_read: dev %d \n",device);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,7 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 * INCA-IP internal switch ethernet driver.
 | 
					 * INCA-IP internal switch ethernet driver.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * (C) Copyright 2003
 | 
					 * (C) Copyright 2003-2004
 | 
				
			||||||
 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 | 
					 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * See file CREDITS for list of people who contributed to this
 | 
					 * See file CREDITS for list of people who contributed to this
 | 
				
			||||||
@ -67,6 +67,11 @@
 | 
				
			|||||||
#define INCA_DMA_RX_SOP 0x40000000
 | 
					#define INCA_DMA_RX_SOP 0x40000000
 | 
				
			||||||
#define INCA_DMA_RX_EOP 0x20000000
 | 
					#define INCA_DMA_RX_EOP 0x20000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define INCA_SWITCH_PHY_SPEED_10H	0x1
 | 
				
			||||||
 | 
					#define INCA_SWITCH_PHY_SPEED_10F	0x5
 | 
				
			||||||
 | 
					#define INCA_SWITCH_PHY_SPEED_100H	0x2
 | 
				
			||||||
 | 
					#define INCA_SWITCH_PHY_SPEED_100F	0x6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/************************ Auto MDIX settings ************************/
 | 
					/************************ Auto MDIX settings ************************/
 | 
				
			||||||
#define INCA_IP_AUTO_MDIX_LAN_PORTS_DIR      INCA_IP_Ports_P1_DIR
 | 
					#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_ALTSEL   INCA_IP_Ports_P1_ALTSEL
 | 
				
			||||||
@ -221,8 +226,7 @@ static int inca_switch_init(struct eth_device *dev, bd_t * bis)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* Initialize the descriptor rings.
 | 
						/* Initialize the descriptor rings.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	for (i = 0; i < NUM_RX_DESC; i++)
 | 
						for (i = 0; i < NUM_RX_DESC; i++) {
 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		inca_rx_descriptor_t * rx_desc = KSEG1ADDR(&rx_ring[i]);
 | 
							inca_rx_descriptor_t * rx_desc = KSEG1ADDR(&rx_ring[i]);
 | 
				
			||||||
		memset(rx_desc, 0, sizeof(rx_ring[i]));
 | 
							memset(rx_desc, 0, sizeof(rx_ring[i]));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -330,8 +334,7 @@ static int inca_switch_init(struct eth_device *dev, bd_t * bis)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int inca_switch_send(struct eth_device *dev, volatile void *packet,
 | 
					static int inca_switch_send(struct eth_device *dev, volatile void *packet, int length)
 | 
				
			||||||
						  int length)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int                    i;
 | 
						int                    i;
 | 
				
			||||||
	int                    res         = -1;
 | 
						int                    res         = -1;
 | 
				
			||||||
@ -628,7 +631,12 @@ static void inca_dma_init(void)
 | 
				
			|||||||
#if defined(CONFIG_INCA_IP_SWITCH_AMDIX)
 | 
					#if defined(CONFIG_INCA_IP_SWITCH_AMDIX)
 | 
				
			||||||
static int inca_amdix(void)
 | 
					static int inca_amdix(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u32 regValue = 0;
 | 
						u32 phyReg1 = 0;
 | 
				
			||||||
 | 
						u32 phyReg4 = 0;
 | 
				
			||||||
 | 
						u32 phyReg5 = 0;
 | 
				
			||||||
 | 
						u32 phyReg6 = 0;
 | 
				
			||||||
 | 
						u32 phyReg31 = 0;
 | 
				
			||||||
 | 
						u32 regEphy = 0;
 | 
				
			||||||
	int mdi_flag;
 | 
						int mdi_flag;
 | 
				
			||||||
	int retries;
 | 
						int retries;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -637,31 +645,29 @@ static int inca_amdix(void)
 | 
				
			|||||||
	*INCA_IP_AUTO_MDIX_LAN_PORTS_DIR    |= (1 << INCA_IP_AUTO_MDIX_LAN_GPIO_PIN_RXTX);
 | 
						*INCA_IP_AUTO_MDIX_LAN_PORTS_DIR    |= (1 << INCA_IP_AUTO_MDIX_LAN_GPIO_PIN_RXTX);
 | 
				
			||||||
	*INCA_IP_AUTO_MDIX_LAN_PORTS_ALTSEL |= (1 << INCA_IP_AUTO_MDIX_LAN_GPIO_PIN_RXTX);
 | 
						*INCA_IP_AUTO_MDIX_LAN_PORTS_ALTSEL |= (1 << INCA_IP_AUTO_MDIX_LAN_GPIO_PIN_RXTX);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if 0
 | 
				
			||||||
	/* Wait for signal.
 | 
						/* Wait for signal.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	retries = WAIT_SIGNAL_RETRIES;
 | 
						retries = WAIT_SIGNAL_RETRIES;
 | 
				
			||||||
	while (--retries)
 | 
						while (--retries) {
 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		SW_WRITE_REG(INCA_IP_Switch_MDIO_ACC,
 | 
							SW_WRITE_REG(INCA_IP_Switch_MDIO_ACC,
 | 
				
			||||||
				(0x1 << 31) |	/* RA		*/
 | 
									(0x1 << 31) |	/* RA		*/
 | 
				
			||||||
				(0x0 << 30) |	/* Read		*/
 | 
									(0x0 << 30) |	/* Read		*/
 | 
				
			||||||
				(0x6 << 21) |	/* LAN		*/
 | 
									(0x6 << 21) |	/* LAN		*/
 | 
				
			||||||
				(17  << 16));	/* PHY_MCSR	*/
 | 
									(17  << 16));	/* PHY_MCSR	*/
 | 
				
			||||||
		do
 | 
							do {
 | 
				
			||||||
		{
 | 
								SW_READ_REG(INCA_IP_Switch_MDIO_ACC, phyReg1);
 | 
				
			||||||
			SW_READ_REG(INCA_IP_Switch_MDIO_ACC, regValue);
 | 
							} while (phyReg1 & (1 << 31));
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		while (regValue & (1 << 31));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (regValue & (1 << 1))
 | 
							if (phyReg1 & (1 << 1)) {
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			/* Signal detected */
 | 
								/* Signal detected */
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!retries)
 | 
						if (!retries)
 | 
				
			||||||
		return -1;
 | 
							goto Fail;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Set MDI mode.
 | 
						/* Set MDI mode.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
@ -671,43 +677,135 @@ static int inca_amdix(void)
 | 
				
			|||||||
	/* Wait for link.
 | 
						/* Wait for link.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	retries = WAIT_LINK_RETRIES;
 | 
						retries = WAIT_LINK_RETRIES;
 | 
				
			||||||
	while (--retries)
 | 
						while (--retries) {
 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		udelay(LINK_RETRY_DELAY * 1000);
 | 
							udelay(LINK_RETRY_DELAY * 1000);
 | 
				
			||||||
		SW_WRITE_REG(INCA_IP_Switch_MDIO_ACC,
 | 
							SW_WRITE_REG(INCA_IP_Switch_MDIO_ACC,
 | 
				
			||||||
				(0x1 << 31) |	/* RA		*/
 | 
									(0x1 << 31) |	/* RA		*/
 | 
				
			||||||
				(0x0 << 30) |	/* Read		*/
 | 
									(0x0 << 30) |	/* Read		*/
 | 
				
			||||||
				(0x6 << 21) |	/* LAN		*/
 | 
									(0x6 << 21) |	/* LAN		*/
 | 
				
			||||||
				(1   << 16));	/* PHY_BSR	*/
 | 
									(1   << 16));	/* PHY_BSR	*/
 | 
				
			||||||
		do
 | 
							do {
 | 
				
			||||||
		{
 | 
								SW_READ_REG(INCA_IP_Switch_MDIO_ACC, phyReg1);
 | 
				
			||||||
			SW_READ_REG(INCA_IP_Switch_MDIO_ACC, regValue);
 | 
							} while (phyReg1 & (1 << 31));
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		while (regValue & (1 << 31));
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (regValue & (1 << 2))
 | 
							if (phyReg1 & (1 << 2)) {
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			/* Link is up */
 | 
								/* Link is up */
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							} else if (mdi_flag) {
 | 
				
			||||||
		else if (mdi_flag)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			/* Set MDIX mode */
 | 
								/* Set MDIX mode */
 | 
				
			||||||
			*INCA_IP_AUTO_MDIX_LAN_PORTS_OUT |= (1 << INCA_IP_AUTO_MDIX_LAN_GPIO_PIN_RXTX);
 | 
								*INCA_IP_AUTO_MDIX_LAN_PORTS_OUT |= (1 << INCA_IP_AUTO_MDIX_LAN_GPIO_PIN_RXTX);
 | 
				
			||||||
			mdi_flag = 0;
 | 
								mdi_flag = 0;
 | 
				
			||||||
		}
 | 
							} else {
 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			/* Set MDI mode */
 | 
								/* Set MDI mode */
 | 
				
			||||||
			*INCA_IP_AUTO_MDIX_LAN_PORTS_OUT &= ~(1 << INCA_IP_AUTO_MDIX_LAN_GPIO_PIN_RXTX);
 | 
								*INCA_IP_AUTO_MDIX_LAN_PORTS_OUT &= ~(1 << INCA_IP_AUTO_MDIX_LAN_GPIO_PIN_RXTX);
 | 
				
			||||||
			mdi_flag = 1;
 | 
								mdi_flag = 1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!retries)
 | 
						if (!retries) {
 | 
				
			||||||
		return -1;
 | 
							goto Fail;
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							SW_WRITE_REG(INCA_IP_Switch_MDIO_ACC,
 | 
				
			||||||
 | 
									(0x1 << 31) |	/* RA		*/
 | 
				
			||||||
 | 
									(0x0 << 30) |	/* Read		*/
 | 
				
			||||||
 | 
									(0x6 << 21) |	/* LAN		*/
 | 
				
			||||||
 | 
									(1   << 16));	/* PHY_BSR	*/
 | 
				
			||||||
 | 
							do {
 | 
				
			||||||
 | 
								SW_READ_REG(INCA_IP_Switch_MDIO_ACC, phyReg1);
 | 
				
			||||||
 | 
							} while (phyReg1 & (1 << 31));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/* Auto-negotiation / Parallel detection complete
 | 
				
			||||||
 | 
							 */
 | 
				
			||||||
 | 
							if (phyReg1 & (1 << 5)) {
 | 
				
			||||||
 | 
								SW_WRITE_REG(INCA_IP_Switch_MDIO_ACC,
 | 
				
			||||||
 | 
									(0x1 << 31) |	/* RA		*/
 | 
				
			||||||
 | 
									(0x0 << 30) |	/* Read		*/
 | 
				
			||||||
 | 
									(0x6 << 21) |	/* LAN		*/
 | 
				
			||||||
 | 
									(31  << 16));	/* PHY_SCSR	*/
 | 
				
			||||||
 | 
								do {
 | 
				
			||||||
 | 
					        	                SW_READ_REG(INCA_IP_Switch_MDIO_ACC, phyReg31);
 | 
				
			||||||
 | 
								} while (phyReg31 & (1 << 31));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								switch ((phyReg31 >> 2) & 0x7) {
 | 
				
			||||||
 | 
								case INCA_SWITCH_PHY_SPEED_10H:
 | 
				
			||||||
 | 
									/* 10Base-T Half-duplex */
 | 
				
			||||||
 | 
									regEphy = 0;
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								case INCA_SWITCH_PHY_SPEED_10F:
 | 
				
			||||||
 | 
									/* 10Base-T Full-duplex */
 | 
				
			||||||
 | 
									regEphy = INCA_IP_Switch_EPHY_DL;
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								case INCA_SWITCH_PHY_SPEED_100H:
 | 
				
			||||||
 | 
									/* 100Base-TX Half-duplex */
 | 
				
			||||||
 | 
									regEphy = INCA_IP_Switch_EPHY_SL;
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								case INCA_SWITCH_PHY_SPEED_100F:
 | 
				
			||||||
 | 
									/* 100Base-TX Full-duplex */
 | 
				
			||||||
 | 
									regEphy = INCA_IP_Switch_EPHY_SL | INCA_IP_Switch_EPHY_DL;
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								/* In case of Auto-negotiation,
 | 
				
			||||||
 | 
								 * update the negotiated PAUSE support status
 | 
				
			||||||
 | 
								 */
 | 
				
			||||||
 | 
								if (phyReg1 & (1 << 3)) {
 | 
				
			||||||
 | 
									SW_WRITE_REG(INCA_IP_Switch_MDIO_ACC,
 | 
				
			||||||
 | 
										(0x1 << 31) |	/* RA		*/
 | 
				
			||||||
 | 
										(0x0 << 30) |	/* Read		*/
 | 
				
			||||||
 | 
										(0x6 << 21) |	/* LAN		*/
 | 
				
			||||||
 | 
										(6   << 16));	/* PHY_ANER	*/
 | 
				
			||||||
 | 
									do {
 | 
				
			||||||
 | 
					        		                SW_READ_REG(INCA_IP_Switch_MDIO_ACC, phyReg6);
 | 
				
			||||||
 | 
									} while (phyReg6 & (1 << 31));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									/* We are Autoneg-able.
 | 
				
			||||||
 | 
									 * Is Link partner also able to autoneg?
 | 
				
			||||||
 | 
									 */
 | 
				
			||||||
 | 
									if (phyReg6 & (1 << 0)) {
 | 
				
			||||||
 | 
										SW_WRITE_REG(INCA_IP_Switch_MDIO_ACC,
 | 
				
			||||||
 | 
											(0x1 << 31) |	/* RA		*/
 | 
				
			||||||
 | 
											(0x0 << 30) |	/* Read		*/
 | 
				
			||||||
 | 
											(0x6 << 21) |	/* LAN		*/
 | 
				
			||||||
 | 
											(4   << 16));	/* PHY_ANAR	*/
 | 
				
			||||||
 | 
										do {
 | 
				
			||||||
 | 
					        			                SW_READ_REG(INCA_IP_Switch_MDIO_ACC, phyReg4);
 | 
				
			||||||
 | 
										} while (phyReg4 & (1 << 31));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										/* We advertise PAUSE capab.
 | 
				
			||||||
 | 
										 * Does link partner also advertise it?
 | 
				
			||||||
 | 
										 */
 | 
				
			||||||
 | 
										if (phyReg4 & (1 << 10)) {
 | 
				
			||||||
 | 
											SW_WRITE_REG(INCA_IP_Switch_MDIO_ACC,
 | 
				
			||||||
 | 
												(0x1 << 31) |	/* RA		*/
 | 
				
			||||||
 | 
												(0x0 << 30) |	/* Read		*/
 | 
				
			||||||
 | 
												(0x6 << 21) |	/* LAN		*/
 | 
				
			||||||
 | 
												(5   << 16));	/* PHY_ANLPAR	*/
 | 
				
			||||||
 | 
											do {
 | 
				
			||||||
 | 
								        	                SW_READ_REG(INCA_IP_Switch_MDIO_ACC, phyReg5);
 | 
				
			||||||
 | 
											} while (phyReg5 & (1 << 31));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
											/* Link partner is PAUSE capab.
 | 
				
			||||||
 | 
											 */
 | 
				
			||||||
 | 
											if (phyReg5 & (1 << 10)) {
 | 
				
			||||||
 | 
												regEphy |= INCA_IP_Switch_EPHY_PL;
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								/* Link is up */
 | 
				
			||||||
 | 
								regEphy |= INCA_IP_Switch_EPHY_LL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								SW_WRITE_REG(INCA_IP_Switch_EPHY, regEphy);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Fail:
 | 
				
			||||||
 | 
						printf("No Link on LAN port\n");
 | 
				
			||||||
 | 
						return -1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif /* CONFIG_INCA_IP_SWITCH_AMDIX */
 | 
					#endif /* CONFIG_INCA_IP_SWITCH_AMDIX */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user