User Tools

Site Tools


doc:hardware:soc:soc.broadcom.bcm47xx

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
doc:hardware:soc:soc.broadcom.bcm47xx [2013/03/24 16:34]
hauke
doc:hardware:soc:soc.broadcom.bcm47xx [2014/10/07 07:54] (current)
zajec broadcom-wl: Update info about interfaces & tools
Line 1: Line 1:
 ====== Broadcom BCM47xx ====== ====== Broadcom BCM47xx ======
 This page covers the BCM47xx and BCM53xx Wireless Router/AP SoC running MIPS CPUs. This page covers the BCM47xx and BCM53xx Wireless Router/AP SoC running MIPS CPUs.
 +
 +
 +===== Subtargets in Barrier Breaker =====
 +
 +Beginning with [[https://​dev.openwrt.org/​changeset/​41024|r41024]] this arch was split into 3 subtargets:
 +
 +  * legacy: old devices based on SSB bus
 +  * generic: devices based on BCM4705 and two Linksys exceptions: WRT610N V2 and E3000 V1
 +  * mips74k: newer devices with BCMA SoC and bgmac ethernet
 +
 +See [[http://​wireless.kernel.org/​en/​users/​Drivers/​b43/​soc|list of Broadcom SoCs]] to see if your BCM* chipset is SSB or BCMA.
  
 ===== Images ===== ===== Images =====
Line 18: Line 29:
 Version 12.09-rc1: http://​downloads.openwrt.org/​attitude_adjustment/​12.09-rc1/​brcm47xx/​ Version 12.09-rc1: http://​downloads.openwrt.org/​attitude_adjustment/​12.09-rc1/​brcm47xx/​
  
-This image has support for all BCM47xx SoCs using SSB. These are all devices with a ieee802.11b or ieee802.11g ​Wifi support and the BCM4785/​BCM4705 with an additional ieee80211n PCI devices connected to the SoC. +This image has support for all BCM47xx SoCs using SSB. These are all devices with a ieee802.11b or ieee802.11g ​WiFi support and the BCM4785/​BCM4705 with an additional ieee80211n PCI devices connected to the SoC. 
-This also includes some devices without any Wifi functionality using this SOC.+This also includes some devices without any WiFi functionality using this SOC.
  
 === BCM4785/​BCM4705 === === BCM4785/​BCM4705 ===
Line 26: Line 37:
 The default images for Attitude Adjustment do not include the tg3 Ethernet driver. The default images for Attitude Adjustment do not include the tg3 Ethernet driver.
 Use the image builder (OpenWrt-ImageBuilder-brcm47xx-for-linux-i486.tar.bz2) to generate a image with Ethernet support. Use the image builder (OpenWrt-ImageBuilder-brcm47xx-for-linux-i486.tar.bz2) to generate a image with Ethernet support.
-The profile with b43 as the wifi driver is name Bcm4705-b43.+The profile with b43 as the WiFi driver is name Bcm4705-b43.
 <​code>​ <​code>​
 make image PROFILE="​Bcm4705-b43"​ make image PROFILE="​Bcm4705-b43"​
Line 38: Line 49:
 It contains support for all the SoC also supported by Attitude Adjustment and in addition also some most of the recent bcm47xx SoCs. It should at least boot of all the know MIPS based BCM47xx and BCM53xx based SoCs. It contains support for all the SoC also supported by Attitude Adjustment and in addition also some most of the recent bcm47xx SoCs. It should at least boot of all the know MIPS based BCM47xx and BCM53xx based SoCs.
  
-The default Barrier Breaker images are containing the b44, tg3 and bgmac Ethernet driver so Ethernet should work on all supported services without using the image builder. If you want to safe some space you could use the image builder to generate ​image better suiting your device.+The default Barrier Breaker images are containing the b44, tg3 and bgmac Ethernet driver so Ethernet should work on all supported services without using the image builder. If you want to save some space you could use the image builder to generate ​an image better suiting your device.
  
-===== Wifi drivers ​=====+===== Ethernet ​=====
  
-There are different Wifi drivers for the Broadcom ​Wifi cores found in the SoCs or the PCI(e) or USB connected Wifi chips on the boards. +New Broadcom ​devices have gigabit Ethernet that is supported by bgmac kernel ​driver. ​Unfortunately CPUs on most of SoCs are too slow to provide 1000 Mb/s routing or NAT. It results in NAT being limited to something around 130Mb/s on BCM4706 ​and even less on slower units (like ~50Mb/s on BCM4718A1).
-There is no driver ​supporting all chips and all have their pros and cons. +
-Some chips are supported by 3 of these drivers ​and others are supported by non of these drivers.+
  
-==== b43 ====+To solve this problem Broadcom developed proprietary ctf.ko module that watches in-system routing rules and implements NAT on it's own. It results in much better performance (even up to 850Mb/s on BCM4706) while breaking things like QoS and advanced firewall rules.
  
-b43 is the Open source driver ​build by the community based on reverse engineered specifications of the proprietary Broadcom driver. +Unfortunately ctf.ko is closed source and there is no open source alternative. For more details see: 
-This driver supports most on the current available Broadcom ​Wifi cores. +  * [[https://​lists.openwrt.org/​pipermail/​openwrt-devel/​2013-August/​020962.html|Ethernet performance for transfers between VLANs (bcm47xx)]] 
-It has support for station, AP, AdHoc, Mesh and other modes, but it just supports ​ieee80211g ​rates and does not support operating in the 5GHz band.+  * [[https://​lists.openwrt.org/​pipermail/​openwrt-devel/​2013-August/​021112.html|Understanding/​reimplementing forwarding acceleration used by Broadcom (ctf)]] 
 + 
 +===== WiFi drivers ===== 
 +There are different WiFi drivers for the Broadcom WiFi cores found in the BCM47xx SoCs or the PCI(e) or USB connected WiFi chips on the boards. There is no driver supporting all chips and all have their pros and cons. Some chips are supported by three of these drivers and others are supported by none of these drivers. 
 + 
 +:!: Do not activate multiple drivers at once. The first that is loaded takes precedence in that case so it is not easily controlled which one. Normally using other Linux distributions you would blacklist the other two drivers. In OpenWrt you can just make sure they are not installed using opkg, which automatically removes them from the ''/​etc/​modules.d/''​ directory. 
 + 
 +See also: 
 +  * http://​en.wikipedia.org/​wiki/​Comparison_of_open_source_wireless_drivers 
 +  * https://​wiki.archlinux.org/​index.php/​Broadcom_wireless 
 + 
 +==== b43 ==== 
 +This is the open source driver ​built by the community based on reverse engineered specifications of the proprietary Broadcom driver. ​This is the driver that is included in the current OpenWrt builds. It is also in the mainline Linux kernel. ​This driver supports most of the current available Broadcom ​WiFi cores. It has support for station ​(STA), AP, AdHoc, Mesh and other modes and it supports ​5 GHz band on N-PHY devices. It supports 802.11g ​rates only and can't handle multiple SSIDs.
  
 Website: http://​wireless.kernel.org/​en/​users/​Drivers/​b43 Website: http://​wireless.kernel.org/​en/​users/​Drivers/​b43
  
-==== b43legacy ====+The OpenWrt package is named: **kmod-b43**
  
 +==== b43legacy ==== 
 +/* is this normally referred to as bcm43xx then??? */
 This is for some very old ieee802.11b and first generation Broadcom ieee802.11g compatible devices. This is for some very old ieee802.11b and first generation Broadcom ieee802.11g compatible devices.
 This driver has a similar feature set to b43 and is only supported by the community based on reverse engineered specifications. This driver has a similar feature set to b43 and is only supported by the community based on reverse engineered specifications.
Line 61: Line 84:
 Website: http://​wireless.kernel.org/​en/​users/​Drivers/​b43 Website: http://​wireless.kernel.org/​en/​users/​Drivers/​b43
  
-==== brcmsmac ====+The OpenWrt package is named: **kmod-b43legacy**
  
-brcmsmac supports some recent soft mac ieee802.11n Broadcom ​wifi cores found on PCIe cards and in SoCs, for details see the website.+ 
 +==== brcm80211 ==== 
 +This is the open source driver supported and released by Broadcom in 2010. It is mainlined in the Linux kernel, but only since version 3.2. It is still missing some functionality,​ as of 2013: dual width 40MHz channels, advanced power saving features, LED support, HW-based encryption, among others. The driver has been renamed to its two constituents,​ the soft MAC driver (brcmsmac) and the full MAC driver (brcmfmac). 
 + 
 +Website: http://​wireless.kernel.org/​en/​users/​Drivers/​brcm80211 
 + 
 +=== brcmsmac === 
 +brcmsmac supports some recent soft mac ieee802.11n Broadcom ​WiFi cores found on PCIe cards and in SoCs, for details see the website.
 This driver is developed and supported by Broadcom. This driver is developed and supported by Broadcom.
 The current version only supports station mode, but there are patches in current OpenWrt trunk which are adding support for AP and Ad Hoc mode. The current version only supports station mode, but there are patches in current OpenWrt trunk which are adding support for AP and Ad Hoc mode.
 brcmsmac is capable of operation devices with ieee80211n rates and running the in the 5GHz band, but AP mode currently does not work in the 5GHz band. brcmsmac is capable of operation devices with ieee80211n rates and running the in the 5GHz band, but AP mode currently does not work in the 5GHz band.
  
-Websitehttp://​wireless.kernel.org/​en/​users/​Drivers/​brcm80211+The OpenWrt package is named**kmod-brcmsmac**
  
-==== brcmfmac ====+=== brcmfmac === 
 +brcmfmac supports some recent full mac ieee802.11n Broadcom WiFi cores found on USB, SDIO and SPI interfaces, for details see the website.
  
-brcmfmac ​supports some recent full mac ieee802.11n ​Broadcom ​wifi cores found on USBSDIO and SPI interfaces, for details see the website. +The OpenWrt package is named: **kmod-brcmfmac** 
-This driver is developed and supported by Broadcom.+ 
 +broadcom-wl is the proprietary closed source ​Broadcom ​STA (STAtionfor access point use) driverprepared especially ​for OpenWrtIt contains closed source binaries with few trivial open source files that allow it to be compiled against any kernel version.
  
-Website: http://​wireless.kernel.org/​en/​users/​Drivers/​brcm80211 
  
 ==== broadcom-wl ==== ==== broadcom-wl ====
 +broadcom-wl contains the proprietary closed source Broadcom driver. It contains closed source MIPS binaries with few trivial open source files that allow it to be compiled against any kernel version.
 +It's based on old Broadcom'​s sources (version 5.10.56.27.3) and supports many old 802.11g devices but very few 802.11n devices (BCM4716, BCM4717, BCM4718). It does not support new chipsets (BCM5356, BCM5357, BCM5358, BCM47186, BCM4331) or 802.11ac devices (BCM4352, BCM4360).
 +For old devices it often has more functionality than the brcm80211 drivers. For example, it supports 40 MHz channels and power saving features, which have been removed before releasing brcm80211. It is capable of operating in AP mode and also supports the 5 GHz band.
  
-broadcom-wl contains the proprietary closed source ​Broadcom driver. +In 2008 Broadcom ​released Linux STA driver ​and continued updating itJust like in case of OpenWrt driver, it contains some open source ​files, however binaries were pre-compiled ​for x86 and x86_64 onlySo despite providing support for more hardware it can't be integrated into OpenWrt because ​of lacking support for MIPS/​ARM ​and important features like AP mode.
-The closed ​source ​part was created especially ​for OpenWrt ​and is independed from the kernel version in use. +
-This driver supports many of the ieee802.11g devices ​and some of the earlier ieee802.11n devices. +
-It is capable of operating in AP mode and also supports the 5GHz band.+
  
 +Note that broadcom-wl doesn'​t use a standard cfg80211 API, so it can't be configured using standard nl80211 tools. This is why OpenWrt has an extra package providing ''​wlc''​ (user space tool that uses Broadcom'​s proprietary API) and ''​broadcom.sh''​ (that translates UCI config into ''​wlc''​ calls). You can also install ''​wl''​ binary that is closed source version of ''​wlc''​ written by Broadcom that may be helpful for some debugging. Remember that ''​broadcom.sh''​ may not handle all UCI options, please see [[doc/​uci/​wireless|the UCI wireless configuration page]] for the details. Some advanced functionality can by configured with the ''​wl''​ utility only. Beware that running ''​wifi''​ (to activate your UCI WiFi configuration file) will however restart the driver and you will lose your settings made by the utility.
 +
 +The OpenWrt package for the driver is named: **kmod-brcm-wl**\\
 +The OpenWrt package for the configuration utility is named: **wl**\\
 +The OpenWrt package for the open source variant of the configuration utility is named: **wlc**
 +
 +
 +== Setting up the broadcom-wl driver ==
 +After installing any wireless driver made for opkg and OpenWrt, new [[doc/​uci/​wireless‎|WiFi configuration entries]] in the ''/​etc/​config/​wireless''​ UCI file are available upon reboot. These are set by the OPKG driver maintainer. If they are not available, you can run ''​wifi detect''​ to acquire a sample configuration. For broadcom-wl (the kmod-brcm-wl package) the wireless interface is named ''​wl0''​. By far not everything can be set using UCI. Use the ''​wl''​ utility to set advanced settings. For example, to set the channel to 4, on the 2.4Ghz band, and with a bandwidth of 40Mhz using the lower band, use:
 +<​code>​
 +root@OpenWrt:​~#​ wl -i wl0 chanspec -c 4 -b 2 -w 40 -s -1
 +Chanspec set to 0x2b04
 +</​code>​
 +
 +Now reload the wifi configuration by:
 +
 +<​code>​
 +root@OpenWrt:​~#​ wl -i wl0 down
 +root@OpenWrt:​~#​ wl -i wl0 up
 +</​code>​
 +
 +You configure to run these settings at boot to make them stick. Please note that this method of WiFi configuration is rather low level and---going partly past the normal OpenWrt WiFi interface---there isn't any mechanism available to automatically choose the right channel for example. So you have to manually select the channel specification. If the above channel is too crowded in your area, set it for example to channel 9 using the upper sideband:
 +<​code>​
 +root@OpenWrt:​~#​ wl -i wl0 chanspec -c 9 -b 2 -w 40 -s 1
 +Chanspec set to 0x2e09
 +</​code>​
 +
 +In the future maybe the community will further integrate the proprietary Broadcom driver into the OpenWrt framework. What is more likely though is that the open source drivers (brcm80211) will obtain more functionality.
 +
 +If you want to use [[doc/​howto/​luci.essentials‎|LuCI]] to configure UCI configuration,​ note that not all functionality and features are currently well supported and do not correspond well to the driver functionality in the graphical interface. It may therefore sometimes call the driver configuration utility with unsupported arguments. ​
 +
 +For providing authentication and encryption with Wi-Fi and the broadcom-wl driver, you need the proprietary application from Broadcom, **nas** (Network Authentication Service). The tool is automatically started by the wireless infrastructure to accomodate the broadcom-wl driver. There is no configuration necessary, just install the package **nas**. See also [[doc/​uci/​wireless/​encryption]].
 +
 +An exmaple UCI configuration is as follows. Note that the hwmode option does not have to be given in which case the driver'​s default is used.
 +
 +<​code>​
 +config wifi-device '​wl0'​
 + option type '​broadcom'​
 + option disabled '​0'​
 + option channel '​4'​
 + option txpower '​16'​
 +
 +config wifi-iface
 + option device '​wl0'​
 + option network '​lan'​
 + option ssid '​OpenWrt'​
 + option key '​passphrase'​
 + option mode '​ap'​
 + option encryption '​psk2'​
 +
 +</​code>​
 +
 +|{{:​meta:​icons:​tango:​48px-dialog-warning.svg.png?​nolink&​24}} | Broadcom devices may use two different buses for its wireless drivers: \\ - SSB (Sonic Silicon Backplane), bus used by older devices \\ - BCMA ([[wp>​Advanced Micro-controller Bus Architecture|AMBA]]),​ bus developed by Broadcom; shall replace SSB (see also [[https://​github.com/​hanshuebner/​linux-xlnx/​tree/​master/​drivers/​bcma|here]]) \\ The **b43** driver supports both SSB and BCMA-chips. However, **brcm80211** (brcmSmac & brcmFmac) does not and will not support any chips which contain the SSB. Therefore, older devices may be unsupported by the newer open source drivers. See also this patch [[http://​git.kernel.org/​cgit/​linux/​kernel/​git/​torvalds/​linux.git/​commit/?​id=314878d246955e0c6fff95d8ae64285fe828c785|Patch for 3.11]]|
  
 ===== Sysupgrade ===== ===== Sysupgrade =====
Line 93: Line 177:
 ==== Network boot ==== ==== Network boot ====
  
-Most of the recent devices have a CFE bootloader able to boot images over the network.+Most of the recent devices have a [[doc:​techref:​bootloader:​CFE]] bootloader able to boot images over the network.
  
 To build an image bootable over the network select the following: To build an image bootable over the network select the following:
Line 100: Line 184:
  
 The following example boots an elf image from the tftp server at 192.168.1.2 under the path /​brcm47xx/​openwrt-brcm47xx-vmlinux.elf:​ The following example boots an elf image from the tftp server at 192.168.1.2 under the path /​brcm47xx/​openwrt-brcm47xx-vmlinux.elf:​
-<​code>​+<​code ​bash>
 boot -tftp -elf 192.168.1.2:/​brcm47xx/​openwrt-brcm47xx-vmlinux.elf boot -tftp -elf 192.168.1.2:/​brcm47xx/​openwrt-brcm47xx-vmlinux.elf
 </​code>​ </​code>​
 +===== BCM4704 JTAG pinout ===== 
 +{{:​media:​doc:​hardware:​bcm4704_jtag_pinout.png?​400|}}
 ===== Links ===== ===== Links =====
 List with some detailed informations about bcm47xx SoCs: List with some detailed informations about bcm47xx SoCs:
 http://​wireless.kernel.org/​en/​users/​Drivers/​b43/​soc http://​wireless.kernel.org/​en/​users/​Drivers/​b43/​soc
 +[[doc/​techref/​header]]
  
 ===== Tags ===== ===== Tags =====
-{{tag>​bcm47xx bcm4704 bcm4705 bcm4706 ​bcm4718 ​bcm4716 bcm47162 bcm5354 bcm5357 }}+{{tag>​bcm47xx ​bcm4702 ​bcm4704 bcm4705 bcm4706 ​bcm4708 ​bcm4716 ​bcm4717 bcm4718 ​bcm47162 ​bcm47186}} 
 +{{tag>​bcm53xx bcm5352 ​bcm5354 bcm5357 ​bcm5358 bcm5836}}
doc/hardware/soc/soc.broadcom.bcm47xx.1364139296.txt.bz2 · Last modified: 2013/03/24 16:34 by hauke