This patch prepares the driver for adding RTL8125 support:
- change type of interrupt mask to u32
- restrict rtl_is_8168evl_up to RTL8168 chip versions
- factor out reading MAC address from registers
- re-add function rtl_get_events
- move disabling interrupt coalescing to RTL8169/RTL8168 init
- read different register for PCI commit
- don't use bit LastFrag in tx descriptor after send, RTL8125 clears it

No functional change intended.

Signed-off-by: Heiner Kallweit <hkallwe...@gmail.com>
---
 drivers/net/ethernet/realtek/r8169_main.c | 44 ++++++++++++++++-------
 1 file changed, 31 insertions(+), 13 deletions(-)

diff --git a/drivers/net/ethernet/realtek/r8169_main.c 
b/drivers/net/ethernet/realtek/r8169_main.c
index faa4041cf..32b444d13 100644
--- a/drivers/net/ethernet/realtek/r8169_main.c
+++ b/drivers/net/ethernet/realtek/r8169_main.c
@@ -645,7 +645,7 @@ struct rtl8169_private {
        struct page *Rx_databuff[NUM_RX_DESC];  /* Rx data buffers */
        struct ring_info tx_skb[NUM_TX_DESC];   /* Tx data buffers */
        u16 cp_cmd;
-       u16 irq_mask;
+       u32 irq_mask;
        struct clk *clk;
 
        struct {
@@ -730,7 +730,8 @@ static void rtl_tx_performance_tweak(struct rtl8169_private 
*tp, u16 force)
 static bool rtl_is_8168evl_up(struct rtl8169_private *tp)
 {
        return tp->mac_version >= RTL_GIGA_MAC_VER_34 &&
-              tp->mac_version != RTL_GIGA_MAC_VER_39;
+              tp->mac_version != RTL_GIGA_MAC_VER_39 &&
+              tp->mac_version <= RTL_GIGA_MAC_VER_51;
 }
 
 static bool rtl_supports_eee(struct rtl8169_private *tp)
@@ -740,6 +741,14 @@ static bool rtl_supports_eee(struct rtl8169_private *tp)
               tp->mac_version != RTL_GIGA_MAC_VER_39;
 }
 
+static void rtl_read_mac_from_reg(struct rtl8169_private *tp, u8 *mac, int reg)
+{
+       int i;
+
+       for (i = 0; i < ETH_ALEN; i++)
+               mac[i] = RTL_R8(tp, reg + i);
+}
+
 struct rtl_cond {
        bool (*check)(struct rtl8169_private *);
        const char *msg;
@@ -1313,7 +1322,12 @@ static u8 rtl8168d_efuse_read(struct rtl8169_private 
*tp, int reg_addr)
                RTL_R32(tp, EFUSEAR) & EFUSEAR_DATA_MASK : ~0;
 }
 
-static void rtl_ack_events(struct rtl8169_private *tp, u16 bits)
+static u32 rtl_get_events(struct rtl8169_private *tp)
+{
+       return RTL_R16(tp, IntrStatus);
+}
+
+static void rtl_ack_events(struct rtl8169_private *tp, u32 bits)
 {
        RTL_W16(tp, IntrStatus, bits);
 }
@@ -1337,7 +1351,7 @@ static void rtl_irq_enable(struct rtl8169_private *tp)
 static void rtl8169_irq_mask_and_ack(struct rtl8169_private *tp)
 {
        rtl_irq_disable(tp);
-       rtl_ack_events(tp, 0xffff);
+       rtl_ack_events(tp, 0xffffffff);
        /* PCI commit */
        RTL_R8(tp, ChipCmd);
 }
@@ -5073,6 +5087,9 @@ static void rtl_hw_start_8168(struct rtl8169_private *tp)
                RTL_W8(tp, MaxTxPacketSize, TxPacketMax);
 
        rtl_hw_config(tp);
+
+       /* disable interrupt coalescing */
+       RTL_W16(tp, IntrMitigate, 0x0000);
 }
 
 static void rtl_hw_start_8169(struct rtl8169_private *tp)
@@ -5096,6 +5113,9 @@ static void rtl_hw_start_8169(struct rtl8169_private *tp)
        rtl8169_set_magic_reg(tp, tp->mac_version);
 
        RTL_W32(tp, RxMissed, 0);
+
+       /* disable interrupt coalescing */
+       RTL_W16(tp, IntrMitigate, 0x0000);
 }
 
 static void rtl_hw_start(struct  rtl8169_private *tp)
@@ -5114,10 +5134,8 @@ static void rtl_hw_start(struct  rtl8169_private *tp)
        rtl_set_rx_tx_desc_registers(tp);
        rtl_lock_config_regs(tp);
 
-       /* disable interrupt coalescing */
-       RTL_W16(tp, IntrMitigate, 0x0000);
        /* Initially a 10 us delay. Turned it into a PCI commit. - FR */
-       RTL_R8(tp, IntrMask);
+       RTL_R8(tp, ChipCmd);
        RTL_W8(tp, ChipCmd, CmdTxEnb | CmdRxEnb);
        rtl_init_rxcfg(tp);
        rtl_set_tx_config_registers(tp);
@@ -5695,7 +5713,7 @@ static void rtl_tx(struct net_device *dev, struct 
rtl8169_private *tp,
 
                rtl8169_unmap_tx_skb(tp_to_dev(tp), tx_skb,
                                     tp->TxDescArray + entry);
-               if (status & LastFrag) {
+               if (tx_skb->skb) {
                        pkts_compl++;
                        bytes_compl += tx_skb->skb->len;
                        napi_consume_skb(tx_skb->skb, budget);
@@ -5854,9 +5872,10 @@ static int rtl_rx(struct net_device *dev, struct 
rtl8169_private *tp, u32 budget
 static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
 {
        struct rtl8169_private *tp = dev_instance;
-       u16 status = RTL_R16(tp, IntrStatus);
+       u32 status = rtl_get_events(tp);
 
-       if (!tp->irq_enabled || status == 0xffff || !(status & tp->irq_mask))
+       if (!tp->irq_enabled || (status & 0xffff) == 0xffff ||
+           !(status & tp->irq_mask))
                return IRQ_NONE;
 
        if (unlikely(status & SYSErr)) {
@@ -6623,7 +6642,7 @@ static void rtl_init_mac_address(struct rtl8169_private 
*tp)
 {
        struct net_device *dev = tp->dev;
        u8 *mac_addr = dev->dev_addr;
-       int rc, i;
+       int rc;
 
        rc = eth_platform_get_mac_address(tp_to_dev(tp), mac_addr);
        if (!rc)
@@ -6633,8 +6652,7 @@ static void rtl_init_mac_address(struct rtl8169_private 
*tp)
        if (is_valid_ether_addr(mac_addr))
                goto done;
 
-       for (i = 0; i < ETH_ALEN; i++)
-               mac_addr[i] = RTL_R8(tp, MAC0 + i);
+       rtl_read_mac_from_reg(tp, mac_addr, MAC0);
        if (is_valid_ether_addr(mac_addr))
                goto done;
 
-- 
2.23.0


Reply via email to