Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5d2e1957 authored by Hayes Wang's avatar Hayes Wang Committed by Francois Romieu
Browse files

r8169: fix RTL8168DP power off issue.



- fix the RTL8111DP turn off the power when DASH is enabled.
- RTL_GIGA_MAC_VER_27 must wait for tx finish before reset.

Signed-off-by: default avatarHayes Wang <hayeswang@realtek.com>
Acked-by: default avatarFrancois Romieu <romieu@fr.zoreil.com>
parent d24e9aaf
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -2869,8 +2869,11 @@ static void r8168_pll_power_down(struct rtl8169_private *tp)
{
	void __iomem *ioaddr = tp->mmio_addr;

	if (tp->mac_version == RTL_GIGA_MAC_VER_27)
	if (((tp->mac_version == RTL_GIGA_MAC_VER_27) ||
	     (tp->mac_version == RTL_GIGA_MAC_VER_28)) &&
	    (ocp_read(tp, 0x0f, 0x0010) & 0x00008000)) {
		return;
	}

	if (((tp->mac_version == RTL_GIGA_MAC_VER_23) ||
	     (tp->mac_version == RTL_GIGA_MAC_VER_24)) &&
@@ -2892,6 +2895,8 @@ static void r8168_pll_power_down(struct rtl8169_private *tp)
	switch (tp->mac_version) {
	case RTL_GIGA_MAC_VER_25:
	case RTL_GIGA_MAC_VER_26:
	case RTL_GIGA_MAC_VER_27:
	case RTL_GIGA_MAC_VER_28:
		RTL_W8(PMCH, RTL_R8(PMCH) & ~0x80);
		break;
	}
@@ -2901,12 +2906,17 @@ static void r8168_pll_power_up(struct rtl8169_private *tp)
{
	void __iomem *ioaddr = tp->mmio_addr;

	if (tp->mac_version == RTL_GIGA_MAC_VER_27)
	if (((tp->mac_version == RTL_GIGA_MAC_VER_27) ||
	     (tp->mac_version == RTL_GIGA_MAC_VER_28)) &&
	    (ocp_read(tp, 0x0f, 0x0010) & 0x00008000)) {
		return;
	}

	switch (tp->mac_version) {
	case RTL_GIGA_MAC_VER_25:
	case RTL_GIGA_MAC_VER_26:
	case RTL_GIGA_MAC_VER_27:
	case RTL_GIGA_MAC_VER_28:
		RTL_W8(PMCH, RTL_R8(PMCH) | 0x80);
		break;
	}
@@ -3319,7 +3329,8 @@ static void rtl8169_hw_reset(struct rtl8169_private *tp)
	/* Disable interrupts */
	rtl8169_irq_mask_and_ack(ioaddr);

	if (tp->mac_version == RTL_GIGA_MAC_VER_28) {
	if (tp->mac_version == RTL_GIGA_MAC_VER_27 ||
	    tp->mac_version == RTL_GIGA_MAC_VER_28) {
		while (RTL_R8(TxPoll) & NPQ)
			udelay(20);