patches for DPDK stable branches
 help / color / mirror / Atom feed
* [dpdk-stable] [PATCH] net/cxgbe: fix init failure due to new flash parts
@ 2018-07-09 15:43 Rahul Lakkireddy
  2018-07-18  9:26 ` Ferruh Yigit
  0 siblings, 1 reply; 3+ messages in thread
From: Rahul Lakkireddy @ 2018-07-09 15:43 UTC (permalink / raw)
  To: dev; +Cc: shaguna, indranil, nirranjan, stable

Add decode logic for new flash parts shipped with new Chelsio NICs
to fix initialization failure on these NICs.

Cc: stable@dpdk.org

Signed-off-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>
---
 drivers/net/cxgbe/base/t4_hw.c | 97 ++++++++++++++++++++++++++++++++++++------
 1 file changed, 84 insertions(+), 13 deletions(-)

diff --git a/drivers/net/cxgbe/base/t4_hw.c b/drivers/net/cxgbe/base/t4_hw.c
index 628b280ef..31762c9c5 100644
--- a/drivers/net/cxgbe/base/t4_hw.c
+++ b/drivers/net/cxgbe/base/t4_hw.c
@@ -4681,9 +4681,8 @@ struct flash_desc {
 int t4_get_flash_params(struct adapter *adapter)
 {
 	/*
-	 * Table for non-Numonix supported flash parts.  Numonix parts are left
-	 * to the preexisting well-tested code.  All flash parts have 64KB
-	 * sectors.
+	 * Table for non-standard supported Flash parts.  Note, all Flash
+	 * parts must have 64KB sectors.
 	 */
 	static struct flash_desc supported_flash[] = {
 		{ 0x00150201, 4 << 20 },       /* Spansion 4MB S25FL032P */
@@ -4692,7 +4691,7 @@ int t4_get_flash_params(struct adapter *adapter)
 	int ret;
 	u32 flashid = 0;
 	unsigned int part, manufacturer;
-	unsigned int density, size;
+	unsigned int density, size = 0;
 
 	/**
 	 * Issue a Read ID Command to the Flash part.  We decode supported
@@ -4707,6 +4706,9 @@ int t4_get_flash_params(struct adapter *adapter)
 	if (ret < 0)
 		return ret;
 
+	/**
+	 * Check to see if it's one of our non-standard supported Flash parts.
+	 */
 	for (part = 0; part < ARRAY_SIZE(supported_flash); part++) {
 		if (supported_flash[part].vendor_and_model_id == flashid) {
 			adapter->params.sf_size =
@@ -4717,6 +4719,15 @@ int t4_get_flash_params(struct adapter *adapter)
 		}
 	}
 
+	/**
+	 * Decode Flash part size.  The code below looks repetative with
+	 * common encodings, but that's not guaranteed in the JEDEC
+	 * specification for the Read JADEC ID command.  The only thing that
+	 * we're guaranteed by the JADEC specification is where the
+	 * Manufacturer ID is in the returned result.  After that each
+	 * Manufacturer ~could~ encode things completely differently.
+	 * Note, all Flash parts must have 64KB sectors.
+	 */
 	manufacturer = flashid & 0xff;
 	switch (manufacturer) {
 	case 0x20: { /* Micron/Numonix */
@@ -4753,20 +4764,80 @@ int t4_get_flash_params(struct adapter *adapter)
 		case 0x22:
 			size = 1 << 28; /* 256MB */
 			break;
-		default:
-			dev_err(adapter, "Micron Flash Part has bad size, ID = %#x, Density code = %#x\n",
-				flashid, density);
-			return -EINVAL;
 		}
+		break;
+	}
 
-		adapter->params.sf_size = size;
-		adapter->params.sf_nsec = size / SF_SEC_SIZE;
+	case 0x9d: { /* ISSI -- Integrated Silicon Solution, Inc. */
+		/**
+		 * This Density -> Size decoding table is taken from ISSI
+		 * Data Sheets.
+		 */
+		density = (flashid >> 16) & 0xff;
+		switch (density) {
+		case 0x16:
+			size = 1 << 25; /* 32MB */
+			break;
+		case 0x17:
+			size = 1 << 26; /* 64MB */
+			break;
+		}
 		break;
 	}
-	default:
-		dev_err(adapter, "Unsupported Flash Part, ID = %#x\n", flashid);
-		return -EINVAL;
+
+	case 0xc2: { /* Macronix */
+		/**
+		 * This Density -> Size decoding table is taken from Macronix
+		 * Data Sheets.
+		 */
+		density = (flashid >> 16) & 0xff;
+		switch (density) {
+		case 0x17:
+			size = 1 << 23; /* 8MB */
+			break;
+		case 0x18:
+			size = 1 << 24; /* 16MB */
+			break;
+		}
+		break;
+	}
+
+	case 0xef: { /* Winbond */
+		/**
+		 * This Density -> Size decoding table is taken from Winbond
+		 * Data Sheets.
+		 */
+		density = (flashid >> 16) & 0xff;
+		switch (density) {
+		case 0x17:
+			size = 1 << 23; /* 8MB */
+			break;
+		case 0x18:
+			size = 1 << 24; /* 16MB */
+			break;
+		}
+		break;
 	}
+	}
+
+	/* If we didn't recognize the FLASH part, that's no real issue: the
+	 * Hardware/Software contract says that Hardware will _*ALWAYS*_
+	 * use a FLASH part which is at least 4MB in size and has 64KB
+	 * sectors.  The unrecognized FLASH part is likely to be much larger
+	 * than 4MB, but that's all we really need.
+	 */
+	if (size == 0) {
+		dev_warn(adapter,
+			 "Unknown Flash Part, ID = %#x, assuming 4MB\n",
+			 flashid);
+		size = 1 << 22;
+	}
+
+	/**
+	 * Store decoded Flash size and fall through into vetting code.
+	 */
+	adapter->params.sf_size = size;
+	adapter->params.sf_nsec = size / SF_SEC_SIZE;
 
 found:
 	/*
-- 
2.14.1

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [dpdk-stable] [PATCH] net/cxgbe: fix init failure due to new flash parts
  2018-07-09 15:43 [dpdk-stable] [PATCH] net/cxgbe: fix init failure due to new flash parts Rahul Lakkireddy
@ 2018-07-18  9:26 ` Ferruh Yigit
  2018-07-18  9:47   ` Rahul Lakkireddy
  0 siblings, 1 reply; 3+ messages in thread
From: Ferruh Yigit @ 2018-07-18  9:26 UTC (permalink / raw)
  To: Rahul Lakkireddy, dev
  Cc: shaguna, indranil, nirranjan, stable, Kevin Traynor, Luca Boccassi

On 7/9/2018 4:43 PM, Rahul Lakkireddy wrote:
> Add decode logic for new flash parts shipped with new Chelsio NICs
> to fix initialization failure on these NICs.
> 
> Cc: stable@dpdk.org

I guess Fixes not added intentionally since this is not fixing a previous code
but fixing a behavior with new flash parts, but fix is required to be
backported. Please reply with a Fixes line if this is not correct.

> 
> Signed-off-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>

Applied to dpdk-next-net/master, thanks.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [dpdk-stable] [PATCH] net/cxgbe: fix init failure due to new flash parts
  2018-07-18  9:26 ` Ferruh Yigit
