Re: [U-Boot] [PATCH v2] Phy/Marvell: Rewrite the MV88E1111 phy config function based on kernel code

2011-12-05 Thread Wolfgang Denk
Dear Roy Zang,

In message <1319777529-28654-1-git-send-email-tie-fei.z...@freescale.com> you 
wrote:
> The original m88es_config() does not do the SGMII mode
> initialization and is buggy. Rewrite the function according to
> 3.0.6 kernel function m88e_config_init() in drivers/net/phy/marvell.c
> 
> Signed-off-by: Roy Zang 
> Acked-by: Andy Fleming 
> Cc: Kumar Gala 
> ---
> v2: Use timeout instead of infinite loop
> 
>  drivers/net/phy/marvell.c |  113 ++--
>  1 files changed, 107 insertions(+), 6 deletions(-)

Applied, thanks.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de
Never ascribe to malice that which can  adequately  be  explained  by
stupidity.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v2] Phy/Marvell: Rewrite the MV88E1111 phy config function based on kernel code

2011-11-03 Thread Zang Roy-R61911


> -Original Message-
> From: Zang Roy-R61911
> Sent: Friday, October 28, 2011 12:52 PM
> To: u-boot@lists.denx.de
> Cc: Zang Roy-R61911; Kumar Gala
> Subject: [PATCH v2] Phy/Marvell: Rewrite the MV88E phy config function 
> based
> on kernel code
> 
> The original m88es_config() does not do the SGMII mode
> initialization and is buggy. Rewrite the function according to
> 3.0.6 kernel function m88e_config_init() in drivers/net/phy/marvell.c
> 
> Signed-off-by: Roy Zang 
> Acked-by: Andy Fleming 
> Cc: Kumar Gala 
> ---
> v2: Use timeout instead of infinite loop
How about this patch?
Any feedback?
Thanks.
Roy

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH v2] Phy/Marvell: Rewrite the MV88E1111 phy config function based on kernel code

2011-10-27 Thread Roy Zang
The original m88es_config() does not do the SGMII mode
initialization and is buggy. Rewrite the function according to
3.0.6 kernel function m88e_config_init() in drivers/net/phy/marvell.c

Signed-off-by: Roy Zang 
Acked-by: Andy Fleming 
Cc: Kumar Gala 
---
v2: Use timeout instead of infinite loop

 drivers/net/phy/marvell.c |  113 ++--
 1 files changed, 107 insertions(+), 6 deletions(-)

diff --git a/drivers/net/phy/marvell.c b/drivers/net/phy/marvell.c
index bd1cdc4..e51e799 100644
--- a/drivers/net/phy/marvell.c
+++ b/drivers/net/phy/marvell.c
@@ -43,6 +43,24 @@
 #define MIIM_88E_PHY_LED_DIRECT0x4100
 #define MIIM_88E_PHY_LED_COMBINE   0x411C
 
+/* 88E Extended PHY Specific Control Register */
+#define MIIM_88E_PHY_EXT_CR0x14
+#define MIIM_88E_RX_DELAY  0x80
+#define MIIM_88E_TX_DELAY  0x2
+
+/* 88E Extended PHY Specific Status Register */
+#define MIIM_88E_PHY_EXT_SR0x1b
+#define MIIM_88E_HWCFG_MODE_MASK   0xf
+#define MIIM_88E_HWCFG_MODE_COPPER_RGMII   0xb
+#define MIIM_88E_HWCFG_MODE_FIBER_RGMII0x3
+#define MIIM_88E_HWCFG_MODE_SGMII_NO_CLK   0x4
+#define MIIM_88E_HWCFG_MODE_COPPER_RTBI0x9
+#define MIIM_88E_HWCFG_FIBER_COPPER_AUTO   0x8000
+#define MIIM_88E_HWCFG_FIBER_COPPER_RES0x2000
+
+#define MIIM_88E_COPPER0
+#define MIIM_88E_FIBER 1
+
 /* 88E1118 PHY defines */
 #define MIIM_88E1118_PHY_PAGE  22
 #define MIIM_88E1118_PHY_LED_PAGE  3
