Browse Source

[pcnet32] Eliminate redundant register read

The value of ( ( x & 0x0c00 ) | 0x0c00 ) is always 0x0c00 regardless
of the value of x, and so the read_csr() is redundant.  (There are no
read side effects for this register, according to the datasheet.)

This line of code originated in Linux kernel 2.3.19pre1 as

  a->write_csr(ioaddr, 80, a->read_csr(ioaddr, 80) | 0x0c00);

and was modified in kernel 2.3.41pre4 to read

  a->write_csr(ioaddr, 80, (a->read_csr(ioaddr, 80) & 0x0C00) | 0x0c00);

In the absence of commit messages, the intention of the code is
unclear.  However, the logic resulting in a fixed value of 0x0c00 has
remained unaltered for over 17 years, and can probably be assumed to
have the correct overall result.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 7 years ago
parent
commit
19d3e966d9
1 changed files with 1 additions and 2 deletions
  1. 1
    2
      src/drivers/net/pcnet32.c

+ 1
- 2
src/drivers/net/pcnet32.c View File

@@ -414,8 +414,7 @@ pcnet32_chip_detect ( struct pcnet32_private *priv )
414 414
 	if (fset) {
415 415
 		a->write_bcr ( ioaddr, 18,
416 416
 			( a->read_bcr ( ioaddr, 18 ) | 0x0860 ) );
417
-		a->write_csr ( ioaddr, 80,
418
-			( a->read_csr ( ioaddr, 80 ) & 0x0C00) | 0x0C00 );
417
+		a->write_csr ( ioaddr, 80, 0x0c00 );
419 418
 	}
420 419
 
421 420
 	priv->full_duplex = fdx;

Loading…
Cancel
Save