aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCasey Leedom <leedom@chelsio.com>2018-07-07 03:08:07 -0400
committerDavid S. Miller <davem@davemloft.net>2018-07-07 06:57:33 -0400
commit843789f6dd6ae1651a77ac99c13bcaf191ebe05c (patch)
tree15bf3d7537ffdfd30786676118e348a06dcca86b
parent7f978e859f41e4d95a3ea14794d2577f755d7924 (diff)
cxgb4: assume flash part size to be 4MB, if it can't be determined
t4_get_flash_params() fails in a fatal fashion if the FLASH part isn't one of the recognized parts. But this leads to desperate efforts to update drivers when various FLASH parts which we are using suddenly become unavailable and we need to substitute new FLASH parts. This has lead to more than one Customer Field Emergency when a Customer has an old driver and suddenly can't use newly shipped adapters. This commit fixes this by simply assuming that the FLASH part is 4MB in size if it can't be identified. Note that all Chelsio adapters will have flash parts which are at least 4MB in size. Signed-off-by: Casey Leedom <leedom@chelsio.com> Signed-off-by: Ganesh Goudar <ganeshgr@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/t4_hw.c35
1 files changed, 13 insertions, 22 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
index 974a868a4824..3720c3e11ebb 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
@@ -8702,7 +8702,7 @@ static int t4_get_flash_params(struct adapter *adap)
8702 }; 8702 };
8703 8703
8704 unsigned int part, manufacturer; 8704 unsigned int part, manufacturer;
8705 unsigned int density, size; 8705 unsigned int density, size = 0;
8706 u32 flashid = 0; 8706 u32 flashid = 0;
8707 int ret; 8707 int ret;
8708 8708
@@ -8772,11 +8772,6 @@ static int t4_get_flash_params(struct adapter *adap)
8772 case 0x22: /* 256MB */ 8772 case 0x22: /* 256MB */
8773 size = 1 << 28; 8773 size = 1 << 28;
8774 break; 8774 break;
8775
8776 default:
8777 dev_err(adap->pdev_dev, "Micron Flash Part has bad size, ID = %#x, Density code = %#x\n",
8778 flashid, density);
8779 return -EINVAL;
8780 } 8775 }
8781 break; 8776 break;
8782 } 8777 }
@@ -8792,10 +8787,6 @@ static int t4_get_flash_params(struct adapter *adap)
8792 case 0x17: /* 64MB */ 8787 case 0x17: /* 64MB */
8793 size = 1 << 26; 8788 size = 1 << 26;
8794 break; 8789 break;
8795 default:
8796 dev_err(adap->pdev_dev, "ISSI Flash Part has bad size, ID = %#x, Density code = %#x\n",
8797 flashid, density);
8798 return -EINVAL;
8799 } 8790 }
8800 break; 8791 break;
8801 } 8792 }
@@ -8811,10 +8802,6 @@ static int t4_get_flash_params(struct adapter *adap)
8811 case 0x18: /* 16MB */ 8802 case 0x18: /* 16MB */
8812 size = 1 << 24; 8803 size = 1 << 24;
8813 break; 8804 break;
8814 default:
8815 dev_err(adap->pdev_dev, "Macronix Flash Part has bad size, ID = %#x, Density code = %#x\n",
8816 flashid, density);
8817 return -EINVAL;
8818 } 8805 }
8819 break; 8806 break;
8820 } 8807 }
@@ -8830,17 +8817,21 @@ static int t4_get_flash_params(struct adapter *adap)
8830 case 0x18: /* 16MB */ 8817 case 0x18: /* 16MB */
8831 size = 1 << 24; 8818 size = 1 << 24;
8832 break; 8819 break;
8833 default:
8834 dev_err(adap->pdev_dev, "Winbond Flash Part has bad size, ID = %#x, Density code = %#x\n",
8835 flashid, density);
8836 return -EINVAL;
8837 } 8820 }
8838 break; 8821 break;
8839 } 8822 }
8840 default: 8823 }
8841 dev_err(adap->pdev_dev, "Unsupported Flash Part, ID = %#x\n", 8824
8842 flashid); 8825 /* If we didn't recognize the FLASH part, that's no real issue: the
8843 return -EINVAL; 8826 * Hardware/Software contract says that Hardware will _*ALWAYS*_
8827 * use a FLASH part which is at least 4MB in size and has 64KB
8828 * sectors. The unrecognized FLASH part is likely to be much larger
8829 * than 4MB, but that's all we really need.
8830 */
8831 if (size == 0) {
8832 dev_warn(adap->pdev_dev, "Unknown Flash Part, ID = %#x, assuming 4MB\n",
8833 flashid);
8834 size = 1 << 22;
8844 } 8835 }
8845 8836
8846 /* Store decoded Flash size and fall through into vetting code. */ 8837 /* Store decoded Flash size and fall through into vetting code. */