Re: [PATCH] net: ethernet: pcnet32: Setup the SRAM and NOUFLO on Am79C97{3,5}

2015-03-19 Thread Markos Chandras
Hi Don,

On Wed, Mar 18, 2015 at 07:07:34PM -0700, Don Fry wrote:
> One little change to the comment is needed.  See below
> 
> Don
> 
> On Wed, 2015-03-18 at 20:10 +, Markos Chandras wrote:
> > +   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
> > +* corresponds 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 0x
> > +* up to 0x17ff. Therefore, the SRAM_SIZE is set to 0x17.
> > +* The next step is to set the BCR24:SRAM_BND midway through
> > +* so the Tx and Rx buffers can share the SRAM equally.
> > +*/
> 
> The comment specifies BCR24 but the code is changing BCR26 which matches
> the documentation.  Please correct the comment to avoid confusion.
> 

Ah good catch. I will fix it and send a v2.

-- 
markos
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] net: ethernet: pcnet32: Setup the SRAM and NOUFLO on Am79C97{3,5}

2015-03-19 Thread Markos Chandras
Hi Don,

On Wed, Mar 18, 2015 at 07:07:34PM -0700, Don Fry wrote:
 One little change to the comment is needed.  See below
 
 Don
 
 On Wed, 2015-03-18 at 20:10 +, Markos Chandras wrote:
  +   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
  +* corresponds 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 0x
  +* up to 0x17ff. Therefore, the SRAM_SIZE is set to 0x17.
  +* The next step is to set the BCR24:SRAM_BND midway through
  +* so the Tx and Rx buffers can share the SRAM equally.
  +*/
 
 The comment specifies BCR24 but the code is changing BCR26 which matches
 the documentation.  Please correct the comment to avoid confusion.
 

Ah good catch. I will fix it and send a v2.

-- 
markos
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] net: ethernet: pcnet32: Setup the SRAM and NOUFLO on Am79C97{3,5}

2015-03-18 Thread Don Fry
One little change to the comment is needed.  See below

Don

On Wed, 2015-03-18 at 20:10 +, Markos Chandras wrote:
> 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.

> + /*
> +  * 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
> +  * corresponds 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 0x
> +  * up to 0x17ff. Therefore, the SRAM_SIZE is set to 0x17.
> +  * The next step is to set the BCR24:SRAM_BND midway through
> +  * so the Tx and Rx buffers can share the SRAM equally.
> +  */

The comment specifies BCR24 but the code is changing BCR26 which matches
the documentation.  Please correct the comment to avoid confusion.

> + a->write_bcr(ioaddr, 25, 0x17);
> + a->write_bcr(ioaddr, 26, 0xc);
> + /* And finally enable the NOUFLO bit */


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] net: ethernet: pcnet32: Setup the SRAM and NOUFLO on Am79C97{3,5}

2015-03-18 Thread Markos Chandras
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.

Cc: 
Cc: 
Cc: 
Cc: Don Fry 
Signed-off-by: Markos Chandras 
---
 drivers/net/ethernet/amd/pcnet32.c | 31 +--
 1 file changed, 29 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/amd/pcnet32.c 
b/drivers/net/ethernet/amd/pcnet32.c
index 11d6e6561df1..7fb099f0c631 100644
--- a/drivers/net/ethernet/amd/pcnet32.c
+++ b/drivers/net/ethernet/amd/pcnet32.c
@@ -1543,7 +1543,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct 
pci_dev *pdev)
 {
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;
@@ -1580,7 +1580,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct 
pci_dev *pdev)
}
 
/* initialize variables */
-   fdx = mii = fset = dxsuflo = 0;
+   fdx = mii = fset = dxsuflo = sram = 0;
chip_version = (chip_version >> 12) & 0x;
 
switch (chip_version) {
@@ -1613,6 +1613,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct 
pci_dev *pdev)
chipname = "PCnet/FAST III 79C973"; /* PCI */
fdx = 1;
mii = 1;
+   sram = 1;
break;
case 0x2626:
chipname = "PCnet/Home 79C978"; /* PCI */
@@ -1636,6 +1637,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct 
pci_dev *pdev)
chipname = "PCnet/FAST III 79C975"; /* PCI */
fdx = 1;
mii = 1;
+   sram = 1;
break;
case 0x2628:
chipname = "PCnet/PRO 79C976";
@@ -1664,6 +1666,31 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct 
pci_dev *pdev)
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
+* corresponds 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 0x
+* up to 0x17ff. Therefore, the SRAM_SIZE is set to 0x17.
+* The next step is to set the BCR24: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;
-- 
2.3.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] net: ethernet: pcnet32: Setup the SRAM and NOUFLO on Am79C97{3,5}

2015-03-18 Thread Don Fry
One little change to the comment is needed.  See below

Don

On Wed, 2015-03-18 at 20:10 +, Markos Chandras wrote:
 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.

 + /*
 +  * 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
 +  * corresponds 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 0x
 +  * up to 0x17ff. Therefore, the SRAM_SIZE is set to 0x17.
 +  * The next step is to set the BCR24:SRAM_BND midway through
 +  * so the Tx and Rx buffers can share the SRAM equally.
 +  */

The comment specifies BCR24 but the code is changing BCR26 which matches
the documentation.  Please correct the comment to avoid confusion.

 + a-write_bcr(ioaddr, 25, 0x17);
 + a-write_bcr(ioaddr, 26, 0xc);
 + /* And finally enable the NOUFLO bit */


--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] net: ethernet: pcnet32: Setup the SRAM and NOUFLO on Am79C97{3,5}

2015-03-18 Thread Markos Chandras
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.

Cc: net...@vger.kernel.org
Cc: sta...@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: Don Fry pcne...@frontier.com
Signed-off-by: Markos Chandras markos.chand...@imgtec.com
---
 drivers/net/ethernet/amd/pcnet32.c | 31 +--
 1 file changed, 29 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/amd/pcnet32.c 
b/drivers/net/ethernet/amd/pcnet32.c
index 11d6e6561df1..7fb099f0c631 100644
--- a/drivers/net/ethernet/amd/pcnet32.c
+++ b/drivers/net/ethernet/amd/pcnet32.c
@@ -1543,7 +1543,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct 
pci_dev *pdev)
 {
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;
@@ -1580,7 +1580,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct 
pci_dev *pdev)
}
 
/* initialize variables */
-   fdx = mii = fset = dxsuflo = 0;
+   fdx = mii = fset = dxsuflo = sram = 0;
chip_version = (chip_version  12)  0x;
 
switch (chip_version) {
@@ -1613,6 +1613,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct 
pci_dev *pdev)
chipname = PCnet/FAST III 79C973; /* PCI */
fdx = 1;
mii = 1;
+   sram = 1;
break;
case 0x2626:
chipname = PCnet/Home 79C978; /* PCI */
@@ -1636,6 +1637,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct 
pci_dev *pdev)
chipname = PCnet/FAST III 79C975; /* PCI */
fdx = 1;
mii = 1;
+   sram = 1;
break;
case 0x2628:
chipname = PCnet/PRO 79C976;
@@ -1664,6 +1666,31 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct 
pci_dev *pdev)
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
+* corresponds 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 0x
+* up to 0x17ff. Therefore, the SRAM_SIZE is set to 0x17.
+* The next step is to set the BCR24: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;
-- 
2.3.3

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/