Skip to content

Commit e397286

Browse files
hkallweitdavem330
authored andcommitted
r8169: remove TBI 1000BaseX support
The very first version of RTL8169 from 2002 (and only this one) has support for a TBI 1000BaseX fiber interface. The TBI support in the driver makes switching to phylib tricky, so best would be to get rid of it. I found no report from anybody using a device with RTL8169 and fiber interface, also the vendor driver doesn't support this mode (any longer). So remove TBI support and bail out with a message if a card with activated TBI is detected. If there really should be any user of it out there, we could add a stripped-down version of the driver supporting chip version 01 and TBI only (and maybe move it to staging). Signed-off-by: Heiner Kallweit <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 759f29b commit e397286

File tree

1 file changed

+20
-136
lines changed
  • drivers/net/ethernet/realtek

1 file changed

+20
-136
lines changed

drivers/net/ethernet/realtek/r8169.c

Lines changed: 20 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -384,12 +384,6 @@ enum rtl_registers {
384384
FuncForceEvent = 0xfc,
385385
};
386386

387-
enum rtl8110_registers {
388-
TBICSR = 0x64,
389-
TBI_ANAR = 0x68,
390-
TBI_LPAR = 0x6a,
391-
};
392-
393387
enum rtl8168_8101_registers {
394388
CSIDR = 0x64,
395389
CSIAR = 0x68,
@@ -556,14 +550,6 @@ enum rtl_register_content {
556550
PMEStatus = (1 << 0), /* PME status can be reset by PCI RST# */
557551
ASPM_en = (1 << 0), /* ASPM enable */
558552

559-
/* TBICSR p.28 */
560-
TBIReset = 0x80000000,
561-
TBILoopback = 0x40000000,
562-
TBINwEnable = 0x20000000,
563-
TBINwRestart = 0x10000000,
564-
TBILinkOk = 0x02000000,
565-
TBINwComplete = 0x01000000,
566-
567553
/* CPlusCmd p.31 */
568554
EnableBist = (1 << 15), // 8168 8101
569555
Mac_dbgo_oe = (1 << 14), // 8168 8101
@@ -761,14 +747,7 @@ struct rtl8169_private {
761747
void (*disable)(struct rtl8169_private *);
762748
} jumbo_ops;
763749

764-
int (*set_speed)(struct net_device *, u8 aneg, u16 sp, u8 dpx, u32 adv);
765-
int (*get_link_ksettings)(struct net_device *,
766-
struct ethtool_link_ksettings *);
767-
void (*phy_reset_enable)(struct rtl8169_private *tp);
768750
void (*hw_start)(struct rtl8169_private *tp);
769-
unsigned int (*phy_reset_pending)(struct rtl8169_private *tp);
770-
unsigned int (*link_ok)(struct rtl8169_private *tp);
771-
int (*do_ioctl)(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd);
772751
bool (*tso_csum)(struct rtl8169_private *, struct sk_buff *, u32 *);
773752

774753
struct {
@@ -1463,31 +1442,16 @@ static void rtl8169_irq_mask_and_ack(struct rtl8169_private *tp)
14631442
RTL_R8(tp, ChipCmd);
14641443
}
14651444

1466-
static unsigned int rtl8169_tbi_reset_pending(struct rtl8169_private *tp)
1467-
{
1468-
return RTL_R32(tp, TBICSR) & TBIReset;
1469-
}
1470-
14711445
static unsigned int rtl8169_xmii_reset_pending(struct rtl8169_private *tp)
14721446
{
14731447
return rtl_readphy(tp, MII_BMCR) & BMCR_RESET;
14741448
}
14751449

1476-
static unsigned int rtl8169_tbi_link_ok(struct rtl8169_private *tp)
1477-
{
1478-
return RTL_R32(tp, TBICSR) & TBILinkOk;
1479-
}
1480-
14811450
static unsigned int rtl8169_xmii_link_ok(struct rtl8169_private *tp)
14821451
{
14831452
return RTL_R8(tp, PHYstatus) & LinkStatus;
14841453
}
14851454

1486-
static void rtl8169_tbi_reset_enable(struct rtl8169_private *tp)
1487-
{
1488-
RTL_W32(tp, TBICSR, RTL_R32(tp, TBICSR) | TBIReset);
1489-
}
1490-
14911455
static void rtl8169_xmii_reset_enable(struct rtl8169_private *tp)
14921456
{
14931457
unsigned int val;
@@ -1557,7 +1521,7 @@ static void rtl8169_check_link_status(struct net_device *dev,
15571521
{
15581522
struct device *d = tp_to_dev(tp);
15591523

1560-
if (tp->link_ok(tp)) {
1524+
if (rtl8169_xmii_link_ok(tp)) {
15611525
rtl_link_chg_patch(tp);
15621526
/* This is to cancel a scheduled suspend if there's one. */
15631527
pm_request_resume(d);
@@ -1744,28 +1708,6 @@ static int rtl8169_get_regs_len(struct net_device *dev)
17441708
return R8169_REGS_SIZE;
17451709
}
17461710

1747-
static int rtl8169_set_speed_tbi(struct net_device *dev,
1748-
u8 autoneg, u16 speed, u8 duplex, u32 ignored)
1749-
{
1750-
struct rtl8169_private *tp = netdev_priv(dev);
1751-
int ret = 0;
1752-
u32 reg;
1753-
1754-
reg = RTL_R32(tp, TBICSR);
1755-
if ((autoneg == AUTONEG_DISABLE) && (speed == SPEED_1000) &&
1756-
(duplex == DUPLEX_FULL)) {
1757-
RTL_W32(tp, TBICSR, reg & ~(TBINwEnable | TBINwRestart));
1758-
} else if (autoneg == AUTONEG_ENABLE)
1759-
RTL_W32(tp, TBICSR, reg | TBINwEnable | TBINwRestart);
1760-
else {
1761-
netif_warn(tp, link, dev,
1762-
"incorrect speed setting refused in TBI mode\n");
1763-
ret = -EOPNOTSUPP;
1764-
}
1765-
1766-
return ret;
1767-
}
1768-
17691711
static int rtl8169_set_speed_xmii(struct net_device *dev,
17701712
u8 autoneg, u16 speed, u8 duplex, u32 adv)
17711713
{
@@ -1849,7 +1791,7 @@ static int rtl8169_set_speed(struct net_device *dev,
18491791
struct rtl8169_private *tp = netdev_priv(dev);
18501792
int ret;
18511793

1852-
ret = tp->set_speed(dev, autoneg, speed, duplex, advertising);
1794+
ret = rtl8169_set_speed_xmii(dev, autoneg, speed, duplex, advertising);
18531795
if (ret < 0)
18541796
goto out;
18551797

@@ -1925,53 +1867,14 @@ static void rtl8169_rx_vlan_tag(struct RxDesc *desc, struct sk_buff *skb)
19251867
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), swab16(opts2 & 0xffff));
19261868
}
19271869

1928-
static int rtl8169_get_link_ksettings_tbi(struct net_device *dev,
1929-
struct ethtool_link_ksettings *cmd)
1930-
{
1931-
struct rtl8169_private *tp = netdev_priv(dev);
1932-
u32 status;
1933-
u32 supported, advertising;
1934-
1935-
supported =
1936-
SUPPORTED_1000baseT_Full | SUPPORTED_Autoneg | SUPPORTED_FIBRE;
1937-
cmd->base.port = PORT_FIBRE;
1938-
1939-
status = RTL_R32(tp, TBICSR);
1940-
advertising = (status & TBINwEnable) ? ADVERTISED_Autoneg : 0;
1941-
cmd->base.autoneg = !!(status & TBINwEnable);
1942-
1943-
cmd->base.speed = SPEED_1000;
1944-
cmd->base.duplex = DUPLEX_FULL; /* Always set */
1945-
1946-
ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
1947-
supported);
1948-
ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
1949-
advertising);
1950-
1951-
return 0;
1952-
}
1953-
1954-
static int rtl8169_get_link_ksettings_xmii(struct net_device *dev,
1955-
struct ethtool_link_ksettings *cmd)
1956-
{
1957-
struct rtl8169_private *tp = netdev_priv(dev);
1958-
1959-
mii_ethtool_get_link_ksettings(&tp->mii, cmd);
1960-
1961-
return 0;
1962-
}
1963-
19641870
static int rtl8169_get_link_ksettings(struct net_device *dev,
19651871
struct ethtool_link_ksettings *cmd)
19661872
{
19671873
struct rtl8169_private *tp = netdev_priv(dev);
1968-
int rc;
19691874

1970-
rtl_lock_work(tp);
1971-
rc = tp->get_link_ksettings(dev, cmd);
1972-
rtl_unlock_work(tp);
1875+
mii_ethtool_get_link_ksettings(&tp->mii, cmd);
19731876

1974-
return rc;
1877+
return 0;
19751878
}
19761879

19771880
static int rtl8169_set_link_ksettings(struct net_device *dev,
@@ -4395,7 +4298,7 @@ static void rtl_phy_work(struct rtl8169_private *tp)
43954298
struct timer_list *timer = &tp->timer;
43964299
unsigned long timeout = RTL8169_PHY_TIMEOUT;
43974300

4398-
if (tp->phy_reset_pending(tp)) {
4301+
if (rtl8169_xmii_reset_pending(tp)) {
43994302
/*
44004303
* A busy loop could burn quite a few cycles on nowadays CPU.
44014304
* Let's delay the execution of the timer for a few ticks.
@@ -4404,12 +4307,12 @@ static void rtl_phy_work(struct rtl8169_private *tp)
44044307
goto out_mod_timer;
44054308
}
44064309

4407-
if (tp->link_ok(tp))
4310+
if (rtl8169_xmii_link_ok(tp))
44084311
return;
44094312

44104313
netif_dbg(tp, link, tp->dev, "PHY reset until link up\n");
44114314

4412-
tp->phy_reset_enable(tp);
4315+
rtl8169_xmii_reset_enable(tp);
44134316

44144317
out_mod_timer:
44154318
mod_timer(timer, jiffies + timeout);
@@ -4430,20 +4333,20 @@ static void rtl8169_phy_timer(struct timer_list *t)
44304333

44314334
DECLARE_RTL_COND(rtl_phy_reset_cond)
44324335
{
4433-
return tp->phy_reset_pending(tp);
4336+
return rtl8169_xmii_reset_pending(tp);
44344337
}
44354338

44364339
static void rtl8169_phy_reset(struct net_device *dev,
44374340
struct rtl8169_private *tp)
44384341
{
4439-
tp->phy_reset_enable(tp);
4342+
rtl8169_xmii_reset_enable(tp);
44404343
rtl_msleep_loop_wait_low(tp, &rtl_phy_reset_cond, 1, 100);
44414344
}
44424345

44434346
static bool rtl_tbi_enabled(struct rtl8169_private *tp)
44444347
{
44454348
return (tp->mac_version == RTL_GIGA_MAC_VER_01) &&
4446-
(RTL_R8(tp, PHYstatus) & TBI_Enable);
4349+
(RTL_R8(tp, PHYstatus) & TBI_Enable);
44474350
}
44484351

44494352
static void rtl8169_init_phy(struct net_device *dev, struct rtl8169_private *tp)
@@ -4478,9 +4381,6 @@ static void rtl8169_init_phy(struct net_device *dev, struct rtl8169_private *tp)
44784381
(tp->mii.supports_gmii ?
44794382
ADVERTISED_1000baseT_Half |
44804383
ADVERTISED_1000baseT_Full : 0));
4481-
4482-
if (rtl_tbi_enabled(tp))
4483-
netif_info(tp, link, dev, "TBI auto-negotiating\n");
44844384
}
44854385

44864386
static void rtl_rar_set(struct rtl8169_private *tp, u8 *addr)
@@ -4523,14 +4423,6 @@ static int rtl_set_mac_address(struct net_device *dev, void *p)
45234423
return 0;
45244424
}
45254425

4526-
static int rtl8169_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
4527-
{
4528-
struct rtl8169_private *tp = netdev_priv(dev);
4529-
struct mii_ioctl_data *data = if_mii(ifr);
4530-
4531-
return netif_running(dev) ? tp->do_ioctl(tp, data, cmd) : -ENODEV;
4532-
}
4533-
45344426
static int rtl_xmii_ioctl(struct rtl8169_private *tp,
45354427
struct mii_ioctl_data *data, int cmd)
45364428
{
@@ -4550,9 +4442,12 @@ static int rtl_xmii_ioctl(struct rtl8169_private *tp,
45504442
return -EOPNOTSUPP;
45514443
}
45524444

4553-
static int rtl_tbi_ioctl(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd)
4445+
static int rtl8169_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
45544446
{
4555-
return -EOPNOTSUPP;
4447+
struct rtl8169_private *tp = netdev_priv(dev);
4448+
struct mii_ioctl_data *data = if_mii(ifr);
4449+
4450+
return netif_running(dev) ? rtl_xmii_ioctl(tp, data, cmd) : -ENODEV;
45564451
}
45574452

45584453
static void rtl_init_mdio_ops(struct rtl8169_private *tp)
@@ -7676,6 +7571,11 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
76767571
/* Identify chip attached to board */
76777572
rtl8169_get_mac_version(tp, cfg->default_ver);
76787573

7574+
if (rtl_tbi_enabled(tp)) {
7575+
dev_err(&pdev->dev, "TBI fiber mode not supported\n");
7576+
return -ENODEV;
7577+
}
7578+
76797579
tp->cp_cmd = RTL_R16(tp, CPlusCmd);
76807580

76817581
if ((sizeof(dma_addr_t) > 4) &&
@@ -7724,22 +7624,6 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
77247624
/* override BIOS settings, use userspace tools to enable WOL */
77257625
__rtl8169_set_wol(tp, 0);
77267626

7727-
if (rtl_tbi_enabled(tp)) {
7728-
tp->set_speed = rtl8169_set_speed_tbi;
7729-
tp->get_link_ksettings = rtl8169_get_link_ksettings_tbi;
7730-
tp->phy_reset_enable = rtl8169_tbi_reset_enable;
7731-
tp->phy_reset_pending = rtl8169_tbi_reset_pending;
7732-
tp->link_ok = rtl8169_tbi_link_ok;
7733-
tp->do_ioctl = rtl_tbi_ioctl;
7734-
} else {
7735-
tp->set_speed = rtl8169_set_speed_xmii;
7736-
tp->get_link_ksettings = rtl8169_get_link_ksettings_xmii;
7737-
tp->phy_reset_enable = rtl8169_xmii_reset_enable;
7738-
tp->phy_reset_pending = rtl8169_xmii_reset_pending;
7739-
tp->link_ok = rtl8169_xmii_link_ok;
7740-
tp->do_ioctl = rtl_xmii_ioctl;
7741-
}
7742-
77437627
mutex_init(&tp->wk.mutex);
77447628
u64_stats_init(&tp->rx_stats.syncp);
77457629
u64_stats_init(&tp->tx_stats.syncp);

0 commit comments

Comments
 (0)