#include <stdio.h>\r
#include <stdlib.h>\r
\r
-#include "Zynq/x_emacpsif.h"\r
-//#include "lwipopts.h"\r
-#include "xparameters_ps.h"\r
-#include "xparameters.h"\r
-\r
/* FreeRTOS includes. */\r
#include "FreeRTOS.h"\r
#include "task.h"\r
#include "queue.h"\r
#include "semphr.h"\r
\r
-///* FreeRTOS+TCP includes. */\r
/* FreeRTOS+TCP includes. */\r
#include "FreeRTOS_IP.h"\r
#include "FreeRTOS_Sockets.h"\r
#include "FreeRTOS_IP_Private.h"\r
#include "NetworkBufferManagement.h"\r
\r
+#include "Zynq/x_emacpsif.h"\r
+#include "xparameters_ps.h"\r
+#include "xparameters.h"\r
+\r
+\r
int phy_detected = 0;\r
\r
/*** IMPORTANT: Define PEEP in xemacpsif.h and sys_arch_raw.c\r
\r
#define IEEE_CONTROL_REG_OFFSET 0\r
#define IEEE_STATUS_REG_OFFSET 1\r
+#define IEEE_PHYSID1_OFFSET 2\r
+#define IEEE_PHYSID2_OFFSET 3\r
#define IEEE_AUTONEGO_ADVERTISE_REG 4\r
#define IEEE_PARTNER_ABILITIES_1_REG_OFFSET 5\r
#define IEEE_1000_ADVERTISE_REG_OFFSET 9\r
#define IEEE_PAUSE_MASK 0x0400\r
#define IEEE_AUTONEG_ERROR_MASK 0x8000\r
\r
-#define PHY_DETECT_REG 1\r
-#define PHY_DETECT_MASK 0x1808\r
-\r
#define XEMACPS_GMII2RGMII_SPEED1000_FD 0x140\r
#define XEMACPS_GMII2RGMII_SPEED100_FD 0x2100\r
#define XEMACPS_GMII2RGMII_SPEED10_FD 0x100\r
\r
static int detect_phy(XEmacPs *xemacpsp)\r
{\r
- u16 phy_reg;\r
- u32 phy_addr;\r
-\r
- for (phy_addr = 31; phy_addr > 0; phy_addr--) {\r
- XEmacPs_PhyRead(xemacpsp, phy_addr, PHY_DETECT_REG,\r
- &phy_reg);\r
-\r
- if ((phy_reg != 0xFFFF) &&\r
- ((phy_reg & PHY_DETECT_MASK) == PHY_DETECT_MASK)) {\r
- /* Found a valid PHY address */\r
- FreeRTOS_printf( ("XEmacPs detect_phy: PHY detected at address %d.\r\n",\r
- phy_addr));\r
- FreeRTOS_printf( ("XEmacPs detect_phy: PHY detected.\n" ) );\r
+ u16 id_lower, id_upper;\r
+ u32 phy_addr, id;\r
+\r
+ for (phy_addr = 0; phy_addr < 32; phy_addr++) {\r
+ XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_PHYSID1_OFFSET, &id_lower);\r
+\r
+ if ((id_lower != ( u16 )0xFFFFu) && (id_lower != ( u16 )0x0u)) {\r
+\r
+ XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_PHYSID2_OFFSET, &id_upper);\r
+ id = ( ( ( uint32_t ) id_upper ) << 16 ) | ( id_lower & 0xFFF0 );\r
+ FreeRTOS_printf( ("XEmacPs detect_phy: %04lX at address %d.\n", id, phy_addr ) );\r
phy_detected = phy_addr;\r
return phy_addr;\r
}\r
if (partner_capabilities & IEEE_AN1_ABILITY_MASK_10MBPS)\r
return 10;\r
\r
- xil_printf("%s: unknown PHY link speed, setting TEMAC speed to be 10 Mbps\r\n",\r
+ xil_printf("%s: unknown PHY link speed, setting TEMAC speed to be 10 Mbps\n",\r
__FUNCTION__);\r
return 10;\r
\r
case (IEEE_CTRL_LINKSPEED_10M):\r
return 10;\r
default:\r
- xil_printf("%s: unknown PHY link speed (%d), setting TEMAC speed to be 10 Mbps\r\n",\r
+ xil_printf("%s: unknown PHY link speed (%d), setting TEMAC speed to be 10 Mbps\n",\r
__FUNCTION__, phylinkspeed);\r
return 10;\r
}\r
#else\r
u32 phy_addr = detect_phy(xemacpsp);\r
#endif\r
- xil_printf("Start PHY autonegotiation \r\n");\r
+ xil_printf("Start PHY autonegotiation \n");\r
\r
#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1\r
#else\r
break;\r
}\r
#endif\r
- xil_printf("Waiting for PHY to complete autonegotiation.\r\n");\r
+ xil_printf("Waiting for PHY to complete autonegotiation.\n");\r
\r
XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_STATUS_REG_OFFSET, &status);\r
while ( !(status & IEEE_STAT_AUTONEGOTIATE_COMPLETE) ) {\r
XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_COPPER_SPECIFIC_STATUS_REG_2,\r
&temp);\r
if (temp & IEEE_AUTONEG_ERROR_MASK) {\r
- xil_printf("Auto negotiation error \r\n");\r
+ xil_printf("Auto negotiation error \n");\r
}\r
#endif\r
XEmacPs_PhyRead(xemacpsp, phy_addr, IEEE_STATUS_REG_OFFSET,\r
&status);\r
}\r
\r
- xil_printf("autonegotiation complete \r\n");\r
+ xil_printf("autonegotiation complete \n");\r
\r
#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1\r
#else\r
#endif\r
\r
#if XPAR_GIGE_PCS_PMA_CORE_PRESENT == 1\r
- xil_printf("Waiting for Link to be up; Polling for SGMII core Reg \r\n");\r
+ xil_printf("Waiting for Link to be up; Polling for SGMII core Reg \n");\r
XEmacPs_PhyRead(xemacpsp, phy_addr, 5, &temp);\r
while(!(temp & 0x8000)) {\r
XEmacPs_PhyRead(xemacpsp, phy_addr, 5, &temp);\r
XEmacPs_PhyRead(xemacpsp, phy_addr, 0, &temp);\r
return 10;\r
} else {\r
- xil_printf("get_IEEE_phy_speed(): Invalid speed bit value, Deafulting to Speed = 10 Mbps\r\n");\r
+ xil_printf("get_IEEE_phy_speed(): Invalid speed bit value, Deafulting to Speed = 10 Mbps\n");\r
XEmacPs_PhyRead(xemacpsp, phy_addr, 0, &temp);\r
XEmacPs_PhyWrite(xemacpsp, phy_addr, 0, 0x0100);\r
return 10;\r
XEMACPS_GMII2RGMII_REG_NUM, convspeeddupsetting);\r
}\r
\r
- xil_printf("link speed: %d\r\n", link_speed);\r
+ xil_printf("link speed: %d\n", link_speed);\r
return link_speed;\r
}\r
\r