Skip to content

Commit e8b0339

Browse files
committed
Merge branch 'net-lan743x-pci11010-pci11414-devices-enhancements'
Raju Lakkaraju says: ==================== net: lan743x: PCI11010 / PCI11414 devices Enhancements This patch series continues with the addition of supported features for the Ethernet function of the PCI11010 / PCI11414 devices to the LAN743x driver. ==================== Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents f050272 + 311abcd commit e8b0339

File tree

5 files changed

+567
-9
lines changed

5 files changed

+567
-9
lines changed

drivers/net/ethernet/microchip/lan743x_ethtool.c

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@ static int lan743x_otp_write(struct lan743x_adapter *adapter, u32 offset,
155155
return 0;
156156
}
157157

158-
static int lan743x_hs_syslock_acquire(struct lan743x_adapter *adapter,
159-
u16 timeout)
158+
int lan743x_hs_syslock_acquire(struct lan743x_adapter *adapter,
159+
u16 timeout)
160160
{
161161
u16 timeout_cnt = 0;
162162
u32 val;
@@ -192,7 +192,7 @@ static int lan743x_hs_syslock_acquire(struct lan743x_adapter *adapter,
192192
return 0;
193193
}
194194

195-
static void lan743x_hs_syslock_release(struct lan743x_adapter *adapter)
195+
void lan743x_hs_syslock_release(struct lan743x_adapter *adapter)
196196
{
197197
u32 val;
198198

@@ -1149,7 +1149,12 @@ static void lan743x_ethtool_get_wol(struct net_device *netdev,
11491149
wol->supported |= WAKE_BCAST | WAKE_UCAST | WAKE_MCAST |
11501150
WAKE_MAGIC | WAKE_PHY | WAKE_ARP;
11511151

1152+
if (adapter->is_pci11x1x)
1153+
wol->supported |= WAKE_MAGICSECURE;
1154+
11521155
wol->wolopts |= adapter->wolopts;
1156+
if (adapter->wolopts & WAKE_MAGICSECURE)
1157+
memcpy(wol->sopass, adapter->sopass, sizeof(wol->sopass));
11531158
}
11541159

11551160
static int lan743x_ethtool_set_wol(struct net_device *netdev,
@@ -1170,6 +1175,13 @@ static int lan743x_ethtool_set_wol(struct net_device *netdev,
11701175
adapter->wolopts |= WAKE_PHY;
11711176
if (wol->wolopts & WAKE_ARP)
11721177
adapter->wolopts |= WAKE_ARP;
1178+
if (wol->wolopts & WAKE_MAGICSECURE &&
1179+
wol->wolopts & WAKE_MAGIC) {
1180+
memcpy(adapter->sopass, wol->sopass, sizeof(wol->sopass));
1181+
adapter->wolopts |= WAKE_MAGICSECURE;
1182+
} else {
1183+
memset(adapter->sopass, 0, sizeof(u8) * SOPASS_MAX);
1184+
}
11731185

11741186
device_set_wakeup_enable(&adapter->pdev->dev, (bool)wol->wolopts);
11751187

@@ -1178,6 +1190,49 @@ static int lan743x_ethtool_set_wol(struct net_device *netdev,
11781190
}
11791191
#endif /* CONFIG_PM */
11801192

1193+
static void lan743x_common_regs(struct net_device *dev,
1194+
struct ethtool_regs *regs, void *p)
1195+
1196+
{
1197+
struct lan743x_adapter *adapter = netdev_priv(dev);
1198+
u32 *rb = p;
1199+
1200+
memset(p, 0, (MAX_LAN743X_ETH_REGS * sizeof(u32)));
1201+
1202+
rb[ETH_PRIV_FLAGS] = adapter->flags;
1203+
rb[ETH_ID_REV] = lan743x_csr_read(adapter, ID_REV);
1204+
rb[ETH_FPGA_REV] = lan743x_csr_read(adapter, FPGA_REV);
1205+
rb[ETH_STRAP_READ] = lan743x_csr_read(adapter, STRAP_READ);
1206+
rb[ETH_INT_STS] = lan743x_csr_read(adapter, INT_STS);
1207+
rb[ETH_HW_CFG] = lan743x_csr_read(adapter, HW_CFG);
1208+
rb[ETH_PMT_CTL] = lan743x_csr_read(adapter, PMT_CTL);
1209+
rb[ETH_E2P_CMD] = lan743x_csr_read(adapter, E2P_CMD);
1210+
rb[ETH_E2P_DATA] = lan743x_csr_read(adapter, E2P_DATA);
1211+
rb[ETH_MAC_CR] = lan743x_csr_read(adapter, MAC_CR);
1212+
rb[ETH_MAC_RX] = lan743x_csr_read(adapter, MAC_RX);
1213+
rb[ETH_MAC_TX] = lan743x_csr_read(adapter, MAC_TX);
1214+
rb[ETH_FLOW] = lan743x_csr_read(adapter, MAC_FLOW);
1215+
rb[ETH_MII_ACC] = lan743x_csr_read(adapter, MAC_MII_ACC);
1216+
rb[ETH_MII_DATA] = lan743x_csr_read(adapter, MAC_MII_DATA);
1217+
rb[ETH_EEE_TX_LPI_REQ_DLY] = lan743x_csr_read(adapter,
1218+
MAC_EEE_TX_LPI_REQ_DLY_CNT);
1219+
rb[ETH_WUCSR] = lan743x_csr_read(adapter, MAC_WUCSR);
1220+
rb[ETH_WK_SRC] = lan743x_csr_read(adapter, MAC_WK_SRC);
1221+
}
1222+
1223+
static int lan743x_get_regs_len(struct net_device *dev)
1224+
{
1225+
return MAX_LAN743X_ETH_REGS * sizeof(u32);
1226+
}
1227+
1228+
static void lan743x_get_regs(struct net_device *dev,
1229+
struct ethtool_regs *regs, void *p)
1230+
{
1231+
regs->version = LAN743X_ETH_REG_VERSION;
1232+
1233+
lan743x_common_regs(dev, regs, p);
1234+
}
1235+
11811236
const struct ethtool_ops lan743x_ethtool_ops = {
11821237
.get_drvinfo = lan743x_ethtool_get_drvinfo,
11831238
.get_msglevel = lan743x_ethtool_get_msglevel,
@@ -1202,6 +1257,8 @@ const struct ethtool_ops lan743x_ethtool_ops = {
12021257
.set_eee = lan743x_ethtool_set_eee,
12031258
.get_link_ksettings = phy_ethtool_get_link_ksettings,
12041259
.set_link_ksettings = phy_ethtool_set_link_ksettings,
1260+
.get_regs_len = lan743x_get_regs_len,
1261+
.get_regs = lan743x_get_regs,
12051262
#ifdef CONFIG_PM
12061263
.get_wol = lan743x_ethtool_get_wol,
12071264
.set_wol = lan743x_ethtool_set_wol,

drivers/net/ethernet/microchip/lan743x_ethtool.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,32 @@
66

77
#include "linux/ethtool.h"
88

9+
#define LAN743X_ETH_REG_VERSION 1
10+
11+
enum {
12+
ETH_PRIV_FLAGS,
13+
ETH_ID_REV,
14+
ETH_FPGA_REV,
15+
ETH_STRAP_READ,
16+
ETH_INT_STS,
17+
ETH_HW_CFG,
18+
ETH_PMT_CTL,
19+
ETH_E2P_CMD,
20+
ETH_E2P_DATA,
21+
ETH_MAC_CR,
22+
ETH_MAC_RX,
23+
ETH_MAC_TX,
24+
ETH_FLOW,
25+
ETH_MII_ACC,
26+
ETH_MII_DATA,
27+
ETH_EEE_TX_LPI_REQ_DLY,
28+
ETH_WUCSR,
29+
ETH_WK_SRC,
30+
31+
/* Add new registers above */
32+
MAX_LAN743X_ETH_REGS
33+
};
34+
935
extern const struct ethtool_ops lan743x_ethtool_ops;
1036

1137
#endif /* _LAN743X_ETHTOOL_H */

0 commit comments

Comments
 (0)