From 14a4f8799b1d0d58c14dc87b1f5d3934d020b367 Mon Sep 17 00:00:00 2001 From: Matt Carlson Date: Thu, 14 Oct 2010 10:37:40 +0000 Subject: [PATCH] --- yaml --- r: 215193 b: refs/heads/master c: ddfc87bfd16f370904c6ff7d23738335dd68d0ce h: refs/heads/master i: 215191: d5f388ceaf509232fb79b95f3a7742e02d28c260 v: v3 --- [refs] | 2 +- trunk/drivers/net/tg3.c | 46 +++++++++++++++++++++++++++++++++++++++++ trunk/drivers/net/tg3.h | 4 ++++ 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 9106166a892c..92e8689e4b15 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3d37728bc55994fdf2888f6c872bdeea03a84cc2 +refs/heads/master: ddfc87bfd16f370904c6ff7d23738335dd68d0ce diff --git a/trunk/drivers/net/tg3.c b/trunk/drivers/net/tg3.c index 1c680ff51013..afcc593108ce 100644 --- a/trunk/drivers/net/tg3.c +++ b/trunk/drivers/net/tg3.c @@ -1162,6 +1162,52 @@ static void tg3_mdio_fini(struct tg3 *tp) } } +static int tg3_phy_cl45_write(struct tg3 *tp, u32 devad, u32 addr, u32 val) +{ + int err; + + err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); + if (err) + goto done; + + err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); + if (err) + goto done; + + err = tg3_writephy(tp, MII_TG3_MMD_CTRL, + MII_TG3_MMD_CTRL_DATA_NOINC | devad); + if (err) + goto done; + + err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, val); + +done: + return err; +} + +static int tg3_phy_cl45_read(struct tg3 *tp, u32 devad, u32 addr, u32 *val) +{ + int err; + + err = tg3_writephy(tp, MII_TG3_MMD_CTRL, devad); + if (err) + goto done; + + err = tg3_writephy(tp, MII_TG3_MMD_ADDRESS, addr); + if (err) + goto done; + + err = tg3_writephy(tp, MII_TG3_MMD_CTRL, + MII_TG3_MMD_CTRL_DATA_NOINC | devad); + if (err) + goto done; + + err = tg3_readphy(tp, MII_TG3_MMD_ADDRESS, val); + +done: + return err; +} + /* tp->lock is held. */ static inline void tg3_generate_fw_event(struct tg3 *tp) { diff --git a/trunk/drivers/net/tg3.h b/trunk/drivers/net/tg3.h index 89553c42fd08..99fc30680217 100644 --- a/trunk/drivers/net/tg3.h +++ b/trunk/drivers/net/tg3.h @@ -2061,6 +2061,10 @@ #define MII_TG3_CTRL_AS_MASTER 0x0800 #define MII_TG3_CTRL_ENABLE_AS_MASTER 0x1000 +#define MII_TG3_MMD_CTRL 0x0d /* MMD Access Control register */ +#define MII_TG3_MMD_CTRL_DATA_NOINC 0x4000 +#define MII_TG3_MMD_ADDRESS 0x0e /* MMD Address Data register */ + #define MII_TG3_EXT_CTRL 0x10 /* Extended control register */ #define MII_TG3_EXT_CTRL_FIFO_ELASTIC 0x0001 #define MII_TG3_EXT_CTRL_LNK3_LED_MODE 0x0002