Skip to content

Commit

Permalink
r8169: prevent bit sign expansion error in mdio_write
Browse files Browse the repository at this point in the history
Oops.

The current code does not like being given an u16 with the highest
bit set as an argument to mdio_write. Let's enforce a correct range of
values for both the register address and value (resp. 5 and 16 bits).

The callers are currently left as-is.

Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
Cc: Edward Hsu <edward_hsu@realtek.com.tw>
  • Loading branch information
Francois Romieu authored and Jeff Garzik committed Nov 10, 2007
1 parent 50d84c2 commit a6baf3a
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions drivers/net/r8169.c
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,7 @@ static void mdio_write(void __iomem *ioaddr, int reg_addr, int value)
{
int i;

RTL_W32(PHYAR, 0x80000000 | (reg_addr & 0xFF) << 16 | value);
RTL_W32(PHYAR, 0x80000000 | (reg_addr & 0x1f) << 16 | (value & 0xffff));

for (i = 20; i > 0; i--) {
/*
Expand All @@ -487,15 +487,15 @@ static int mdio_read(void __iomem *ioaddr, int reg_addr)
{
int i, value = -1;

RTL_W32(PHYAR, 0x0 | (reg_addr & 0xFF) << 16);
RTL_W32(PHYAR, 0x0 | (reg_addr & 0x1f) << 16);

for (i = 20; i > 0; i--) {
/*
* Check if the RTL8169 has completed retrieving data from
* the specified MII register.
*/
if (RTL_R32(PHYAR) & 0x80000000) {
value = (int) (RTL_R32(PHYAR) & 0xFFFF);
value = RTL_R32(PHYAR) & 0xffff;
break;
}
udelay(25);
Expand Down

0 comments on commit a6baf3a

Please sign in to comment.