Lines Matching +full:network +full:- +full:on +full:- +full:chip

1 // SPDX-License-Identifier: GPL-2.0-only
30 * ks8851_lock - register access lock
31 * @ks: The chip state
34 * Claim chip register access lock
38 ks->lock(ks, flags); in ks8851_lock()
42 * ks8851_unlock - register access unlock
43 * @ks: The chip state
46 * Release chip register access lock
50 ks->unlock(ks, flags); in ks8851_unlock()
54 * ks8851_wrreg16 - write 16bit register value to chip
55 * @ks: The chip state
64 ks->wrreg16(ks, reg, val); in ks8851_wrreg16()
68 * ks8851_rdreg16 - read 16 bit register from device
69 * @ks: The chip information
72 * Read a 16bit register from the chip, returning the result
77 return ks->rdreg16(ks, reg); in ks8851_rdreg16()
81 * ks8851_soft_reset - issue one of the soft reset to the device
85 * Issue the relevant soft-reset command to the device's GRR register
102 * ks8851_set_powermode - set power mode of the device
106 * Change the power mode of the chip.
112 netif_dbg(ks, hw, ks->netdev, "setting power mode %d\n", pwrmode); in ks8851_set_powermode()
122 * ks8851_write_mac_addr - write mac address to device registers
123 * @dev: The network device
127 * This call assumes that the chip is not running, so there is no need to
140 * Wake up chip in case it was powered off when stopped; otherwise, in ks8851_write_mac_addr()
146 val = (dev->dev_addr[i] << 8) | dev->dev_addr[i + 1]; in ks8851_write_mac_addr()
159 * ks8851_read_mac_addr - read mac address from device registers
160 * @dev: The network device
175 dev->dev_addr[i] = reg >> 8; in ks8851_read_mac_addr()
176 dev->dev_addr[i + 1] = reg & 0xff; in ks8851_read_mac_addr()
183 * ks8851_init_mac - initialise the mac address
195 struct net_device *dev = ks->netdev; in ks8851_init_mac()
198 ret = of_get_mac_address(np, dev->dev_addr); in ks8851_init_mac()
204 if (ks->rc_ccr & CCR_EEPROM) { in ks8851_init_mac()
206 if (is_valid_ether_addr(dev->dev_addr)) in ks8851_init_mac()
209 netdev_err(ks->netdev, "invalid mac address read %pM\n", in ks8851_init_mac()
210 dev->dev_addr); in ks8851_init_mac()
218 * ks8851_dbg_dumpkkt - dump initial packet contents to debug
226 netdev_dbg(ks->netdev, in ks8851_dbg_dumpkkt()
234 * ks8851_rx_skb - receive skbuff
240 ks->rx_skb(ks, skb); in ks8851_rx_skb()
244 * ks8851_rx_pkts - receive packets from the host
261 netif_dbg(ks, rx_status, ks->netdev, in ks8851_rx_pkts()
271 * reset to the data stream coming from the chip. in ks8851_rx_pkts()
274 for (; rxfc != 0; rxfc--) { in ks8851_rx_pkts()
278 netif_dbg(ks, rx_status, ks->netdev, in ks8851_rx_pkts()
287 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr | RXQCR_SDA); in ks8851_rx_pkts()
292 rxlen -= 4; in ks8851_rx_pkts()
294 skb = netdev_alloc_skb_ip_align(ks->netdev, rxalign); in ks8851_rx_pkts()
303 rxpkt = skb_put(skb, rxlen) - 8; in ks8851_rx_pkts()
305 ks->rdfifo(ks, rxpkt, rxalign + 8); in ks8851_rx_pkts()
310 skb->protocol = eth_type_trans(skb, ks->netdev); in ks8851_rx_pkts()
313 ks->netdev->stats.rx_packets++; in ks8851_rx_pkts()
314 ks->netdev->stats.rx_bytes += rxlen; in ks8851_rx_pkts()
319 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr | RXQCR_RRXEF); in ks8851_rx_pkts()
324 * ks8851_irq - IRQ handler for dealing with interrupt requests
346 netif_dbg(ks, intr, ks->netdev, in ks8851_irq()
370 ks->tx_space = ks8851_rdreg16(ks, KS_TXMIR); in ks8851_irq()
372 netif_dbg(ks, intr, ks->netdev, in ks8851_irq()
373 "%s: txspace %d\n", __func__, ks->tx_space); in ks8851_irq()
380 netdev_err(ks->netdev, "%s: spi bus error\n", __func__); in ks8851_irq()
388 * packet read-out, however we're masking the interrupt in ks8851_irq()
399 struct ks8851_rxctrl *rxc = &ks->rxctrl; in ks8851_irq()
402 ks8851_wrreg16(ks, KS_MAHTR0, rxc->mchash[0]); in ks8851_irq()
403 ks8851_wrreg16(ks, KS_MAHTR1, rxc->mchash[1]); in ks8851_irq()
404 ks8851_wrreg16(ks, KS_MAHTR2, rxc->mchash[2]); in ks8851_irq()
405 ks8851_wrreg16(ks, KS_MAHTR3, rxc->mchash[3]); in ks8851_irq()
407 ks8851_wrreg16(ks, KS_RXCR2, rxc->rxcr2); in ks8851_irq()
408 ks8851_wrreg16(ks, KS_RXCR1, rxc->rxcr1); in ks8851_irq()
414 mii_check_link(&ks->mii); in ks8851_irq()
417 netif_wake_queue(ks->netdev); in ks8851_irq()
423 * ks8851_flush_tx_work - flush outstanding TX work
428 if (ks->flush_tx_work) in ks8851_flush_tx_work()
429 ks->flush_tx_work(ks); in ks8851_flush_tx_work()
433 * ks8851_net_open - open network device
434 * @dev: The network device being opened.
436 * Called when the network device is marked active, such as a user executing
437 * 'ifconfig up' on the device.
445 ret = request_threaded_irq(dev->irq, NULL, ks8851_irq, in ks8851_net_open()
447 dev->name, ks); in ks8851_net_open()
457 netif_dbg(ks, ifup, ks->netdev, "opening\n"); in ks8851_net_open()
459 /* bring chip out of any power saving mode it was in */ in ks8851_net_open()
473 /* auto-increment tx data, reset tx pointer */ in ks8851_net_open()
492 ks->rc_rxqcr = (RXQCR_RXFCTE | /* IRQ on frame count exceeded */ in ks8851_net_open()
493 RXQCR_RXDBCTE | /* IRQ on byte count exceeded */ in ks8851_net_open()
494 RXQCR_RXDTTE); /* IRQ on time exceeded */ in ks8851_net_open()
496 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr); in ks8851_net_open()
499 ks8851_wrreg16(ks, KS_ISR, ks->rc_ier); in ks8851_net_open()
500 ks8851_wrreg16(ks, KS_IER, ks->rc_ier); in ks8851_net_open()
502 netif_start_queue(ks->netdev); in ks8851_net_open()
504 netif_dbg(ks, ifup, ks->netdev, "network device up\n"); in ks8851_net_open()
507 mii_check_link(&ks->mii); in ks8851_net_open()
512 * ks8851_net_stop - close network device
515 * Called to close down a network device which has been active. Cancell any
516 * work, shutdown the RX and TX process and then place the chip into a low
536 flush_work(&ks->rxctrl_work); in ks8851_net_stop()
550 while (!skb_queue_empty(&ks->txq)) { in ks8851_net_stop()
551 struct sk_buff *txb = skb_dequeue(&ks->txq); in ks8851_net_stop()
553 netif_dbg(ks, ifdown, ks->netdev, in ks8851_net_stop()
559 free_irq(dev->irq, ks); in ks8851_net_stop()
565 * ks8851_start_xmit - transmit packet
569 * Called by the network layer to transmit the @skb. Queue the packet for
573 * We do this to firstly avoid sleeping with the network device locked,
582 return ks->start_xmit(skb, dev); in ks8851_start_xmit()
586 * ks8851_rxctrl_work - work handler to change rx mode
590 * the network device layer. This is done so that we can do this without
591 * having to sleep whilst holding the network device lock.
596 * complete. The interrupt handler then writes the new values into the chip.
618 if (dev->flags & IFF_PROMISC) { in ks8851_set_rx_mode()
622 } else if (dev->flags & IFF_ALLMULTI) { in ks8851_set_rx_mode()
627 } else if (dev->flags & IFF_MULTICAST && !netdev_mc_empty(dev)) { in ks8851_set_rx_mode()
634 crc = ether_crc(ETH_ALEN, ha->addr); in ks8851_set_rx_mode()
635 crc >>= (32 - 6); /* get top six bits */ in ks8851_set_rx_mode()
655 spin_lock(&ks->statelock); in ks8851_set_rx_mode()
657 if (memcmp(&rxctrl, &ks->rxctrl, sizeof(rxctrl)) != 0) { in ks8851_set_rx_mode()
658 memcpy(&ks->rxctrl, &rxctrl, sizeof(ks->rxctrl)); in ks8851_set_rx_mode()
659 schedule_work(&ks->rxctrl_work); in ks8851_set_rx_mode()
662 spin_unlock(&ks->statelock); in ks8851_set_rx_mode()
670 return -EBUSY; in ks8851_set_mac_address()
672 if (!is_valid_ether_addr(sa->sa_data)) in ks8851_set_mac_address()
673 return -EADDRNOTAVAIL; in ks8851_set_mac_address()
675 memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN); in ks8851_set_mac_address()
684 return -EINVAL; in ks8851_net_ioctl()
686 return generic_mii_ioctl(&ks->mii, if_mii(req), cmd, NULL); in ks8851_net_ioctl()
704 strlcpy(di->driver, "KS8851", sizeof(di->driver)); in ks8851_get_drvinfo()
705 strlcpy(di->version, "1.00", sizeof(di->version)); in ks8851_get_drvinfo()
706 strlcpy(di->bus_info, dev_name(dev->dev.parent), sizeof(di->bus_info)); in ks8851_get_drvinfo()
712 return ks->msg_enable; in ks8851_get_msglevel()
718 ks->msg_enable = to; in ks8851_set_msglevel()
726 mii_ethtool_get_link_ksettings(&ks->mii, cmd); in ks8851_get_link_ksettings()
735 return mii_ethtool_set_link_ksettings(&ks->mii, cmd); in ks8851_set_link_ksettings()
741 return mii_link_ok(&ks->mii); in ks8851_get_link()
747 return mii_nway_restart(&ks->mii); in ks8851_nway_reset()
754 struct ks8851_net *ks = ee->data; in ks8851_eeprom_regread()
759 ee->reg_data_out = (val & EEPCR_EESB) ? 1 : 0; in ks8851_eeprom_regread()
760 ee->reg_data_clock = (val & EEPCR_EESCK) ? 1 : 0; in ks8851_eeprom_regread()
761 ee->reg_chip_select = (val & EEPCR_EECS) ? 1 : 0; in ks8851_eeprom_regread()
766 struct ks8851_net *ks = ee->data; in ks8851_eeprom_regwrite()
767 unsigned val = EEPCR_EESA; /* default - eeprom access on */ in ks8851_eeprom_regwrite()
769 if (ee->drive_data) in ks8851_eeprom_regwrite()
771 if (ee->reg_data_in) in ks8851_eeprom_regwrite()
773 if (ee->reg_data_clock) in ks8851_eeprom_regwrite()
775 if (ee->reg_chip_select) in ks8851_eeprom_regwrite()
782 * ks8851_eeprom_claim - claim device EEPROM and activate the interface
783 * @ks: The network device state.
796 * ks8851_eeprom_release - release the EEPROM interface
814 int offset = ee->offset; in ks8851_set_eeprom()
816 int len = ee->len; in ks8851_set_eeprom()
821 return -EINVAL; in ks8851_set_eeprom()
823 if (ee->magic != KS_EEPROM_MAGIC) in ks8851_set_eeprom()
824 return -EINVAL; in ks8851_set_eeprom()
826 if (!(ks->rc_ccr & CCR_EEPROM)) in ks8851_set_eeprom()
827 return -ENOENT; in ks8851_set_eeprom()
833 eeprom_93cx6_wren(&ks->eeprom, true); in ks8851_set_eeprom()
838 eeprom_93cx6_read(&ks->eeprom, offset/2, &tmp); in ks8851_set_eeprom()
848 eeprom_93cx6_write(&ks->eeprom, offset/2, tmp); in ks8851_set_eeprom()
849 eeprom_93cx6_wren(&ks->eeprom, false); in ks8851_set_eeprom()
861 int offset = ee->offset; in ks8851_get_eeprom()
863 int len = ee->len; in ks8851_get_eeprom()
867 return -EINVAL; in ks8851_get_eeprom()
869 if (!(ks->rc_ccr & CCR_EEPROM)) in ks8851_get_eeprom()
870 return -ENOENT; in ks8851_get_eeprom()
876 ee->magic = KS_EEPROM_MAGIC; in ks8851_get_eeprom()
878 eeprom_93cx6_multiread(&ks->eeprom, offset/2, (__le16 *)data, len/2); in ks8851_get_eeprom()
890 return ks->rc_ccr & CCR_EEPROM ? 128 : 0; in ks8851_get_eeprom_len()
909 * ks8851_phy_reg - convert MII register into a KS8851 register
933 return -EOPNOTSUPP; in ks8851_phy_reg()
955 * ks8851_phy_read - MII interface PHY register read.
956 * @dev: The network device the PHY is on.
961 * device does not support all the MII registers, the non-existent values
966 * caller. The mii-tool that the driver was tested with takes any -ve error
997 struct ks8851_net *ks = bus->priv; in ks8851_mdio_read()
1000 return -EOPNOTSUPP; in ks8851_mdio_read()
1008 return ks8851_phy_read_common(ks->netdev, phy_id, reg); in ks8851_mdio_read()
1013 struct ks8851_net *ks = bus->priv; in ks8851_mdio_write()
1015 ks8851_phy_write(ks->netdev, phy_id, reg, val); in ks8851_mdio_write()
1020 * ks8851_read_selftest - read the selftest memory info.
1033 netdev_warn(ks->netdev, "Memory selftest not finished\n"); in ks8851_read_selftest()
1038 netdev_err(ks->netdev, "TX memory selftest fail\n"); in ks8851_read_selftest()
1041 netdev_err(ks->netdev, "RX memory selftest fail\n"); in ks8851_read_selftest()
1051 struct net_device *netdev = ks->netdev; in ks8851_suspend()
1065 struct net_device *netdev = ks->netdev; in ks8851_resume()
1084 return -ENOMEM; in ks8851_register_mdiobus()
1086 mii_bus->name = "ks8851_eth_mii"; in ks8851_register_mdiobus()
1087 mii_bus->read = ks8851_mdio_read; in ks8851_register_mdiobus()
1088 mii_bus->write = ks8851_mdio_write; in ks8851_register_mdiobus()
1089 mii_bus->priv = ks; in ks8851_register_mdiobus()
1090 mii_bus->parent = dev; in ks8851_register_mdiobus()
1091 mii_bus->phy_mask = ~((u32)BIT(0)); in ks8851_register_mdiobus()
1092 snprintf(mii_bus->id, MII_BUS_ID_SIZE, "%s", dev_name(dev)); in ks8851_register_mdiobus()
1098 ks->mii_bus = mii_bus; in ks8851_register_mdiobus()
1109 mdiobus_unregister(ks->mii_bus); in ks8851_unregister_mdiobus()
1110 mdiobus_free(ks->mii_bus); in ks8851_unregister_mdiobus()
1121 ks->netdev = netdev; in ks8851_probe_common()
1122 ks->tx_space = 6144; in ks8851_probe_common()
1124 gpio = of_get_named_gpio_flags(dev->of_node, "reset-gpios", 0, NULL); in ks8851_probe_common()
1125 if (gpio == -EPROBE_DEFER) in ks8851_probe_common()
1128 ks->gpio = gpio; in ks8851_probe_common()
1138 ks->vdd_io = devm_regulator_get(dev, "vdd-io"); in ks8851_probe_common()
1139 if (IS_ERR(ks->vdd_io)) { in ks8851_probe_common()
1140 ret = PTR_ERR(ks->vdd_io); in ks8851_probe_common()
1144 ret = regulator_enable(ks->vdd_io); in ks8851_probe_common()
1150 ks->vdd_reg = devm_regulator_get(dev, "vdd"); in ks8851_probe_common()
1151 if (IS_ERR(ks->vdd_reg)) { in ks8851_probe_common()
1152 ret = PTR_ERR(ks->vdd_reg); in ks8851_probe_common()
1156 ret = regulator_enable(ks->vdd_reg); in ks8851_probe_common()
1167 spin_lock_init(&ks->statelock); in ks8851_probe_common()
1169 INIT_WORK(&ks->rxctrl_work, ks8851_rxctrl_work); in ks8851_probe_common()
1174 ks->eeprom.data = ks; in ks8851_probe_common()
1175 ks->eeprom.width = PCI_EEPROM_WIDTH_93C46; in ks8851_probe_common()
1176 ks->eeprom.register_read = ks8851_eeprom_regread; in ks8851_probe_common()
1177 ks->eeprom.register_write = ks8851_eeprom_regwrite; in ks8851_probe_common()
1180 ks->mii.dev = netdev; in ks8851_probe_common()
1181 ks->mii.phy_id = 1; in ks8851_probe_common()
1182 ks->mii.phy_id_mask = 1; in ks8851_probe_common()
1183 ks->mii.reg_num_mask = 0xf; in ks8851_probe_common()
1184 ks->mii.mdio_read = ks8851_phy_read; in ks8851_probe_common()
1185 ks->mii.mdio_write = ks8851_phy_write; in ks8851_probe_common()
1194 ks->msg_enable = netif_msg_init(msg_en, NETIF_MSG_DRV | in ks8851_probe_common()
1198 skb_queue_head_init(&ks->txq); in ks8851_probe_common()
1200 netdev->ethtool_ops = &ks8851_ethtool_ops; in ks8851_probe_common()
1204 netif_carrier_off(ks->netdev); in ks8851_probe_common()
1205 netdev->if_port = IF_PORT_100BASET; in ks8851_probe_common()
1206 netdev->netdev_ops = &ks8851_netdev_ops; in ks8851_probe_common()
1211 /* simple check for a valid chip being connected to the bus */ in ks8851_probe_common()
1215 ret = -ENODEV; in ks8851_probe_common()
1220 ks->rc_ccr = ks8851_rdreg16(ks, KS_CCR); in ks8851_probe_common()
1223 ks8851_init_mac(ks, dev->of_node); in ks8851_probe_common()
1227 dev_err(dev, "failed to register network device\n"); in ks8851_probe_common()
1232 CIDER_REV_GET(cider), netdev->dev_addr, netdev->irq, in ks8851_probe_common()
1233 ks->rc_ccr & CCR_EEPROM ? "has" : "no"); in ks8851_probe_common()
1242 regulator_disable(ks->vdd_reg); in ks8851_probe_common()
1244 regulator_disable(ks->vdd_io); in ks8851_probe_common()
1259 unregister_netdev(priv->netdev); in ks8851_remove_common()
1260 if (gpio_is_valid(priv->gpio)) in ks8851_remove_common()
1261 gpio_set_value(priv->gpio, 0); in ks8851_remove_common()
1262 regulator_disable(priv->vdd_reg); in ks8851_remove_common()
1263 regulator_disable(priv->vdd_io); in ks8851_remove_common()
1269 MODULE_DESCRIPTION("KS8851 Network driver");