From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Warren Date: Sun, 08 Jun 2008 23:31:37 -0700 Subject: [U-Boot-Users] [PATCH] PHY: Add support for the M88E1121R Marvell chip. In-Reply-To: <1212760364-11761-1-git-send-email-wd@denx.de> References: <1212760364-11761-1-git-send-email-wd@denx.de> Message-ID: <484CCE49.90609@qstreams.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Wolfgang Denk wrote: > From: Sergei Poselenov > > Signed-off-by: Yuri Tikhonov > Signed-off-by: Sergei Poselenov > Acked-by: Ben Warren > --- > drivers/net/tsec.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ > 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 c7af930..565da5c 100644 > --- a/drivers/net/tsec.c > +++ b/drivers/net/tsec.c > @@ -1128,6 +1128,54 @@ struct phy_info phy_info_M88E1111S = { > }, > }; > > +/* > + * 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); > @@ -1492,6 +1540,7 @@ struct phy_info *phy_info[] = { > &phy_info_BCM5464S, > &phy_info_M88E1011S, > &phy_info_M88E1111S, > + &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 6a2338b..fee5934 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 >