diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/net/tsec.c | 49 | ||||
| -rw-r--r-- | drivers/net/tsec.h | 7 | 
2 files changed, 56 insertions, 0 deletions
| diff --git a/drivers/net/tsec.c b/drivers/net/tsec.c index 6e0f2c6fd..e50d516f5 100644 --- a/drivers/net/tsec.c +++ b/drivers/net/tsec.c @@ -1157,6 +1157,54 @@ struct phy_info phy_info_M88E1118 = {  		},  }; +/* + *  Since to access LED register we need do switch the page, we + * do LED configuring in the miim_read-like function as follows + */ +uint mii_88E1121_set_led (uint mii_reg, struct tsec_private *priv) +{ +	uint pg; + +	/* Switch the page to access the led register */ +	pg = read_phy_reg(priv, MIIM_88E1121_PHY_PAGE); +	write_phy_reg(priv, MIIM_88E1121_PHY_PAGE, MIIM_88E1121_PHY_LED_PAGE); + +	/* Configure leds */ +	write_phy_reg(priv, MIIM_88E1121_PHY_LED_CTRL, +		      MIIM_88E1121_PHY_LED_DEF); + +	/* Restore the page pointer */ +	write_phy_reg(priv, MIIM_88E1121_PHY_PAGE, pg); +	return 0; +} + +struct phy_info phy_info_M88E1121R = { +	0x01410cb, +	"Marvell 88E1121R", +	4, +	(struct phy_cmd[]){	/* config */ +			   /* Reset and configure the PHY */ +			   {MIIM_CONTROL, MIIM_CONTROL_RESET, NULL}, +			   {MIIM_GBIT_CONTROL, MIIM_GBIT_CONTROL_INIT, NULL}, +			   {MIIM_ANAR, MIIM_ANAR_INIT, NULL}, +			   /* Configure leds */ +			   {MIIM_88E1121_PHY_LED_CTRL, miim_read, +			    &mii_88E1121_set_led}, +			   {MIIM_CONTROL, MIIM_CONTROL_INIT, &mii_cr_init}, +			   {miim_end,} +			   }, +	(struct phy_cmd[]){	/* startup */ +			   /* Status is read once to clear old link state */ +			   {MIIM_STATUS, miim_read, NULL}, +			   {MIIM_STATUS, miim_read, &mii_parse_sr}, +			   {MIIM_STATUS, miim_read, &mii_parse_link}, +			   {miim_end,} +			   }, +	(struct phy_cmd[]){	/* shutdown */ +			   {miim_end,} +			   }, +}; +  static unsigned int m88e1145_setmode(uint mii_reg, struct tsec_private *priv)  {  	uint mii_data = read_phy_reg(priv, mii_reg); @@ -1522,6 +1570,7 @@ struct phy_info *phy_info[] = {  	&phy_info_M88E1011S,  	&phy_info_M88E1111S,  	&phy_info_M88E1118, +	&phy_info_M88E1121R,  	&phy_info_M88E1145,  	&phy_info_M88E1149S,  	&phy_info_dm9161, diff --git a/drivers/net/tsec.h b/drivers/net/tsec.h index 6a2338b46..fee5934e6 100644 --- a/drivers/net/tsec.h +++ b/drivers/net/tsec.h @@ -184,6 +184,13 @@  #define MIIM_88E1111_PHY_LED_DIRECT	0x4100  #define MIIM_88E1111_PHY_LED_COMBINE	0x411C +/* 88E1121 PHY LED Control Register */ +#define MIIM_88E1121_PHY_LED_CTRL	16 +#define MIIM_88E1121_PHY_LED_PAGE	3 +#define MIIM_88E1121_PHY_LED_DEF	0x0030 + +#define MIIM_88E1121_PHY_PAGE		22 +  /* 88E1145 Extended PHY Specific Control Register */  #define MIIM_88E1145_PHY_EXT_CR 20  #define MIIM_M88E1145_RGMII_RX_DELAY	0x0080 |