Lines Matching defs:adapter
28 static void pci11x1x_strap_get_status(struct lan743x_adapter *adapter)
37 ret = lan743x_hs_syslock_acquire(adapter, 100);
39 netif_err(adapter, drv, adapter->netdev,
44 cfg_load = lan743x_csr_read(adapter, ETH_SYS_CONFIG_LOAD_STARTED_REG);
45 lan743x_hs_syslock_release(adapter);
46 hw_cfg = lan743x_csr_read(adapter, HW_CFG);
50 strap = lan743x_csr_read(adapter, STRAP_READ);
52 adapter->is_sgmii_en = true;
54 adapter->is_sgmii_en = false;
56 chip_rev = lan743x_csr_read(adapter, FPGA_REV);
59 adapter->is_sgmii_en = true;
61 adapter->is_sgmii_en = false;
63 adapter->is_sgmii_en = false;
66 netif_dbg(adapter, drv, adapter->netdev,
67 "SGMII I/F %sable\n", adapter->is_sgmii_en ? "En" : "Dis");
70 static bool is_pci11x1x_chip(struct lan743x_adapter *adapter)
72 struct lan743x_csr *csr = &adapter->csr;
82 static void lan743x_pci_cleanup(struct lan743x_adapter *adapter)
84 pci_release_selected_regions(adapter->pdev,
85 pci_select_bars(adapter->pdev,
87 pci_disable_device(adapter->pdev);
90 static int lan743x_pci_init(struct lan743x_adapter *adapter,
96 adapter->pdev = pdev;
101 netif_info(adapter, probe, adapter->netdev,
116 pci_disable_device(adapter->pdev);
122 u32 lan743x_csr_read(struct lan743x_adapter *adapter, int offset)
124 return ioread32(&adapter->csr.csr_address[offset]);
127 void lan743x_csr_write(struct lan743x_adapter *adapter, int offset,
130 iowrite32(data, &adapter->csr.csr_address[offset]);
133 #define LAN743X_CSR_READ_OP(offset) lan743x_csr_read(adapter, offset)
135 static int lan743x_csr_light_reset(struct lan743x_adapter *adapter)
139 data = lan743x_csr_read(adapter, HW_CFG);
141 lan743x_csr_write(adapter, HW_CFG, data);
147 static int lan743x_csr_wait_for_bit_atomic(struct lan743x_adapter *adapter,
159 static int lan743x_csr_wait_for_bit(struct lan743x_adapter *adapter,
171 static int lan743x_csr_init(struct lan743x_adapter *adapter)
173 struct lan743x_csr *csr = &adapter->csr;
176 bar_start = pci_resource_start(adapter->pdev, 0);
177 bar_length = pci_resource_len(adapter->pdev, 0);
178 csr->csr_address = devm_ioremap(&adapter->pdev->dev,
183 csr->id_rev = lan743x_csr_read(adapter, ID_REV);
184 csr->fpga_rev = lan743x_csr_read(adapter, FPGA_REV);
185 netif_info(adapter, probe, adapter->netdev,
203 return lan743x_csr_light_reset(adapter);
206 static void lan743x_intr_software_isr(struct lan743x_adapter *adapter)
208 struct lan743x_intr *intr = &adapter->intr;
211 lan743x_csr_write(adapter, INT_EN_CLR, INT_BIT_SW_GP_);
219 struct lan743x_adapter *adapter = tx->adapter;
222 lan743x_csr_read(adapter, INT_EN_SET);
224 lan743x_csr_write(adapter, INT_EN_CLR,
234 dmac_int_sts = lan743x_csr_read(adapter, DMAC_INT_STS);
238 dmac_int_en = lan743x_csr_read(adapter,
253 lan743x_csr_write(adapter, INT_EN_SET,
260 struct lan743x_adapter *adapter = rx->adapter;
264 lan743x_csr_write(adapter, INT_EN_CLR,
274 dmac_int_sts = lan743x_csr_read(adapter, DMAC_INT_STS);
278 dmac_int_en = lan743x_csr_read(adapter,
293 lan743x_csr_write(adapter, INT_EN_SET,
300 struct lan743x_adapter *adapter = context;
309 lan743x_rx_isr(&adapter->rx[channel],
316 for (channel = 0; channel < adapter->used_tx_channels;
321 lan743x_tx_isr(&adapter->tx[channel],
329 lan743x_intr_software_isr(adapter);
333 lan743x_ptp_isr(adapter);
338 lan743x_csr_write(adapter, INT_EN_CLR, int_sts);
344 struct lan743x_adapter *adapter = vector->adapter;
350 int_sts = lan743x_csr_read(adapter, INT_STS);
354 int_sts = lan743x_csr_read(adapter, INT_STS_R2C);
365 lan743x_csr_write(adapter,
371 lan743x_csr_write(adapter, INT_EN_CLR, INT_BIT_MAS_);
374 int_enables = lan743x_csr_read(adapter, INT_EN_SET);
388 lan743x_csr_write(adapter, INT_EN_CLR,
396 lan743x_csr_write(adapter, INT_EN_SET, INT_BIT_MAS_);
400 lan743x_csr_write(adapter,
407 static int lan743x_intr_test_isr(struct lan743x_adapter *adapter)
409 struct lan743x_intr *intr = &adapter->intr;
415 lan743x_csr_write(adapter, INT_EN_SET, INT_BIT_SW_GP_);
416 lan743x_csr_write(adapter, INT_SET, INT_BIT_SW_GP_);
423 lan743x_csr_write(adapter, INT_EN_CLR, INT_BIT_SW_GP_);
428 static int lan743x_intr_register_isr(struct lan743x_adapter *adapter,
434 struct lan743x_vector *vector = &adapter->intr.vector_list
438 vector->adapter = adapter;
458 static void lan743x_intr_unregister_isr(struct lan743x_adapter *adapter,
461 struct lan743x_vector *vector = &adapter->intr.vector_list
471 static u32 lan743x_intr_get_vector_flags(struct lan743x_adapter *adapter,
476 for (index = 0; index < adapter->max_vector_count; index++) {
477 if (adapter->intr.vector_list[index].int_mask & int_mask)
478 return adapter->intr.vector_list[index].flags;
483 static void lan743x_intr_close(struct lan743x_adapter *adapter)
485 struct lan743x_intr *intr = &adapter->intr;
488 lan743x_csr_write(adapter, INT_EN_CLR, INT_BIT_MAS_);
489 if (adapter->is_pci11x1x)
490 lan743x_csr_write(adapter, INT_VEC_EN_CLR, 0x0000FFFF);
492 lan743x_csr_write(adapter, INT_VEC_EN_CLR, 0x000000FF);
496 lan743x_intr_unregister_isr(adapter, index);
502 pci_disable_msi(adapter->pdev);
507 pci_disable_msix(adapter->pdev);
512 static int lan743x_intr_open(struct lan743x_adapter *adapter)
515 struct lan743x_intr *intr = &adapter->intr;
528 max_vector_count = adapter->max_vector_count;
533 used_tx_channels = adapter->used_tx_channels;
534 ret = pci_enable_msix_range(adapter->pdev,
546 netif_info(adapter, ifup, adapter->netdev,
553 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) {
554 if (!pci_enable_msi(adapter->pdev)) {
559 adapter->pdev->irq;
560 netif_info(adapter, ifup, adapter->netdev,
572 netif_info(adapter, ifup, adapter->netdev,
577 lan743x_csr_write(adapter, INT_VEC_EN_CLR, 0xFFFFFFFF);
580 lan743x_csr_write(adapter, INT_VEC_MAP0, 0x00000000);
581 lan743x_csr_write(adapter, INT_VEC_MAP1, 0x00000000);
582 lan743x_csr_write(adapter, INT_VEC_MAP2, 0x00000000);
597 if (adapter->csr.flags & LAN743X_CSR_FLAG_SUPPORTS_INTR_AUTO_SET_CLR) {
608 ret = lan743x_intr_register_isr(adapter, 0, flags,
611 lan743x_intr_shared_isr, adapter);
617 lan743x_csr_write(adapter, INT_VEC_EN_SET,
620 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) {
621 lan743x_csr_write(adapter, INT_MOD_CFG0, LAN743X_INT_MOD);
622 lan743x_csr_write(adapter, INT_MOD_CFG1, LAN743X_INT_MOD);
623 lan743x_csr_write(adapter, INT_MOD_CFG2, LAN743X_INT_MOD);
624 lan743x_csr_write(adapter, INT_MOD_CFG3, LAN743X_INT_MOD);
625 lan743x_csr_write(adapter, INT_MOD_CFG4, LAN743X_INT_MOD);
626 lan743x_csr_write(adapter, INT_MOD_CFG5, LAN743X_INT_MOD);
627 lan743x_csr_write(adapter, INT_MOD_CFG6, LAN743X_INT_MOD);
628 lan743x_csr_write(adapter, INT_MOD_CFG7, LAN743X_INT_MOD);
629 if (adapter->is_pci11x1x) {
630 lan743x_csr_write(adapter, INT_MOD_CFG8, LAN743X_INT_MOD);
631 lan743x_csr_write(adapter, INT_MOD_CFG9, LAN743X_INT_MOD);
632 lan743x_csr_write(adapter, INT_MOD_MAP0, 0x00007654);
633 lan743x_csr_write(adapter, INT_MOD_MAP1, 0x00003210);
635 lan743x_csr_write(adapter, INT_MOD_MAP0, 0x00005432);
636 lan743x_csr_write(adapter, INT_MOD_MAP1, 0x00000001);
638 lan743x_csr_write(adapter, INT_MOD_MAP2, 0x00FFFFFF);
642 lan743x_csr_write(adapter, INT_EN_SET, INT_BIT_MAS_);
643 ret = lan743x_intr_test_isr(adapter);
659 if (adapter->csr.flags &
673 lan743x_csr_write(adapter, INT_VEC_MAP1, int_vec_map1);
677 ret = lan743x_intr_register_isr(adapter, vector, flags,
679 &adapter->tx[index]);
685 lan743x_csr_write(adapter, INT_VEC_EN_SET,
703 if (adapter->csr.flags &
717 lan743x_csr_write(adapter, INT_VEC_MAP0, int_vec_map0);
721 lan743x_csr_write(adapter, INT_VEC_EN_AUTO_CLR,
727 ret = lan743x_intr_register_isr(adapter, vector, flags,
729 &adapter->rx[index]);
734 lan743x_csr_write(adapter, INT_VEC_EN_SET,
741 lan743x_intr_close(adapter);
745 static int lan743x_dp_write(struct lan743x_adapter *adapter,
751 if (lan743x_csr_wait_for_bit_atomic(adapter, DP_SEL, DP_SEL_DPRDY_,
754 dp_sel = lan743x_csr_read(adapter, DP_SEL);
757 lan743x_csr_write(adapter, DP_SEL, dp_sel);
760 lan743x_csr_write(adapter, DP_ADDR, addr + i);
761 lan743x_csr_write(adapter, DP_DATA_0, buf[i]);
762 lan743x_csr_write(adapter, DP_CMD, DP_CMD_WRITE_);
763 if (lan743x_csr_wait_for_bit_atomic(adapter, DP_SEL,
790 static int lan743x_mac_mii_wait_till_not_busy(struct lan743x_adapter *adapter)
800 struct lan743x_adapter *adapter = bus->priv;
805 ret = lan743x_mac_mii_wait_till_not_busy(adapter);
811 lan743x_csr_write(adapter, MAC_MII_ACC, mii_access);
812 ret = lan743x_mac_mii_wait_till_not_busy(adapter);
816 val = lan743x_csr_read(adapter, MAC_MII_DATA);
823 struct lan743x_adapter *adapter = bus->priv;
828 ret = lan743x_mac_mii_wait_till_not_busy(adapter);
832 lan743x_csr_write(adapter, MAC_MII_DATA, val);
836 lan743x_csr_write(adapter, MAC_MII_ACC, mii_access);
837 ret = lan743x_mac_mii_wait_till_not_busy(adapter);
865 struct lan743x_adapter *adapter = bus->priv;
870 ret = lan743x_mac_mii_wait_till_not_busy(adapter);
875 lan743x_csr_write(adapter, MAC_MII_DATA, index);
878 lan743x_csr_write(adapter, MAC_MII_ACC, mmd_access);
879 ret = lan743x_mac_mii_wait_till_not_busy(adapter);
886 lan743x_csr_write(adapter, MAC_MII_ACC, mmd_access);
887 ret = lan743x_mac_mii_wait_till_not_busy(adapter);
891 ret = lan743x_csr_read(adapter, MAC_MII_DATA);
898 struct lan743x_adapter *adapter = bus->priv;
903 ret = lan743x_mac_mii_wait_till_not_busy(adapter);
908 lan743x_csr_write(adapter, MAC_MII_DATA, (u32)index);
911 lan743x_csr_write(adapter, MAC_MII_ACC, mmd_access);
912 ret = lan743x_mac_mii_wait_till_not_busy(adapter);
917 lan743x_csr_write(adapter, MAC_MII_DATA, (u32)regval);
920 lan743x_csr_write(adapter, MAC_MII_ACC, mmd_access);
922 return lan743x_mac_mii_wait_till_not_busy(adapter);
925 static int lan743x_sgmii_wait_till_not_busy(struct lan743x_adapter *adapter)
933 netif_err(adapter, drv, adapter->netdev,
939 int lan743x_sgmii_read(struct lan743x_adapter *adapter, u8 mmd, u16 addr)
946 netif_err(adapter, probe, adapter->netdev,
951 mutex_lock(&adapter->sgmii_rw_lock);
955 lan743x_csr_write(adapter, SGMII_ACC, mmd_access);
956 ret = lan743x_sgmii_wait_till_not_busy(adapter);
960 val = lan743x_csr_read(adapter, SGMII_DATA);
964 mutex_unlock(&adapter->sgmii_rw_lock);
969 static int lan743x_sgmii_write(struct lan743x_adapter *adapter,
976 netif_err(adapter, probe, adapter->netdev,
980 mutex_lock(&adapter->sgmii_rw_lock);
982 lan743x_csr_write(adapter, SGMII_DATA, (u32)(val & SGMII_DATA_MASK_));
986 lan743x_csr_write(adapter, SGMII_ACC, mmd_access);
987 ret = lan743x_sgmii_wait_till_not_busy(adapter);
988 mutex_unlock(&adapter->sgmii_rw_lock);
993 static int lan743x_sgmii_mpll_set(struct lan743x_adapter *adapter,
1001 mpllctrl0 = lan743x_sgmii_read(adapter, MDIO_MMD_VEND2,
1017 ret = lan743x_sgmii_write(adapter, MDIO_MMD_VEND2,
1022 ret = lan743x_sgmii_write(adapter, MDIO_MMD_VEND2,
1027 return lan743x_sgmii_write(adapter, MDIO_MMD_VEND2,
1031 static int lan743x_sgmii_2_5G_mode_set(struct lan743x_adapter *adapter,
1035 return lan743x_sgmii_mpll_set(adapter,
1038 return lan743x_sgmii_mpll_set(adapter,
1042 static int lan743x_is_sgmii_2_5G_mode(struct lan743x_adapter *adapter,
1047 ret = lan743x_sgmii_read(adapter, MDIO_MMD_VEND2,
1061 static int lan743x_sgmii_aneg_update(struct lan743x_adapter *adapter)
1063 enum lan743x_sgmii_lsd lsd = adapter->sgmii_lsd;
1071 ret = lan743x_sgmii_2_5G_mode_set(adapter, true);
1074 ret = lan743x_sgmii_2_5G_mode_set(adapter, false);
1079 mii_ctrl = lan743x_sgmii_read(adapter, MDIO_MMD_VEND2, MII_BMCR);
1083 an_ctrl = lan743x_sgmii_read(adapter, MDIO_MMD_VEND2, VR_MII_AN_CTRL);
1087 dgt_ctrl = lan743x_sgmii_read(adapter, MDIO_MMD_VEND2,
1103 ret = lan743x_sgmii_write(adapter, MDIO_MMD_VEND2,
1114 ret = lan743x_sgmii_write(adapter, MDIO_MMD_VEND2, MII_BMCR,
1119 ret = lan743x_sgmii_write(adapter, MDIO_MMD_VEND2,
1124 return lan743x_sgmii_write(adapter, MDIO_MMD_VEND2,
1128 static int lan743x_pcs_seq_state(struct lan743x_adapter *adapter, u8 state)
1134 dig_sts = lan743x_sgmii_read(adapter, MDIO_MMD_VEND2,
1148 static int lan743x_sgmii_config(struct lan743x_adapter *adapter)
1150 struct net_device *netdev = adapter->netdev;
1183 netif_err(adapter, drv, adapter->netdev,
1188 adapter->sgmii_lsd = lsd;
1189 ret = lan743x_sgmii_aneg_update(adapter);
1191 netif_err(adapter, drv, adapter->netdev,
1196 ret = lan743x_is_sgmii_2_5G_mode(adapter, &status);
1198 netif_err(adapter, drv, adapter->netdev,
1204 netif_dbg(adapter, drv, adapter->netdev,
1207 netif_dbg(adapter, drv, adapter->netdev,
1211 mii_ctl = lan743x_sgmii_read(adapter, MDIO_MMD_VEND2, MII_BMCR);
1216 ret = lan743x_sgmii_write(adapter, MDIO_MMD_VEND2, MII_BMCR, mii_ctl);
1220 ret = lan743x_pcs_seq_state(adapter, PCS_POWER_STATE_DOWN);
1226 ret = lan743x_sgmii_write(adapter, MDIO_MMD_VEND2, MII_BMCR, mii_ctl);
1230 ret = lan743x_pcs_seq_state(adapter, PCS_POWER_STATE_UP);
1237 static void lan743x_mac_set_address(struct lan743x_adapter *adapter,
1248 lan743x_csr_write(adapter, MAC_RX_ADDRL, addr_lo);
1249 lan743x_csr_write(adapter, MAC_RX_ADDRH, addr_hi);
1251 ether_addr_copy(adapter->mac_address, addr);
1252 netif_info(adapter, drv, adapter->netdev,
1256 static int lan743x_mac_init(struct lan743x_adapter *adapter)
1264 netdev = adapter->netdev;
1267 data = lan743x_csr_read(adapter, MAC_CR);
1270 lan743x_csr_write(adapter, MAC_CR, data);
1272 if (!is_valid_ether_addr(adapter->mac_address)) {
1273 mac_addr_hi = lan743x_csr_read(adapter, MAC_RX_ADDRH);
1274 mac_addr_lo = lan743x_csr_read(adapter, MAC_RX_ADDRL);
1275 adapter->mac_address[0] = mac_addr_lo & 0xFF;
1276 adapter->mac_address[1] = (mac_addr_lo >> 8) & 0xFF;
1277 adapter->mac_address[2] = (mac_addr_lo >> 16) & 0xFF;
1278 adapter->mac_address[3] = (mac_addr_lo >> 24) & 0xFF;
1279 adapter->mac_address[4] = mac_addr_hi & 0xFF;
1280 adapter->mac_address[5] = (mac_addr_hi >> 8) & 0xFF;
1285 } else if (!is_valid_ether_addr(adapter->mac_address)) {
1290 eth_random_addr(adapter->mac_address);
1292 lan743x_mac_set_address(adapter, adapter->mac_address);
1293 eth_hw_addr_set(netdev, adapter->mac_address);
1298 static int lan743x_mac_open(struct lan743x_adapter *adapter)
1302 temp = lan743x_csr_read(adapter, MAC_RX);
1303 lan743x_csr_write(adapter, MAC_RX, temp | MAC_RX_RXEN_);
1304 temp = lan743x_csr_read(adapter, MAC_TX);
1305 lan743x_csr_write(adapter, MAC_TX, temp | MAC_TX_TXEN_);
1309 static void lan743x_mac_close(struct lan743x_adapter *adapter)
1313 temp = lan743x_csr_read(adapter, MAC_TX);
1315 lan743x_csr_write(adapter, MAC_TX, temp);
1316 lan743x_csr_wait_for_bit(adapter, MAC_TX, MAC_TX_TXD_,
1319 temp = lan743x_csr_read(adapter, MAC_RX);
1321 lan743x_csr_write(adapter, MAC_RX, temp);
1322 lan743x_csr_wait_for_bit(adapter, MAC_RX, MAC_RX_RXD_,
1326 void lan743x_mac_flow_ctrl_set_enables(struct lan743x_adapter *adapter,
1339 lan743x_csr_write(adapter, MAC_FLOW, flow_setting);
1342 static int lan743x_mac_set_mtu(struct lan743x_adapter *adapter, int new_mtu)
1347 mac_rx = lan743x_csr_read(adapter, MAC_RX);
1351 lan743x_csr_write(adapter, MAC_RX, mac_rx);
1355 lan743x_csr_write(adapter, MAC_RX, mac_rx);
1356 lan743x_csr_wait_for_bit(adapter, MAC_RX, MAC_RX_RXD_,
1358 lan743x_csr_write(adapter, MAC_RX, mac_rx | MAC_RX_RXD_);
1364 lan743x_csr_write(adapter, MAC_RX, mac_rx);
1368 lan743x_csr_write(adapter, MAC_RX, mac_rx);
1374 static int lan743x_phy_reset(struct lan743x_adapter *adapter)
1380 data = lan743x_csr_read(adapter, PMT_CTL);
1382 lan743x_csr_write(adapter, PMT_CTL, data);
1390 static void lan743x_phy_update_flowcontrol(struct lan743x_adapter *adapter,
1393 struct lan743x_phy *phy = &adapter->phy;
1401 lan743x_mac_flow_ctrl_set_enables(adapter,
1406 static int lan743x_phy_init(struct lan743x_adapter *adapter)
1408 return lan743x_phy_reset(adapter);
1413 struct lan743x_adapter *adapter = netdev_priv(netdev);
1422 data = lan743x_csr_read(adapter, MAC_CR);
1449 lan743x_csr_write(adapter, MAC_CR, data);
1456 lan743x_phy_update_flowcontrol(adapter, local_advertisement,
1458 lan743x_ptp_update_latency(adapter, phydev->speed);
1462 lan743x_sgmii_config(adapter);
1466 static void lan743x_phy_close(struct lan743x_adapter *adapter)
1468 struct net_device *netdev = adapter->netdev;
1474 static void lan743x_phy_interface_select(struct lan743x_adapter *adapter)
1479 data = lan743x_csr_read(adapter, MAC_CR);
1480 id_rev = adapter->csr.id_rev & ID_REV_ID_MASK_;
1482 if (adapter->is_pci11x1x && adapter->is_sgmii_en)
1483 adapter->phy_interface = PHY_INTERFACE_MODE_SGMII;
1485 adapter->phy_interface = PHY_INTERFACE_MODE_GMII;
1487 adapter->phy_interface = PHY_INTERFACE_MODE_MII;
1489 adapter->phy_interface = PHY_INTERFACE_MODE_RGMII;
1492 static int lan743x_phy_open(struct lan743x_adapter *adapter)
1494 struct net_device *netdev = adapter->netdev;
1495 struct lan743x_phy *phy = &adapter->phy;
1505 phydev = of_phy_get_and_connect(netdev, adapter->pdev->dev.of_node,
1510 phydev = phy_find_first(adapter->mdiobus);
1512 if ((adapter->csr.id_rev & ID_REV_ID_MASK_) ==
1525 lan743x_phy_interface_select(adapter);
1529 adapter->phy_interface);
1551 static void lan743x_rfe_open(struct lan743x_adapter *adapter)
1553 lan743x_csr_write(adapter, RFE_RSS_CFG,
1569 static void lan743x_rfe_update_mac_address(struct lan743x_adapter *adapter)
1576 mac_addr = adapter->mac_address;
1584 lan743x_csr_write(adapter, RFE_ADDR_FILT_LO(0), mac_addr_lo);
1585 lan743x_csr_write(adapter, RFE_ADDR_FILT_HI(0),
1589 static void lan743x_rfe_set_multicast(struct lan743x_adapter *adapter)
1591 struct net_device *netdev = adapter->netdev;
1596 rfctl = lan743x_csr_read(adapter, RFE_CTL);
1620 lan743x_csr_write(adapter,
1626 lan743x_csr_write(adapter,
1631 lan743x_csr_write(adapter,
1643 lan743x_dp_write(adapter, DP_SEL_RFE_RAM,
1646 lan743x_csr_write(adapter, RFE_CTL, rfctl);
1649 static int lan743x_dmac_init(struct lan743x_adapter *adapter)
1653 lan743x_csr_write(adapter, DMAC_CMD, DMAC_CMD_SWR_);
1654 lan743x_csr_wait_for_bit(adapter, DMAC_CMD, DMAC_CMD_SWR_,
1672 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0))
1676 lan743x_csr_write(adapter, DMAC_CFG, data);
1684 lan743x_csr_write(adapter, DMAC_COAL_CFG, data);
1687 lan743x_csr_write(adapter, DMAC_OBFF_CFG, data);
1691 static int lan743x_dmac_tx_get_state(struct lan743x_adapter *adapter,
1696 dmac_cmd = lan743x_csr_read(adapter, DMAC_CMD);
1703 static int lan743x_dmac_tx_wait_till_stopped(struct lan743x_adapter *adapter,
1710 ((result = lan743x_dmac_tx_get_state(adapter, tx_channel)) ==
1720 static int lan743x_dmac_rx_get_state(struct lan743x_adapter *adapter,
1725 dmac_cmd = lan743x_csr_read(adapter, DMAC_CMD);
1732 static int lan743x_dmac_rx_wait_till_stopped(struct lan743x_adapter *adapter,
1739 ((result = lan743x_dmac_rx_get_state(adapter, rx_channel)) ==
1773 dma_unmap_page(&tx->adapter->pdev->dev,
1778 dma_unmap_single(&tx->adapter->pdev->dev,
1795 lan743x_ptp_unrequest_tx_timestamp(tx->adapter);
1800 lan743x_ptp_tx_timestamp_skb(tx->adapter,
1893 struct lan743x_adapter *adapter = tx->adapter;
1894 struct device *dev = &adapter->pdev->dev;
1985 struct lan743x_adapter *adapter = tx->adapter;
1986 struct device *dev = &adapter->pdev->dev;
2051 struct lan743x_adapter *adapter = tx->adapter;
2081 lan743x_csr_write(adapter, TX_TAIL(tx->channel_number),
2113 txq = netdev_get_tx_queue(tx->adapter->netdev,
2123 (lan743x_ptp_request_tx_timestamp(tx->adapter))) {
2180 struct lan743x_adapter *adapter = tx->adapter;
2186 lan743x_csr_read(adapter, DMAC_INT_STS);
2188 lan743x_csr_write(adapter, DMAC_INT_STS, ioc_bit);
2193 txq = netdev_get_tx_queue(adapter->netdev, tx->channel_number);
2211 lan743x_csr_write(adapter, INT_EN_SET,
2213 lan743x_csr_read(adapter, INT_STS);
2222 dma_free_coherent(&tx->adapter->pdev->dev,
2232 dma_free_coherent(&tx->adapter->pdev->dev,
2254 if (dma_set_mask_and_coherent(&tx->adapter->pdev->dev,
2256 dev_warn(&tx->adapter->pdev->dev,
2265 cpu_ptr = dma_alloc_coherent(&tx->adapter->pdev->dev,
2283 cpu_ptr = dma_alloc_coherent(&tx->adapter->pdev->dev,
2307 struct lan743x_adapter *adapter = tx->adapter;
2309 lan743x_csr_write(adapter,
2312 lan743x_dmac_tx_wait_till_stopped(adapter, tx->channel_number);
2314 lan743x_csr_write(adapter,
2317 lan743x_csr_write(adapter, INT_EN_CLR,
2322 lan743x_csr_write(adapter, FCT_TX_CTL,
2324 lan743x_csr_wait_for_bit(adapter, FCT_TX_CTL,
2337 struct lan743x_adapter *adapter = NULL;
2341 adapter = tx->adapter;
2347 lan743x_csr_write(adapter, FCT_TX_CTL,
2349 lan743x_csr_wait_for_bit(adapter, FCT_TX_CTL,
2354 lan743x_csr_write(adapter, FCT_TX_CTL,
2358 lan743x_csr_write(adapter, DMAC_CMD,
2360 lan743x_csr_wait_for_bit(adapter, DMAC_CMD,
2365 lan743x_csr_write(adapter,
2368 lan743x_csr_write(adapter,
2373 data = lan743x_csr_read(adapter, TX_CFG_B(tx->channel_number));
2376 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0))
2378 lan743x_csr_write(adapter, TX_CFG_B(tx->channel_number), data);
2382 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) {
2388 lan743x_csr_write(adapter, TX_CFG_A(tx->channel_number), data);
2391 lan743x_csr_write(adapter,
2394 lan743x_csr_write(adapter,
2399 tx->last_head = lan743x_csr_read(adapter, TX_HEAD(tx->channel_number));
2403 lan743x_csr_write(adapter, TX_TAIL(tx->channel_number),
2405 tx->vector_flags = lan743x_intr_get_vector_flags(adapter,
2408 netif_napi_add_tx_weight(adapter->netdev,
2422 lan743x_csr_write(adapter, TX_CFG_C(tx->channel_number), data);
2425 lan743x_csr_write(adapter, INT_EN_SET,
2427 lan743x_csr_write(adapter, DMAC_INT_EN_SET,
2431 lan743x_csr_write(adapter, DMAC_CMD,
2445 lan743x_csr_write(rx->adapter, RX_TAIL(rx->channel_number),
2452 struct net_device *netdev = rx->adapter->netdev;
2453 struct device *dev = &rx->adapter->pdev->dev;
2534 dma_unmap_single(&rx->adapter->pdev->dev,
2568 struct net_device *netdev = rx->adapter->netdev;
2689 rx->adapter->netdev);
2690 if (rx->adapter->netdev->features & NETIF_F_RXCSUM) {
2712 struct lan743x_adapter *adapter = rx->adapter;
2719 lan743x_csr_write(adapter, DMAC_INT_STS,
2740 lan743x_csr_write(adapter, INT_EN_SET,
2745 lan743x_csr_write(adapter, RX_TAIL(rx->channel_number),
2761 dma_free_coherent(&rx->adapter->pdev->dev,
2772 dma_free_coherent(&rx->adapter->pdev->dev,
2801 if (dma_set_mask_and_coherent(&rx->adapter->pdev->dev,
2803 dev_warn(&rx->adapter->pdev->dev,
2812 cpu_ptr = dma_alloc_coherent(&rx->adapter->pdev->dev,
2830 cpu_ptr = dma_alloc_coherent(&rx->adapter->pdev->dev,
2854 netif_warn(rx->adapter, ifup, rx->adapter->netdev,
2863 struct lan743x_adapter *adapter = rx->adapter;
2865 lan743x_csr_write(adapter, FCT_RX_CTL,
2867 lan743x_csr_wait_for_bit(adapter, FCT_RX_CTL,
2871 lan743x_csr_write(adapter, DMAC_CMD,
2873 lan743x_dmac_rx_wait_till_stopped(adapter, rx->channel_number);
2875 lan743x_csr_write(adapter, DMAC_INT_EN_CLR,
2877 lan743x_csr_write(adapter, INT_EN_CLR,
2888 struct lan743x_adapter *adapter = rx->adapter;
2897 netif_napi_add(adapter->netdev, &rx->napi, lan743x_rx_napi_poll);
2899 lan743x_csr_write(adapter, DMAC_CMD,
2901 lan743x_csr_wait_for_bit(adapter, DMAC_CMD,
2906 lan743x_csr_write(adapter,
2909 lan743x_csr_write(adapter,
2914 lan743x_csr_write(adapter,
2917 lan743x_csr_write(adapter,
2921 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0)) {
2929 lan743x_csr_write(adapter,
2933 data = lan743x_csr_read(adapter, RX_CFG_B(rx->channel_number));
2942 if (!(adapter->csr.flags & LAN743X_CSR_FLAG_IS_A0))
2945 lan743x_csr_write(adapter, RX_CFG_B(rx->channel_number), data);
2946 rx->vector_flags = lan743x_intr_get_vector_flags(adapter,
2960 lan743x_csr_write(adapter, RX_CFG_C(rx->channel_number), data);
2963 lan743x_csr_write(adapter, RX_TAIL(rx->channel_number),
2965 rx->last_head = lan743x_csr_read(adapter, RX_HEAD(rx->channel_number));
2973 lan743x_csr_write(adapter, INT_EN_SET,
2975 lan743x_csr_write(adapter, DMAC_INT_STS,
2977 lan743x_csr_write(adapter, DMAC_INT_EN_SET,
2979 lan743x_csr_write(adapter, DMAC_CMD,
2983 lan743x_csr_write(adapter, FCT_RX_CTL,
2985 lan743x_csr_wait_for_bit(adapter, FCT_RX_CTL,
2988 lan743x_csr_write(adapter, FCT_FLOW(rx->channel_number),
2994 lan743x_csr_write(adapter, FCT_RX_CTL,
3008 struct lan743x_adapter *adapter = netdev_priv(netdev);
3011 for (index = 0; index < adapter->used_tx_channels; index++)
3012 lan743x_tx_close(&adapter->tx[index]);
3015 lan743x_rx_close(&adapter->rx[index]);
3017 lan743x_ptp_close(adapter);
3019 lan743x_phy_close(adapter);
3021 lan743x_mac_close(adapter);
3023 lan743x_intr_close(adapter);
3030 struct lan743x_adapter *adapter = netdev_priv(netdev);
3034 ret = lan743x_intr_open(adapter);
3038 ret = lan743x_mac_open(adapter);
3042 ret = lan743x_phy_open(adapter);
3046 ret = lan743x_ptp_open(adapter);
3050 lan743x_rfe_open(adapter);
3053 ret = lan743x_rx_open(&adapter->rx[index]);
3058 for (index = 0; index < adapter->used_tx_channels; index++) {
3059 ret = lan743x_tx_open(&adapter->tx[index]);
3066 for (index = 0; index < adapter->used_tx_channels; index++) {
3067 if (adapter->tx[index].ring_cpu_ptr)
3068 lan743x_tx_close(&adapter->tx[index]);
3073 if (adapter->rx[index].ring_cpu_ptr)
3074 lan743x_rx_close(&adapter->rx[index]);
3076 lan743x_ptp_close(adapter);
3079 lan743x_phy_close(adapter);
3082 lan743x_mac_close(adapter);
3085 lan743x_intr_close(adapter);
3088 netif_warn(adapter, ifup, adapter->netdev,
3096 struct lan743x_adapter *adapter = netdev_priv(netdev);
3099 if (adapter->is_pci11x1x)
3102 return lan743x_tx_xmit_frame(&adapter->tx[ch], skb);
3117 struct lan743x_adapter *adapter = netdev_priv(netdev);
3119 lan743x_rfe_set_multicast(adapter);
3124 struct lan743x_adapter *adapter = netdev_priv(netdev);
3127 ret = lan743x_mac_set_mtu(adapter, new_mtu);
3136 struct lan743x_adapter *adapter = netdev_priv(netdev);
3138 stats->rx_packets = lan743x_csr_read(adapter, STAT_RX_TOTAL_FRAMES);
3139 stats->tx_packets = lan743x_csr_read(adapter, STAT_TX_TOTAL_FRAMES);
3140 stats->rx_bytes = lan743x_csr_read(adapter,
3142 lan743x_csr_read(adapter,
3144 lan743x_csr_read(adapter,
3146 stats->tx_bytes = lan743x_csr_read(adapter,
3148 lan743x_csr_read(adapter,
3150 lan743x_csr_read(adapter,
3152 stats->rx_errors = lan743x_csr_read(adapter, STAT_RX_FCS_ERRORS) +
3153 lan743x_csr_read(adapter,
3155 lan743x_csr_read(adapter, STAT_RX_JABBER_ERRORS) +
3156 lan743x_csr_read(adapter,
3158 lan743x_csr_read(adapter,
3160 stats->tx_errors = lan743x_csr_read(adapter, STAT_TX_FCS_ERRORS) +
3161 lan743x_csr_read(adapter,
3163 lan743x_csr_read(adapter, STAT_TX_CARRIER_ERRORS);
3164 stats->rx_dropped = lan743x_csr_read(adapter,
3166 stats->tx_dropped = lan743x_csr_read(adapter,
3168 stats->multicast = lan743x_csr_read(adapter,
3170 lan743x_csr_read(adapter,
3172 stats->collisions = lan743x_csr_read(adapter,
3174 lan743x_csr_read(adapter,
3176 lan743x_csr_read(adapter,
3183 struct lan743x_adapter *adapter = netdev_priv(netdev);
3191 lan743x_mac_set_address(adapter, sock_addr->sa_data);
3192 lan743x_rfe_update_mac_address(adapter);
3207 static void lan743x_hardware_cleanup(struct lan743x_adapter *adapter)
3209 lan743x_csr_write(adapter, INT_EN_CLR, 0xFFFFFFFF);
3212 static void lan743x_mdiobus_cleanup(struct lan743x_adapter *adapter)
3214 mdiobus_unregister(adapter->mdiobus);
3217 static void lan743x_full_cleanup(struct lan743x_adapter *adapter)
3219 unregister_netdev(adapter->netdev);
3221 lan743x_mdiobus_cleanup(adapter);
3222 lan743x_hardware_cleanup(adapter);
3223 lan743x_pci_cleanup(adapter);
3226 static int lan743x_hardware_init(struct lan743x_adapter *adapter,
3233 adapter->is_pci11x1x = is_pci11x1x_chip(adapter);
3234 if (adapter->is_pci11x1x) {
3235 adapter->max_tx_channels = PCI11X1X_MAX_TX_CHANNELS;
3236 adapter->used_tx_channels = PCI11X1X_USED_TX_CHANNELS;
3237 adapter->max_vector_count = PCI11X1X_MAX_VECTOR_COUNT;
3238 pci11x1x_strap_get_status(adapter);
3239 spin_lock_init(&adapter->eth_syslock_spinlock);
3240 mutex_init(&adapter->sgmii_rw_lock);
3242 adapter->max_tx_channels = LAN743X_MAX_TX_CHANNELS;
3243 adapter->used_tx_channels = LAN743X_USED_TX_CHANNELS;
3244 adapter->max_vector_count = LAN743X_MAX_VECTOR_COUNT;
3247 adapter->intr.irq = adapter->pdev->irq;
3248 lan743x_csr_write(adapter, INT_EN_CLR, 0xFFFFFFFF);
3250 ret = lan743x_gpio_init(adapter);
3254 ret = lan743x_mac_init(adapter);
3258 ret = lan743x_phy_init(adapter);
3262 ret = lan743x_ptp_init(adapter);
3266 lan743x_rfe_update_mac_address(adapter);
3268 ret = lan743x_dmac_init(adapter);
3273 adapter->rx[index].adapter = adapter;
3274 adapter->rx[index].channel_number = index;
3277 for (index = 0; index < adapter->used_tx_channels; index++) {
3278 tx = &adapter->tx[index];
3279 tx->adapter = adapter;
3287 static int lan743x_mdiobus_init(struct lan743x_adapter *adapter)
3292 adapter->mdiobus = devm_mdiobus_alloc(&adapter->pdev->dev);
3293 if (!(adapter->mdiobus)) {
3298 adapter->mdiobus->priv = (void *)adapter;
3299 if (adapter->is_pci11x1x) {
3300 if (adapter->is_sgmii_en) {
3301 sgmii_ctl = lan743x_csr_read(adapter, SGMII_CTL);
3304 lan743x_csr_write(adapter, SGMII_CTL, sgmii_ctl);
3305 netif_dbg(adapter, drv, adapter->netdev,
3307 adapter->mdiobus->read = lan743x_mdiobus_read_c22;
3308 adapter->mdiobus->write = lan743x_mdiobus_write_c22;
3309 adapter->mdiobus->read_c45 = lan743x_mdiobus_read_c45;
3310 adapter->mdiobus->write_c45 = lan743x_mdiobus_write_c45;
3311 adapter->mdiobus->name = "lan743x-mdiobus-c45";
3312 netif_dbg(adapter, drv, adapter->netdev,
3315 sgmii_ctl = lan743x_csr_read(adapter, SGMII_CTL);
3318 lan743x_csr_write(adapter, SGMII_CTL, sgmii_ctl);
3319 netif_dbg(adapter, drv, adapter->netdev,
3322 adapter->mdiobus->read = lan743x_mdiobus_read_c22;
3323 adapter->mdiobus->write = lan743x_mdiobus_write_c22;
3324 adapter->mdiobus->name = "lan743x-mdiobus";
3325 netif_dbg(adapter, drv, adapter->netdev,
3329 adapter->mdiobus->read = lan743x_mdiobus_read_c22;
3330 adapter->mdiobus->write = lan743x_mdiobus_write_c22;
3331 adapter->mdiobus->name = "lan743x-mdiobus";
3332 netif_dbg(adapter, drv, adapter->netdev, "lan743x-mdiobus\n");
3335 snprintf(adapter->mdiobus->id, MII_BUS_ID_SIZE,
3336 "pci-%s", pci_name(adapter->pdev));
3338 if ((adapter->csr.id_rev & ID_REV_ID_MASK_) == ID_REV_ID_LAN7430_)
3340 adapter->mdiobus->phy_mask = ~(u32)BIT(1);
3343 ret = mdiobus_register(adapter->mdiobus);
3358 * initializes an adapter identified by a pci_dev structure.
3359 * The OS initialization, configuring of the adapter private structure,
3365 struct lan743x_adapter *adapter = NULL;
3387 adapter = netdev_priv(netdev);
3388 adapter->netdev = netdev;
3389 adapter->msg_enable = NETIF_MSG_DRV | NETIF_MSG_PROBE |
3394 of_get_mac_address(pdev->dev.of_node, adapter->mac_address);
3396 ret = lan743x_pci_init(adapter, pdev);
3400 ret = lan743x_csr_init(adapter);
3404 ret = lan743x_hardware_init(adapter, pdev);
3408 ret = lan743x_mdiobus_init(adapter);
3412 adapter->netdev->netdev_ops = &lan743x_netdev_ops;
3413 adapter->netdev->ethtool_ops = &lan743x_ethtool_ops;
3414 adapter->netdev->features = NETIF_F_SG | NETIF_F_TSO |
3416 adapter->netdev->hw_features = adapter->netdev->features;
3421 ret = register_netdev(adapter->netdev);
3427 lan743x_mdiobus_cleanup(adapter);
3430 lan743x_hardware_cleanup(adapter);
3433 lan743x_pci_cleanup(adapter);
3452 struct lan743x_adapter *adapter = netdev_priv(netdev);
3454 lan743x_full_cleanup(adapter);
3460 struct lan743x_adapter *adapter = netdev_priv(netdev);
3478 lan743x_hardware_cleanup(adapter);
3487 static void lan743x_pm_set_wol(struct lan743x_adapter *adapter)
3500 lan743x_csr_write(adapter, MAC_WUF_CFG(mask_index), 0);
3503 pmtctl = lan743x_csr_read(adapter, PMT_CTL);
3509 macrx = lan743x_csr_read(adapter, MAC_RX);
3516 if (adapter->wolopts & WAKE_PHY) {
3520 if (adapter->wolopts & WAKE_MAGIC) {
3525 if (adapter->wolopts & WAKE_UCAST) {
3531 if (adapter->wolopts & WAKE_BCAST) {
3537 if (adapter->wolopts & WAKE_MCAST) {
3540 lan743x_csr_write(adapter, MAC_WUF_CFG(mask_index),
3544 lan743x_csr_write(adapter, MAC_WUF_MASK0(mask_index), 7);
3545 lan743x_csr_write(adapter, MAC_WUF_MASK1(mask_index), 0);
3546 lan743x_csr_write(adapter, MAC_WUF_MASK2(mask_index), 0);
3547 lan743x_csr_write(adapter, MAC_WUF_MASK3(mask_index), 0);
3552 lan743x_csr_write(adapter, MAC_WUF_CFG(mask_index),
3556 lan743x_csr_write(adapter, MAC_WUF_MASK0(mask_index), 3);
3557 lan743x_csr_write(adapter, MAC_WUF_MASK1(mask_index), 0);
3558 lan743x_csr_write(adapter, MAC_WUF_MASK2(mask_index), 0);
3559 lan743x_csr_write(adapter, MAC_WUF_MASK3(mask_index), 0);
3567 if (adapter->wolopts & WAKE_ARP) {
3572 lan743x_csr_write(adapter, MAC_WUF_CFG(mask_index),
3576 lan743x_csr_write(adapter, MAC_WUF_MASK0(mask_index), 0x3000);
3577 lan743x_csr_write(adapter, MAC_WUF_MASK1(mask_index), 0);
3578 lan743x_csr_write(adapter, MAC_WUF_MASK2(mask_index), 0);
3579 lan743x_csr_write(adapter, MAC_WUF_MASK3(mask_index), 0);
3588 if (adapter->wolopts & WAKE_MAGICSECURE) {
3589 sopass = *(u32 *)adapter->sopass;
3590 lan743x_csr_write(adapter, MAC_MP_SO_LO, sopass);
3591 sopass = *(u16 *)&adapter->sopass[4];
3592 lan743x_csr_write(adapter, MAC_MP_SO_HI, sopass);
3596 lan743x_csr_write(adapter, MAC_WUCSR, wucsr);
3597 lan743x_csr_write(adapter, PMT_CTL, pmtctl);
3598 lan743x_csr_write(adapter, MAC_RX, macrx);
3605 struct lan743x_adapter *adapter = netdev_priv(netdev);
3611 lan743x_csr_write(adapter, MAC_WUCSR, 0);
3612 lan743x_csr_write(adapter, MAC_WUCSR2, 0);
3613 lan743x_csr_write(adapter, MAC_WK_SRC, 0xFFFFFFFF);
3615 if (adapter->wolopts)
3616 lan743x_pm_set_wol(adapter);
3618 if (adapter->is_pci11x1x) {
3620 data = lan743x_csr_read(adapter, HW_CFG);
3621 adapter->hw_cfg = data;
3627 lan743x_csr_write(adapter, HW_CFG, data);
3638 struct lan743x_adapter *adapter = netdev_priv(netdev);
3646 if (adapter->is_pci11x1x)
3647 lan743x_csr_write(adapter, HW_CFG, adapter->hw_cfg);
3649 ret = lan743x_hardware_init(adapter, pdev);
3651 netif_err(adapter, probe, adapter->netdev,
3653 lan743x_pci_cleanup(adapter);
3665 ret = lan743x_csr_read(adapter, MAC_WK_SRC);
3666 netif_info(adapter, drv, adapter->netdev,