[PATCH 4.14 058/115] tg3: Add workaround to restrict 5762 MRRS to 2048

2018-03-02 Thread Greg Kroah-Hartman
4.14-stable review patch.  If anyone has any objections, please let me know.

--

From: Siva Reddy Kallam 


[ Upstream commit 4419bb1cedcda0272e1dc410345c5a1d1da0e367 ]

One of AMD based server with 5762 hangs with jumbo frame traffic.
This AMD platform has southbridge limitation which is restricting MRRS
to 4000. As a work around, driver to restricts the MRRS to 2048 for
this particular 5762 NX1 card.

Signed-off-by: Siva Reddy Kallam 
Signed-off-by: Michael Chan 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/net/ethernet/broadcom/tg3.c |   10 ++
 drivers/net/ethernet/broadcom/tg3.h |4 
 2 files changed, 14 insertions(+)

--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -10052,6 +10052,16 @@ static int tg3_reset_hw(struct tg3 *tp,
 
tw32(GRC_MODE, tp->grc_mode | val);
 
+   /* On one of the AMD platform, MRRS is restricted to 4000 because of
+* south bridge limitation. As a workaround, Driver is setting MRRS
+* to 2048 instead of default 4096.
+*/
+   if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
+   tp->pdev->subsystem_device == TG3PCI_SUBDEVICE_ID_DELL_5762) {
+   val = tr32(TG3PCI_DEV_STATUS_CTRL) & ~MAX_READ_REQ_MASK;
+   tw32(TG3PCI_DEV_STATUS_CTRL, val | MAX_READ_REQ_SIZE_2048);
+   }
+
/* Setup the timer prescalar register.  Clock is always 66Mhz. */
val = tr32(GRC_MISC_CFG);
val &= ~0xff;
--- a/drivers/net/ethernet/broadcom/tg3.h
+++ b/drivers/net/ethernet/broadcom/tg3.h
@@ -96,6 +96,7 @@
 #define TG3PCI_SUBDEVICE_ID_DELL_JAGUAR0x0106
 #define TG3PCI_SUBDEVICE_ID_DELL_MERLOT0x0109
 #define TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT   0x010a
+#define TG3PCI_SUBDEVICE_ID_DELL_5762  0x07f0
 #define TG3PCI_SUBVENDOR_ID_COMPAQ PCI_VENDOR_ID_COMPAQ
 #define TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE 0x007c
 #define TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2   0x009a
@@ -281,6 +282,9 @@
 #define TG3PCI_STD_RING_PROD_IDX   0x0098 /* 64-bit */
 #define TG3PCI_RCV_RET_RING_CON_IDX0x00a0 /* 64-bit */
 /* 0xa8 --> 0xb8 unused */
+#define TG3PCI_DEV_STATUS_CTRL 0x00b4
+#define  MAX_READ_REQ_SIZE_2048 0x4000
+#define  MAX_READ_REQ_MASK  0x7000
 #define TG3PCI_DUAL_MAC_CTRL   0x00b8
 #define  DUAL_MAC_CTRL_CH_MASK  0x0003
 #define  DUAL_MAC_CTRL_ID   0x0004




[PATCH 4.14 058/115] tg3: Add workaround to restrict 5762 MRRS to 2048

2018-03-02 Thread Greg Kroah-Hartman
4.14-stable review patch.  If anyone has any objections, please let me know.

--

From: Siva Reddy Kallam 


[ Upstream commit 4419bb1cedcda0272e1dc410345c5a1d1da0e367 ]

One of AMD based server with 5762 hangs with jumbo frame traffic.
This AMD platform has southbridge limitation which is restricting MRRS
to 4000. As a work around, driver to restricts the MRRS to 2048 for
this particular 5762 NX1 card.

Signed-off-by: Siva Reddy Kallam 
Signed-off-by: Michael Chan 
Signed-off-by: David S. Miller 
Signed-off-by: Sasha Levin 
Signed-off-by: Greg Kroah-Hartman 
---
 drivers/net/ethernet/broadcom/tg3.c |   10 ++
 drivers/net/ethernet/broadcom/tg3.h |4 
 2 files changed, 14 insertions(+)

--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -10052,6 +10052,16 @@ static int tg3_reset_hw(struct tg3 *tp,
 
tw32(GRC_MODE, tp->grc_mode | val);
 
+   /* On one of the AMD platform, MRRS is restricted to 4000 because of
+* south bridge limitation. As a workaround, Driver is setting MRRS
+* to 2048 instead of default 4096.
+*/
+   if (tp->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL &&
+   tp->pdev->subsystem_device == TG3PCI_SUBDEVICE_ID_DELL_5762) {
+   val = tr32(TG3PCI_DEV_STATUS_CTRL) & ~MAX_READ_REQ_MASK;
+   tw32(TG3PCI_DEV_STATUS_CTRL, val | MAX_READ_REQ_SIZE_2048);
+   }
+
/* Setup the timer prescalar register.  Clock is always 66Mhz. */
val = tr32(GRC_MISC_CFG);
val &= ~0xff;
--- a/drivers/net/ethernet/broadcom/tg3.h
+++ b/drivers/net/ethernet/broadcom/tg3.h
@@ -96,6 +96,7 @@
 #define TG3PCI_SUBDEVICE_ID_DELL_JAGUAR0x0106
 #define TG3PCI_SUBDEVICE_ID_DELL_MERLOT0x0109
 #define TG3PCI_SUBDEVICE_ID_DELL_SLIM_MERLOT   0x010a
+#define TG3PCI_SUBDEVICE_ID_DELL_5762  0x07f0
 #define TG3PCI_SUBVENDOR_ID_COMPAQ PCI_VENDOR_ID_COMPAQ
 #define TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE 0x007c
 #define TG3PCI_SUBDEVICE_ID_COMPAQ_BANSHEE_2   0x009a
@@ -281,6 +282,9 @@
 #define TG3PCI_STD_RING_PROD_IDX   0x0098 /* 64-bit */
 #define TG3PCI_RCV_RET_RING_CON_IDX0x00a0 /* 64-bit */
 /* 0xa8 --> 0xb8 unused */
+#define TG3PCI_DEV_STATUS_CTRL 0x00b4
+#define  MAX_READ_REQ_SIZE_2048 0x4000
+#define  MAX_READ_REQ_MASK  0x7000
 #define TG3PCI_DUAL_MAC_CTRL   0x00b8
 #define  DUAL_MAC_CTRL_CH_MASK  0x0003
 #define  DUAL_MAC_CTRL_ID   0x0004