aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/amd/xgbe/xgbe-dev.c')
-rw-r--r--drivers/net/ethernet/amd/xgbe/xgbe-dev.c209
1 files changed, 121 insertions, 88 deletions
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
index 3be98e505001..9da3a03e8c07 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
@@ -347,7 +347,7 @@ static int xgbe_disable_tx_flow_control(struct xgbe_prv_data *pdata)
347 347
348 /* Clear MAC flow control */ 348 /* Clear MAC flow control */
349 max_q_count = XGMAC_MAX_FLOW_CONTROL_QUEUES; 349 max_q_count = XGMAC_MAX_FLOW_CONTROL_QUEUES;
350 q_count = min_t(unsigned int, pdata->rx_q_count, max_q_count); 350 q_count = min_t(unsigned int, pdata->tx_q_count, max_q_count);
351 reg = MAC_Q0TFCR; 351 reg = MAC_Q0TFCR;
352 for (i = 0; i < q_count; i++) { 352 for (i = 0; i < q_count; i++) {
353 reg_val = XGMAC_IOREAD(pdata, reg); 353 reg_val = XGMAC_IOREAD(pdata, reg);
@@ -372,7 +372,7 @@ static int xgbe_enable_tx_flow_control(struct xgbe_prv_data *pdata)
372 372
373 /* Set MAC flow control */ 373 /* Set MAC flow control */
374 max_q_count = XGMAC_MAX_FLOW_CONTROL_QUEUES; 374 max_q_count = XGMAC_MAX_FLOW_CONTROL_QUEUES;
375 q_count = min_t(unsigned int, pdata->rx_q_count, max_q_count); 375 q_count = min_t(unsigned int, pdata->tx_q_count, max_q_count);
376 reg = MAC_Q0TFCR; 376 reg = MAC_Q0TFCR;
377 for (i = 0; i < q_count; i++) { 377 for (i = 0; i < q_count; i++) {
378 reg_val = XGMAC_IOREAD(pdata, reg); 378 reg_val = XGMAC_IOREAD(pdata, reg);
@@ -508,8 +508,8 @@ static void xgbe_enable_mac_interrupts(struct xgbe_prv_data *pdata)
508 XGMAC_IOWRITE(pdata, MAC_IER, mac_ier); 508 XGMAC_IOWRITE(pdata, MAC_IER, mac_ier);
509 509
510 /* Enable all counter interrupts */ 510 /* Enable all counter interrupts */
511 XGMAC_IOWRITE_BITS(pdata, MMC_RIER, ALL_INTERRUPTS, 0xff); 511 XGMAC_IOWRITE_BITS(pdata, MMC_RIER, ALL_INTERRUPTS, 0xffffffff);
512 XGMAC_IOWRITE_BITS(pdata, MMC_TIER, ALL_INTERRUPTS, 0xff); 512 XGMAC_IOWRITE_BITS(pdata, MMC_TIER, ALL_INTERRUPTS, 0xffffffff);
513} 513}
514 514
515static int xgbe_set_gmii_speed(struct xgbe_prv_data *pdata) 515static int xgbe_set_gmii_speed(struct xgbe_prv_data *pdata)
@@ -1632,6 +1632,9 @@ static int xgbe_flush_tx_queues(struct xgbe_prv_data *pdata)
1632{ 1632{
1633 unsigned int i, count; 1633 unsigned int i, count;
1634 1634
1635 if (XGMAC_GET_BITS(pdata->hw_feat.version, MAC_VR, SNPSVER) < 0x21)
1636 return 0;
1637
1635 for (i = 0; i < pdata->tx_q_count; i++) 1638 for (i = 0; i < pdata->tx_q_count; i++)
1636 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, FTQ, 1); 1639 XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, FTQ, 1);
1637 1640
@@ -1702,8 +1705,8 @@ static void xgbe_config_mtl_mode(struct xgbe_prv_data *pdata)
1702 XGMAC_IOWRITE_BITS(pdata, MTL_OMR, RAA, MTL_RAA_SP); 1705 XGMAC_IOWRITE_BITS(pdata, MTL_OMR, RAA, MTL_RAA_SP);
1703} 1706}
1704 1707
1705static unsigned int xgbe_calculate_per_queue_fifo(unsigned long fifo_size, 1708static unsigned int xgbe_calculate_per_queue_fifo(unsigned int fifo_size,
1706 unsigned char queue_count) 1709 unsigned int queue_count)
1707{ 1710{
1708 unsigned int q_fifo_size = 0; 1711 unsigned int q_fifo_size = 0;
1709 enum xgbe_mtl_fifo_size p_fifo = XGMAC_MTL_FIFO_SIZE_256; 1712 enum xgbe_mtl_fifo_size p_fifo = XGMAC_MTL_FIFO_SIZE_256;
@@ -1747,6 +1750,10 @@ static unsigned int xgbe_calculate_per_queue_fifo(unsigned long fifo_size,
1747 q_fifo_size = XGBE_FIFO_SIZE_KB(256); 1750 q_fifo_size = XGBE_FIFO_SIZE_KB(256);
1748 break; 1751 break;
1749 } 1752 }
1753
1754 /* The configured value is not the actual amount of fifo RAM */
1755 q_fifo_size = min_t(unsigned int, XGBE_FIFO_MAX, q_fifo_size);
1756
1750 q_fifo_size = q_fifo_size / queue_count; 1757 q_fifo_size = q_fifo_size / queue_count;
1751 1758
1752 /* Set the queue fifo size programmable value */ 1759 /* Set the queue fifo size programmable value */
@@ -1946,6 +1953,32 @@ static void xgbe_config_vlan_support(struct xgbe_prv_data *pdata)
1946 xgbe_disable_rx_vlan_stripping(pdata); 1953 xgbe_disable_rx_vlan_stripping(pdata);
1947} 1954}
1948 1955
1956static u64 xgbe_mmc_read(struct xgbe_prv_data *pdata, unsigned int reg_lo)
1957{
1958 bool read_hi;
1959 u64 val;
1960
1961 switch (reg_lo) {
1962 /* These registers are always 64 bit */
1963 case MMC_TXOCTETCOUNT_GB_LO:
1964 case MMC_TXOCTETCOUNT_G_LO:
1965 case MMC_RXOCTETCOUNT_GB_LO:
1966 case MMC_RXOCTETCOUNT_G_LO:
1967 read_hi = true;
1968 break;
1969
1970 default:
1971 read_hi = false;
1972 };
1973
1974 val = XGMAC_IOREAD(pdata, reg_lo);
1975
1976 if (read_hi)
1977 val |= ((u64)XGMAC_IOREAD(pdata, reg_lo + 4) << 32);
1978
1979 return val;
1980}
1981
1949static void xgbe_tx_mmc_int(struct xgbe_prv_data *pdata) 1982static void xgbe_tx_mmc_int(struct xgbe_prv_data *pdata)
1950{ 1983{
1951 struct xgbe_mmc_stats *stats = &pdata->mmc_stats; 1984 struct xgbe_mmc_stats *stats = &pdata->mmc_stats;
@@ -1953,75 +1986,75 @@ static void xgbe_tx_mmc_int(struct xgbe_prv_data *pdata)
1953 1986
1954 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXOCTETCOUNT_GB)) 1987 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXOCTETCOUNT_GB))
1955 stats->txoctetcount_gb += 1988 stats->txoctetcount_gb +=
1956 XGMAC_IOREAD(pdata, MMC_TXOCTETCOUNT_GB_LO); 1989 xgbe_mmc_read(pdata, MMC_TXOCTETCOUNT_GB_LO);
1957 1990
1958 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXFRAMECOUNT_GB)) 1991 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXFRAMECOUNT_GB))
1959 stats->txframecount_gb += 1992 stats->txframecount_gb +=
1960 XGMAC_IOREAD(pdata, MMC_TXFRAMECOUNT_GB_LO); 1993 xgbe_mmc_read(pdata, MMC_TXFRAMECOUNT_GB_LO);
1961 1994
1962 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXBROADCASTFRAMES_G)) 1995 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXBROADCASTFRAMES_G))
1963 stats->txbroadcastframes_g += 1996 stats->txbroadcastframes_g +=
1964 XGMAC_IOREAD(pdata, MMC_TXBROADCASTFRAMES_G_LO); 1997 xgbe_mmc_read(pdata, MMC_TXBROADCASTFRAMES_G_LO);
1965 1998
1966 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXMULTICASTFRAMES_G)) 1999 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXMULTICASTFRAMES_G))
1967 stats->txmulticastframes_g += 2000 stats->txmulticastframes_g +=
1968 XGMAC_IOREAD(pdata, MMC_TXMULTICASTFRAMES_G_LO); 2001 xgbe_mmc_read(pdata, MMC_TXMULTICASTFRAMES_G_LO);
1969 2002
1970 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX64OCTETS_GB)) 2003 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX64OCTETS_GB))
1971 stats->tx64octets_gb += 2004 stats->tx64octets_gb +=
1972 XGMAC_IOREAD(pdata, MMC_TX64OCTETS_GB_LO); 2005 xgbe_mmc_read(pdata, MMC_TX64OCTETS_GB_LO);
1973 2006
1974 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX65TO127OCTETS_GB)) 2007 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX65TO127OCTETS_GB))
1975 stats->tx65to127octets_gb += 2008 stats->tx65to127octets_gb +=
1976 XGMAC_IOREAD(pdata, MMC_TX65TO127OCTETS_GB_LO); 2009 xgbe_mmc_read(pdata, MMC_TX65TO127OCTETS_GB_LO);
1977 2010
1978 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX128TO255OCTETS_GB)) 2011 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX128TO255OCTETS_GB))
1979 stats->tx128to255octets_gb += 2012 stats->tx128to255octets_gb +=
1980 XGMAC_IOREAD(pdata, MMC_TX128TO255OCTETS_GB_LO); 2013 xgbe_mmc_read(pdata, MMC_TX128TO255OCTETS_GB_LO);
1981 2014
1982 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX256TO511OCTETS_GB)) 2015 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX256TO511OCTETS_GB))
1983 stats->tx256to511octets_gb += 2016 stats->tx256to511octets_gb +=
1984 XGMAC_IOREAD(pdata, MMC_TX256TO511OCTETS_GB_LO); 2017 xgbe_mmc_read(pdata, MMC_TX256TO511OCTETS_GB_LO);
1985 2018
1986 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX512TO1023OCTETS_GB)) 2019 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX512TO1023OCTETS_GB))
1987 stats->tx512to1023octets_gb += 2020 stats->tx512to1023octets_gb +=
1988 XGMAC_IOREAD(pdata, MMC_TX512TO1023OCTETS_GB_LO); 2021 xgbe_mmc_read(pdata, MMC_TX512TO1023OCTETS_GB_LO);
1989 2022
1990 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX1024TOMAXOCTETS_GB)) 2023 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TX1024TOMAXOCTETS_GB))
1991 stats->tx1024tomaxoctets_gb += 2024 stats->tx1024tomaxoctets_gb +=
1992 XGMAC_IOREAD(pdata, MMC_TX1024TOMAXOCTETS_GB_LO); 2025 xgbe_mmc_read(pdata, MMC_TX1024TOMAXOCTETS_GB_LO);
1993 2026
1994 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXUNICASTFRAMES_GB)) 2027 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXUNICASTFRAMES_GB))
1995 stats->txunicastframes_gb += 2028 stats->txunicastframes_gb +=
1996 XGMAC_IOREAD(pdata, MMC_TXUNICASTFRAMES_GB_LO); 2029 xgbe_mmc_read(pdata, MMC_TXUNICASTFRAMES_GB_LO);
1997 2030
1998 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXMULTICASTFRAMES_GB)) 2031 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXMULTICASTFRAMES_GB))
1999 stats->txmulticastframes_gb += 2032 stats->txmulticastframes_gb +=
2000 XGMAC_IOREAD(pdata, MMC_TXMULTICASTFRAMES_GB_LO); 2033 xgbe_mmc_read(pdata, MMC_TXMULTICASTFRAMES_GB_LO);
2001 2034
2002 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXBROADCASTFRAMES_GB)) 2035 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXBROADCASTFRAMES_GB))
2003 stats->txbroadcastframes_g += 2036 stats->txbroadcastframes_g +=
2004 XGMAC_IOREAD(pdata, MMC_TXBROADCASTFRAMES_GB_LO); 2037 xgbe_mmc_read(pdata, MMC_TXBROADCASTFRAMES_GB_LO);
2005 2038
2006 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXUNDERFLOWERROR)) 2039 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXUNDERFLOWERROR))
2007 stats->txunderflowerror += 2040 stats->txunderflowerror +=
2008 XGMAC_IOREAD(pdata, MMC_TXUNDERFLOWERROR_LO); 2041 xgbe_mmc_read(pdata, MMC_TXUNDERFLOWERROR_LO);
2009 2042
2010 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXOCTETCOUNT_G)) 2043 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXOCTETCOUNT_G))
2011 stats->txoctetcount_g += 2044 stats->txoctetcount_g +=
2012 XGMAC_IOREAD(pdata, MMC_TXOCTETCOUNT_G_LO); 2045 xgbe_mmc_read(pdata, MMC_TXOCTETCOUNT_G_LO);
2013 2046
2014 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXFRAMECOUNT_G)) 2047 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXFRAMECOUNT_G))
2015 stats->txframecount_g += 2048 stats->txframecount_g +=
2016 XGMAC_IOREAD(pdata, MMC_TXFRAMECOUNT_G_LO); 2049 xgbe_mmc_read(pdata, MMC_TXFRAMECOUNT_G_LO);
2017 2050
2018 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXPAUSEFRAMES)) 2051 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXPAUSEFRAMES))
2019 stats->txpauseframes += 2052 stats->txpauseframes +=
2020 XGMAC_IOREAD(pdata, MMC_TXPAUSEFRAMES_LO); 2053 xgbe_mmc_read(pdata, MMC_TXPAUSEFRAMES_LO);
2021 2054
2022 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXVLANFRAMES_G)) 2055 if (XGMAC_GET_BITS(mmc_isr, MMC_TISR, TXVLANFRAMES_G))
2023 stats->txvlanframes_g += 2056 stats->txvlanframes_g +=
2024 XGMAC_IOREAD(pdata, MMC_TXVLANFRAMES_G_LO); 2057 xgbe_mmc_read(pdata, MMC_TXVLANFRAMES_G_LO);
2025} 2058}
2026 2059
2027static void xgbe_rx_mmc_int(struct xgbe_prv_data *pdata) 2060static void xgbe_rx_mmc_int(struct xgbe_prv_data *pdata)
@@ -2031,95 +2064,95 @@ static void xgbe_rx_mmc_int(struct xgbe_prv_data *pdata)
2031 2064
2032 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXFRAMECOUNT_GB)) 2065 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXFRAMECOUNT_GB))
2033 stats->rxframecount_gb += 2066 stats->rxframecount_gb +=
2034 XGMAC_IOREAD(pdata, MMC_RXFRAMECOUNT_GB_LO); 2067 xgbe_mmc_read(pdata, MMC_RXFRAMECOUNT_GB_LO);
2035 2068
2036 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOCTETCOUNT_GB)) 2069 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOCTETCOUNT_GB))
2037 stats->rxoctetcount_gb += 2070 stats->rxoctetcount_gb +=
2038 XGMAC_IOREAD(pdata, MMC_RXOCTETCOUNT_GB_LO); 2071 xgbe_mmc_read(pdata, MMC_RXOCTETCOUNT_GB_LO);
2039 2072
2040 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOCTETCOUNT_G)) 2073 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOCTETCOUNT_G))
2041 stats->rxoctetcount_g += 2074 stats->rxoctetcount_g +=
2042 XGMAC_IOREAD(pdata, MMC_RXOCTETCOUNT_G_LO); 2075 xgbe_mmc_read(pdata, MMC_RXOCTETCOUNT_G_LO);
2043 2076
2044 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXBROADCASTFRAMES_G)) 2077 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXBROADCASTFRAMES_G))
2045 stats->rxbroadcastframes_g += 2078 stats->rxbroadcastframes_g +=
2046 XGMAC_IOREAD(pdata, MMC_RXBROADCASTFRAMES_G_LO); 2079 xgbe_mmc_read(pdata, MMC_RXBROADCASTFRAMES_G_LO);
2047 2080
2048 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXMULTICASTFRAMES_G)) 2081 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXMULTICASTFRAMES_G))
2049 stats->rxmulticastframes_g += 2082 stats->rxmulticastframes_g +=
2050 XGMAC_IOREAD(pdata, MMC_RXMULTICASTFRAMES_G_LO); 2083 xgbe_mmc_read(pdata, MMC_RXMULTICASTFRAMES_G_LO);
2051 2084
2052 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXCRCERROR)) 2085 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXCRCERROR))
2053 stats->rxcrcerror += 2086 stats->rxcrcerror +=
2054 XGMAC_IOREAD(pdata, MMC_RXCRCERROR_LO); 2087 xgbe_mmc_read(pdata, MMC_RXCRCERROR_LO);
2055 2088
2056 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXRUNTERROR)) 2089 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXRUNTERROR))
2057 stats->rxrunterror += 2090 stats->rxrunterror +=
2058 XGMAC_IOREAD(pdata, MMC_RXRUNTERROR); 2091 xgbe_mmc_read(pdata, MMC_RXRUNTERROR);
2059 2092
2060 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXJABBERERROR)) 2093 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXJABBERERROR))
2061 stats->rxjabbererror += 2094 stats->rxjabbererror +=
2062 XGMAC_IOREAD(pdata, MMC_RXJABBERERROR); 2095 xgbe_mmc_read(pdata, MMC_RXJABBERERROR);
2063 2096
2064 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXUNDERSIZE_G)) 2097 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXUNDERSIZE_G))
2065 stats->rxundersize_g += 2098 stats->rxundersize_g +=
2066 XGMAC_IOREAD(pdata, MMC_RXUNDERSIZE_G); 2099 xgbe_mmc_read(pdata, MMC_RXUNDERSIZE_G);
2067 2100
2068 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOVERSIZE_G)) 2101 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOVERSIZE_G))
2069 stats->rxoversize_g += 2102 stats->rxoversize_g +=
2070 XGMAC_IOREAD(pdata, MMC_RXOVERSIZE_G); 2103 xgbe_mmc_read(pdata, MMC_RXOVERSIZE_G);
2071 2104
2072 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX64OCTETS_GB)) 2105 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX64OCTETS_GB))
2073 stats->rx64octets_gb += 2106 stats->rx64octets_gb +=
2074 XGMAC_IOREAD(pdata, MMC_RX64OCTETS_GB_LO); 2107 xgbe_mmc_read(pdata, MMC_RX64OCTETS_GB_LO);
2075 2108
2076 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX65TO127OCTETS_GB)) 2109 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX65TO127OCTETS_GB))
2077 stats->rx65to127octets_gb += 2110 stats->rx65to127octets_gb +=
2078 XGMAC_IOREAD(pdata, MMC_RX65TO127OCTETS_GB_LO); 2111 xgbe_mmc_read(pdata, MMC_RX65TO127OCTETS_GB_LO);
2079 2112
2080 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX128TO255OCTETS_GB)) 2113 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX128TO255OCTETS_GB))
2081 stats->rx128to255octets_gb += 2114 stats->rx128to255octets_gb +=
2082 XGMAC_IOREAD(pdata, MMC_RX128TO255OCTETS_GB_LO); 2115 xgbe_mmc_read(pdata, MMC_RX128TO255OCTETS_GB_LO);
2083 2116
2084 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX256TO511OCTETS_GB)) 2117 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX256TO511OCTETS_GB))
2085 stats->rx256to511octets_gb += 2118 stats->rx256to511octets_gb +=
2086 XGMAC_IOREAD(pdata, MMC_RX256TO511OCTETS_GB_LO); 2119 xgbe_mmc_read(pdata, MMC_RX256TO511OCTETS_GB_LO);
2087 2120
2088 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX512TO1023OCTETS_GB)) 2121 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX512TO1023OCTETS_GB))
2089 stats->rx512to1023octets_gb += 2122 stats->rx512to1023octets_gb +=
2090 XGMAC_IOREAD(pdata, MMC_RX512TO1023OCTETS_GB_LO); 2123 xgbe_mmc_read(pdata, MMC_RX512TO1023OCTETS_GB_LO);
2091 2124
2092 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX1024TOMAXOCTETS_GB)) 2125 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RX1024TOMAXOCTETS_GB))
2093 stats->rx1024tomaxoctets_gb += 2126 stats->rx1024tomaxoctets_gb +=
2094 XGMAC_IOREAD(pdata, MMC_RX1024TOMAXOCTETS_GB_LO); 2127 xgbe_mmc_read(pdata, MMC_RX1024TOMAXOCTETS_GB_LO);
2095 2128
2096 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXUNICASTFRAMES_G)) 2129 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXUNICASTFRAMES_G))
2097 stats->rxunicastframes_g += 2130 stats->rxunicastframes_g +=
2098 XGMAC_IOREAD(pdata, MMC_RXUNICASTFRAMES_G_LO); 2131 xgbe_mmc_read(pdata, MMC_RXUNICASTFRAMES_G_LO);
2099 2132
2100 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXLENGTHERROR)) 2133 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXLENGTHERROR))
2101 stats->rxlengtherror += 2134 stats->rxlengtherror +=
2102 XGMAC_IOREAD(pdata, MMC_RXLENGTHERROR_LO); 2135 xgbe_mmc_read(pdata, MMC_RXLENGTHERROR_LO);
2103 2136
2104 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOUTOFRANGETYPE)) 2137 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXOUTOFRANGETYPE))
2105 stats->rxoutofrangetype += 2138 stats->rxoutofrangetype +=
2106 XGMAC_IOREAD(pdata, MMC_RXOUTOFRANGETYPE_LO); 2139 xgbe_mmc_read(pdata, MMC_RXOUTOFRANGETYPE_LO);
2107 2140
2108 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXPAUSEFRAMES)) 2141 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXPAUSEFRAMES))
2109 stats->rxpauseframes += 2142 stats->rxpauseframes +=
2110 XGMAC_IOREAD(pdata, MMC_RXPAUSEFRAMES_LO); 2143 xgbe_mmc_read(pdata, MMC_RXPAUSEFRAMES_LO);
2111 2144
2112 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXFIFOOVERFLOW)) 2145 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXFIFOOVERFLOW))
2113 stats->rxfifooverflow += 2146 stats->rxfifooverflow +=
2114 XGMAC_IOREAD(pdata, MMC_RXFIFOOVERFLOW_LO); 2147 xgbe_mmc_read(pdata, MMC_RXFIFOOVERFLOW_LO);
2115 2148
2116 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXVLANFRAMES_GB)) 2149 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXVLANFRAMES_GB))
2117 stats->rxvlanframes_gb += 2150 stats->rxvlanframes_gb +=
2118 XGMAC_IOREAD(pdata, MMC_RXVLANFRAMES_GB_LO); 2151 xgbe_mmc_read(pdata, MMC_RXVLANFRAMES_GB_LO);
2119 2152
2120 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXWATCHDOGERROR)) 2153 if (XGMAC_GET_BITS(mmc_isr, MMC_RISR, RXWATCHDOGERROR))
2121 stats->rxwatchdogerror += 2154 stats->rxwatchdogerror +=
2122 XGMAC_IOREAD(pdata, MMC_RXWATCHDOGERROR); 2155 xgbe_mmc_read(pdata, MMC_RXWATCHDOGERROR);
2123} 2156}
2124 2157
2125static void xgbe_read_mmc_stats(struct xgbe_prv_data *pdata) 2158static void xgbe_read_mmc_stats(struct xgbe_prv_data *pdata)
@@ -2130,127 +2163,127 @@ static void xgbe_read_mmc_stats(struct xgbe_prv_data *pdata)
2130 XGMAC_IOWRITE_BITS(pdata, MMC_CR, MCF, 1); 2163 XGMAC_IOWRITE_BITS(pdata, MMC_CR, MCF, 1);
2131 2164
2132 stats->txoctetcount_gb += 2165 stats->txoctetcount_gb +=
2133 XGMAC_IOREAD(pdata, MMC_TXOCTETCOUNT_GB_LO); 2166 xgbe_mmc_read(pdata, MMC_TXOCTETCOUNT_GB_LO);
2134 2167
2135 stats->txframecount_gb += 2168 stats->txframecount_gb +=
2136 XGMAC_IOREAD(pdata, MMC_TXFRAMECOUNT_GB_LO); 2169 xgbe_mmc_read(pdata, MMC_TXFRAMECOUNT_GB_LO);
2137 2170
2138 stats->txbroadcastframes_g += 2171 stats->txbroadcastframes_g +=
2139 XGMAC_IOREAD(pdata, MMC_TXBROADCASTFRAMES_G_LO); 2172 xgbe_mmc_read(pdata, MMC_TXBROADCASTFRAMES_G_LO);
2140 2173
2141 stats->txmulticastframes_g += 2174 stats->txmulticastframes_g +=
2142 XGMAC_IOREAD(pdata, MMC_TXMULTICASTFRAMES_G_LO); 2175 xgbe_mmc_read(pdata, MMC_TXMULTICASTFRAMES_G_LO);
2143 2176
2144 stats->tx64octets_gb += 2177 stats->tx64octets_gb +=
2145 XGMAC_IOREAD(pdata, MMC_TX64OCTETS_GB_LO); 2178 xgbe_mmc_read(pdata, MMC_TX64OCTETS_GB_LO);
2146 2179
2147 stats->tx65to127octets_gb += 2180 stats->tx65to127octets_gb +=
2148 XGMAC_IOREAD(pdata, MMC_TX65TO127OCTETS_GB_LO); 2181 xgbe_mmc_read(pdata, MMC_TX65TO127OCTETS_GB_LO);
2149 2182
2150 stats->tx128to255octets_gb += 2183 stats->tx128to255octets_gb +=
2151 XGMAC_IOREAD(pdata, MMC_TX128TO255OCTETS_GB_LO); 2184 xgbe_mmc_read(pdata, MMC_TX128TO255OCTETS_GB_LO);
2152 2185
2153 stats->tx256to511octets_gb += 2186 stats->tx256to511octets_gb +=
2154 XGMAC_IOREAD(pdata, MMC_TX256TO511OCTETS_GB_LO); 2187 xgbe_mmc_read(pdata, MMC_TX256TO511OCTETS_GB_LO);
2155 2188
2156 stats->tx512to1023octets_gb += 2189 stats->tx512to1023octets_gb +=
2157 XGMAC_IOREAD(pdata, MMC_TX512TO1023OCTETS_GB_LO); 2190 xgbe_mmc_read(pdata, MMC_TX512TO1023OCTETS_GB_LO);
2158 2191
2159 stats->tx1024tomaxoctets_gb += 2192 stats->tx1024tomaxoctets_gb +=
2160 XGMAC_IOREAD(pdata, MMC_TX1024TOMAXOCTETS_GB_LO); 2193 xgbe_mmc_read(pdata, MMC_TX1024TOMAXOCTETS_GB_LO);
2161 2194
2162 stats->txunicastframes_gb += 2195 stats->txunicastframes_gb +=
2163 XGMAC_IOREAD(pdata, MMC_TXUNICASTFRAMES_GB_LO); 2196 xgbe_mmc_read(pdata, MMC_TXUNICASTFRAMES_GB_LO);
2164 2197
2165 stats->txmulticastframes_gb += 2198 stats->txmulticastframes_gb +=
2166 XGMAC_IOREAD(pdata, MMC_TXMULTICASTFRAMES_GB_LO); 2199 xgbe_mmc_read(pdata, MMC_TXMULTICASTFRAMES_GB_LO);
2167 2200
2168 stats->txbroadcastframes_g += 2201 stats->txbroadcastframes_g +=
2169 XGMAC_IOREAD(pdata, MMC_TXBROADCASTFRAMES_GB_LO); 2202 xgbe_mmc_read(pdata, MMC_TXBROADCASTFRAMES_GB_LO);
2170 2203
2171 stats->txunderflowerror += 2204 stats->txunderflowerror +=
2172 XGMAC_IOREAD(pdata, MMC_TXUNDERFLOWERROR_LO); 2205 xgbe_mmc_read(pdata, MMC_TXUNDERFLOWERROR_LO);
2173 2206
2174 stats->txoctetcount_g += 2207 stats->txoctetcount_g +=
2175 XGMAC_IOREAD(pdata, MMC_TXOCTETCOUNT_G_LO); 2208 xgbe_mmc_read(pdata, MMC_TXOCTETCOUNT_G_LO);
2176 2209
2177 stats->txframecount_g += 2210 stats->txframecount_g +=
2178 XGMAC_IOREAD(pdata, MMC_TXFRAMECOUNT_G_LO); 2211 xgbe_mmc_read(pdata, MMC_TXFRAMECOUNT_G_LO);
2179 2212
2180 stats->txpauseframes += 2213 stats->txpauseframes +=
2181 XGMAC_IOREAD(pdata, MMC_TXPAUSEFRAMES_LO); 2214 xgbe_mmc_read(pdata, MMC_TXPAUSEFRAMES_LO);
2182 2215
2183 stats->txvlanframes_g += 2216 stats->txvlanframes_g +=
2184 XGMAC_IOREAD(pdata, MMC_TXVLANFRAMES_G_LO); 2217 xgbe_mmc_read(pdata, MMC_TXVLANFRAMES_G_LO);
2185 2218
2186 stats->rxframecount_gb += 2219 stats->rxframecount_gb +=
2187 XGMAC_IOREAD(pdata, MMC_RXFRAMECOUNT_GB_LO); 2220 xgbe_mmc_read(pdata, MMC_RXFRAMECOUNT_GB_LO);
2188 2221
2189 stats->rxoctetcount_gb += 2222 stats->rxoctetcount_gb +=
2190 XGMAC_IOREAD(pdata, MMC_RXOCTETCOUNT_GB_LO); 2223 xgbe_mmc_read(pdata, MMC_RXOCTETCOUNT_GB_LO);
2191 2224
2192 stats->rxoctetcount_g += 2225 stats->rxoctetcount_g +=
2193 XGMAC_IOREAD(pdata, MMC_RXOCTETCOUNT_G_LO); 2226 xgbe_mmc_read(pdata, MMC_RXOCTETCOUNT_G_LO);
2194 2227
2195 stats->rxbroadcastframes_g += 2228 stats->rxbroadcastframes_g +=
2196 XGMAC_IOREAD(pdata, MMC_RXBROADCASTFRAMES_G_LO); 2229 xgbe_mmc_read(pdata, MMC_RXBROADCASTFRAMES_G_LO);
2197 2230
2198 stats->rxmulticastframes_g += 2231 stats->rxmulticastframes_g +=
2199 XGMAC_IOREAD(pdata, MMC_RXMULTICASTFRAMES_G_LO); 2232 xgbe_mmc_read(pdata, MMC_RXMULTICASTFRAMES_G_LO);
2200 2233
2201 stats->rxcrcerror += 2234 stats->rxcrcerror +=
2202 XGMAC_IOREAD(pdata, MMC_RXCRCERROR_LO); 2235 xgbe_mmc_read(pdata, MMC_RXCRCERROR_LO);
2203 2236
2204 stats->rxrunterror += 2237 stats->rxrunterror +=
2205 XGMAC_IOREAD(pdata, MMC_RXRUNTERROR); 2238 xgbe_mmc_read(pdata, MMC_RXRUNTERROR);
2206 2239
2207 stats->rxjabbererror += 2240 stats->rxjabbererror +=
2208 XGMAC_IOREAD(pdata, MMC_RXJABBERERROR); 2241 xgbe_mmc_read(pdata, MMC_RXJABBERERROR);
2209 2242
2210 stats->rxundersize_g += 2243 stats->rxundersize_g +=
2211 XGMAC_IOREAD(pdata, MMC_RXUNDERSIZE_G); 2244 xgbe_mmc_read(pdata, MMC_RXUNDERSIZE_G);
2212 2245
2213 stats->rxoversize_g += 2246 stats->rxoversize_g +=
2214 XGMAC_IOREAD(pdata, MMC_RXOVERSIZE_G); 2247 xgbe_mmc_read(pdata, MMC_RXOVERSIZE_G);
2215 2248
2216 stats->rx64octets_gb += 2249 stats->rx64octets_gb +=
2217 XGMAC_IOREAD(pdata, MMC_RX64OCTETS_GB_LO); 2250 xgbe_mmc_read(pdata, MMC_RX64OCTETS_GB_LO);
2218 2251
2219 stats->rx65to127octets_gb += 2252 stats->rx65to127octets_gb +=
2220 XGMAC_IOREAD(pdata, MMC_RX65TO127OCTETS_GB_LO); 2253 xgbe_mmc_read(pdata, MMC_RX65TO127OCTETS_GB_LO);
2221 2254
2222 stats->rx128to255octets_gb += 2255 stats->rx128to255octets_gb +=
2223 XGMAC_IOREAD(pdata, MMC_RX128TO255OCTETS_GB_LO); 2256 xgbe_mmc_read(pdata, MMC_RX128TO255OCTETS_GB_LO);
2224 2257
2225 stats->rx256to511octets_gb += 2258 stats->rx256to511octets_gb +=
2226 XGMAC_IOREAD(pdata, MMC_RX256TO511OCTETS_GB_LO); 2259 xgbe_mmc_read(pdata, MMC_RX256TO511OCTETS_GB_LO);
2227 2260
2228 stats->rx512to1023octets_gb += 2261 stats->rx512to1023octets_gb +=
2229 XGMAC_IOREAD(pdata, MMC_RX512TO1023OCTETS_GB_LO); 2262 xgbe_mmc_read(pdata, MMC_RX512TO1023OCTETS_GB_LO);
2230 2263
2231 stats->rx1024tomaxoctets_gb += 2264 stats->rx1024tomaxoctets_gb +=
2232 XGMAC_IOREAD(pdata, MMC_RX1024TOMAXOCTETS_GB_LO); 2265 xgbe_mmc_read(pdata, MMC_RX1024TOMAXOCTETS_GB_LO);
2233 2266
2234 stats->rxunicastframes_g += 2267 stats->rxunicastframes_g +=
2235 XGMAC_IOREAD(pdata, MMC_RXUNICASTFRAMES_G_LO); 2268 xgbe_mmc_read(pdata, MMC_RXUNICASTFRAMES_G_LO);
2236 2269
2237 stats->rxlengtherror += 2270 stats->rxlengtherror +=
2238 XGMAC_IOREAD(pdata, MMC_RXLENGTHERROR_LO); 2271 xgbe_mmc_read(pdata, MMC_RXLENGTHERROR_LO);
2239 2272
2240 stats->rxoutofrangetype += 2273 stats->rxoutofrangetype +=
2241 XGMAC_IOREAD(pdata, MMC_RXOUTOFRANGETYPE_LO); 2274 xgbe_mmc_read(pdata, MMC_RXOUTOFRANGETYPE_LO);
2242 2275
2243 stats->rxpauseframes += 2276 stats->rxpauseframes +=
2244 XGMAC_IOREAD(pdata, MMC_RXPAUSEFRAMES_LO); 2277 xgbe_mmc_read(pdata, MMC_RXPAUSEFRAMES_LO);
2245 2278
2246 stats->rxfifooverflow += 2279 stats->rxfifooverflow +=
2247 XGMAC_IOREAD(pdata, MMC_RXFIFOOVERFLOW_LO); 2280 xgbe_mmc_read(pdata, MMC_RXFIFOOVERFLOW_LO);
2248 2281
2249 stats->rxvlanframes_gb += 2282 stats->rxvlanframes_gb +=
2250 XGMAC_IOREAD(pdata, MMC_RXVLANFRAMES_GB_LO); 2283 xgbe_mmc_read(pdata, MMC_RXVLANFRAMES_GB_LO);
2251 2284
2252 stats->rxwatchdogerror += 2285 stats->rxwatchdogerror +=
2253 XGMAC_IOREAD(pdata, MMC_RXWATCHDOGERROR); 2286 xgbe_mmc_read(pdata, MMC_RXWATCHDOGERROR);
2254 2287
2255 /* Un-freeze counters */ 2288 /* Un-freeze counters */
2256 XGMAC_IOWRITE_BITS(pdata, MMC_CR, MCF, 0); 2289 XGMAC_IOWRITE_BITS(pdata, MMC_CR, MCF, 0);