svn commit: r299976 - head/sys/dev/bwn

Adrian Chadd adrian at FreeBSD.org
Mon May 16 20:26:31 UTC 2016


Author: adrian
Date: Mon May 16 20:26:30 2016
New Revision: 299976
URL: https://svnweb.freebsd.org/changeset/base/299976

Log:
  [bwn] check DUALPHY; add BCM4322 to the don't-override list.
  
  * DUALPHY in TGSHIGH tells us there's a phy that is dualband, rather than
    two separate PHYs/MACs (which we almost but don't quite yet support.)
    Use it.
  
  * Add the BCM4322 PCI ID to the list of devices we don't override.
    This means the 2g/5g flags are preserved, and thus we get 5GHz
    operation (with N-PHY, of course.)
  
  Tested:
  
  * BCM4311, STA mode (11bg)
  * BCM4312, STA mode (11bg)
  * BCM4321, STA mode (11abg)
  
  Sponsored by:	Palm Springs

Modified:
  head/sys/dev/bwn/if_bwn.c

Modified: head/sys/dev/bwn/if_bwn.c
==============================================================================
--- head/sys/dev/bwn/if_bwn.c	Mon May 16 20:22:52 2016	(r299975)
+++ head/sys/dev/bwn/if_bwn.c	Mon May 16 20:26:30 2016	(r299976)
@@ -1147,15 +1147,32 @@ bwn_attach_core(struct bwn_mac *mac)
 	siba_powerup(sc->sc_dev, 0);
 
 	high = siba_read_4(sc->sc_dev, SIBA_TGSHIGH);
+
+	/*
+	 * Guess at whether it has A-PHY or G-PHY.
+	 * This is just used for resetting the core to probe things;
+	 * we will re-guess once it's all up and working.
+	 *
+	 * XXX TODO: there's the TGSHIGH DUALPHY flag based on
+	 * the PHY revision.
+	 */
 	bwn_reset_core(mac, !!(high & BWN_TGSHIGH_HAVE_2GHZ));
+
+	/*
+	 * Get the PHY version.
+	 */
 	error = bwn_phy_getinfo(mac, high);
 	if (error)
 		goto fail;
 
-	/* XXX need bhnd */
+	/* XXX TODO need bhnd */
 	if (bwn_is_bus_siba(mac)) {
 		have_a = (high & BWN_TGSHIGH_HAVE_5GHZ) ? 1 : 0;
 		have_bg = (high & BWN_TGSHIGH_HAVE_2GHZ) ? 1 : 0;
+		if (high & BWN_TGSHIGH_DUALPHY) {
+			have_bg = 1;
+			have_a = 1;
+		}
 	} else {
 		device_printf(sc->sc_dev, "%s: not siba; bailing\n", __func__);
 		error = ENXIO;
@@ -1175,7 +1192,8 @@ bwn_attach_core(struct bwn_mac *mac)
 
 	if (siba_get_pci_device(sc->sc_dev) != 0x4312 &&
 	    siba_get_pci_device(sc->sc_dev) != 0x4319 &&
-	    siba_get_pci_device(sc->sc_dev) != 0x4324) {
+	    siba_get_pci_device(sc->sc_dev) != 0x4324 &&
+	    siba_get_pci_device(sc->sc_dev) != 0x4328) {
 		have_a = have_bg = 0;
 		if (mac->mac_phy.type == BWN_PHYTYPE_A)
 			have_a = 1;
@@ -1187,9 +1205,17 @@ bwn_attach_core(struct bwn_mac *mac)
 			KASSERT(0 == 1, ("%s: unknown phy type (%d)", __func__,
 			    mac->mac_phy.type));
 	}
-	/* XXX turns off PHY A because it's not supported */
+
+	/*
+	 * XXX turns off PHY A because it's not supported.
+	 * Implement PHY-A support so we can use it for PHY-G
+	 * dual-band support.
+	 */
 	if (mac->mac_phy.type != BWN_PHYTYPE_LP &&
 	    mac->mac_phy.type != BWN_PHYTYPE_N) {
+		device_printf(sc->sc_dev,
+		    "%s: forcing 2GHz only; missing PHY-A support\n",
+		    __func__);
 		have_a = 0;
 		have_bg = 1;
 	}


More information about the svn-src-all mailing list