diff options
Diffstat (limited to 'drivers/net/ethernet/amd/xgbe/xgbe-dev.c')
-rw-r--r-- | drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 209 |
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 | ||
515 | static int xgbe_set_gmii_speed(struct xgbe_prv_data *pdata) | 515 | static 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 | ||
1705 | static unsigned int xgbe_calculate_per_queue_fifo(unsigned long fifo_size, | 1708 | static 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 | ||
1956 | static 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 | |||
1949 | static void xgbe_tx_mmc_int(struct xgbe_prv_data *pdata) | 1982 | static 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 | ||
2027 | static void xgbe_rx_mmc_int(struct xgbe_prv_data *pdata) | 2060 | static 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 | ||
2125 | static void xgbe_read_mmc_stats(struct xgbe_prv_data *pdata) | 2158 | static 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); |