All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hayes Wang <hayeswang@realtek.com>
To: <hkallweit1@gmail.com>
Cc: <netdev@vger.kernel.org>, <nic_swsd@realtek.com>,
	Hayes Wang <hayeswang@realtek.com>
Subject: [RFC PATCH 2/4] r8169: add type2 access functions
Date: Mon, 29 Nov 2021 18:13:13 +0800	[thread overview]
Message-ID: <20211129101315.16372-383-nic_swsd@realtek.com> (raw)
In-Reply-To: <20211129101315.16372-381-nic_swsd@realtek.com>

The type2 functions are used to access the OOB registers of RTL8111EP
and RTL8111FP(RTL8117). The OOB registers are used to control the
settings about dash.

Signed-off-by: Hayes Wang <hayeswang@realtek.com>
---
 drivers/net/ethernet/realtek/r8169.h      |  3 ++
 drivers/net/ethernet/realtek/r8169_main.c | 39 +++++++++++++++++++++++
 2 files changed, 42 insertions(+)

diff --git a/drivers/net/ethernet/realtek/r8169.h b/drivers/net/ethernet/realtek/r8169.h
index 8da4b66b71b5..7db647b4796f 100644
--- a/drivers/net/ethernet/realtek/r8169.h
+++ b/drivers/net/ethernet/realtek/r8169.h
@@ -77,3 +77,6 @@ u16 rtl8168h_2_get_adc_bias_ioffset(struct rtl8169_private *tp);
 u8 rtl8168d_efuse_read(struct rtl8169_private *tp, int reg_addr);
 void r8169_hw_phy_config(struct rtl8169_private *tp, struct phy_device *phydev,
 			 enum mac_version ver);
+
+u32 r8168_type2_read(struct rtl8169_private *tp, u32 addr);
+void r8168_type2_write(struct rtl8169_private *tp, u8 mask, u32 addr, u32 val);
diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c
index fd295bcd125c..eb56b91fe41b 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -1071,6 +1071,45 @@ static u16 rtl_ephy_read(struct rtl8169_private *tp, int reg_addr)
 		RTL_R32(tp, EPHYAR) & EPHYAR_DATA_MASK : ~0;
 }
 
+static u32 r8168_dash_adjust_addr(struct rtl8169_private *tp, u32 addr)
+{
+	switch (tp->mac_version) {
+	case RTL_GIGA_MAC_VER_49 ... RTL_GIGA_MAC_VER_51:
+		return ((addr & 0xf000) << 8) | (addr & 0xfff);
+	case RTL_GIGA_MAC_VER_52 ... RTL_GIGA_MAC_VER_53:
+		return ((addr & 0xfff000) << 6) | (addr & 0xfff);
+	default:
+		WARN_ON_ONCE(1);
+		return (addr & 0xfff);
+	}
+}
+
+u32 r8168_type2_read(struct rtl8169_private *tp, u32 addr)
+{
+	u32 cmd = ERIAR_READ_CMD | ERIAR_OOB | ERIAR_MASK_1111;
+
+	cmd |= r8168_dash_adjust_addr(tp, addr);
+	RTL_W32(tp, ERIAR, cmd);
+
+	return rtl_loop_wait_high(tp, &rtl_eriar_cond, 100, 100) ?
+		RTL_R32(tp, ERIDR) : ~0;
+}
+
+void r8168_type2_write(struct rtl8169_private *tp, u8 mask, u32 addr, u32 val)
+{
+	u32 cmd = ERIAR_WRITE_CMD | ERIAR_OOB |
+		  ((u32)mask & 0x0f) << ERIAR_MASK_SHIFT;
+
+	if (WARN(addr & 3 || !mask, "addr: 0x%x, mask: 0x%08x\n", addr, mask))
+		return;
+
+	RTL_W32(tp, ERIDR, val);
+	cmd |= r8168_dash_adjust_addr(tp, addr);
+	RTL_W32(tp, ERIAR, cmd);
+
+	rtl_loop_wait_low(tp, &rtl_eriar_cond, 100, 100);
+}
+
 static u32 r8168dp_ocp_read(struct rtl8169_private *tp, u16 reg)
 {
 	RTL_W32(tp, OCPAR, 0x0fu << 12 | (reg & 0x0fff));
-- 
2.31.1


  parent reply	other threads:[~2021-11-29 10:15 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-29 10:13 [RFC PATCH 0/4] r8169: support dash Hayes Wang
2021-11-29 10:13 ` [RFC PATCH 1/4] r8169: remove the relative code about dash Hayes Wang
2021-11-29 10:13 ` Hayes Wang [this message]
2021-11-29 10:13 ` [RFC PATCH 3/4] r8169: support CMAC Hayes Wang
2021-11-29 15:47   ` kernel test robot
2021-11-29 20:46   ` Heiner Kallweit
2021-12-03  7:57     ` Hayes Wang
2021-12-03 11:37       ` Heiner Kallweit
2021-11-29 10:13 ` [RFC PATCH 4/4] r8169: add sysfs for dash Hayes Wang
2021-12-03 15:15   ` Heiner Kallweit
2021-12-07  6:53     ` Hayes Wang
2021-12-07  7:38       ` Heiner Kallweit
2021-12-07  8:20         ` Hayes Wang
2021-11-29 17:59 ` [RFC PATCH 0/4] r8169: support dash Jakub Kicinski
2021-11-29 17:59   ` [Intel-wired-lan] " Jakub Kicinski
2021-12-01  2:57   ` Hayes Wang
2021-12-01  2:57     ` [Intel-wired-lan] " Hayes Wang
2021-12-01  3:09     ` Jakub Kicinski
2021-12-01  3:09       ` [Intel-wired-lan] " Jakub Kicinski
2021-12-03  7:57       ` Hayes Wang
2021-12-03  7:57         ` [Intel-wired-lan] " Hayes Wang
2021-12-03 15:04         ` Jakub Kicinski
2021-12-03 15:04           ` [Intel-wired-lan] " Jakub Kicinski
2021-12-04  1:08           ` Alexander Lobakin
2021-12-04  1:08             ` [Intel-wired-lan] " Alexander Lobakin
2021-12-04  1:32             ` Jakub Kicinski
2021-12-04  1:32               ` [Intel-wired-lan] " Jakub Kicinski
2021-12-07  7:28           ` Hayes Wang
2021-12-07  7:28             ` [Intel-wired-lan] " Hayes Wang
2021-12-08  4:21             ` Jakub Kicinski
2021-12-08  4:21               ` [Intel-wired-lan] " Jakub Kicinski
2021-12-08  7:53               ` Hayes Wang
2021-12-08  7:53                 ` [Intel-wired-lan] " Hayes Wang
2021-12-08 21:37                 ` Jakub Kicinski
2021-12-08 21:37                   ` [Intel-wired-lan] " Jakub Kicinski
2021-12-09  7:14                   ` Hayes Wang
2021-12-09  7:14                     ` [Intel-wired-lan] " Hayes Wang

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=20211129101315.16372-383-nic_swsd@realtek.com \
    --to=hayeswang@realtek.com \
    --cc=hkallweit1@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=nic_swsd@realtek.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.