From: Hayes Wang <hayeswang@realtek.com>
To: <romieu@fr.zoreil.com>
Cc: <netdev@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
Hayes Wang <hayeswang@realtek.com>
Subject: [PATCH net-next 3/7] r8169: Modify the method for setting firmware
Date: Mon, 1 Apr 2013 21:55:35 +0800 [thread overview]
Message-ID: <1364824539-4156-3-git-send-email-hayeswang@realtek.com> (raw)
In-Reply-To: <1364824539-4156-1-git-send-email-hayeswang@realtek.com>
Remove useless action PHY_READ_EFUSE, PHY_READ_MAC_BYTE, PHY_WRITE_MAC_BYTE,
PHY_WRITE_ERI_WORD. And define the new action PHY_MDIO_CHG.
PHY_MDIO_CHG is used to modify the mdio operation. By the way, the
firmware could support setting mac ocp.
Signed-off-by: Hayes Wang <hayeswang@realtek.com>
---
drivers/net/ethernet/realtek/r8169.c | 45 +++++++++++++++++++++++++-----------
1 file changed, 32 insertions(+), 13 deletions(-)
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index b8b59a9..e7e7d37 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -1069,6 +1069,21 @@ static int r8168g_mdio_read(struct rtl8169_private *tp, int reg)
return r8168_phy_ocp_read(tp, tp->ocp_base + reg * 2);
}
+static void mac_mcu_write(struct rtl8169_private *tp, int reg, int value)
+{
+ if (reg == 0x1f) {
+ tp->ocp_base = value << 4;
+ return;
+ }
+
+ r8168_mac_ocp_write(tp, tp->ocp_base + reg, value);
+}
+
+static int mac_mcu_read(struct rtl8169_private *tp, int reg)
+{
+ return r8168_mac_ocp_read(tp, tp->ocp_base + reg);
+}
+
DECLARE_RTL_COND(rtl_phyar_cond)
{
void __iomem *ioaddr = tp->mmio_addr;
@@ -2134,9 +2149,7 @@ static void rtl_writephy_batch(struct rtl8169_private *tp,
#define PHY_DATA_OR 0x10000000
#define PHY_DATA_AND 0x20000000
#define PHY_BJMPN 0x30000000
-#define PHY_READ_EFUSE 0x40000000
-#define PHY_READ_MAC_BYTE 0x50000000
-#define PHY_WRITE_MAC_BYTE 0x60000000
+#define PHY_MDIO_CHG 0x40000000
#define PHY_CLEAR_READCOUNT 0x70000000
#define PHY_WRITE 0x80000000
#define PHY_READCOUNT_EQ_SKIP 0x90000000
@@ -2145,7 +2158,6 @@ static void rtl_writephy_batch(struct rtl8169_private *tp,
#define PHY_WRITE_PREVIOUS 0xc0000000
#define PHY_SKIPN 0xd0000000
#define PHY_DELAY_MS 0xe0000000
-#define PHY_WRITE_ERI_WORD 0xf0000000
struct fw_info {
u32 magic;
@@ -2222,7 +2234,7 @@ static bool rtl_fw_data_ok(struct rtl8169_private *tp, struct net_device *dev,
case PHY_READ:
case PHY_DATA_OR:
case PHY_DATA_AND:
- case PHY_READ_EFUSE:
+ case PHY_MDIO_CHG:
case PHY_CLEAR_READCOUNT:
case PHY_WRITE:
case PHY_WRITE_PREVIOUS:
@@ -2253,9 +2265,6 @@ static bool rtl_fw_data_ok(struct rtl8169_private *tp, struct net_device *dev,
}
break;
- case PHY_READ_MAC_BYTE:
- case PHY_WRITE_MAC_BYTE:
- case PHY_WRITE_ERI_WORD:
default:
netif_err(tp, ifup, tp->dev,
"Invalid action 0x%08x\n", action);
@@ -2286,10 +2295,13 @@ out:
static void rtl_phy_write_fw(struct rtl8169_private *tp, struct rtl_fw *rtl_fw)
{
struct rtl_fw_phy_action *pa = &rtl_fw->phy_action;
+ struct mdio_ops org, *ops = &tp->mdio_ops;
u32 predata, count;
size_t index;
predata = count = 0;
+ org.write = ops->write;
+ org.read = ops->read;
for (index = 0; index < pa->size; ) {
u32 action = le32_to_cpu(pa->code[index]);
@@ -2316,8 +2328,15 @@ static void rtl_phy_write_fw(struct rtl8169_private *tp, struct rtl_fw *rtl_fw)
case PHY_BJMPN:
index -= regno;
break;
- case PHY_READ_EFUSE:
- predata = rtl8168d_efuse_read(tp, regno);
+ case PHY_MDIO_CHG:
+ if (data == 0) {
+ ops->write = org.write;
+ ops->read = org.read;
+ } else if (data == 1) {
+ ops->write = mac_mcu_write;
+ ops->read = mac_mcu_read;
+ }
+
index++;
break;
case PHY_CLEAR_READCOUNT:
@@ -2353,13 +2372,13 @@ static void rtl_phy_write_fw(struct rtl8169_private *tp, struct rtl_fw *rtl_fw)
index++;
break;
- case PHY_READ_MAC_BYTE:
- case PHY_WRITE_MAC_BYTE:
- case PHY_WRITE_ERI_WORD:
default:
BUG();
}
}
+
+ ops->write = org.write;
+ ops->read = org.read;
}
static void rtl_release_firmware(struct rtl8169_private *tp)
--
1.8.1
next prev parent reply other threads:[~2013-04-01 13:56 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-01 13:55 [PATCH net-next 1/7] r8169: Remove firmware code Hayes Wang
2013-04-01 13:55 ` [PATCH net-next 2/7] r8169: Update PHY settings of RTL8111G Hayes Wang
2013-04-01 22:20 ` Francois Romieu
2013-04-02 2:19 ` hayeswang
2013-04-01 13:55 ` Hayes Wang [this message]
2013-04-01 13:55 ` [PATCH net-next 4/7] r8169: Update the RTL8111G parameters Hayes Wang
2013-04-01 13:55 ` [PATCH net-next 5/7] r8169: add a new chip for RTL8111G Hayes Wang
2013-04-01 22:22 ` Francois Romieu
2013-04-02 2:39 ` hayeswang
2013-04-02 23:20 ` Francois Romieu
2013-04-02 23:26 ` David Miller
2013-04-01 13:55 ` [PATCH net-next 6/7] r8169: add a new chip for RTL8106E Hayes Wang
2013-04-01 22:23 ` Francois Romieu
2013-04-02 2:59 ` hayeswang
2013-04-01 13:55 ` [PATCH net-next 7/7] r8169: fix could not dump registers Hayes Wang
2013-04-01 14:07 ` Sergei Shtylyov
2013-04-01 22:24 ` Francois Romieu
2013-04-02 8:23 ` [PATCH v2 net-next 1/8] r8169: Remove firmware code Hayes Wang
2013-04-02 8:23 ` [PATCH v2 net-next 2/8] r8169: Modify the mothod for PHY settings of RTL8111G Hayes Wang
2013-04-02 8:23 ` [PATCH v2 net-next 3/8] r8169: Update " Hayes Wang
2013-04-02 8:23 ` [PATCH v2 net-next 4/8] r8169: Modify the method for setting firmware Hayes Wang
2013-04-02 8:23 ` [PATCH v2 net-next 5/8] r8169: Update the RTL8111G parameters Hayes Wang
2013-04-02 8:23 ` [PATCH v2 net-next 6/8] r8169: add a new chip for RTL8111G Hayes Wang
2013-04-02 22:27 ` Francois Romieu
2013-04-03 3:03 ` hayeswang
2013-04-03 5:59 ` Francois Romieu
2013-04-02 8:23 ` [PATCH v2 net-next 7/8] r8169: adjust the flow of hw_start Hayes Wang
2013-04-02 8:23 ` [PATCH v2 net-next 8/8] r8169: add a new chip for RTL8106E Hayes Wang
2013-04-04 21:47 ` [PATCH v2 net-next 1/8] r8169: Remove firmware code David Miller
2013-04-04 23:42 ` Francois Romieu
2013-04-07 20:45 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1364824539-4156-3-git-send-email-hayeswang@realtek.com \
--to=hayeswang@realtek.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=romieu@fr.zoreil.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.