From: Michael Brown Date: Thu, 23 Aug 2012 11:38:37 +0000 (+0100) Subject: [realtek] Use read-modify-write to check for C+ Command register X-Git-Tag: v1.20.1~1666 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0e61beb26f789da01a566ff4bfdf571faacb9ce3;p=thirdparty%2Fipxe.git [realtek] Use read-modify-write to check for C+ Command register Some bits in the C+ Command register are always one. Testing for the presence of the register must allow for this. Signed-off-by: Michael Brown --- diff --git a/src/drivers/net/realtek.c b/src/drivers/net/realtek.c index 77df64e61..f63f25f27 100644 --- a/src/drivers/net/realtek.c +++ b/src/drivers/net/realtek.c @@ -879,8 +879,9 @@ static void realtek_detect ( struct realtek_nic *rtl ) { * Try to enable C+ mode and PCI Dual Address Cycle (for * 64-bit systems), if supported. */ - cpcr = ( RTL_CPCR_DAC | RTL_CPCR_MULRW | RTL_CPCR_CPRX | - RTL_CPCR_CPTX ); + cpcr = readw ( rtl->regs + RTL_CPCR ); + cpcr |= ( RTL_CPCR_DAC | RTL_CPCR_MULRW | RTL_CPCR_CPRX | + RTL_CPCR_CPTX ); writew ( cpcr, rtl->regs + RTL_CPCR ); check_cpcr = readw ( rtl->regs + RTL_CPCR ); @@ -890,7 +891,7 @@ static void realtek_detect ( struct realtek_nic *rtl ) { rtl->have_phy_regs = 1; rtl->tppoll = RTL_TPPOLL_8169; } else { - if ( check_cpcr == cpcr ) { + if ( ( check_cpcr == cpcr ) && ( cpcr != 0xffff ) ) { DBGC ( rtl, "REALTEK %p appears to be an RTL8139C+\n", rtl ); rtl->tppoll = RTL_TPPOLL_8139CP;