svn commit: r294391 - stable/10/sys/dev/sfxge/common

Andrew Rybchenko arybchik at FreeBSD.org
Wed Jan 20 08:08:45 UTC 2016


Author: arybchik
Date: Wed Jan 20 08:08:44 2016
New Revision: 294391
URL: https://svnweb.freebsd.org/changeset/base/294391

Log:
  MFC r294078
  
  sfxge: medford stores a single global copy of VPD
  
  Not per PF copies as on Huntington.
  
  Submitted by:   Mark Spender <mspender at solarflare.com>
  Reviewed by:    gnn
  Sponsored by:   Solarflare Communications, Inc.

Modified:
  stable/10/sys/dev/sfxge/common/efx.h
  stable/10/sys/dev/sfxge/common/hunt_vpd.c
  stable/10/sys/dev/sfxge/common/medford_nic.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/sfxge/common/efx.h
==============================================================================
--- stable/10/sys/dev/sfxge/common/efx.h	Wed Jan 20 08:07:30 2016	(r294390)
+++ stable/10/sys/dev/sfxge/common/efx.h	Wed Jan 20 08:08:44 2016	(r294391)
@@ -1162,6 +1162,8 @@ typedef struct efx_nic_cfg_s {
 	/* External port identifier */
 	uint8_t			enc_external_port;
 	uint32_t		enc_mcdi_max_payload_length;
+	/* VPD may be per-PF or global */
+	boolean_t		enc_vpd_is_global;
 } efx_nic_cfg_t;
 
 #define	EFX_PCI_FUNCTION_IS_PF(_encp)	((_encp)->enc_vf == 0xffff)

Modified: stable/10/sys/dev/sfxge/common/hunt_vpd.c
==============================================================================
--- stable/10/sys/dev/sfxge/common/hunt_vpd.c	Wed Jan 20 08:07:30 2016	(r294390)
+++ stable/10/sys/dev/sfxge/common/hunt_vpd.c	Wed Jan 20 08:08:44 2016	(r294391)
@@ -48,13 +48,20 @@ ef10_vpd_init(
 	caddr_t svpd;
 	size_t svpd_size;
 	uint32_t pci_pf;
+	uint32_t tag;
 	efx_rc_t rc;
 
 	EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_PROBE);
 	EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
 		    enp->en_family == EFX_FAMILY_MEDFORD);
 
-	pci_pf = enp->en_nic_cfg.enc_pf;
+	if (enp->en_nic_cfg.enc_vpd_is_global) {
+		tag = TLV_TAG_GLOBAL_STATIC_VPD;
+	} else {
+		pci_pf = enp->en_nic_cfg.enc_pf;
+		tag = TLV_TAG_PF_STATIC_VPD(pci_pf);
+	}
+
 	/*
 	 * The VPD interface exposes VPD resources from the combined static and
 	 * dynamic VPD storage. As the static VPD configuration should *never*
@@ -64,8 +71,7 @@ ef10_vpd_init(
 	svpd_size = 0;
 	rc = ef10_nvram_partn_read_tlv(enp,
 	    NVRAM_PARTITION_TYPE_STATIC_CONFIG,
-	    TLV_TAG_PF_STATIC_VPD(pci_pf),
-	    &svpd, &svpd_size);
+	    tag, &svpd, &svpd_size);
 	if (rc != 0) {
 		if (rc == EACCES) {
 			/* Unpriviledged functions cannot access VPD */
@@ -132,17 +138,22 @@ ef10_vpd_read(
 	caddr_t dvpd;
 	size_t dvpd_size;
 	uint32_t pci_pf;
+	uint32_t tag;
 	efx_rc_t rc;
 
 	EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
 		    enp->en_family == EFX_FAMILY_MEDFORD);
 
-	pci_pf = enp->en_nic_cfg.enc_pf;
+	if (enp->en_nic_cfg.enc_vpd_is_global) {
+		tag = TLV_TAG_GLOBAL_DYNAMIC_VPD;
+	} else {
+		pci_pf = enp->en_nic_cfg.enc_pf;
+		tag = TLV_TAG_PF_DYNAMIC_VPD(pci_pf);
+	}
 
 	if ((rc = ef10_nvram_partn_read_tlv(enp,
 		    NVRAM_PARTITION_TYPE_DYNAMIC_CONFIG,
-		    TLV_TAG_PF_DYNAMIC_VPD(pci_pf),
-		    &dvpd, &dvpd_size)) != 0)
+		    tag, &dvpd, &dvpd_size)) != 0)
 		goto fail1;
 
 	if (dvpd_size > size) {
@@ -396,12 +407,18 @@ ef10_vpd_write(
 {
 	size_t vpd_length;
 	uint32_t pci_pf;
+	uint32_t tag;
 	efx_rc_t rc;
 
 	EFSYS_ASSERT(enp->en_family == EFX_FAMILY_HUNTINGTON ||
 		    enp->en_family == EFX_FAMILY_MEDFORD);
 
-	pci_pf = enp->en_nic_cfg.enc_pf;
+	if (enp->en_nic_cfg.enc_vpd_is_global) {
+		tag = TLV_TAG_GLOBAL_DYNAMIC_VPD;
+	} else {
+		pci_pf = enp->en_nic_cfg.enc_pf;
+		tag = TLV_TAG_PF_DYNAMIC_VPD(pci_pf);
+	}
 
 	/* Determine total length of new dynamic VPD */
 	if ((rc = efx_vpd_hunk_length(data, size, &vpd_length)) != 0)
@@ -410,8 +427,7 @@ ef10_vpd_write(
 	/* Store new dynamic VPD in all segments in DYNAMIC_CONFIG partition */
 	if ((rc = ef10_nvram_partn_write_segment_tlv(enp,
 		    NVRAM_PARTITION_TYPE_DYNAMIC_CONFIG,
-		    TLV_TAG_PF_DYNAMIC_VPD(pci_pf),
-		    data, vpd_length, B_TRUE)) != 0) {
+		    tag, data, vpd_length, B_TRUE)) != 0) {
 		goto fail2;
 	}
 

Modified: stable/10/sys/dev/sfxge/common/medford_nic.c
==============================================================================
--- stable/10/sys/dev/sfxge/common/medford_nic.c	Wed Jan 20 08:07:30 2016	(r294390)
+++ stable/10/sys/dev/sfxge/common/medford_nic.c	Wed Jan 20 08:08:44 2016	(r294391)
@@ -212,6 +212,12 @@ medford_board_cfg(
 	 */
 	encp->enc_tx_tso_tcp_header_offset_limit = EF10_TCP_HEADER_OFFSET_LIMIT;
 
+	/*
+	 * Medford stores a single global copy of VPD, not per-PF as on
+	 * Huntington.
+	 */
+	encp->enc_vpd_is_global = B_TRUE;
+
 	return (0);
 
 fail11:


More information about the svn-src-all mailing list