Skip to content

Commit

Permalink
[lan78xx] Always enable automatic speed and duplex detection
Browse files Browse the repository at this point in the history
On devices with no EEPROM or OTP, the MAC_CR register defaults to not
using automatic link speed detection, with the result that no packets
are successfully sent or received.

Fix by always enabling automatic speed and duplex detection, since
iPXE provides no mechanism for manual configuration of either link
speed or duplex.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Sep 29, 2019
1 parent 41a9a5c commit 3fe683e
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/drivers/net/lan78xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,13 @@ static int lan78xx_open ( struct net_device *netdev ) {
LAN78XX_BULK_IN_DLY_SET ( 0 ) ) ) != 0 )
goto err_bulk_in_dly;

/* Enable automatic speed and duplex detection */
if ( ( rc = smscusb_writel ( smscusb, LAN78XX_MAC_CR,
( LAN78XX_MAC_CR_ADP |
LAN78XX_MAC_CR_ADD |
LAN78XX_MAC_CR_ASD ) ) ) != 0 )
goto err_mac_cr;

/* Configure receive filters */
if ( ( rc = smscusb_writel ( smscusb, LAN78XX_RFE_CTL,
( LAN78XX_RFE_CTL_AB |
Expand Down Expand Up @@ -256,6 +263,7 @@ static int lan78xx_open ( struct net_device *netdev ) {
err_fct_tx_ctl:
err_fct_rx_ctl:
err_rfe_ctl:
err_mac_cr:
err_bulk_in_dly:
err_int_ep_ctl:
usbnet_close ( &smscusb->usbnet );
Expand Down
6 changes: 6 additions & 0 deletions src/drivers/net/lan78xx.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,12 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#define LAN78XX_FCT_TX_CTL 0x00c4
#define LAN78XX_FCT_TX_CTL_EN 0x80000000UL /**< FCT TX enable */

/** MAC control register */
#define LAN78XX_MAC_CR 0x0100
#define LAN78XX_MAC_CR_ADP 0x00002000UL /**< Duplex polarity */
#define LAN78XX_MAC_CR_ADD 0x00001000UL /**< Auto duplex */
#define LAN78XX_MAC_CR_ASD 0x00000800UL /**< Auto speed */

/** MAC receive register */
#define LAN78XX_MAC_RX 0x0104
#define LAN78XX_MAC_RX_MAX_SIZE(mtu) ( (mtu) << 16 ) /**< Max frame size */
Expand Down

0 comments on commit 3fe683e

Please sign in to comment.