From ecaa500c4b211eb9c127497762c269a5f460ecde Mon Sep 17 00:00:00 2001
From: Andrew Rybchenko <arybchik@FreeBSD.org>
Date: Tue, 24 May 2016 12:15:30 +0000
Subject: [PATCH] sfxge(4): provide option to disable not a local MAC address
 check

Option EFSYS_OPT_ALLOW_UNCONFIGURED_NIC disables check that the adapter
MAC address is not a local address (beginning 02).

Submitted by:   Laurence Evans <levans at solarflare.com>
Reviewed by:    gnn
Sponsored by:   Solarflare Communications, Inc.
MFC after:      1 week
Differential Revision:  https://reviews.freebsd.org/D6508
---
 sys/dev/sfxge/common/efsys.h       | 2 ++
 sys/dev/sfxge/common/efx_check.h   | 7 +++++++
 sys/dev/sfxge/common/medford_nic.c | 7 +++++++
 3 files changed, 16 insertions(+)

diff --git a/sys/dev/sfxge/common/efsys.h b/sys/dev/sfxge/common/efsys.h
index 717f4157ea07..f93715ef6f36 100644
--- a/sys/dev/sfxge/common/efsys.h
+++ b/sys/dev/sfxge/common/efsys.h
@@ -278,6 +278,8 @@ sfxge_map_mbuf_fast(bus_dma_tag_t tag, bus_dmamap_t map,
 
 #define	EFSYS_OPT_LICENSING 0
 
+#define	EFSYS_OPT_ALLOW_UNCONFIGURED_NIC 0
+
 /* ID */
 
 typedef struct __efsys_identifier_s	efsys_identifier_t;
diff --git a/sys/dev/sfxge/common/efx_check.h b/sys/dev/sfxge/common/efx_check.h
index 85871cf49b7a..62e0aa7494eb 100644
--- a/sys/dev/sfxge/common/efx_check.h
+++ b/sys/dev/sfxge/common/efx_check.h
@@ -334,5 +334,12 @@
 # endif
 #endif /* EFSYS_OPT_LICENSING */
 
+/* Support adapters with missing static config (for factory use only) */
+#if EFSYS_OPT_ALLOW_UNCONFIGURED_NIC
+# if !EFSYS_OPT_MEDFORD
+#  error "ALLOW_UNCONFIGURED_NIC requires MEDFORD"
+# endif
+#endif /* EFSYS_OPT_ALLOW_UNCONFIGURED_NIC */
+
 
 #endif /* _SYS_EFX_CHECK_H */
diff --git a/sys/dev/sfxge/common/medford_nic.c b/sys/dev/sfxge/common/medford_nic.c
index 22110232de9b..971f9f336331 100644
--- a/sys/dev/sfxge/common/medford_nic.c
+++ b/sys/dev/sfxge/common/medford_nic.c
@@ -180,6 +180,12 @@ medford_board_cfg(
 	/* MAC address for this function */
 	if (EFX_PCI_FUNCTION_IS_PF(encp)) {
 		rc = efx_mcdi_get_mac_address_pf(enp, mac_addr);
+#if EFSYS_OPT_ALLOW_UNCONFIGURED_NIC
+		/* Disable static config checking for Medford NICs, ONLY
+		 * for manufacturing test and setup at the factory, to
+		 * allow the static config to be installed.
+		 */
+#else /* EFSYS_OPT_ALLOW_UNCONFIGURED_NIC */
 		if ((rc == 0) && (mac_addr[0] & 0x02)) {
 			/*
 			 * If the static config does not include a global MAC
@@ -189,6 +195,7 @@ medford_board_cfg(
 			 */
 			rc = EINVAL;
 		}
+#endif /* EFSYS_OPT_ALLOW_UNCONFIGURED_NIC */
 	} else {
 		rc = efx_mcdi_get_mac_address_vf(enp, mac_addr);
 	}