Lines Matching +full:network +full:- +full:on +full:- +full:chip
1 // SPDX-License-Identifier: GPL-2.0-only
29 * ks8851_lock - register access lock
30 * @ks: The chip state
33 * Claim chip register access lock
37 ks->lock(ks, flags); in ks8851_lock()
41 * ks8851_unlock - register access unlock
42 * @ks: The chip state
45 * Release chip register access lock
49 ks->unlock(ks, flags); in ks8851_unlock()
53 * ks8851_wrreg16 - write 16bit register value to chip
54 * @ks: The chip state
63 ks->wrreg16(ks, reg, val); in ks8851_wrreg16()
67 * ks8851_rdreg16 - read 16 bit register from device
68 * @ks: The chip information
71 * Read a 16bit register from the chip, returning the result
76 return ks->rdreg16(ks, reg); in ks8851_rdreg16()
80 * ks8851_soft_reset - issue one of the soft reset to the device
84 * Issue the relevant soft-reset command to the device's GRR register
101 * ks8851_set_powermode - set power mode of the device
105 * Change the power mode of the chip.
111 netif_dbg(ks, hw, ks->netdev, "setting power mode %d\n", pwrmode); in ks8851_set_powermode()
121 * ks8851_write_mac_addr - write mac address to device registers
122 * @dev: The network device
126 * This call assumes that the chip is not running, so there is no need to
139 * Wake up chip in case it was powered off when stopped; otherwise, in ks8851_write_mac_addr()
145 val = (dev->dev_addr[i] << 8) | dev->dev_addr[i + 1]; in ks8851_write_mac_addr()
158 * ks8851_read_mac_addr - read mac address from device registers
159 * @dev: The network device
184 * ks8851_init_mac - initialise the mac address
196 struct net_device *dev = ks->netdev; in ks8851_init_mac()
205 if (ks->rc_ccr & CCR_EEPROM) { in ks8851_init_mac()
207 if (is_valid_ether_addr(dev->dev_addr)) in ks8851_init_mac()
210 netdev_err(ks->netdev, "invalid mac address read %pM\n", in ks8851_init_mac()
211 dev->dev_addr); in ks8851_init_mac()
219 * ks8851_rx_pkts - receive packets from the host
237 netif_dbg(ks, rx_status, ks->netdev, in ks8851_rx_pkts()
247 * reset to the data stream coming from the chip. in ks8851_rx_pkts()
250 for (; rxfc != 0; rxfc--) { in ks8851_rx_pkts()
254 netif_dbg(ks, rx_status, ks->netdev, in ks8851_rx_pkts()
263 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr | RXQCR_SDA); in ks8851_rx_pkts()
268 rxlen -= 4; in ks8851_rx_pkts()
270 skb = netdev_alloc_skb_ip_align(ks->netdev, rxalign); in ks8851_rx_pkts()
279 rxpkt = skb_put(skb, rxlen) - 8; in ks8851_rx_pkts()
281 ks->rdfifo(ks, rxpkt, rxalign + 8); in ks8851_rx_pkts()
283 netif_dbg(ks, pktdata, ks->netdev, in ks8851_rx_pkts()
286 skb->protocol = eth_type_trans(skb, ks->netdev); in ks8851_rx_pkts()
289 ks->netdev->stats.rx_packets++; in ks8851_rx_pkts()
290 ks->netdev->stats.rx_bytes += rxlen; in ks8851_rx_pkts()
295 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr | RXQCR_RRXEF); in ks8851_rx_pkts()
300 * ks8851_irq - IRQ handler for dealing with interrupt requests
324 netif_dbg(ks, intr, ks->netdev, in ks8851_irq()
336 netif_dbg(ks, intr, ks->netdev, in ks8851_irq()
339 spin_lock_bh(&ks->statelock); in ks8851_irq()
340 ks->tx_space = tx_space; in ks8851_irq()
341 if (netif_queue_stopped(ks->netdev)) in ks8851_irq()
342 netif_wake_queue(ks->netdev); in ks8851_irq()
343 spin_unlock_bh(&ks->statelock); in ks8851_irq()
347 netdev_err(ks->netdev, "%s: spi bus error\n", __func__); in ks8851_irq()
352 * packet read-out, however we're masking the interrupt in ks8851_irq()
364 struct ks8851_rxctrl *rxc = &ks->rxctrl; in ks8851_irq()
367 ks8851_wrreg16(ks, KS_MAHTR0, rxc->mchash[0]); in ks8851_irq()
368 ks8851_wrreg16(ks, KS_MAHTR1, rxc->mchash[1]); in ks8851_irq()
369 ks8851_wrreg16(ks, KS_MAHTR2, rxc->mchash[2]); in ks8851_irq()
370 ks8851_wrreg16(ks, KS_MAHTR3, rxc->mchash[3]); in ks8851_irq()
372 ks8851_wrreg16(ks, KS_RXCR2, rxc->rxcr2); in ks8851_irq()
373 ks8851_wrreg16(ks, KS_RXCR1, rxc->rxcr1); in ks8851_irq()
379 mii_check_link(&ks->mii); in ks8851_irq()
389 * ks8851_flush_tx_work - flush outstanding TX work
394 if (ks->flush_tx_work) in ks8851_flush_tx_work()
395 ks->flush_tx_work(ks); in ks8851_flush_tx_work()
399 * ks8851_net_open - open network device
400 * @dev: The network device being opened.
402 * Called when the network device is marked active, such as a user executing
403 * 'ifconfig up' on the device.
411 ret = request_threaded_irq(dev->irq, NULL, ks8851_irq, in ks8851_net_open()
413 dev->name, ks); in ks8851_net_open()
423 netif_dbg(ks, ifup, ks->netdev, "opening\n"); in ks8851_net_open()
425 /* bring chip out of any power saving mode it was in */ in ks8851_net_open()
439 /* auto-increment tx data, reset tx pointer */ in ks8851_net_open()
458 ks->rc_rxqcr = (RXQCR_RXFCTE | /* IRQ on frame count exceeded */ in ks8851_net_open()
459 RXQCR_RXDBCTE | /* IRQ on byte count exceeded */ in ks8851_net_open()
460 RXQCR_RXDTTE); /* IRQ on time exceeded */ in ks8851_net_open()
462 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr); in ks8851_net_open()
465 ks8851_wrreg16(ks, KS_ISR, ks->rc_ier); in ks8851_net_open()
466 ks8851_wrreg16(ks, KS_IER, ks->rc_ier); in ks8851_net_open()
468 ks->queued_len = 0; in ks8851_net_open()
469 ks->tx_space = ks8851_rdreg16(ks, KS_TXMIR); in ks8851_net_open()
470 netif_start_queue(ks->netdev); in ks8851_net_open()
472 netif_dbg(ks, ifup, ks->netdev, "network device up\n"); in ks8851_net_open()
475 mii_check_link(&ks->mii); in ks8851_net_open()
480 * ks8851_net_stop - close network device
483 * Called to close down a network device which has been active. Cancell any
484 * work, shutdown the RX and TX process and then place the chip into a low
504 flush_work(&ks->rxctrl_work); in ks8851_net_stop()
518 while (!skb_queue_empty(&ks->txq)) { in ks8851_net_stop()
519 struct sk_buff *txb = skb_dequeue(&ks->txq); in ks8851_net_stop()
521 netif_dbg(ks, ifdown, ks->netdev, in ks8851_net_stop()
527 free_irq(dev->irq, ks); in ks8851_net_stop()
533 * ks8851_start_xmit - transmit packet
537 * Called by the network layer to transmit the @skb. Queue the packet for
541 * We do this to firstly avoid sleeping with the network device locked,
550 return ks->start_xmit(skb, dev); in ks8851_start_xmit()
554 * ks8851_rxctrl_work - work handler to change rx mode
558 * the network device layer. This is done so that we can do this without
559 * having to sleep whilst holding the network device lock.
564 * complete. The interrupt handler then writes the new values into the chip.
586 if (dev->flags & IFF_PROMISC) { in ks8851_set_rx_mode()
590 } else if (dev->flags & IFF_ALLMULTI) { in ks8851_set_rx_mode()
595 } else if (dev->flags & IFF_MULTICAST && !netdev_mc_empty(dev)) { in ks8851_set_rx_mode()
602 crc = ether_crc(ETH_ALEN, ha->addr); in ks8851_set_rx_mode()
603 crc >>= (32 - 6); /* get top six bits */ in ks8851_set_rx_mode()
623 spin_lock_bh(&ks->statelock); in ks8851_set_rx_mode()
625 if (memcmp(&rxctrl, &ks->rxctrl, sizeof(rxctrl)) != 0) { in ks8851_set_rx_mode()
626 memcpy(&ks->rxctrl, &rxctrl, sizeof(ks->rxctrl)); in ks8851_set_rx_mode()
627 schedule_work(&ks->rxctrl_work); in ks8851_set_rx_mode()
630 spin_unlock_bh(&ks->statelock); in ks8851_set_rx_mode()
638 return -EBUSY; in ks8851_set_mac_address()
640 if (!is_valid_ether_addr(sa->sa_data)) in ks8851_set_mac_address()
641 return -EADDRNOTAVAIL; in ks8851_set_mac_address()
643 eth_hw_addr_set(dev, sa->sa_data); in ks8851_set_mac_address()
652 return -EINVAL; in ks8851_net_ioctl()
654 return generic_mii_ioctl(&ks->mii, if_mii(req), cmd, NULL); in ks8851_net_ioctl()
672 strscpy(di->driver, "KS8851", sizeof(di->driver)); in ks8851_get_drvinfo()
673 strscpy(di->version, "1.00", sizeof(di->version)); in ks8851_get_drvinfo()
674 strscpy(di->bus_info, dev_name(dev->dev.parent), sizeof(di->bus_info)); in ks8851_get_drvinfo()
680 return ks->msg_enable; in ks8851_get_msglevel()
686 ks->msg_enable = to; in ks8851_set_msglevel()
694 mii_ethtool_get_link_ksettings(&ks->mii, cmd); in ks8851_get_link_ksettings()
703 return mii_ethtool_set_link_ksettings(&ks->mii, cmd); in ks8851_set_link_ksettings()
709 return mii_link_ok(&ks->mii); in ks8851_get_link()
715 return mii_nway_restart(&ks->mii); in ks8851_nway_reset()
722 struct ks8851_net *ks = ee->data; in ks8851_eeprom_regread()
727 ee->reg_data_out = (val & EEPCR_EESB) ? 1 : 0; in ks8851_eeprom_regread()
728 ee->reg_data_clock = (val & EEPCR_EESCK) ? 1 : 0; in ks8851_eeprom_regread()
729 ee->reg_chip_select = (val & EEPCR_EECS) ? 1 : 0; in ks8851_eeprom_regread()
734 struct ks8851_net *ks = ee->data; in ks8851_eeprom_regwrite()
735 unsigned val = EEPCR_EESA; /* default - eeprom access on */ in ks8851_eeprom_regwrite()
737 if (ee->drive_data) in ks8851_eeprom_regwrite()
739 if (ee->reg_data_in) in ks8851_eeprom_regwrite()
741 if (ee->reg_data_clock) in ks8851_eeprom_regwrite()
743 if (ee->reg_chip_select) in ks8851_eeprom_regwrite()
750 * ks8851_eeprom_claim - claim device EEPROM and activate the interface
751 * @ks: The network device state.
764 * ks8851_eeprom_release - release the EEPROM interface
782 int offset = ee->offset; in ks8851_set_eeprom()
784 int len = ee->len; in ks8851_set_eeprom()
789 return -EINVAL; in ks8851_set_eeprom()
791 if (ee->magic != KS_EEPROM_MAGIC) in ks8851_set_eeprom()
792 return -EINVAL; in ks8851_set_eeprom()
794 if (!(ks->rc_ccr & CCR_EEPROM)) in ks8851_set_eeprom()
795 return -ENOENT; in ks8851_set_eeprom()
801 eeprom_93cx6_wren(&ks->eeprom, true); in ks8851_set_eeprom()
806 eeprom_93cx6_read(&ks->eeprom, offset/2, &tmp); in ks8851_set_eeprom()
816 eeprom_93cx6_write(&ks->eeprom, offset/2, tmp); in ks8851_set_eeprom()
817 eeprom_93cx6_wren(&ks->eeprom, false); in ks8851_set_eeprom()
829 int offset = ee->offset; in ks8851_get_eeprom()
831 int len = ee->len; in ks8851_get_eeprom()
835 return -EINVAL; in ks8851_get_eeprom()
837 if (!(ks->rc_ccr & CCR_EEPROM)) in ks8851_get_eeprom()
838 return -ENOENT; in ks8851_get_eeprom()
844 ee->magic = KS_EEPROM_MAGIC; in ks8851_get_eeprom()
846 eeprom_93cx6_multiread(&ks->eeprom, offset/2, (__le16 *)data, len/2); in ks8851_get_eeprom()
858 return ks->rc_ccr & CCR_EEPROM ? 128 : 0; in ks8851_get_eeprom_len()
877 * ks8851_phy_reg - convert MII register into a KS8851 register
901 return -EOPNOTSUPP; in ks8851_phy_reg()
923 * ks8851_phy_read - MII interface PHY register read.
924 * @dev: The network device the PHY is on.
929 * device does not support all the MII registers, the non-existent values
934 * caller. The mii-tool that the driver was tested with takes any -ve error
965 struct ks8851_net *ks = bus->priv; in ks8851_mdio_read()
968 return -EOPNOTSUPP; in ks8851_mdio_read()
976 return ks8851_phy_read_common(ks->netdev, phy_id, reg); in ks8851_mdio_read()
981 struct ks8851_net *ks = bus->priv; in ks8851_mdio_write()
983 ks8851_phy_write(ks->netdev, phy_id, reg, val); in ks8851_mdio_write()
988 * ks8851_read_selftest - read the selftest memory info.
1001 netdev_warn(ks->netdev, "Memory selftest not finished\n"); in ks8851_read_selftest()
1006 netdev_err(ks->netdev, "TX memory selftest fail\n"); in ks8851_read_selftest()
1009 netdev_err(ks->netdev, "RX memory selftest fail\n"); in ks8851_read_selftest()
1019 struct net_device *netdev = ks->netdev; in ks8851_suspend()
1033 struct net_device *netdev = ks->netdev; in ks8851_resume()
1052 return -ENOMEM; in ks8851_register_mdiobus()
1054 mii_bus->name = "ks8851_eth_mii"; in ks8851_register_mdiobus()
1055 mii_bus->read = ks8851_mdio_read; in ks8851_register_mdiobus()
1056 mii_bus->write = ks8851_mdio_write; in ks8851_register_mdiobus()
1057 mii_bus->priv = ks; in ks8851_register_mdiobus()
1058 mii_bus->parent = dev; in ks8851_register_mdiobus()
1059 mii_bus->phy_mask = ~((u32)BIT(0)); in ks8851_register_mdiobus()
1060 snprintf(mii_bus->id, MII_BUS_ID_SIZE, "%s", dev_name(dev)); in ks8851_register_mdiobus()
1066 ks->mii_bus = mii_bus; in ks8851_register_mdiobus()
1077 mdiobus_unregister(ks->mii_bus); in ks8851_unregister_mdiobus()
1078 mdiobus_free(ks->mii_bus); in ks8851_unregister_mdiobus()
1088 ks->netdev = netdev; in ks8851_probe_common()
1090 ks->gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH); in ks8851_probe_common()
1091 ret = PTR_ERR_OR_ZERO(ks->gpio); in ks8851_probe_common()
1093 if (ret != -EPROBE_DEFER) in ks8851_probe_common()
1098 ret = gpiod_set_consumer_name(ks->gpio, "ks8851_rst_n"); in ks8851_probe_common()
1104 ks->vdd_io = devm_regulator_get(dev, "vdd-io"); in ks8851_probe_common()
1105 if (IS_ERR(ks->vdd_io)) { in ks8851_probe_common()
1106 ret = PTR_ERR(ks->vdd_io); in ks8851_probe_common()
1110 ret = regulator_enable(ks->vdd_io); in ks8851_probe_common()
1116 ks->vdd_reg = devm_regulator_get(dev, "vdd"); in ks8851_probe_common()
1117 if (IS_ERR(ks->vdd_reg)) { in ks8851_probe_common()
1118 ret = PTR_ERR(ks->vdd_reg); in ks8851_probe_common()
1122 ret = regulator_enable(ks->vdd_reg); in ks8851_probe_common()
1128 if (ks->gpio) { in ks8851_probe_common()
1130 gpiod_set_value_cansleep(ks->gpio, 0); in ks8851_probe_common()
1133 spin_lock_init(&ks->statelock); in ks8851_probe_common()
1135 INIT_WORK(&ks->rxctrl_work, ks8851_rxctrl_work); in ks8851_probe_common()
1140 ks->eeprom.data = ks; in ks8851_probe_common()
1141 ks->eeprom.width = PCI_EEPROM_WIDTH_93C46; in ks8851_probe_common()
1142 ks->eeprom.register_read = ks8851_eeprom_regread; in ks8851_probe_common()
1143 ks->eeprom.register_write = ks8851_eeprom_regwrite; in ks8851_probe_common()
1146 ks->mii.dev = netdev; in ks8851_probe_common()
1147 ks->mii.phy_id = 1; in ks8851_probe_common()
1148 ks->mii.phy_id_mask = 1; in ks8851_probe_common()
1149 ks->mii.reg_num_mask = 0xf; in ks8851_probe_common()
1150 ks->mii.mdio_read = ks8851_phy_read; in ks8851_probe_common()
1151 ks->mii.mdio_write = ks8851_phy_write; in ks8851_probe_common()
1160 ks->msg_enable = netif_msg_init(msg_en, NETIF_MSG_DRV | in ks8851_probe_common()
1164 skb_queue_head_init(&ks->txq); in ks8851_probe_common()
1166 netdev->ethtool_ops = &ks8851_ethtool_ops; in ks8851_probe_common()
1170 netif_carrier_off(ks->netdev); in ks8851_probe_common()
1171 netdev->if_port = IF_PORT_100BASET; in ks8851_probe_common()
1172 netdev->netdev_ops = &ks8851_netdev_ops; in ks8851_probe_common()
1177 /* simple check for a valid chip being connected to the bus */ in ks8851_probe_common()
1181 ret = -ENODEV; in ks8851_probe_common()
1186 ks->rc_ccr = ks8851_rdreg16(ks, KS_CCR); in ks8851_probe_common()
1189 ks8851_init_mac(ks, dev->of_node); in ks8851_probe_common()
1193 dev_err(dev, "failed to register network device\n"); in ks8851_probe_common()
1198 CIDER_REV_GET(cider), netdev->dev_addr, netdev->irq, in ks8851_probe_common()
1199 ks->rc_ccr & CCR_EEPROM ? "has" : "no"); in ks8851_probe_common()
1206 if (ks->gpio) in ks8851_probe_common()
1207 gpiod_set_value_cansleep(ks->gpio, 1); in ks8851_probe_common()
1208 regulator_disable(ks->vdd_reg); in ks8851_probe_common()
1210 regulator_disable(ks->vdd_io); in ks8851_probe_common()
1225 unregister_netdev(priv->netdev); in ks8851_remove_common()
1226 if (priv->gpio) in ks8851_remove_common()
1227 gpiod_set_value_cansleep(priv->gpio, 1); in ks8851_remove_common()
1228 regulator_disable(priv->vdd_reg); in ks8851_remove_common()
1229 regulator_disable(priv->vdd_io); in ks8851_remove_common()
1233 MODULE_DESCRIPTION("KS8851 Network driver");