Patch "net: ethernet: pcnet32: Setup the SRAM and NOUFLO on Am79C97{3, 5}" has been added to the 3.14-stable tree
Subsystems (4)
This is a note to let you know that I've just added the patch titled
net: ethernet: pcnet32: Setup the SRAM and NOUFLO on Am79C97{3, 5}to the 3.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
net-ethernet-pcnet32-setup-the-sram-and-nouflo-on-am79c97-3-5.patch
and it can be found in the queue-3.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
87f966d97b89774162df04d2106c6350c8fe4cb3Mon Sep 17 00:00:00 2001
From: Markos Chandras <[email protected]>
Date: Thu, 19 Mar 2015 10:28:14 +0000
Subject: net: ethernet: pcnet32: Setup the SRAM and NOUFLO on Am79C97{3, 5}
From: Markos Chandras <[email protected]>
commit 87f966d97b89774162df04d2106c6350c8fe4cb3 upstream.
On a MIPS Malta board, tons of fifo underflow errors have been observed when using u-boot as bootloader instead of YAMON. The reason for that is that YAMON used to set the pcnet device to SRAM mode but u-boot does not. As a result, the default Tx threshold (64 bytes) is now too small to keep the fifo relatively used and it can result to Tx fifo underflow errors. As a result of which, it's best to setup the SRAM on supported controllers so we can always use the NOUFLO bit.
--- drivers/net/ethernet/amd/pcnet32.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-)
drivers/net/ethernet/amd/pcnet32.c +29 -2
@@ -1516,7 +1516,7 @@ pcnet32_probe1(unsigned long ioaddr, int {struct pcnet32_private *lp;int i, media; -int fdx, mii, fset, dxsuflo; +int fdx, mii, fset, dxsuflo, sram;int chip_version;char *chipname;struct net_device *dev;
@@ -1553,7 +1553,7 @@ pcnet32_probe1(unsigned long ioaddr, int }/* initialize variables */ - fdx = mii = fset = dxsuflo =0 ; + fdx = mii = fset = dxsuflo = sram =0 ; chip_version = (chip_version >>12 ) &0xffff ;switch (chip_version) {
@@ -1586,6 +1586,7 @@ pcnet32_probe1(unsigned long ioaddr, int chipname ="PCnet/FAST III 79C973" ;/* PCI */ fdx =1 ; mii =1 ; + sram =1 ;break ;case 0x2626 : chipname ="PCnet/Home 79C978" ;/* PCI */
@@ -1609,6 +1610,7 @@ pcnet32_probe1(unsigned long ioaddr, int chipname ="PCnet/FAST III 79C975" ;/* PCI */ fdx =1 ; mii =1 ; + sram =1 ;break ;case 0x2628 : chipname ="PCnet/PRO 79C976" ;
@@ -1637,6 +1639,31 @@ pcnet32_probe1(unsigned long ioaddr, int dxsuflo =1 ; } +/* +* The Am79C973/Am79C975 controllers come with 12K of SRAM +* which we can use for the Tx/Rx buffers but most importantly, +* the use of SRAM allow us to use the BCR18:NOUFLO bit to avoid +* Tx fifo underflows. +*/ +if (sram) { +/* +* The SRAM is being configured in two steps. First we +* set the SRAM size in the BCR25:SRAM_SIZE bits. According +* to the datasheet, each bit corresponds to a 512-byte +* page so we can have at most 24 pages. The SRAM_SIZE +* holds the value of the upper 8 bits of the 16-bit SRAM size. +* The low 8-bits start at 0x00 and end at 0xff. So the +* address range is from 0x0000 up to 0x17ff. Therefore, +* the SRAM_SIZE is set to 0x17. The next step is to set +* the BCR26:SRAM_BND midway through so the Tx and Rx +* buffers can share the SRAM equally. +*/ + a->write_bcr (ioaddr,25 ,0x17 ); + a->write_bcr (ioaddr,26 ,0xc ); +/* And finally enable the NOUFLO bit */ + a->write_bcr (ioaddr,18 , a->read_bcr (ioaddr,18 ) | (1 <<11 )); + } + dev =alloc_etherdev (sizeof (*lp));if (!dev) { ret = -ENOMEM ;
Patches currently in stable-queue which might be from [email protected] are
queue-3.14/net-ethernet-pcnet32-setup-the-sram-and-nouflo-on-am79c97-3-5.patch