* [PATCH net v1 1/4] amd-xgbe: Check for Tx hardware queue flushing support
2014-08-29 18:16 [PATCH net v1 0/4] amd-xgbe: AMD XGBE driver fixes 2014-08-29 Tom Lendacky
@ 2014-08-29 18:16 ` Tom Lendacky
2014-08-29 18:16 ` [PATCH net v1 2/4] amd-xgbe: Reported fifo size from hardware is not correct Tom Lendacky
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Tom Lendacky @ 2014-08-29 18:16 UTC (permalink / raw)
To: netdev; +Cc: davem
The flushing of the Tx hardware queues is only supported at a certain
level of the hardware. Retrieve the current version of the hardware
and use that to determine if flushing is supported.
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
---
drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 3 +++
drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 2 ++
drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c | 7 ++++---
drivers/net/ethernet/amd/xgbe/xgbe.h | 3 +++
4 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
index edaca44..e43747a 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
@@ -1633,6 +1633,9 @@ static int xgbe_flush_tx_queues(struct xgbe_prv_data *pdata)
{
unsigned int i, count;
+ if (XGMAC_GET_BITS(pdata->hw_feat.version, MAC_VR, SNPSVER) < 0x21)
+ return 0;
+
for (i = 0; i < pdata->tx_q_count; i++)
XGMAC_MTL_IOWRITE_BITS(pdata, i, MTL_Q_TQOMR, FTQ, 1);
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
index dc84f71..b26d758 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
@@ -361,6 +361,8 @@ void xgbe_get_all_hw_features(struct xgbe_prv_data *pdata)
memset(hw_feat, 0, sizeof(*hw_feat));
+ hw_feat->version = XGMAC_IOREAD(pdata, MAC_VR);
+
/* Hardware feature register 0 */
hw_feat->gmii = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, GMIISEL);
hw_feat->vlhash = XGMAC_GET_BITS(mac_hfr0, MAC_HWF0R, VLHASH);
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
index a076aca..46f6130 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
@@ -361,15 +361,16 @@ static void xgbe_get_drvinfo(struct net_device *netdev,
struct ethtool_drvinfo *drvinfo)
{
struct xgbe_prv_data *pdata = netdev_priv(netdev);
+ struct xgbe_hw_features *hw_feat = &pdata->hw_feat;
strlcpy(drvinfo->driver, XGBE_DRV_NAME, sizeof(drvinfo->driver));
strlcpy(drvinfo->version, XGBE_DRV_VERSION, sizeof(drvinfo->version));
strlcpy(drvinfo->bus_info, dev_name(pdata->dev),
sizeof(drvinfo->bus_info));
snprintf(drvinfo->fw_version, sizeof(drvinfo->fw_version), "%d.%d.%d",
- XGMAC_IOREAD_BITS(pdata, MAC_VR, USERVER),
- XGMAC_IOREAD_BITS(pdata, MAC_VR, DEVID),
- XGMAC_IOREAD_BITS(pdata, MAC_VR, SNPSVER));
+ XGMAC_GET_BITS(hw_feat->version, MAC_VR, USERVER),
+ XGMAC_GET_BITS(hw_feat->version, MAC_VR, DEVID),
+ XGMAC_GET_BITS(hw_feat->version, MAC_VR, SNPSVER));
drvinfo->n_stats = XGBE_STATS_COUNT;
}
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h
index 07bf70a..5af5c38 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe.h
+++ b/drivers/net/ethernet/amd/xgbe/xgbe.h
@@ -526,6 +526,9 @@ struct xgbe_desc_if {
* or configurations are present in the device.
*/
struct xgbe_hw_features {
+ /* HW Version */
+ unsigned int version;
+
/* HW Feature Register0 */
unsigned int gmii; /* 1000 Mbps support */
unsigned int vlhash; /* VLAN Hash Filter */
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net v1 2/4] amd-xgbe: Reported fifo size from hardware is not correct
2014-08-29 18:16 [PATCH net v1 0/4] amd-xgbe: AMD XGBE driver fixes 2014-08-29 Tom Lendacky
2014-08-29 18:16 ` [PATCH net v1 1/4] amd-xgbe: Check for Tx hardware queue flushing support Tom Lendacky
@ 2014-08-29 18:16 ` Tom Lendacky
2014-08-29 18:17 ` [PATCH net v1 3/4] amd-xgbe: Fix the xpcs mmd debugfs support Tom Lendacky
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Tom Lendacky @ 2014-08-29 18:16 UTC (permalink / raw)
To: netdev; +Cc: davem
The fifo size reported by the hardware is not correct. Add support
to limit the reported size to what is actually present. Also, fix
the argument types used in the fifo size calculation function.
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
---
drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 8 ++++++--
drivers/net/ethernet/amd/xgbe/xgbe.h | 1 +
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
index e43747a..acde00c 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
@@ -1706,8 +1706,8 @@ static void xgbe_config_mtl_mode(struct xgbe_prv_data *pdata)
XGMAC_IOWRITE_BITS(pdata, MTL_OMR, RAA, MTL_RAA_SP);
}
-static unsigned int xgbe_calculate_per_queue_fifo(unsigned long fifo_size,
- unsigned char queue_count)
+static unsigned int xgbe_calculate_per_queue_fifo(unsigned int fifo_size,
+ unsigned int queue_count)
{
unsigned int q_fifo_size = 0;
enum xgbe_mtl_fifo_size p_fifo = XGMAC_MTL_FIFO_SIZE_256;
@@ -1751,6 +1751,10 @@ static unsigned int xgbe_calculate_per_queue_fifo(unsigned long fifo_size,
q_fifo_size = XGBE_FIFO_SIZE_KB(256);
break;
}
+
+ /* The configured value is not the actual amount of fifo RAM */
+ q_fifo_size = min_t(unsigned int, XGBE_FIFO_MAX, q_fifo_size);
+
q_fifo_size = q_fifo_size / queue_count;
/* Set the queue fifo size programmable value */
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h
index 5af5c38..e9fe6e6 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe.h
+++ b/drivers/net/ethernet/amd/xgbe/xgbe.h
@@ -183,6 +183,7 @@
#define XGMAC_DRIVER_CONTEXT 1
#define XGMAC_IOCTL_CONTEXT 2
+#define XGBE_FIFO_MAX 81920
#define XGBE_FIFO_SIZE_B(x) (x)
#define XGBE_FIFO_SIZE_KB(x) (x * 1024)
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net v1 3/4] amd-xgbe: Fix the xpcs mmd debugfs support
2014-08-29 18:16 [PATCH net v1 0/4] amd-xgbe: AMD XGBE driver fixes 2014-08-29 Tom Lendacky
2014-08-29 18:16 ` [PATCH net v1 1/4] amd-xgbe: Check for Tx hardware queue flushing support Tom Lendacky
2014-08-29 18:16 ` [PATCH net v1 2/4] amd-xgbe: Reported fifo size from hardware is not correct Tom Lendacky
@ 2014-08-29 18:17 ` Tom Lendacky
2014-08-29 18:17 ` [PATCH net v1 4/4] amd-xgbe: Use the Tx queue count for Tx flow control support Tom Lendacky
2014-09-02 3:40 ` [PATCH net v1 0/4] amd-xgbe: AMD XGBE driver fixes 2014-08-29 David Miller
4 siblings, 0 replies; 6+ messages in thread
From: Tom Lendacky @ 2014-08-29 18:17 UTC (permalink / raw)
To: netdev; +Cc: davem
The debugfs support for the xpcs registers did not properly use the
specified mmd (xpcs_mmd entry) which resulted in the default mmd
value always being used. Update the debugfs support to generate the
proper mmd register value.
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
---
drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c b/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c
index 346592d..a3c1135 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-debugfs.c
@@ -272,8 +272,8 @@ static ssize_t xpcs_reg_value_read(struct file *filp, char __user *buffer,
struct xgbe_prv_data *pdata = filp->private_data;
unsigned int value;
- value = pdata->hw_if.read_mmd_regs(pdata, pdata->debugfs_xpcs_mmd,
- pdata->debugfs_xpcs_reg);
+ value = XMDIO_READ(pdata, pdata->debugfs_xpcs_mmd,
+ pdata->debugfs_xpcs_reg);
return xgbe_common_read(buffer, count, ppos, value);
}
@@ -290,8 +290,8 @@ static ssize_t xpcs_reg_value_write(struct file *filp,
if (len < 0)
return len;
- pdata->hw_if.write_mmd_regs(pdata, pdata->debugfs_xpcs_mmd,
- pdata->debugfs_xpcs_reg, value);
+ XMDIO_WRITE(pdata, pdata->debugfs_xpcs_mmd, pdata->debugfs_xpcs_reg,
+ value);
return len;
}
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH net v1 4/4] amd-xgbe: Use the Tx queue count for Tx flow control support
2014-08-29 18:16 [PATCH net v1 0/4] amd-xgbe: AMD XGBE driver fixes 2014-08-29 Tom Lendacky
` (2 preceding siblings ...)
2014-08-29 18:17 ` [PATCH net v1 3/4] amd-xgbe: Fix the xpcs mmd debugfs support Tom Lendacky
@ 2014-08-29 18:17 ` Tom Lendacky
2014-09-02 3:40 ` [PATCH net v1 0/4] amd-xgbe: AMD XGBE driver fixes 2014-08-29 David Miller
4 siblings, 0 replies; 6+ messages in thread
From: Tom Lendacky @ 2014-08-29 18:17 UTC (permalink / raw)
To: netdev; +Cc: davem
When configuring Tx flow control the Rx queue count was used instead of
the Tx queue count for looping through the Tx hardware queues. Fix the
code to use the Tx queue count.
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
---
drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
index acde00c..6d0207e 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
@@ -348,7 +348,7 @@ static int xgbe_disable_tx_flow_control(struct xgbe_prv_data *pdata)
/* Clear MAC flow control */
max_q_count = XGMAC_MAX_FLOW_CONTROL_QUEUES;
- q_count = min_t(unsigned int, pdata->rx_q_count, max_q_count);
+ q_count = min_t(unsigned int, pdata->tx_q_count, max_q_count);
reg = MAC_Q0TFCR;
for (i = 0; i < q_count; i++) {
reg_val = XGMAC_IOREAD(pdata, reg);
@@ -373,7 +373,7 @@ static int xgbe_enable_tx_flow_control(struct xgbe_prv_data *pdata)
/* Set MAC flow control */
max_q_count = XGMAC_MAX_FLOW_CONTROL_QUEUES;
- q_count = min_t(unsigned int, pdata->rx_q_count, max_q_count);
+ q_count = min_t(unsigned int, pdata->tx_q_count, max_q_count);
reg = MAC_Q0TFCR;
for (i = 0; i < q_count; i++) {
reg_val = XGMAC_IOREAD(pdata, reg);
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH net v1 0/4] amd-xgbe: AMD XGBE driver fixes 2014-08-29
2014-08-29 18:16 [PATCH net v1 0/4] amd-xgbe: AMD XGBE driver fixes 2014-08-29 Tom Lendacky
` (3 preceding siblings ...)
2014-08-29 18:17 ` [PATCH net v1 4/4] amd-xgbe: Use the Tx queue count for Tx flow control support Tom Lendacky
@ 2014-09-02 3:40 ` David Miller
4 siblings, 0 replies; 6+ messages in thread
From: David Miller @ 2014-09-02 3:40 UTC (permalink / raw)
To: thomas.lendacky; +Cc: netdev
From: Tom Lendacky <thomas.lendacky@amd.com>
Date: Fri, 29 Aug 2014 13:16:44 -0500
> The following series of patches includes fixes to the driver.
>
> - Tx hardware queue flushing support dependent on hardware version
> - Incorrect reported fifo size
> - Proper mmd select in XPCS debugfs support
> - Proper queue count for configuring Tx flow control
>
> This patch series is based on net.
Series applied, thanks.
^ permalink raw reply [flat|nested] 6+ messages in thread