@@ -162,19 +180,102 @@ static int m88e1011s_startup(struct phy_device *phydev)
 static int m88es_config(struct phy_device *phydev)
 {
int reg;
+   int timeout;
 
if ((phydev->interface == PHY_INTERFACE_MODE_RGMII) ||
(phydev->interface == PHY_INTERFACE_MODE_RGMII_ID) ||
(phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) ||
(phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID)) {
-   reg = phy_read(phydev, MDIO_DEVAD_NONE, 0x1b);
-   reg = (reg & 0xfff0) | 0xb;
-   phy_write(phydev, MDIO_DEVAD_NONE, 0x1b, reg);
-   } else {
-   phy_write(phydev, MDIO_DEVAD_NONE, 0x1b, 0x1f);
+   reg = phy_read(phydev,
+   MDIO_DEVAD_NONE, MIIM_88E_PHY_EXT_CR);
+   if ((phydev->interface == PHY_INTERFACE_MODE_RGMII) ||
+   (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID)) {
+   reg |= (MIIM_88E_RX_DELAY | MIIM_88E_TX_DELAY);
+   } else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) {
+   reg &= ~MIIM_88E_TX_DELAY;
+   reg |= MIIM_88E_RX_DELAY;
+   } else if (phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID) {
+   reg &= ~MIIM_88E_RX_DELAY;
+   reg |= MIIM_88E_TX_DELAY;
+   }
+
+   phy_write(phydev,
+   MDIO_DEVAD_NONE, MIIM_88E_PHY_EXT_CR, reg);
+
+   reg = phy_read(phydev,
+   MDIO_DEVAD_NONE, MIIM_88E_PHY_EXT_SR);
+
+   reg &= ~(MIIM_88E_HWCFG_MODE_MASK);
+
+   if (reg & MIIM_88E_HWCFG_FIBER_COPPER_RES)
+   reg |= MIIM_88E_HWCFG_MODE_FIBER_RGMII;
+   else
+   reg |= MIIM_88E_HWCFG_MODE_COPPER_RGMII;
+
+   phy_write(phydev,
+   MDIO_DEVAD_NONE, MIIM_88E_PHY_EXT_SR, reg);
}
 
-   phy_write(phydev, MDIO_DEVAD_NONE, 0x14, 0x0cd2);
+   if (phydev->interface == PHY_INTERFACE_MODE_SGMII) {
+   reg = phy_read(phydev,
+   MDIO_DEVAD_NONE, MIIM_88E_PHY_EXT_SR);
+
+   reg &= ~(MIIM_88E_HWCFG_MODE_MASK);
+   reg |= MIIM_88E_HWCFG_MODE_SGMII_NO_CLK;
+   reg |= MIIM_88E_HWCFG_FIBER_COPPER_AUTO;
+
+   phy_write(phydev, MDIO_DEVAD_NONE,
+   MIIM_88E_PHY_EXT_SR, reg);
+   }
+
+   if (phydev->interface == PHY_INTERFACE_MODE_RTBI) {
+   reg = phy_read(phydev,
+   MDIO_DEVAD_NONE, MIIM_88E_PHY_EXT_CR);
+   reg |= (MIIM_88E_RX_DELAY | MIIM_88E_TX_DELAY);
+   phy_write(phydev,
+   MDIO_DEVAD_NONE, MIIM_88E_PHY_EXT_CR, reg);
+
+   reg = phy_read(phydev, MDIO_DEVAD_NONE,
+   MIIM_88E_PHY_EXT_SR);
+   reg &= ~(MIIM_88E_HWCFG_MODE_MASK |
+   MIIM_88E_HWCFG_FIBER_COPPER_RES);
+   reg |= 0x7 | MIIM_88E_HWCFG_FIBER_COPPER_AUTO;
+   phy_write(phydev, MDIO_DEVAD_NONE,
+   MIIM_88E_PHY_EXT_SR, reg);
+
+   /* soft reset */
+   timeout =