diff options
Diffstat (limited to 'drivers/net/ethernet/amd/xgbe/xgbe-dev.c')
| -rw-r--r-- | drivers/net/ethernet/amd/xgbe/xgbe-dev.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c index 1e929a1e4ca7..4666084eda16 100644 --- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c +++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c | |||
| @@ -1284,6 +1284,20 @@ static void xgbe_write_mmd_regs(struct xgbe_prv_data *pdata, int prtad, | |||
| 1284 | } | 1284 | } |
| 1285 | } | 1285 | } |
| 1286 | 1286 | ||
| 1287 | static unsigned int xgbe_create_mdio_sca(int port, int reg) | ||
| 1288 | { | ||
| 1289 | unsigned int mdio_sca, da; | ||
| 1290 | |||
| 1291 | da = (reg & MII_ADDR_C45) ? reg >> 16 : 0; | ||
| 1292 | |||
| 1293 | mdio_sca = 0; | ||
| 1294 | XGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, RA, reg); | ||
| 1295 | XGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, PA, port); | ||
| 1296 | XGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, DA, da); | ||
| 1297 | |||
| 1298 | return mdio_sca; | ||
| 1299 | } | ||
| 1300 | |||
| 1287 | static int xgbe_write_ext_mii_regs(struct xgbe_prv_data *pdata, int addr, | 1301 | static int xgbe_write_ext_mii_regs(struct xgbe_prv_data *pdata, int addr, |
| 1288 | int reg, u16 val) | 1302 | int reg, u16 val) |
| 1289 | { | 1303 | { |
| @@ -1291,9 +1305,7 @@ static int xgbe_write_ext_mii_regs(struct xgbe_prv_data *pdata, int addr, | |||
| 1291 | 1305 | ||
| 1292 | reinit_completion(&pdata->mdio_complete); | 1306 | reinit_completion(&pdata->mdio_complete); |
| 1293 | 1307 | ||
| 1294 | mdio_sca = 0; | 1308 | mdio_sca = xgbe_create_mdio_sca(addr, reg); |
| 1295 | XGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, REG, reg); | ||
| 1296 | XGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, DA, addr); | ||
| 1297 | XGMAC_IOWRITE(pdata, MAC_MDIOSCAR, mdio_sca); | 1309 | XGMAC_IOWRITE(pdata, MAC_MDIOSCAR, mdio_sca); |
| 1298 | 1310 | ||
| 1299 | mdio_sccd = 0; | 1311 | mdio_sccd = 0; |
| @@ -1317,9 +1329,7 @@ static int xgbe_read_ext_mii_regs(struct xgbe_prv_data *pdata, int addr, | |||
| 1317 | 1329 | ||
| 1318 | reinit_completion(&pdata->mdio_complete); | 1330 | reinit_completion(&pdata->mdio_complete); |
| 1319 | 1331 | ||
| 1320 | mdio_sca = 0; | 1332 | mdio_sca = xgbe_create_mdio_sca(addr, reg); |
| 1321 | XGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, REG, reg); | ||
| 1322 | XGMAC_SET_BITS(mdio_sca, MAC_MDIOSCAR, DA, addr); | ||
| 1323 | XGMAC_IOWRITE(pdata, MAC_MDIOSCAR, mdio_sca); | 1333 | XGMAC_IOWRITE(pdata, MAC_MDIOSCAR, mdio_sca); |
| 1324 | 1334 | ||
| 1325 | mdio_sccd = 0; | 1335 | mdio_sccd = 0; |
