Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'r8169-improve-wol-suspend-related-code'

Heiner Kallweit says:

====================
r8169: improve wol/suspend-related code

This series improves wol/suspend-related code parts.
====================

Link: https://patch.msgid.link/be734d10-37f7-4830-b7c2-367c0a656c08@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+32 -44
+32 -44
drivers/net/ethernet/realtek/r8169_main.c
··· 748 748 RTL_W8(tp, Config5, (val & ~clear) | set); 749 749 } 750 750 751 + static void r8169_mod_reg8_cond(struct rtl8169_private *tp, int reg, 752 + u8 bits, bool cond) 753 + { 754 + u8 val, old_val; 755 + 756 + old_val = RTL_R8(tp, reg); 757 + if (cond) 758 + val = old_val | bits; 759 + else 760 + val = old_val & ~bits; 761 + if (val != old_val) 762 + RTL_W8(tp, reg, val); 763 + } 764 + 751 765 static bool rtl_is_8125(struct rtl8169_private *tp) 752 766 { 753 767 return tp->mac_version >= RTL_GIGA_MAC_VER_61; ··· 1431 1417 1432 1418 static void rtl_set_d3_pll_down(struct rtl8169_private *tp, bool enable) 1433 1419 { 1434 - switch (tp->mac_version) { 1435 - case RTL_GIGA_MAC_VER_25 ... RTL_GIGA_MAC_VER_26: 1436 - case RTL_GIGA_MAC_VER_29 ... RTL_GIGA_MAC_VER_30: 1437 - case RTL_GIGA_MAC_VER_32 ... RTL_GIGA_MAC_VER_37: 1438 - case RTL_GIGA_MAC_VER_39 ... RTL_GIGA_MAC_VER_66: 1439 - if (enable) 1440 - RTL_W8(tp, PMCH, RTL_R8(tp, PMCH) & ~D3_NO_PLL_DOWN); 1441 - else 1442 - RTL_W8(tp, PMCH, RTL_R8(tp, PMCH) | D3_NO_PLL_DOWN); 1443 - break; 1444 - default: 1445 - break; 1446 - } 1420 + if (tp->mac_version >= RTL_GIGA_MAC_VER_25 && 1421 + tp->mac_version != RTL_GIGA_MAC_VER_28 && 1422 + tp->mac_version != RTL_GIGA_MAC_VER_31 && 1423 + tp->mac_version != RTL_GIGA_MAC_VER_38) 1424 + r8169_mod_reg8_cond(tp, PMCH, D3_NO_PLL_DOWN, !enable); 1447 1425 } 1448 1426 1449 1427 static void rtl_reset_packet_filter(struct rtl8169_private *tp) ··· 1544 1538 1545 1539 static void __rtl8169_set_wol(struct rtl8169_private *tp, u32 wolopts) 1546 1540 { 1547 - static const struct { 1548 - u32 opt; 1549 - u16 reg; 1550 - u8 mask; 1551 - } cfg[] = { 1552 - { WAKE_PHY, Config3, LinkUp }, 1553 - { WAKE_UCAST, Config5, UWF }, 1554 - { WAKE_BCAST, Config5, BWF }, 1555 - { WAKE_MCAST, Config5, MWF }, 1556 - { WAKE_ANY, Config5, LanWake }, 1557 - { WAKE_MAGIC, Config3, MagicPacket } 1558 - }; 1559 - unsigned int i, tmp = ARRAY_SIZE(cfg); 1560 - u8 options; 1561 - 1562 1541 rtl_unlock_config_regs(tp); 1563 1542 1564 1543 if (rtl_is_8168evl_up(tp)) { 1565 - tmp--; 1566 1544 if (wolopts & WAKE_MAGIC) 1567 1545 rtl_eri_set_bits(tp, 0x0dc, MagicPacket_v2); 1568 1546 else 1569 1547 rtl_eri_clear_bits(tp, 0x0dc, MagicPacket_v2); 1570 1548 } else if (rtl_is_8125(tp)) { 1571 - tmp--; 1572 1549 if (wolopts & WAKE_MAGIC) 1573 1550 r8168_mac_ocp_modify(tp, 0xc0b6, 0, BIT(0)); 1574 1551 else 1575 1552 r8168_mac_ocp_modify(tp, 0xc0b6, BIT(0), 0); 1553 + } else { 1554 + r8169_mod_reg8_cond(tp, Config3, MagicPacket, 1555 + wolopts & WAKE_MAGIC); 1576 1556 } 1577 1557 1578 - for (i = 0; i < tmp; i++) { 1579 - options = RTL_R8(tp, cfg[i].reg) & ~cfg[i].mask; 1580 - if (wolopts & cfg[i].opt) 1581 - options |= cfg[i].mask; 1582 - RTL_W8(tp, cfg[i].reg, options); 1583 - } 1558 + r8169_mod_reg8_cond(tp, Config3, LinkUp, wolopts & WAKE_PHY); 1559 + if (rtl_is_8125(tp)) 1560 + r8168_mac_ocp_modify(tp, 0xe0c6, 0x3f, 1561 + wolopts & WAKE_PHY ? 0x13 : 0); 1562 + r8169_mod_reg8_cond(tp, Config5, UWF, wolopts & WAKE_UCAST); 1563 + r8169_mod_reg8_cond(tp, Config5, BWF, wolopts & WAKE_BCAST); 1564 + r8169_mod_reg8_cond(tp, Config5, MWF, wolopts & WAKE_MCAST); 1565 + r8169_mod_reg8_cond(tp, Config5, LanWake, wolopts); 1584 1566 1585 1567 switch (tp->mac_version) { 1586 1568 case RTL_GIGA_MAC_VER_02 ... RTL_GIGA_MAC_VER_06: 1587 - options = RTL_R8(tp, Config1) & ~PMEnable; 1588 - if (wolopts) 1589 - options |= PMEnable; 1590 - RTL_W8(tp, Config1, options); 1569 + r8169_mod_reg8_cond(tp, Config1, PMEnable, wolopts); 1591 1570 break; 1592 1571 case RTL_GIGA_MAC_VER_34: 1593 1572 case RTL_GIGA_MAC_VER_37: 1594 1573 case RTL_GIGA_MAC_VER_39 ... RTL_GIGA_MAC_VER_66: 1595 - if (wolopts) 1596 - rtl_mod_config2(tp, 0, PME_SIGNAL); 1597 - else 1598 - rtl_mod_config2(tp, PME_SIGNAL, 0); 1574 + r8169_mod_reg8_cond(tp, Config2, PME_SIGNAL, wolopts); 1599 1575 break; 1600 1576 default: 1601 1577 break;