Skip to content

Commit 5bc9d2e

Browse files
vladimirolteandavem330
authored andcommitted
net: mscc: ocelot: move invariant configs out of adjust_link
It doesn't make sense to rewrite all these registers every time the PHY library notifies us about a link state change. In a future patch we will customize the MTU for the CPU port, and since the MTU was previously configured from adjust_link, if we don't make this change, its value would have got overridden. Signed-off-by: Vladimir Oltean <[email protected]> Reviewed-by: Andrew Lunn <[email protected]> Reviewed-by: Florian Fainelli <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent dc3de2a commit 5bc9d2e

File tree

1 file changed

+43
-42
lines changed

1 file changed

+43
-42
lines changed

drivers/net/ethernet/mscc/ocelot.c

Lines changed: 43 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -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

516475
static void ocelot_port_adjust_link(struct net_device *dev)
@@ -2141,11 +2100,53 @@ static int ocelot_init_timestamp(struct ocelot *ocelot)
21412100
static 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

Comments
 (0)