aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/broadcom/genet/bcmgenet.c9
-rw-r--r--drivers/net/ethernet/broadcom/genet/bcmgenet.h1
-rw-r--r--drivers/net/ethernet/broadcom/genet/bcmmii.c16
3 files changed, 24 insertions, 2 deletions
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index f7855a61e7ad..6043734ea613 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -1734,6 +1734,9 @@ static int init_umac(struct bcmgenet_priv *priv)
1734 } else if (priv->ext_phy) { 1734 } else if (priv->ext_phy) {
1735 int0_enable |= UMAC_IRQ_LINK_EVENT; 1735 int0_enable |= UMAC_IRQ_LINK_EVENT;
1736 } else if (priv->phy_interface == PHY_INTERFACE_MODE_MOCA) { 1736 } else if (priv->phy_interface == PHY_INTERFACE_MODE_MOCA) {
1737 if (priv->hw_params->flags & GENET_HAS_MOCA_LINK_DET)
1738 int0_enable |= UMAC_IRQ_LINK_EVENT;
1739
1737 reg = bcmgenet_bp_mc_get(priv); 1740 reg = bcmgenet_bp_mc_get(priv);
1738 reg |= BIT(priv->hw_params->bp_in_en_shift); 1741 reg |= BIT(priv->hw_params->bp_in_en_shift);
1739 1742
@@ -2926,7 +2929,8 @@ static struct bcmgenet_hw_params bcmgenet_hw_params[] = {
2926 .rdma_offset = 0x10000, 2929 .rdma_offset = 0x10000,
2927 .tdma_offset = 0x11000, 2930 .tdma_offset = 0x11000,
2928 .words_per_bd = 2, 2931 .words_per_bd = 2,
2929 .flags = GENET_HAS_EXT | GENET_HAS_MDIO_INTR, 2932 .flags = GENET_HAS_EXT | GENET_HAS_MDIO_INTR |
2933 GENET_HAS_MOCA_LINK_DET,
2930 }, 2934 },
2931 [GENET_V4] = { 2935 [GENET_V4] = {
2932 .tx_queues = 4, 2936 .tx_queues = 4,
@@ -2944,7 +2948,8 @@ static struct bcmgenet_hw_params bcmgenet_hw_params[] = {
2944 .rdma_offset = 0x2000, 2948 .rdma_offset = 0x2000,
2945 .tdma_offset = 0x4000, 2949 .tdma_offset = 0x4000,
2946 .words_per_bd = 3, 2950 .words_per_bd = 3,
2947 .flags = GENET_HAS_40BITS | GENET_HAS_EXT | GENET_HAS_MDIO_INTR, 2951 .flags = GENET_HAS_40BITS | GENET_HAS_EXT |
2952 GENET_HAS_MDIO_INTR | GENET_HAS_MOCA_LINK_DET,
2948 }, 2953 },
2949}; 2954};
2950 2955
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.h b/drivers/net/ethernet/broadcom/genet/bcmgenet.h
index ddaa40cb0f21..6f2887a5e0be 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.h
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.h
@@ -508,6 +508,7 @@ enum bcmgenet_version {
508#define GENET_HAS_40BITS (1 << 0) 508#define GENET_HAS_40BITS (1 << 0)
509#define GENET_HAS_EXT (1 << 1) 509#define GENET_HAS_EXT (1 << 1)
510#define GENET_HAS_MDIO_INTR (1 << 2) 510#define GENET_HAS_MDIO_INTR (1 << 2)
511#define GENET_HAS_MOCA_LINK_DET (1 << 3)
511 512
512/* BCMGENET hardware parameters, keep this structure nicely aligned 513/* BCMGENET hardware parameters, keep this structure nicely aligned
513 * since it is going to be used in hot paths 514 * since it is going to be used in hot paths
diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c
index 6d3b66a103cc..e7651b3c6c57 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmmii.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c
@@ -462,6 +462,15 @@ static int bcmgenet_mii_of_init(struct bcmgenet_priv *priv)
462 return 0; 462 return 0;
463} 463}
464 464
465static int bcmgenet_fixed_phy_link_update(struct net_device *dev,
466 struct fixed_phy_status *status)
467{
468 if (dev && dev->phydev && status)
469 status->link = dev->phydev->link;
470
471 return 0;
472}
473
465static int bcmgenet_mii_pd_init(struct bcmgenet_priv *priv) 474static int bcmgenet_mii_pd_init(struct bcmgenet_priv *priv)
466{ 475{
467 struct device *kdev = &priv->pdev->dev; 476 struct device *kdev = &priv->pdev->dev;
@@ -513,6 +522,13 @@ static int bcmgenet_mii_pd_init(struct bcmgenet_priv *priv)
513 dev_err(kdev, "failed to register fixed PHY device\n"); 522 dev_err(kdev, "failed to register fixed PHY device\n");
514 return -ENODEV; 523 return -ENODEV;
515 } 524 }
525
526 if (priv->hw_params->flags & GENET_HAS_MOCA_LINK_DET) {
527 ret = fixed_phy_set_link_update(
528 phydev, bcmgenet_fixed_phy_link_update);
529 if (!ret)
530 phydev->link = 0;
531 }
516 } 532 }
517 533
518 priv->phydev = phydev; 534 priv->phydev = phydev;