From 0517ab8c70e05fc5877c0c6dae1a5f42a16dcf88 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 12 Aug 2024 09:56:44 +0000
Subject: [PATCH] config J_GPIO
---
kernel/drivers/net/ethernet/realtek/r8169_main.c | 54 +++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 43 insertions(+), 11 deletions(-)
diff --git a/kernel/drivers/net/ethernet/realtek/r8169_main.c b/kernel/drivers/net/ethernet/realtek/r8169_main.c
index 28850f7..dc5cc76 100644
--- a/kernel/drivers/net/ethernet/realtek/r8169_main.c
+++ b/kernel/drivers/net/ethernet/realtek/r8169_main.c
@@ -158,7 +158,6 @@
{ PCI_VDEVICE(REALTEK, 0x8129) },
{ PCI_VDEVICE(REALTEK, 0x8136), RTL_CFG_NO_GBIT },
{ PCI_VDEVICE(REALTEK, 0x8161) },
- { PCI_VDEVICE(REALTEK, 0x8162) },
{ PCI_VDEVICE(REALTEK, 0x8167) },
{ PCI_VDEVICE(REALTEK, 0x8168) },
{ PCI_VDEVICE(NCUBE, 0x8168) },
@@ -3201,7 +3200,6 @@
{ 0x01, 0xffff, 0x068b }
};
int rg_saw_cnt;
-
/* disable aspm and clock request before access ephy */
rtl_hw_aspm_clkreq_enable(tp, false);
rtl_ephy_init(tp, e_info_8168h_1);
@@ -3227,8 +3225,13 @@
RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~PFM_EN);
RTL_W8(tp, MISC_1, RTL_R8(tp, MISC_1) & ~PFM_D3COLD_EN);
-
+
RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~TX_10M_PS_EN);
+
+
+ printk("troy 0x18 value init: %x\n",RTL_R16(tp,0x18));
+ RTL_W16(tp, 0x18, 0x042F);
+ printk("troy 0x18 value write: %x\n",RTL_R16(tp,0x18));
rtl_eri_clear_bits(tp, 0x1b0, BIT(12));
@@ -4184,6 +4187,7 @@
static bool rtl8169_tso_csum_v2(struct rtl8169_private *tp,
struct sk_buff *skb, u32 *opts)
{
+ u32 transport_offset = (u32)skb_transport_offset(skb);
struct skb_shared_info *shinfo = skb_shinfo(skb);
u32 mss = shinfo->gso_size;
@@ -4200,7 +4204,7 @@
WARN_ON_ONCE(1);
}
- opts[0] |= skb_transport_offset(skb) << GTTCPHO_SHIFT;
+ opts[0] |= transport_offset << GTTCPHO_SHIFT;
opts[1] |= mss << TD1_MSS_SHIFT;
} else if (skb->ip_summed == CHECKSUM_PARTIAL) {
u8 ip_protocol;
@@ -4228,7 +4232,7 @@
else
WARN_ON_ONCE(1);
- opts[1] |= skb_transport_offset(skb) << TCPHO_SHIFT;
+ opts[1] |= transport_offset << TCPHO_SHIFT;
} else {
unsigned int padto = rtl_quirk_packet_padto(tp, skb);
@@ -4401,13 +4405,14 @@
struct net_device *dev,
netdev_features_t features)
{
+ int transport_offset = skb_transport_offset(skb);
struct rtl8169_private *tp = netdev_priv(dev);
if (skb_is_gso(skb)) {
if (tp->mac_version == RTL_GIGA_MAC_VER_34)
features = rtl8168evl_fix_tso(skb, features);
- if (skb_transport_offset(skb) > GTTCPHO_MAX &&
+ if (transport_offset > GTTCPHO_MAX &&
rtl_chip_supports_csum_v2(tp))
features &= ~NETIF_F_ALL_TSO;
} else if (skb->ip_summed == CHECKSUM_PARTIAL) {
@@ -4418,7 +4423,7 @@
if (rtl_quirk_packet_padto(tp, skb))
features &= ~NETIF_F_CSUM_MASK;
- if (skb_transport_offset(skb) > TCPHO_MAX &&
+ if (transport_offset > TCPHO_MAX &&
rtl_chip_supports_csum_v2(tp))
features &= ~NETIF_F_CSUM_MASK;
}
@@ -5291,13 +5296,14 @@
return rc;
}
-
+extern ssize_t at24_mac_read(unsigned char* mac);
static void rtl_init_mac_address(struct rtl8169_private *tp)
{
struct net_device *dev = tp->dev;
u8 *mac_addr = dev->dev_addr;
- int rc;
-
+ int rc,i;
+ unsigned char mac[6];
+/*
rc = eth_platform_get_mac_address(tp_to_dev(tp), mac_addr);
if (!rc)
goto done;
@@ -5309,6 +5315,29 @@
rtl_read_mac_from_reg(tp, mac_addr, MAC0);
if (is_valid_ether_addr(mac_addr))
goto done;
+*/
+ memset(mac, 0x00, 6);
+ at24_mac_read(mac);
+
+ if ((mac[0] == 0x68) && (mac[1] == 0xed))
+ {
+ printk("troy : rtl811h mac read from eeprom success!! \n");
+ for (i = 0; i < ETH_ALEN; i++)
+ dev->dev_addr[i] = mac[i];
+ }
+ else
+ {
+ printk("troy : rtl811h mac read from eeprom error!! \n");
+ dev->dev_addr[0] = 0x66;
+ dev->dev_addr[1] = 0xED;
+ dev->dev_addr[2] = 0xB5;
+ dev->dev_addr[3] = 0x64;
+ dev->dev_addr[4] = 0x72;
+ dev->dev_addr[5] = 0x2C;
+ }
+ if (is_valid_ether_addr(mac_addr))
+ goto done;
+
eth_hw_addr_random(dev);
dev_warn(tp_to_dev(tp), "can't read MAC address, setting random one\n");
@@ -5316,6 +5345,7 @@
rtl_rar_set(tp, mac_addr);
}
+extern ssize_t at24_mac1_read(unsigned char* mac);
static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
{
struct rtl8169_private *tp;
@@ -5323,6 +5353,7 @@
enum mac_version chipset;
struct net_device *dev;
u16 xid;
+ unsigned char mac[6];
dev = devm_alloc_etherdev(&pdev->dev, sizeof (*tp));
if (!dev)
@@ -5518,4 +5549,5 @@
#endif
};
-module_pci_driver(rtl8169_pci_driver);
+//module_pci_driver(rtl8169_pci_driver);
+module_pci_driver2(rtl8169_pci_driver); //late_initcall();
--
Gitblit v1.6.2