Module Name: src Committed By: bouyer Date: Sat Sep 7 16:39:32 UTC 2013
Modified Files: src/share/man/man4 [netbsd-6]: bge.4 src/sys/dev/mii [netbsd-6]: brgphy.c miidevs miivar.h src/sys/dev/pci [netbsd-6]: if_bge.c if_bgereg.h if_bgevar.h pcidevs Log Message: sys/dev/pci/if_bge.c 1.203-1.237, 1.239-1.241, 1.243-1.258 via patch sys/dev/pci/if_bgereg.h 1.58-1.74, 1.76-1.83 via patch sys/dev/pci/if_bgevar.h 1.10-1.16 via patch sys/dev/pci/pcidevs 1.1149 via patch sys/dev/pci/pcidevs.h regen sys/dev/pci/pcidevs_data.h regen sys/dev/mii/brgphy.c 1.61-1.63, 1.65, 1.67 via patch sys/dev/mii/miivar.h 1.61 via patch sys/dev/mii/miidevs 1.112-1.113 via patch sys/dev/mii/miidevs.h regen sys/dev/mii/miidevs_data.h regen share/man/man4/bge.4 1.13-1.15 via patch Add some device support, fix a lot of bugs and add some enahcements. - Add Altima AC1003, APPLE BCM5701, Broadcom BCM5785F, BCM5785G, BCM5787F, BCM5719, BCM5720, BCM57766, BCM57782 and BCM57786. - brgphy(4): Add BCM5756, BCM5717C, BCM5719C, BCM5720C and BCM57780. - Add some bugfixes and enhancement from FreeBSD: - Workaround for BCM5906 silicon bug. When auto-negotiation results in half-duplex operation, excess collision on the ethernet link may cause internal chip delays that may result in subsequent valid frames being dropped due to insufficient receive buffer resources. (FreeBSD: r214219, r214251, r214292) - Allow write DMA to request larger DMA burst size to get better performance on BCM5785. (FreeBSD r213333: OpenBSD 1.294) - Enable TX MAC state machine lockup fix for both BCM5755 or higher and BCM5906. Publicly available data sheet just says it may happen due to corrupted TxMbuf. (FreeBSD r214216) - Follow Broadcom datasheet: Delay 100 microseconds after enabling transmit MAC. Delay 10 microseconds after enabling receive MAC. (FreeBSD r241220) - Insert the completion barrier between register write and the consecutive delay(). It will fix some device timeout problems we have seen before. - Add DELAY(40) after turning on write DMA state machine. - Add some workarounds for 5717 A0 and 5776[56] to be stable. From Linux tg3 driver. - Sync with *BSD. No functional change: - make bge_chipid() and use it. - use switch() instead of a lot of if()s. - Check BGE_RXBDFLAG_IPV6 flag for 5717_PLUS case. Note that {tcp,udp}6csum flag is currently not added in the capability. - Add delay after clearing BGE_MACMODE_TBI_SEND_CFGS for the link checking. FreeBSD has the same delay(). - Rename PHY related flags for the consistency. It's the same as FreeBSD. - Remove BGE_10_100_ONLY flag because this was not used. For 10/100 devices, when calling mii_attach(), mask BMSR_EXTSTAT flag to not to check Gigabit flags. It's the same as FreeBSD. - In brgphyattach(), set sc_isbge, sc_isbnx and sc_phyflags before PHY_RESET() because brgphy_reset() refers those flags. - Call brgpy specific autonego function in MII_TICK. Before this commit, only MII_MEDIACHG calls brgphy_mii_phy_auto() and MII_TICK calls MI mii_phy_auto(). That was not intended. - Sync with FreeBSD and OpenBSD. Almost the same as OpenBSD rev. 1.325: - Sync the ring setup code closer to FreeBSD's driver - Do not touch the jumbo replenish threshold register on chips that do not have jumbo support - Wait for the bootcode to complete initialization for 5717 and newer devices. See BCM5718 programmer's guide's "step 13, Device reset Procedure, Section7". 57781's document has the same note. - 5718 and 57785 document say we should wait 100us. - Change the order of register settings a little to match both Broadcom's document and Linux tg3. - Add detach function. - Fix a bug that chips which have BCM5906 ASIC touch GPIO wrongly. - Fix a bug that the NVRAM lock timeout occured on sparc64 onboard bge. - Check BGE_SGDIG_STS when the chip is NOT a 5717 A0, like freebsd (OpenBSD rev. 1.327). - Fix the setting of Tx Random Backoff Register. - Add BGE_PCIMISCCTL_PCISTATE_RW in BGE_INIT. It's required to set the PCISTATE register correctly. - Update comments from 57XX-PG105-R.pdf and 5718-PG106-R.pdf. - Add missing bus_dmamap_sync() in bge_intr(). The status word is in DMAed area. Same as other *BSDs. - Check the hardware config words and print them. This change only read them and print the values. - Set BGE_MISC_CTL's byte/word swap options before using bge_readmem_ind(). - For BGE_IS_575X_PLUS() devices, don't set BGE_RXLPSTATCONTROL_DACK_FIX bits because these bits are reserved. - bge_init_tx_ring() uses BGE_RSLOTS (==256) but bge_free_tx_ring() uses BGE_TX_RING_CNT (== 512). Delete BGE_RSLOTS and use BGE_TX_RING_CNT. Same as OpenBSD's if_bge.c rev. 1.86. - Document says 5717 and newer chips have no BGE_PCISTATE_INTR_NOT_ACTIVE bit, so don't use the bit on those chips. Same as OpenBSD. - Fix a bug that the PHY address bits in MI_MODE register is wrongly cleard. Set the PHY address correctly. - Use BGE_SETBIT() instead of CSR_WRITE_4() for the BGE_MISC_LOCAL_CTL register to not to modify some GPIO bits. - Call bge_poll_fw() before writing BGE_MODE_CTL register like the latest linux tg3 dirver. - Set DMA watermark depend on the PCI max payload size. - Add BGE_JUMBO_CAPABLE flag to some chips. With this commit, 5714, 5780, 5717, 5718, 5719 (exclude rev. A0), 5720, 57765 and 57766 are added to support jumbo frame. - Fix the setting of sc->bge_flags for 5717 and newer devices. - Fix a link detect bug on non-autopoll systems. Same as OpenBSD (rev.1.329 and 1.336) and FreeBSD (r213710). - 57765 series is not based on 5717 series. 5717 series is based on 57765 series. - Set the TX DMA segment size based on the MTU size. - Change the TX ring size for 5717 series and 57764 series. - For 57766, set BGE_RDMAMODE_JMB_2K_MMRR for non-jumbo frame. Same as Linux tg3. - For 57765 and newer devices, set BGE_MAX_RX_FRAME_LOWAT to 1. This value is recommended by the document. - Change sysctl related functions for consistency. - Style change. - Use macro. Remove duplicated macro. Remove unused variable. - Fix comments. Add comments. - Remove extra semicolon. Remove unused code. [msaitoh, ticket #939] To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.12.10.1 src/share/man/man4/bge.4 cvs rdiff -u -r1.59.8.1 -r1.59.8.2 src/sys/dev/mii/brgphy.c cvs rdiff -u -r1.105.4.1 -r1.105.4.2 src/sys/dev/mii/miidevs cvs rdiff -u -r1.59 -r1.59.14.1 src/sys/dev/mii/miivar.h cvs rdiff -u -r1.200.2.1 -r1.200.2.2 src/sys/dev/pci/if_bge.c cvs rdiff -u -r1.56.18.1 -r1.56.18.2 src/sys/dev/pci/if_bgereg.h cvs rdiff -u -r1.9 -r1.9.2.1 src/sys/dev/pci/if_bgevar.h cvs rdiff -u -r1.1102.2.12 -r1.1102.2.13 src/sys/dev/pci/pcidevs Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.