• Home
  • Raw
  • Download

Lines Matching full:phydev

23 #define BRCM_PHY_MODEL(phydev) \  argument
24 ((phydev)->drv->phy_id & (phydev)->drv->phy_id_mask)
26 #define BRCM_PHY_REV(phydev) \ argument
27 ((phydev)->drv->phy_id & ~((phydev)->drv->phy_id_mask))
33 static int bcm54210e_config_init(struct phy_device *phydev) in bcm54210e_config_init() argument
37 val = bcm54xx_auxctl_read(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC); in bcm54210e_config_init()
40 bcm54xx_auxctl_write(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC, val); in bcm54210e_config_init()
42 val = bcm_phy_read_shadow(phydev, BCM54810_SHD_CLK_CTL); in bcm54210e_config_init()
44 bcm_phy_write_shadow(phydev, BCM54810_SHD_CLK_CTL, val); in bcm54210e_config_init()
46 if (phydev->dev_flags & PHY_BRCM_EN_MASTER_MODE) { in bcm54210e_config_init()
47 val = phy_read(phydev, MII_CTRL1000); in bcm54210e_config_init()
49 phy_write(phydev, MII_CTRL1000, val); in bcm54210e_config_init()
55 static int bcm54612e_config_init(struct phy_device *phydev) in bcm54612e_config_init() argument
60 if ((phydev->interface != PHY_INTERFACE_MODE_RGMII_ID) && in bcm54612e_config_init()
61 (phydev->interface != PHY_INTERFACE_MODE_RGMII_TXID)) { in bcm54612e_config_init()
64 bcm_phy_write_shadow(phydev, 0x03, 0); in bcm54612e_config_init()
68 if ((phydev->interface != PHY_INTERFACE_MODE_RGMII_ID) && in bcm54612e_config_init()
69 (phydev->interface != PHY_INTERFACE_MODE_RGMII_RXID)) { in bcm54612e_config_init()
70 reg = bcm54xx_auxctl_read(phydev, in bcm54612e_config_init()
76 bcm54xx_auxctl_write(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC, in bcm54612e_config_init()
81 if (!(phydev->dev_flags & PHY_BRCM_RX_REFCLK_UNUSED)) { in bcm54612e_config_init()
84 reg = bcm_phy_read_exp(phydev, BCM54612E_EXP_SPARE0); in bcm54612e_config_init()
85 err = bcm_phy_write_exp(phydev, BCM54612E_EXP_SPARE0, in bcm54612e_config_init()
95 static int bcm5481x_config(struct phy_device *phydev) in bcm5481x_config() argument
100 val = bcm54xx_auxctl_read(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC); in bcm5481x_config()
102 if (phydev->interface == PHY_INTERFACE_MODE_RGMII || in bcm5481x_config()
103 phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID) { in bcm5481x_config()
107 if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID || in bcm5481x_config()
108 phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) { in bcm5481x_config()
112 rc = bcm54xx_auxctl_write(phydev, MII_BCM54XX_AUXCTL_SHDWSEL_MISC, in bcm5481x_config()
118 val = bcm_phy_read_shadow(phydev, BCM54810_SHD_CLK_CTL); in bcm5481x_config()
119 if (phydev->interface == PHY_INTERFACE_MODE_RGMII || in bcm5481x_config()
120 phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) { in bcm5481x_config()
124 if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID || in bcm5481x_config()
125 phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID) { in bcm5481x_config()
129 rc = bcm_phy_write_shadow(phydev, BCM54810_SHD_CLK_CTL, val); in bcm5481x_config()
137 static int bcm50610_a0_workaround(struct phy_device *phydev) in bcm50610_a0_workaround() argument
141 err = bcm_phy_write_exp(phydev, MII_BCM54XX_EXP_AADJ1CH0, in bcm50610_a0_workaround()
147 err = bcm_phy_write_exp(phydev, MII_BCM54XX_EXP_AADJ1CH3, in bcm50610_a0_workaround()
152 err = bcm_phy_write_exp(phydev, MII_BCM54XX_EXP_EXP75, in bcm50610_a0_workaround()
157 err = bcm_phy_write_exp(phydev, MII_BCM54XX_EXP_EXP96, in bcm50610_a0_workaround()
162 err = bcm_phy_write_exp(phydev, MII_BCM54XX_EXP_EXP97, in bcm50610_a0_workaround()
168 static int bcm54xx_phydsp_config(struct phy_device *phydev) in bcm54xx_phydsp_config() argument
173 err = bcm54xx_auxctl_write(phydev, in bcm54xx_phydsp_config()
180 if (BRCM_PHY_MODEL(phydev) == PHY_ID_BCM50610 || in bcm54xx_phydsp_config()
181 BRCM_PHY_MODEL(phydev) == PHY_ID_BCM50610M) { in bcm54xx_phydsp_config()
183 err = bcm_phy_write_exp(phydev, MII_BCM54XX_EXP_EXP08, in bcm54xx_phydsp_config()
188 if (phydev->drv->phy_id == PHY_ID_BCM50610) { in bcm54xx_phydsp_config()
189 err = bcm50610_a0_workaround(phydev); in bcm54xx_phydsp_config()
195 if (BRCM_PHY_MODEL(phydev) == PHY_ID_BCM57780) { in bcm54xx_phydsp_config()
198 val = bcm_phy_read_exp(phydev, MII_BCM54XX_EXP_EXP75); in bcm54xx_phydsp_config()
203 err = bcm_phy_write_exp(phydev, MII_BCM54XX_EXP_EXP75, val); in bcm54xx_phydsp_config()
208 err2 = bcm54xx_auxctl_write(phydev, in bcm54xx_phydsp_config()
216 static void bcm54xx_adjust_rxrefclk(struct phy_device *phydev) in bcm54xx_adjust_rxrefclk() argument
223 if (BRCM_PHY_MODEL(phydev) != PHY_ID_BCM57780 && in bcm54xx_adjust_rxrefclk()
224 BRCM_PHY_MODEL(phydev) != PHY_ID_BCM50610 && in bcm54xx_adjust_rxrefclk()
225 BRCM_PHY_MODEL(phydev) != PHY_ID_BCM50610M) in bcm54xx_adjust_rxrefclk()
228 val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_SCR3); in bcm54xx_adjust_rxrefclk()
234 if ((BRCM_PHY_MODEL(phydev) == PHY_ID_BCM50610 || in bcm54xx_adjust_rxrefclk()
235 BRCM_PHY_MODEL(phydev) == PHY_ID_BCM50610M) && in bcm54xx_adjust_rxrefclk()
236 BRCM_PHY_REV(phydev) >= 0x3) { in bcm54xx_adjust_rxrefclk()
243 if (phydev->dev_flags & PHY_BRCM_RX_REFCLK_UNUSED) { in bcm54xx_adjust_rxrefclk()
250 if (!clk125en || (phydev->dev_flags & PHY_BRCM_AUTO_PWRDWN_ENABLE)) in bcm54xx_adjust_rxrefclk()
255 if (phydev->dev_flags & PHY_BRCM_DIS_TXCRXC_NOENRGY) in bcm54xx_adjust_rxrefclk()
259 bcm_phy_write_shadow(phydev, BCM54XX_SHD_SCR3, val); in bcm54xx_adjust_rxrefclk()
261 val = bcm_phy_read_shadow(phydev, BCM54XX_SHD_APD); in bcm54xx_adjust_rxrefclk()
267 if (!clk125en || (phydev->dev_flags & PHY_BRCM_AUTO_PWRDWN_ENABLE)) in bcm54xx_adjust_rxrefclk()
273 bcm_phy_write_shadow(phydev, BCM54XX_SHD_APD, val); in bcm54xx_adjust_rxrefclk()
276 static int bcm54xx_config_init(struct phy_device *phydev) in bcm54xx_config_init() argument
280 reg = phy_read(phydev, MII_BCM54XX_ECR); in bcm54xx_config_init()
286 err = phy_write(phydev, MII_BCM54XX_ECR, reg); in bcm54xx_config_init()
294 err = phy_write(phydev, MII_BCM54XX_IMR, reg); in bcm54xx_config_init()
298 if ((BRCM_PHY_MODEL(phydev) == PHY_ID_BCM50610 || in bcm54xx_config_init()
299 BRCM_PHY_MODEL(phydev) == PHY_ID_BCM50610M) && in bcm54xx_config_init()
300 (phydev->dev_flags & PHY_BRCM_CLEAR_RGMII_MODE)) in bcm54xx_config_init()
301 bcm_phy_write_shadow(phydev, BCM54XX_SHD_RGMII_MODE, 0); in bcm54xx_config_init()
303 if ((phydev->dev_flags & PHY_BRCM_RX_REFCLK_UNUSED) || in bcm54xx_config_init()
304 (phydev->dev_flags & PHY_BRCM_DIS_TXCRXC_NOENRGY) || in bcm54xx_config_init()
305 (phydev->dev_flags & PHY_BRCM_AUTO_PWRDWN_ENABLE)) in bcm54xx_config_init()
306 bcm54xx_adjust_rxrefclk(phydev); in bcm54xx_config_init()
308 if (BRCM_PHY_MODEL(phydev) == PHY_ID_BCM54210E) { in bcm54xx_config_init()
309 err = bcm54210e_config_init(phydev); in bcm54xx_config_init()
312 } else if (BRCM_PHY_MODEL(phydev) == PHY_ID_BCM54612E) { in bcm54xx_config_init()
313 err = bcm54612e_config_init(phydev); in bcm54xx_config_init()
316 } else if (BRCM_PHY_MODEL(phydev) == PHY_ID_BCM54810) { in bcm54xx_config_init()
318 val = bcm_phy_read_exp(phydev, in bcm54xx_config_init()
321 err = bcm_phy_write_exp(phydev, in bcm54xx_config_init()
328 bcm54xx_phydsp_config(phydev); in bcm54xx_config_init()
333 static int bcm5482_config_init(struct phy_device *phydev) in bcm5482_config_init() argument
337 err = bcm54xx_config_init(phydev); in bcm5482_config_init()
339 if (phydev->dev_flags & PHY_BCM_FLAGS_MODE_1000BX) { in bcm5482_config_init()
343 reg = bcm_phy_read_shadow(phydev, BCM5482_SHD_SSD); in bcm5482_config_init()
344 bcm_phy_write_shadow(phydev, BCM5482_SHD_SSD, in bcm5482_config_init()
353 err = bcm_phy_read_exp(phydev, reg); in bcm5482_config_init()
356 err = bcm_phy_write_exp(phydev, reg, err | in bcm5482_config_init()
366 err = bcm_phy_read_exp(phydev, reg); in bcm5482_config_init()
369 err = bcm_phy_write_exp(phydev, reg, in bcm5482_config_init()
377 reg = bcm_phy_read_shadow(phydev, BCM5482_SHD_MODE); in bcm5482_config_init()
378 bcm_phy_write_shadow(phydev, BCM5482_SHD_MODE, in bcm5482_config_init()
385 bcm_phy_write_shadow(phydev, BCM5482_SHD_LEDS1, in bcm5482_config_init()
395 phydev->autoneg = AUTONEG_DISABLE; in bcm5482_config_init()
396 phydev->speed = SPEED_1000; in bcm5482_config_init()
397 phydev->duplex = DUPLEX_FULL; in bcm5482_config_init()
403 static int bcm5482_read_status(struct phy_device *phydev) in bcm5482_read_status() argument
407 err = genphy_read_status(phydev); in bcm5482_read_status()
409 if (phydev->dev_flags & PHY_BCM_FLAGS_MODE_1000BX) { in bcm5482_read_status()
414 if (phydev->link) { in bcm5482_read_status()
415 phydev->speed = SPEED_1000; in bcm5482_read_status()
416 phydev->duplex = DUPLEX_FULL; in bcm5482_read_status()
423 static int bcm5481_config_aneg(struct phy_device *phydev) in bcm5481_config_aneg() argument
425 struct device_node *np = phydev->mdio.dev.of_node; in bcm5481_config_aneg()
429 ret = genphy_config_aneg(phydev); in bcm5481_config_aneg()
432 bcm5481x_config(phydev); in bcm5481_config_aneg()
436 ret = bcm_phy_write_exp(phydev, MII_BCM54XX_EXP_SEL_ER + 0x9, in bcm5481_config_aneg()
445 static int brcm_phy_setbits(struct phy_device *phydev, int reg, int set) in brcm_phy_setbits() argument
449 val = phy_read(phydev, reg); in brcm_phy_setbits()
453 return phy_write(phydev, reg, val | set); in brcm_phy_setbits()
456 static int brcm_fet_config_init(struct phy_device *phydev) in brcm_fet_config_init() argument
461 err = phy_write(phydev, MII_BMCR, BMCR_RESET); in brcm_fet_config_init()
465 reg = phy_read(phydev, MII_BRCM_FET_INTREG); in brcm_fet_config_init()
476 err = phy_write(phydev, MII_BRCM_FET_INTREG, reg); in brcm_fet_config_init()
481 brcmtest = phy_read(phydev, MII_BRCM_FET_BRCMTEST); in brcm_fet_config_init()
487 err = phy_write(phydev, MII_BRCM_FET_BRCMTEST, reg); in brcm_fet_config_init()
492 reg = phy_read(phydev, MII_BRCM_FET_SHDW_AUXMODE4); in brcm_fet_config_init()
501 err = phy_write(phydev, MII_BRCM_FET_SHDW_AUXMODE4, reg); in brcm_fet_config_init()
506 err = brcm_phy_setbits(phydev, MII_BRCM_FET_SHDW_MISCCTRL, in brcm_fet_config_init()
511 if (phydev->dev_flags & PHY_BRCM_AUTO_PWRDWN_ENABLE) { in brcm_fet_config_init()
513 err = brcm_phy_setbits(phydev, MII_BRCM_FET_SHDW_AUXSTAT2, in brcm_fet_config_init()
519 err2 = phy_write(phydev, MII_BRCM_FET_BRCMTEST, brcmtest); in brcm_fet_config_init()
526 static int brcm_fet_ack_interrupt(struct phy_device *phydev) in brcm_fet_ack_interrupt() argument
531 reg = phy_read(phydev, MII_BRCM_FET_INTREG); in brcm_fet_ack_interrupt()
538 static int brcm_fet_config_intr(struct phy_device *phydev) in brcm_fet_config_intr() argument
542 reg = phy_read(phydev, MII_BRCM_FET_INTREG); in brcm_fet_config_intr()
546 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) in brcm_fet_config_intr()
551 err = phy_write(phydev, MII_BRCM_FET_INTREG, reg); in brcm_fet_config_intr()
559 static int bcm53xx_phy_probe(struct phy_device *phydev) in bcm53xx_phy_probe() argument
563 priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL); in bcm53xx_phy_probe()
567 phydev->priv = priv; in bcm53xx_phy_probe()
569 priv->stats = devm_kcalloc(&phydev->mdio.dev, in bcm53xx_phy_probe()
570 bcm_phy_get_sset_count(phydev), sizeof(u64), in bcm53xx_phy_probe()
578 static void bcm53xx_phy_get_stats(struct phy_device *phydev, in bcm53xx_phy_get_stats() argument
581 struct bcm53xx_phy_priv *priv = phydev->priv; in bcm53xx_phy_get_stats()
583 bcm_phy_get_stats(phydev, priv->stats, stats, data); in bcm53xx_phy_get_stats()