]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
bgmac: stop clearing DMA receive control register right after it is set
authorAndy Gospodarek <gospo@broadcom.com>
Mon, 31 Oct 2016 17:32:03 +0000 (13:32 -0400)
committerBen Hutchings <ben@decadent.org.uk>
Thu, 23 Feb 2017 03:54:27 +0000 (03:54 +0000)
commit50ef5ffed9e40be91ea5a6ad4bc94bb1dad09199
tree17e088f38bde53a3cf8fffd7090d870a85230f27
parentc3f5d4495036a94aebe4ba4ffed9fc3705ef9571
bgmac: stop clearing DMA receive control register right after it is set

commit fcdefccac976ee51dd6071832b842d8fb41c479c upstream.

Current bgmac code initializes some DMA settings in the receive control
register for some hardware and then immediately clears those settings.
Not clearing those settings results in ~420Mbps *improvement* in
throughput; this system can now receive frames at line-rate on Broadcom
5871x hardware compared to ~520Mbps today.  I also tested a few other
values but found there to be no discernible difference in CPU
utilization even if burst size and prefetching values are different.

On the hardware tested there was no need to keep the code that cleared
all but bits 16-17, but since there is a wide variety of hardware that
used this driver (I did not look at all hardware docs for hardware using
this IP block), I find it wise to move this call up and clear bits just
after reading the default value from the hardware rather than completely
removing it.

This is a good candidate for -stable >=3.14 since that is when the code
that was supposed to improve performance (but did not) was introduced.

Signed-off-by: Andy Gospodarek <gospo@broadcom.com>
Fixes: 56ceecde1f29 ("bgmac: initialize the DMA controller of core...")
Cc: Hauke Mehrtens <hauke@hauke-m.de>
Acked-by: Hauke Mehrtens <hauke@hauke-m.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
[bwh: Backported to 3.16: adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/net/ethernet/broadcom/bgmac.c