Skip to content

Commit ef712ed

Browse files
hkallweitdavem330
authored andcommitted
r8169: add helper r8168_mac_ocp_modify
Add a helper for MAC OCP read-modify-write operations. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent a14cc4d commit ef712ed

File tree

1 file changed

+19
-46
lines changed

1 file changed

+19
-46
lines changed

drivers/net/ethernet/realtek/r8169_main.c

Lines changed: 19 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -850,6 +850,14 @@ static u16 r8168_mac_ocp_read(struct rtl8169_private *tp, u32 reg)
850850
return RTL_R32(tp, OCPDR);
851851
}
852852

853+
static void r8168_mac_ocp_modify(struct rtl8169_private *tp, u32 reg, u16 mask,
854+
u16 set)
855+
{
856+
u16 data = r8168_mac_ocp_read(tp, reg);
857+
858+
r8168_mac_ocp_write(tp, reg, (data & ~mask) | set);
859+
}
860+
853861
#define OCP_STD_PHY_BASE 0xa400
854862

855863
static void r8168g_mdio_write(struct rtl8169_private *tp, int reg, int value)
@@ -4809,8 +4817,6 @@ static void rtl_hw_start_8411_2(struct rtl8169_private *tp)
48094817

48104818
static void rtl_hw_start_8168h_1(struct rtl8169_private *tp)
48114819
{
4812-
int rg_saw_cnt;
4813-
u32 data;
48144820
static const struct ephy_info e_info_8168h_1[] = {
48154821
{ 0x1e, 0x0800, 0x0001 },
48164822
{ 0x1d, 0x0000, 0x0800 },
@@ -4819,6 +4825,7 @@ static void rtl_hw_start_8168h_1(struct rtl8169_private *tp)
48194825
{ 0x04, 0xffff, 0x154a },
48204826
{ 0x01, 0xffff, 0x068b }
48214827
};
4828+
int rg_saw_cnt;
48224829

48234830
/* disable aspm and clock request before access ephy */
48244831
rtl_hw_aspm_clkreq_enable(tp, false);
@@ -4863,31 +4870,13 @@ static void rtl_hw_start_8168h_1(struct rtl8169_private *tp)
48634870

48644871
sw_cnt_1ms_ini = 16000000/rg_saw_cnt;
48654872
sw_cnt_1ms_ini &= 0x0fff;
4866-
data = r8168_mac_ocp_read(tp, 0xd412);
4867-
data &= ~0x0fff;
4868-
data |= sw_cnt_1ms_ini;
4869-
r8168_mac_ocp_write(tp, 0xd412, data);
4873+
r8168_mac_ocp_modify(tp, 0xd412, 0x0fff, sw_cnt_1ms_ini);
48704874
}
48714875

4872-
data = r8168_mac_ocp_read(tp, 0xe056);
4873-
data &= ~0xf0;
4874-
data |= 0x70;
4875-
r8168_mac_ocp_write(tp, 0xe056, data);
4876-
4877-
data = r8168_mac_ocp_read(tp, 0xe052);
4878-
data &= ~0x6000;
4879-
data |= 0x8008;
4880-
r8168_mac_ocp_write(tp, 0xe052, data);
4881-
4882-
data = r8168_mac_ocp_read(tp, 0xe0d6);
4883-
data &= ~0x01ff;
4884-
data |= 0x017f;
4885-
r8168_mac_ocp_write(tp, 0xe0d6, data);
4886-
4887-
data = r8168_mac_ocp_read(tp, 0xd420);
4888-
data &= ~0x0fff;
4889-
data |= 0x047f;
4890-
r8168_mac_ocp_write(tp, 0xd420, data);
4876+
r8168_mac_ocp_modify(tp, 0xe056, 0x00f0, 0x0070);
4877+
r8168_mac_ocp_modify(tp, 0xe052, 0x6000, 0x8008);
4878+
r8168_mac_ocp_modify(tp, 0xe0d6, 0x01ff, 0x017f);
4879+
r8168_mac_ocp_modify(tp, 0xd420, 0x0fff, 0x047f);
48914880

48924881
r8168_mac_ocp_write(tp, 0xe63e, 0x0001);
48934882
r8168_mac_ocp_write(tp, 0xe63e, 0x0000);
@@ -4969,7 +4958,6 @@ static void rtl_hw_start_8168ep_2(struct rtl8169_private *tp)
49694958

49704959
static void rtl_hw_start_8168ep_3(struct rtl8169_private *tp)
49714960
{
4972-
u32 data;
49734961
static const struct ephy_info e_info_8168ep_3[] = {
49744962
{ 0x00, 0xffff, 0x10a3 },
49754963
{ 0x19, 0xffff, 0x7c00 },
@@ -4986,18 +4974,9 @@ static void rtl_hw_start_8168ep_3(struct rtl8169_private *tp)
49864974
RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~PFM_EN);
49874975
RTL_W8(tp, MISC_1, RTL_R8(tp, MISC_1) & ~PFM_D3COLD_EN);
49884976

4989-
data = r8168_mac_ocp_read(tp, 0xd3e2);
4990-
data &= 0xf000;
4991-
data |= 0x0271;
4992-
r8168_mac_ocp_write(tp, 0xd3e2, data);
4993-
4994-
data = r8168_mac_ocp_read(tp, 0xd3e4);
4995-
data &= 0xff00;
4996-
r8168_mac_ocp_write(tp, 0xd3e4, data);
4997-
4998-
data = r8168_mac_ocp_read(tp, 0xe860);
4999-
data |= 0x0080;
5000-
r8168_mac_ocp_write(tp, 0xe860, data);
4977+
r8168_mac_ocp_modify(tp, 0xd3e2, 0x0fff, 0x0271);
4978+
r8168_mac_ocp_modify(tp, 0xd3e4, 0x00ff, 0x0000);
4979+
r8168_mac_ocp_modify(tp, 0xe860, 0x0000, 0x0080);
50014980

50024981
rtl_hw_aspm_clkreq_enable(tp, true);
50034982
}
@@ -6657,8 +6636,6 @@ static int r8169_mdio_register(struct rtl8169_private *tp)
66576636

66586637
static void rtl_hw_init_8168g(struct rtl8169_private *tp)
66596638
{
6660-
u32 data;
6661-
66626639
tp->ocp_base = OCP_STD_PHY_BASE;
66636640

66646641
RTL_W32(tp, MISC, RTL_R32(tp, MISC) | RXDV_GATED_EN);
@@ -6673,16 +6650,12 @@ static void rtl_hw_init_8168g(struct rtl8169_private *tp)
66736650
msleep(1);
66746651
RTL_W8(tp, MCU, RTL_R8(tp, MCU) & ~NOW_IS_OOB);
66756652

6676-
data = r8168_mac_ocp_read(tp, 0xe8de);
6677-
data &= ~(1 << 14);
6678-
r8168_mac_ocp_write(tp, 0xe8de, data);
6653+
r8168_mac_ocp_modify(tp, 0xe8de, BIT(14), 0);
66796654

66806655
if (!rtl_udelay_loop_wait_high(tp, &rtl_link_list_ready_cond, 100, 42))
66816656
return;
66826657

6683-
data = r8168_mac_ocp_read(tp, 0xe8de);
6684-
data |= (1 << 15);
6685-
r8168_mac_ocp_write(tp, 0xe8de, data);
6658+
r8168_mac_ocp_modify(tp, 0xe8de, 0, BIT(15));
66866659

66876660
rtl_udelay_loop_wait_high(tp, &rtl_link_list_ready_cond, 100, 42);
66886661
}

0 commit comments

Comments
 (0)