@@ -30,6 +30,22 @@ MODULE_DESCRIPTION("Broadcom PHY driver");
30
30
MODULE_AUTHOR ("Maciej W. Rozycki" );
31
31
MODULE_LICENSE ("GPL" );
32
32
33
+ static int bcm54210e_config_init (struct phy_device * phydev )
34
+ {
35
+ int val ;
36
+
37
+ val = bcm54xx_auxctl_read (phydev , MII_BCM54XX_AUXCTL_SHDWSEL_MISC );
38
+ val &= ~MII_BCM54XX_AUXCTL_SHDWSEL_MISC_RGMII_SKEW_EN ;
39
+ val |= MII_BCM54XX_AUXCTL_MISC_WREN ;
40
+ bcm54xx_auxctl_write (phydev , MII_BCM54XX_AUXCTL_SHDWSEL_MISC , val );
41
+
42
+ val = bcm_phy_read_shadow (phydev , BCM54810_SHD_CLK_CTL );
43
+ val &= ~BCM54810_SHD_CLK_CTL_GTXCLK_EN ;
44
+ bcm_phy_write_shadow (phydev , BCM54810_SHD_CLK_CTL , val );
45
+
46
+ return 0 ;
47
+ }
48
+
33
49
static int bcm54810_config (struct phy_device * phydev )
34
50
{
35
51
int rc , val ;
@@ -230,7 +246,11 @@ static int bcm54xx_config_init(struct phy_device *phydev)
230
246
(phydev -> dev_flags & PHY_BRCM_AUTO_PWRDWN_ENABLE ))
231
247
bcm54xx_adjust_rxrefclk (phydev );
232
248
233
- if (BRCM_PHY_MODEL (phydev ) == PHY_ID_BCM54810 ) {
249
+ if (BRCM_PHY_MODEL (phydev ) == PHY_ID_BCM54210E ) {
250
+ err = bcm54210e_config_init (phydev );
251
+ if (err )
252
+ return err ;
253
+ } else if (BRCM_PHY_MODEL (phydev ) == PHY_ID_BCM54810 ) {
234
254
err = bcm54810_config (phydev );
235
255
if (err )
236
256
return err ;
@@ -541,6 +561,17 @@ static struct phy_driver broadcom_drivers[] = {
541
561
.read_status = genphy_read_status ,
542
562
.ack_interrupt = bcm_phy_ack_intr ,
543
563
.config_intr = bcm_phy_config_intr ,
564
+ }, {
565
+ .phy_id = PHY_ID_BCM54210E ,
566
+ .phy_id_mask = 0xfffffff0 ,
567
+ .name = "Broadcom BCM54210E" ,
568
+ .features = PHY_GBIT_FEATURES ,
569
+ .flags = PHY_HAS_MAGICANEG | PHY_HAS_INTERRUPT ,
570
+ .config_init = bcm54xx_config_init ,
571
+ .config_aneg = genphy_config_aneg ,
572
+ .read_status = genphy_read_status ,
573
+ .ack_interrupt = bcm_phy_ack_intr ,
574
+ .config_intr = bcm_phy_config_intr ,
544
575
}, {
545
576
.phy_id = PHY_ID_BCM5461 ,
546
577
.phy_id_mask = 0xfffffff0 ,
@@ -680,6 +711,7 @@ module_phy_driver(broadcom_drivers);
680
711
static struct mdio_device_id __maybe_unused broadcom_tbl [] = {
681
712
{ PHY_ID_BCM5411 , 0xfffffff0 },
682
713
{ PHY_ID_BCM5421 , 0xfffffff0 },
714
+ { PHY_ID_BCM54210E , 0xfffffff0 },
683
715
{ PHY_ID_BCM5461 , 0xfffffff0 },
684
716
{ PHY_ID_BCM54612E , 0xfffffff0 },
685
717
{ PHY_ID_BCM54616S , 0xfffffff0 },
0 commit comments