@@ -408,7 +408,7 @@ static void ocelot_adjust_link(struct ocelot *ocelot, int port,
408408 struct phy_device * phydev )
409409{
410410 struct ocelot_port * ocelot_port = ocelot -> ports [port ];
411- int speed , atop_wm , mode = 0 ;
411+ int speed , mode = 0 ;
412412
413413 switch (phydev -> speed ) {
414414 case SPEED_10 :
@@ -440,32 +440,9 @@ static void ocelot_adjust_link(struct ocelot *ocelot, int port,
440440 ocelot_port_writel (ocelot_port , DEV_MAC_MODE_CFG_FDX_ENA |
441441 mode , DEV_MAC_MODE_CFG );
442442
443- /* Set MAC IFG Gaps
444- * FDX: TX_IFG = 5, RX_IFG1 = RX_IFG2 = 0
445- * !FDX: TX_IFG = 5, RX_IFG1 = RX_IFG2 = 5
446- */
447- ocelot_port_writel (ocelot_port , DEV_MAC_IFG_CFG_TX_IFG (5 ),
448- DEV_MAC_IFG_CFG );
449-
450- /* Load seed (0) and set MAC HDX late collision */
451- ocelot_port_writel (ocelot_port , DEV_MAC_HDX_CFG_LATE_COL_POS (67 ) |
452- DEV_MAC_HDX_CFG_SEED_LOAD ,
453- DEV_MAC_HDX_CFG );
454- mdelay (1 );
455- ocelot_port_writel (ocelot_port , DEV_MAC_HDX_CFG_LATE_COL_POS (67 ),
456- DEV_MAC_HDX_CFG );
457-
458443 if (ocelot -> ops -> pcs_init )
459444 ocelot -> ops -> pcs_init (ocelot , port );
460445
461- /* Set Max Length and maximum tags allowed */
462- ocelot_port_writel (ocelot_port , VLAN_ETH_FRAME_LEN ,
463- DEV_MAC_MAXLEN_CFG );
464- ocelot_port_writel (ocelot_port , DEV_MAC_TAGS_CFG_TAG_ID (ETH_P_8021AD ) |
465- DEV_MAC_TAGS_CFG_VLAN_AWR_ENA |
466- DEV_MAC_TAGS_CFG_VLAN_LEN_AWR_ENA ,
467- DEV_MAC_TAGS_CFG );
468-
469446 /* Enable MAC module */
470447 ocelot_port_writel (ocelot_port , DEV_MAC_ENA_CFG_RX_ENA |
471448 DEV_MAC_ENA_CFG_TX_ENA , DEV_MAC_ENA_CFG );
@@ -475,22 +452,10 @@ static void ocelot_adjust_link(struct ocelot *ocelot, int port,
475452 ocelot_port_writel (ocelot_port , DEV_CLOCK_CFG_LINK_SPEED (speed ),
476453 DEV_CLOCK_CFG );
477454
478- /* Set SMAC of Pause frame (00:00:00:00:00:00) */
479- ocelot_port_writel (ocelot_port , 0 , DEV_MAC_FC_MAC_HIGH_CFG );
480- ocelot_port_writel (ocelot_port , 0 , DEV_MAC_FC_MAC_LOW_CFG );
481-
482455 /* No PFC */
483456 ocelot_write_gix (ocelot , ANA_PFC_PFC_CFG_FC_LINK_SPEED (speed ),
484457 ANA_PFC_PFC_CFG , port );
485458
486- /* Set Pause WM hysteresis
487- * 152 = 6 * VLAN_ETH_FRAME_LEN / OCELOT_BUFFER_CELL_SZ
488- * 101 = 4 * VLAN_ETH_FRAME_LEN / OCELOT_BUFFER_CELL_SZ
489- */
490- ocelot_write_rix (ocelot , SYS_PAUSE_CFG_PAUSE_ENA |
491- SYS_PAUSE_CFG_PAUSE_STOP (101 ) |
492- SYS_PAUSE_CFG_PAUSE_START (152 ), SYS_PAUSE_CFG , port );
493-
494459 /* Core: Enable port for frame transfer */
495460 ocelot_write_rix (ocelot , QSYS_SWITCH_PORT_MODE_INGRESS_DROP_MODE |
496461 QSYS_SWITCH_PORT_MODE_SCH_NEXT_CFG (1 ) |
@@ -505,12 +470,6 @@ static void ocelot_adjust_link(struct ocelot *ocelot, int port,
505470 SYS_MAC_FC_CFG_FC_LINK_SPEED (speed ),
506471 SYS_MAC_FC_CFG , port );
507472 ocelot_write_rix (ocelot , 0 , ANA_POL_FLOWC , port );
508-
509- /* Tail dropping watermark */
510- atop_wm = (ocelot -> shared_queue_sz - 9 * VLAN_ETH_FRAME_LEN ) / OCELOT_BUFFER_CELL_SZ ;
511- ocelot_write_rix (ocelot , ocelot_wm_enc (9 * VLAN_ETH_FRAME_LEN ),
512- SYS_ATOP , port );
513- ocelot_write (ocelot , ocelot_wm_enc (atop_wm ), SYS_ATOP_TOT_CFG );
514473}
515474
516475static void ocelot_port_adjust_link (struct net_device * dev )
@@ -2141,11 +2100,53 @@ static int ocelot_init_timestamp(struct ocelot *ocelot)
21412100static void ocelot_init_port (struct ocelot * ocelot , int port )
21422101{
21432102 struct ocelot_port * ocelot_port = ocelot -> ports [port ];
2103+ int atop_wm ;
21442104
21452105 INIT_LIST_HEAD (& ocelot_port -> skbs );
21462106
21472107 /* Basic L2 initialization */
21482108
2109+ /* Set MAC IFG Gaps
2110+ * FDX: TX_IFG = 5, RX_IFG1 = RX_IFG2 = 0
2111+ * !FDX: TX_IFG = 5, RX_IFG1 = RX_IFG2 = 5
2112+ */
2113+ ocelot_port_writel (ocelot_port , DEV_MAC_IFG_CFG_TX_IFG (5 ),
2114+ DEV_MAC_IFG_CFG );
2115+
2116+ /* Load seed (0) and set MAC HDX late collision */
2117+ ocelot_port_writel (ocelot_port , DEV_MAC_HDX_CFG_LATE_COL_POS (67 ) |
2118+ DEV_MAC_HDX_CFG_SEED_LOAD ,
2119+ DEV_MAC_HDX_CFG );
2120+ mdelay (1 );
2121+ ocelot_port_writel (ocelot_port , DEV_MAC_HDX_CFG_LATE_COL_POS (67 ),
2122+ DEV_MAC_HDX_CFG );
2123+
2124+ /* Set Max Length and maximum tags allowed */
2125+ ocelot_port_writel (ocelot_port , VLAN_ETH_FRAME_LEN ,
2126+ DEV_MAC_MAXLEN_CFG );
2127+ ocelot_port_writel (ocelot_port , DEV_MAC_TAGS_CFG_TAG_ID (ETH_P_8021AD ) |
2128+ DEV_MAC_TAGS_CFG_VLAN_AWR_ENA |
2129+ DEV_MAC_TAGS_CFG_VLAN_LEN_AWR_ENA ,
2130+ DEV_MAC_TAGS_CFG );
2131+
2132+ /* Set SMAC of Pause frame (00:00:00:00:00:00) */
2133+ ocelot_port_writel (ocelot_port , 0 , DEV_MAC_FC_MAC_HIGH_CFG );
2134+ ocelot_port_writel (ocelot_port , 0 , DEV_MAC_FC_MAC_LOW_CFG );
2135+
2136+ /* Set Pause WM hysteresis
2137+ * 152 = 6 * VLAN_ETH_FRAME_LEN / OCELOT_BUFFER_CELL_SZ
2138+ * 101 = 4 * VLAN_ETH_FRAME_LEN / OCELOT_BUFFER_CELL_SZ
2139+ */
2140+ ocelot_write_rix (ocelot , SYS_PAUSE_CFG_PAUSE_ENA |
2141+ SYS_PAUSE_CFG_PAUSE_STOP (101 ) |
2142+ SYS_PAUSE_CFG_PAUSE_START (152 ), SYS_PAUSE_CFG , port );
2143+
2144+ /* Tail dropping watermark */
2145+ atop_wm = (ocelot -> shared_queue_sz - 9 * VLAN_ETH_FRAME_LEN ) / OCELOT_BUFFER_CELL_SZ ;
2146+ ocelot_write_rix (ocelot , ocelot_wm_enc (9 * VLAN_ETH_FRAME_LEN ),
2147+ SYS_ATOP , port );
2148+ ocelot_write (ocelot , ocelot_wm_enc (atop_wm ), SYS_ATOP_TOT_CFG );
2149+
21492150 /* Drop frames with multicast source address */
21502151 ocelot_rmw_gix (ocelot , ANA_PORT_DROP_CFG_DROP_MC_SMAC_ENA ,
21512152 ANA_PORT_DROP_CFG_DROP_MC_SMAC_ENA ,
0 commit comments