@ 2018-07-18  9:47   ` Rahul Lakkireddy
  0 siblings, 0 replies; 3+ messages in thread
From: Rahul Lakkireddy @ 2018-07-18  9:47 UTC (permalink / raw)
  To: Ferruh Yigit
  Cc: dev, Shagun Agarwal, Indranil Choudhury, Nirranjan Kirubaharan,
	stable, Kevin Traynor, Luca Boccassi

On Wednesday, July 07/18/18, 2018 at 14:56:12 +0530, Ferruh Yigit wrote:
> On 7/9/2018 4:43 PM, Rahul Lakkireddy wrote:
> > Add decode logic for new flash parts shipped with new Chelsio NICs
> > to fix initialization failure on these NICs.
> > 
> > Cc: stable@dpdk.org
> 
> I guess Fixes not added intentionally since this is not fixing a previous code
> but fixing a behavior with new flash parts, but fix is required to be
> backported. Please reply with a Fixes line if this is not correct.
> 

Correct. Fixes line was not added intentionally. It's not fixing
any bug with previous code, but rather adding decode logic to detect
the Chelsio NICs with new flash parts. Without this patch, CXGBE PMD
fails to initialize on these new Chelsio NICs with new flash parts.
This fix needs to be backported to allow CXGBE PMD in stable releases
also to detect and initialize on these new Chelsio NICs.

Thanks,
Rahul

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-07-18  9:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-09 15:43 [dpdk-stable] [PATCH] net/cxgbe: fix init failure due to new flash parts Rahul Lakkireddy
2018-07-18  9:26 ` Ferruh Yigit
2018-07-18  9:47   ` Rahul Lakkireddy

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).