diff --git a/arch/arm/include/asm/arch-ipq806x/ipq_gmac.h b/arch/arm/include/asm/arch-ipq806x/ipq_gmac.h index b74ffb0230..37f5a43bcc 100644 --- a/arch/arm/include/asm/arch-ipq806x/ipq_gmac.h +++ b/arch/arm/include/asm/arch-ipq806x/ipq_gmac.h @@ -357,6 +357,8 @@ #define FORCE_RATE_10 (0 << 13) | (1 << 15) | (1 << 8) #define FORCE_RATE_100 (1 << 13) | (1 << 15) | (1 << 8) +#define BMCR_RESET 0x8000 + typedef struct { volatile u32 status; /* Status */ diff --git a/drivers/net/ipq806x/ipq_gmac_eth.c b/drivers/net/ipq806x/ipq_gmac_eth.c index 6e744b1baf..58b736cfd5 100644 --- a/drivers/net/ipq806x/ipq_gmac_eth.c +++ b/drivers/net/ipq806x/ipq_gmac_eth.c @@ -867,6 +867,8 @@ int ipq_gmac_init(ipq_gmac_board_cfg_t *gmac_cfg) strncpy(bb_miiphy_buses[i].name, gmac_cfg->phy_name, sizeof(bb_miiphy_buses[i].name)); miiphy_register(bb_miiphy_buses[i].name, bb_miiphy_read, bb_miiphy_write); + miiphy_write(bb_miiphy_buses[i].name, ipq_gmac_macs[i]->phy_address, + PHY_CONTROL_REG, BMCR_RESET | AUTO_NEG_ENABLE); } eth_register(dev[i]);