diff options
author | Lendacky, Thomas <Thomas.Lendacky@amd.com> | 2016-11-03 13:19:07 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-11-04 14:48:44 -0400 |
commit | e5a20b9072eb38fad9b8cff4e6824c6cdbee5a00 (patch) | |
tree | d67834f84d2eefa2c837b7226be811e9c271abfa | |
parent | b03a4a6fb309a000a0fba5f2af06ffc5767b0e45 (diff) | |
download | lwn-e5a20b9072eb38fad9b8cff4e6824c6cdbee5a00.tar.gz lwn-e5a20b9072eb38fad9b8cff4e6824c6cdbee5a00.zip |
amd-xgbe: Support for 64-bit management counter registers
Add support for reading all management counter registers as 64-bit
values. The indication of whether to read the high 32-bits to form
a 64-bit value is indicated in the version data.
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 36 | ||||
-rw-r--r-- | drivers/net/ethernet/amd/xgbe/xgbe.h | 1 |
2 files changed, 27 insertions, 10 deletions
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c index b8a04e739344..fbd60ee0260b 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c @@ -2588,17 +2588,33 @@ static u64 xgbe_mmc_read(struct xgbe_prv_data *pdata, unsigned int reg_lo) bool read_hi; u64 val; - switch (reg_lo) { - /* These registers are always 64 bit */ - case MMC_TXOCTETCOUNT_GB_LO: - case MMC_TXOCTETCOUNT_G_LO: - case MMC_RXOCTETCOUNT_GB_LO: - case MMC_RXOCTETCOUNT_G_LO: - read_hi = true; - break; + if (pdata->vdata->mmc_64bit) { + switch (reg_lo) { + /* These registers are always 32 bit */ + case MMC_RXRUNTERROR: + case MMC_RXJABBERERROR: + case MMC_RXUNDERSIZE_G: + case MMC_RXOVERSIZE_G: + case MMC_RXWATCHDOGERROR: + read_hi = false; + break; - default: - read_hi = false; + default: + read_hi = true; + } + } else { + switch (reg_lo) { + /* These registers are always 64 bit */ + case MMC_TXOCTETCOUNT_GB_LO: + case MMC_TXOCTETCOUNT_G_LO: + case MMC_RXOCTETCOUNT_GB_LO: + case MMC_RXOCTETCOUNT_G_LO: + read_hi = true; + break; + + default: + read_hi = false; + } } val = XGMAC_IOREAD(pdata, reg_lo); diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h index 160b4980b2eb..7cbf91b4aa79 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe.h +++ b/drivers/net/ethernet/amd/xgbe/xgbe.h @@ -804,6 +804,7 @@ struct xgbe_hw_features { struct xgbe_version_data { void (*init_function_ptrs_phy_impl)(struct xgbe_phy_if *); enum xgbe_xpcs_access xpcs_access; + unsigned int mmc_64bit; }; struct xgbe_prv_data { |