- 24 7月, 2008 3 次提交
-
-
由 Lennert Buytenhek 提交于
The mv643xx_eth driver allows doing transmit reclaim from within the napi poll routine, but after doing reclaim, it would forget to check the free transmit descriptor count and wake up the transmit queue if the reclaim caused enough descriptors for a new packet to become available. This would cause the netdev watchdog to occasionally kick in during certain workloads with combined receive and transmit traffic. Fix this by adding a wakeup check identical to the one in the interrupt handler to the napi poll routine. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
-
由 Lennert Buytenhek 提交于
When the ethernet link goes down while mv643xx_eth is transmitting data, transmit DMA can stop before all queued transmit descriptors have been processed. But even the descriptors that _have_ been processed might not be properly marked as done before the transmit DMA unit shuts down. Then when the link comes up again, the hardware transmit pointer might have advanced while not all previous packet descriptors have been marked as transmitted, causing software transmit reclaim to hang waiting for the hardware to finish transmitting a descriptor that it has already skipped. This patch forcibly reclaims all packets on the transmit ring on a link down interrupt, and then resyncs the hardware transmit pointer to what the software's idea of the first free descriptor is. Also, we need to prevent re-waking the transmit queue if we get a 'transmit done' interrupt at the same time as a 'link down' interrupt, which this patch does as well. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
-
由 Lennert Buytenhek 提交于
The previously merged TX hang erratum workaround ("mv643xx_eth: work around TX hang hardware issue") assumes that TX_END interrupts are delivered simultaneously with or after their corresponding TX interrupts, but this is not always true in practise. In particular, it appears that TX_END interrupts are issued as soon as descriptor fetch returns an invalid descriptor, which may happen before earlier descriptors have been fully transmitted and written back to memory as being done. This hardware behavior can lead to a situation where the current driver code mistakenly assumes that the MAC has given up transmitting before noticing the packets that it is in fact still currently working on, causing the driver to re-kick the transmit queue, which will only cause the MAC to re-fetch the invalid head descriptor, and generate another TX_END interrupt, et cetera, until the packets in the pipe finally finish transmitting and have their descriptors written back to memory, which will then finally break the loop. Fix this by having the erratum workaround not check the 'number of unfinished descriptor', but instead, to compare the software's idea of what the head descriptor pointer should be to the hardware's head descriptor pointer (which is updated on the same conditions as the TX_END interupt is generated on, i.e. possibly before all previous descriptors have been transmitted and written back). Signed-off-by: NLennert Buytenhek <buytenh@marvell.com>
-
- 23 7月, 2008 1 次提交
-
-
由 Lennert Buytenhek 提交于
Joseph Fannin <jfannin@gmail.com> and Takashi Iwai <tiwai@suse.de> noticed that commit 073a345c ("mv643xx_eth: clarify irq masking and unmasking") broke the mv643xx_eth build when NETPOLL is enabled, due to it not renaming one instance of INT_CAUSE_EXT in mv643xx_eth_netpoll(). This patch takes care of that instance as well. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Cc: Dale Farnsworth <dale@farnsworth.org> Cc: Joseph Fannin <jfannin@gmail.com> Cc: Takashi Iwai <tiwai@suse.de> Signed-off-by: NJeff Garzik <jgarzik@redhat.com>
-
- 12 6月, 2008 36 次提交
-
-
由 Lennert Buytenhek 提交于
Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
On some boards, the mv643xx_eth MAC isn't connected to a PHY but directly (via the MII/GMII/RGMII interface) to another MAC-layer device. This patch allows specifying ->phy_addr = -1 to skip all PHY-related initialisation and run-time poking in that case. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
During OOM, instead of stopping RX refill when the rx desc ring is not empty, keep trying to refill the ring as long as it is not full instead. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Some SoCs have the TX bandwidth control registers in a slightly different place. This patch detects that case at run time, and re-directs accesses to those registers to the proper place at run time if needed. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Newer hardware has a 16-bit instead of a 14-bit RX coalescing count field in the SDMA_CONFIG register. This patch adds a run-time check for which of the two we have, and adjusts further writes to the rx coal count field accordingly. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Under some conditions, the TXQ ('TX queue being served') bit can clear before all packets queued for that TX queue have been transmitted. This patch enables TXend interrupts, and uses those to re-kick TX queues that claim to be idle but still have queued descriptors from the interrupt handler. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
As with the multiple RX queue support, allow the platform code to specify that the hardware we are running on supports multiple TX queues. This patch only uses the highest-numbered enabled queue to send packets to for now, this can be extended later to enable QoS and such. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Allow the platform code to specify that we are running on hardware that is capable of supporting multiple RX queues. If this option is used, initialise all of the given RX queues instead of just RX queue zero. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Add an interface for the hardware's per-port and per-subqueue TX rate control. In this stage, this is mainly so that we can disable the bandwidth limits during initialisation of the port. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
General cleanup of the mv643xx_eth driver. Mainly fixes coding style / indentation issues, get rid of some useless 'volatile's, kill some more superfluous comments, and such. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Remove the write-only ->[rt]x_int_coal members from struct mv643xx_eth_private. In the process, tweak the RX/TX interrupt mitigation code so that it is compiled by default, and set the default coalescing delays to 0 usec. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Split all TX queue related state into 'struct tx_queue', in preparation for multiple TX queue support. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Split all RX queue related state into 'struct rx_queue', in preparation for multiple RX queue support. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Replace the 70-line crc8 computation (used for multicast address filtering tables) by a 5-line version. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
The per-port mv643xx_eth_private struct had a private instance of struct net_device_stats that was never ever written to, only read (via the ethtool statistics interface). This patch gets rid of the private instance, and tweaks the ethtool statistics code in mv643xx_eth to use the statistics in struct net_device instead. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Since they are no longer used, kill enum FUNC_RET_STATUS and struct pkt_info (which were a rather roundabout way of communicating RX/TX status within the same driver). Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
rx_return_buff() is also a remnant of the HAL layering that the original mv643xx_eth driver used. Moving it into its caller kills the last reference to FUNC_RET_STATUS/pkt_info. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
The port_receive() function is a remnant of the original mv643xx_eth HAL split. This patch moves port_receive() into its caller, so that the top and the bottom half of RX processing no longer communicate via the HAL FUNC_RET_STATUS/pkt_info mechanism abstraction anymore. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Nuke some Hungarian-esque variable naming conventions: - p_ prefix for pointers - _q suffix for variables dealing with rx/tx queue state Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
The ->rx_resource_err variable doesn't serve a useful purpose -- kill it. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Half of the functions in the mv643xx_eth driver are prefixed by useless and baroque comment blocks on _what_ those functions do (which is obvious from the code itself) rather than why, and there's no point in keeping those comments around. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
A bunch of places in the mv643xx_eth driver use the 'mv643xx_' prefix. Since the mv643xx is a chip that includes more than just ethernet, this patch makes all those places use either no prefix (for some internal-use-only functions), or the full 'mv643xx_eth_' prefix. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
The fact that mv643xx_eth is an ethernet driver is pretty obvious, and having a lot of internal-use-only functions and defines prefixed with ETH_/ethernet_/eth_ prefixes is rather pointless. So, get rid of most of those prefixes. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Remove the unused rx/tx descriptor field defines, and move the ones that are actually used to the actual definitions of the rx/tx descriptor format. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
All except one of the port serial status register bit defines are unused -- kill the unused ones. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
The only user of the ETH_MIB_VERY_LONG_NAME_HERE defines is the eth_update_mib_counters() function. Get rid of the defines by open-coding the register offsets in the latter. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Get rid of RX_BUF_OFFSET (which is synonymous with ETH_HW_IP_ALIGN). Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Replace the nondescriptive names ETH_INT_UNMASK_ALL and ETH_INT_UNMASK_ALL_EXT by names of the actual fields being masked and unmasked in the various writes to the interrupt mask registers. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
None of the port status register bit defines are ever used in the mv643xx_eth driver -- nuke them all. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Over half of the port serial control register bit defines are never used, and the PORT_SERIAL_CONTROL_DEFAULT_VALUE define is never used either. Keep only those defines that are actually used. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Delete the defines for SDMA config register bit values that are never used in the driver, to tidy up the code some more. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
The port config extend register is never changed at run time. Document the meaning of the initial value, and delete the defines for the individual bits in this register. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
The mv643xx_eth driver only ever changes bit 0 of the port config register at run time, the rest of the register bits are fixed (and always zero). Document the meaning of the chosen default value, and get rid of all the defines for each of the individual bits. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-
由 Lennert Buytenhek 提交于
Shorten the various oversized register names in mv643xx_eth.c, to increase readability. Signed-off-by: NLennert Buytenhek <buytenh@marvell.com> Acked-by: NDale Farnsworth <dale@farnsworth.org>
-