linux/drivers/net/ethernet/micrel/ks8851_spi.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/* drivers/net/ethernet/micrel/ks8851.c
   3 *
   4 * Copyright 2009 Simtec Electronics
   5 *      http://www.simtec.co.uk/
   6 *      Ben Dooks <ben@simtec.co.uk>
   7 */
   8
   9#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  10
  11#define DEBUG
  12
  13#include <linux/interrupt.h>
  14#include <linux/module.h>
  15#include <linux/kernel.h>
  16#include <linux/netdevice.h>
  17#include <linux/etherdevice.h>
  18#include <linux/ethtool.h>
  19#include <linux/cache.h>
  20#include <linux/crc32.h>
  21#include <linux/mii.h>
  22#include <linux/regulator/consumer.h>
  23
  24#include <linux/spi/spi.h>
  25#include <linux/gpio.h>
  26#include <linux/of_gpio.h>
  27#include <linux/of_net.h>
  28
  29#include "ks8851.h"
  30
  31static int msg_enable;
  32
  33/**
  34 * struct ks8851_net_spi - KS8851 SPI driver private data
  35 * @lock: Lock to ensure that the device is not accessed when busy.
  36 * @tx_work: Work queue for tx packets
  37 * @ks8851: KS8851 driver common private data
  38 * @spidev: The spi device we're bound to.
  39 * @spi_msg1: pre-setup SPI transfer with one message, @spi_xfer1.
  40 * @spi_msg2: pre-setup SPI transfer with two messages, @spi_xfer2.
  41 * @spi_xfer1: @spi_msg1 SPI transfer structure
  42 * @spi_xfer2: @spi_msg2 SPI transfer structure
  43 *
  44 * The @lock ensures that the chip is protected when certain operations are
  45 * in progress. When the read or write packet transfer is in progress, most
  46 * of the chip registers are not ccessible until the transfer is finished and
  47 * the DMA has been de-asserted.
  48 */
  49struct ks8851_net_spi {
  50        struct ks8851_net       ks8851;
  51        struct mutex            lock;
  52        struct work_struct      tx_work;
  53        struct spi_device       *spidev;
  54        struct spi_message      spi_msg1;
  55        struct spi_message      spi_msg2;
  56        struct spi_transfer     spi_xfer1;
  57        struct spi_transfer     spi_xfer2[2];
  58};
  59
  60#define to_ks8851_spi(ks) container_of((ks), struct ks8851_net_spi, ks8851)
  61
  62/* SPI frame opcodes */
  63#define KS_SPIOP_RD     0x00
  64#define KS_SPIOP_WR     0x40
  65#define KS_SPIOP_RXFIFO 0x80
  66#define KS_SPIOP_TXFIFO 0xC0
  67
  68/* shift for byte-enable data */
  69#define BYTE_EN(_x)     ((_x) << 2)
  70
  71/* turn register number and byte-enable mask into data for start of packet */
  72#define MK_OP(_byteen, _reg)    \
  73        (BYTE_EN(_byteen) | (_reg) << (8 + 2) | (_reg) >> 6)
  74
  75/**
  76 * ks8851_lock_spi - register access lock
  77 * @ks: The chip state
  78 * @flags: Spinlock flags
  79 *
  80 * Claim chip register access lock
  81 */
  82static void ks8851_lock_spi(struct ks8851_net *ks, unsigned long *flags)
  83{
  84        struct ks8851_net_spi *kss = to_ks8851_spi(ks);
  85
  86        mutex_lock(&kss->lock);
  87}
  88
  89/**
  90 * ks8851_unlock_spi - register access unlock
  91 * @ks: The chip state
  92 * @flags: Spinlock flags
  93 *
  94 * Release chip register access lock
  95 */
  96static void ks8851_unlock_spi(struct ks8851_net *ks, unsigned long *flags)
  97{
  98        struct ks8851_net_spi *kss = to_ks8851_spi(ks);
  99
 100        mutex_unlock(&kss->lock);
 101}
 102
 103/* SPI register read/write calls.
 104 *
 105 * All these calls issue SPI transactions to access the chip's registers. They
 106 * all require that the necessary lock is held to prevent accesses when the
 107 * chip is busy transferring packet data (RX/TX FIFO accesses).
 108 */
 109
 110/**
 111 * ks8851_wrreg16_spi - write 16bit register value to chip via SPI
 112 * @ks: The chip state
 113 * @reg: The register address
 114 * @val: The value to write
 115 *
 116 * Issue a write to put the value @val into the register specified in @reg.
 117 */
 118static void ks8851_wrreg16_spi(struct ks8851_net *ks, unsigned int reg,
 119                               unsigned int val)
 120{
 121        struct ks8851_net_spi *kss = to_ks8851_spi(ks);
 122        struct spi_transfer *xfer = &kss->spi_xfer1;
 123        struct spi_message *msg = &kss->spi_msg1;
 124        __le16 txb[2];
 125        int ret;
 126
 127        txb[0] = cpu_to_le16(MK_OP(reg & 2 ? 0xC : 0x03, reg) | KS_SPIOP_WR);
 128        txb[1] = cpu_to_le16(val);
 129
 130        xfer->tx_buf = txb;
 131        xfer->rx_buf = NULL;
 132        xfer->len = 4;
 133
 134        ret = spi_sync(kss->spidev, msg);
 135        if (ret < 0)
 136                netdev_err(ks->netdev, "spi_sync() failed\n");
 137}
 138
 139/**
 140 * ks8851_rdreg - issue read register command and return the data
 141 * @ks: The device state
 142 * @op: The register address and byte enables in message format.
 143 * @rxb: The RX buffer to return the result into
 144 * @rxl: The length of data expected.
 145 *
 146 * This is the low level read call that issues the necessary spi message(s)
 147 * to read data from the register specified in @op.
 148 */
 149static void ks8851_rdreg(struct ks8851_net *ks, unsigned int op,
 150                         u8 *rxb, unsigned int rxl)
 151{
 152        struct ks8851_net_spi *kss = to_ks8851_spi(ks);
 153        struct spi_transfer *xfer;
 154        struct spi_message *msg;
 155        __le16 *txb = (__le16 *)ks->txd;
 156        u8 *trx = ks->rxd;
 157        int ret;
 158
 159        txb[0] = cpu_to_le16(op | KS_SPIOP_RD);
 160
 161        if (kss->spidev->master->flags & SPI_MASTER_HALF_DUPLEX) {
 162                msg = &kss->spi_msg2;
 163                xfer = kss->spi_xfer2;
 164
 165                xfer->tx_buf = txb;
 166                xfer->rx_buf = NULL;
 167                xfer->len = 2;
 168
 169                xfer++;
 170                xfer->tx_buf = NULL;
 171                xfer->rx_buf = trx;
 172                xfer->len = rxl;
 173        } else {
 174                msg = &kss->spi_msg1;
 175                xfer = &kss->spi_xfer1;
 176
 177                xfer->tx_buf = txb;
 178                xfer->rx_buf = trx;
 179                xfer->len = rxl + 2;
 180        }
 181
 182        ret = spi_sync(kss->spidev, msg);
 183        if (ret < 0)
 184                netdev_err(ks->netdev, "read: spi_sync() failed\n");
 185        else if (kss->spidev->master->flags & SPI_MASTER_HALF_DUPLEX)
 186                memcpy(rxb, trx, rxl);
 187        else
 188                memcpy(rxb, trx + 2, rxl);
 189}
 190
 191/**
 192 * ks8851_rdreg16_spi - read 16 bit register from device via SPI
 193 * @ks: The chip information
 194 * @reg: The register address
 195 *
 196 * Read a 16bit register from the chip, returning the result
 197 */
 198static unsigned int ks8851_rdreg16_spi(struct ks8851_net *ks, unsigned int reg)
 199{
 200        __le16 rx = 0;
 201
 202        ks8851_rdreg(ks, MK_OP(reg & 2 ? 0xC : 0x3, reg), (u8 *)&rx, 2);
 203        return le16_to_cpu(rx);
 204}
 205
 206/**
 207 * ks8851_rdfifo_spi - read data from the receive fifo via SPI
 208 * @ks: The device state.
 209 * @buff: The buffer address
 210 * @len: The length of the data to read
 211 *
 212 * Issue an RXQ FIFO read command and read the @len amount of data from
 213 * the FIFO into the buffer specified by @buff.
 214 */
 215static void ks8851_rdfifo_spi(struct ks8851_net *ks, u8 *buff, unsigned int len)
 216{
 217        struct ks8851_net_spi *kss = to_ks8851_spi(ks);
 218        struct spi_transfer *xfer = kss->spi_xfer2;
 219        struct spi_message *msg = &kss->spi_msg2;
 220        u8 txb[1];
 221        int ret;
 222
 223        netif_dbg(ks, rx_status, ks->netdev,
 224                  "%s: %d@%p\n", __func__, len, buff);
 225
 226        /* set the operation we're issuing */
 227        txb[0] = KS_SPIOP_RXFIFO;
 228
 229        xfer->tx_buf = txb;
 230        xfer->rx_buf = NULL;
 231        xfer->len = 1;
 232
 233        xfer++;
 234        xfer->rx_buf = buff;
 235        xfer->tx_buf = NULL;
 236        xfer->len = len;
 237
 238        ret = spi_sync(kss->spidev, msg);
 239        if (ret < 0)
 240                netdev_err(ks->netdev, "%s: spi_sync() failed\n", __func__);
 241}
 242
 243/**
 244 * ks8851_wrfifo_spi - write packet to TX FIFO via SPI
 245 * @ks: The device state.
 246 * @txp: The sk_buff to transmit.
 247 * @irq: IRQ on completion of the packet.
 248 *
 249 * Send the @txp to the chip. This means creating the relevant packet header
 250 * specifying the length of the packet and the other information the chip
 251 * needs, such as IRQ on completion. Send the header and the packet data to
 252 * the device.
 253 */
 254static void ks8851_wrfifo_spi(struct ks8851_net *ks, struct sk_buff *txp,
 255                              bool irq)
 256{
 257        struct ks8851_net_spi *kss = to_ks8851_spi(ks);
 258        struct spi_transfer *xfer = kss->spi_xfer2;
 259        struct spi_message *msg = &kss->spi_msg2;
 260        unsigned int fid = 0;
 261        int ret;
 262
 263        netif_dbg(ks, tx_queued, ks->netdev, "%s: skb %p, %d@%p, irq %d\n",
 264                  __func__, txp, txp->len, txp->data, irq);
 265
 266        fid = ks->fid++;
 267        fid &= TXFR_TXFID_MASK;
 268
 269        if (irq)
 270                fid |= TXFR_TXIC;       /* irq on completion */
 271
 272        /* start header at txb[1] to align txw entries */
 273        ks->txh.txb[1] = KS_SPIOP_TXFIFO;
 274        ks->txh.txw[1] = cpu_to_le16(fid);
 275        ks->txh.txw[2] = cpu_to_le16(txp->len);
 276
 277        xfer->tx_buf = &ks->txh.txb[1];
 278        xfer->rx_buf = NULL;
 279        xfer->len = 5;
 280
 281        xfer++;
 282        xfer->tx_buf = txp->data;
 283        xfer->rx_buf = NULL;
 284        xfer->len = ALIGN(txp->len, 4);
 285
 286        ret = spi_sync(kss->spidev, msg);
 287        if (ret < 0)
 288                netdev_err(ks->netdev, "%s: spi_sync() failed\n", __func__);
 289}
 290
 291/**
 292 * ks8851_rx_skb_spi - receive skbuff
 293 * @ks: The device state
 294 * @skb: The skbuff
 295 */
 296static void ks8851_rx_skb_spi(struct ks8851_net *ks, struct sk_buff *skb)
 297{
 298        netif_rx_ni(skb);
 299}
 300
 301/**
 302 * ks8851_tx_work - process tx packet(s)
 303 * @work: The work strucutre what was scheduled.
 304 *
 305 * This is called when a number of packets have been scheduled for
 306 * transmission and need to be sent to the device.
 307 */
 308static void ks8851_tx_work(struct work_struct *work)
 309{
 310        struct ks8851_net_spi *kss;
 311        struct ks8851_net *ks;
 312        unsigned long flags;
 313        struct sk_buff *txb;
 314        bool last;
 315
 316        kss = container_of(work, struct ks8851_net_spi, tx_work);
 317        ks = &kss->ks8851;
 318        last = skb_queue_empty(&ks->txq);
 319
 320        ks8851_lock_spi(ks, &flags);
 321
 322        while (!last) {
 323                txb = skb_dequeue(&ks->txq);
 324                last = skb_queue_empty(&ks->txq);
 325
 326                if (txb) {
 327                        ks8851_wrreg16_spi(ks, KS_RXQCR,
 328                                           ks->rc_rxqcr | RXQCR_SDA);
 329                        ks8851_wrfifo_spi(ks, txb, last);
 330                        ks8851_wrreg16_spi(ks, KS_RXQCR, ks->rc_rxqcr);
 331                        ks8851_wrreg16_spi(ks, KS_TXQCR, TXQCR_METFE);
 332
 333                        ks8851_done_tx(ks, txb);
 334                }
 335        }
 336
 337        ks8851_unlock_spi(ks, &flags);
 338}
 339
 340/**
 341 * ks8851_flush_tx_work_spi - flush outstanding TX work
 342 * @ks: The device state
 343 */
 344static void ks8851_flush_tx_work_spi(struct ks8851_net *ks)
 345{
 346        struct ks8851_net_spi *kss = to_ks8851_spi(ks);
 347
 348        flush_work(&kss->tx_work);
 349}
 350
 351/**
 352 * calc_txlen - calculate size of message to send packet
 353 * @len: Length of data
 354 *
 355 * Returns the size of the TXFIFO message needed to send
 356 * this packet.
 357 */
 358static unsigned int calc_txlen(unsigned int len)
 359{
 360        return ALIGN(len + 4, 4);
 361}
 362
 363/**
 364 * ks8851_start_xmit_spi - transmit packet using SPI
 365 * @skb: The buffer to transmit
 366 * @dev: The device used to transmit the packet.
 367 *
 368 * Called by the network layer to transmit the @skb. Queue the packet for
 369 * the device and schedule the necessary work to transmit the packet when
 370 * it is free.
 371 *
 372 * We do this to firstly avoid sleeping with the network device locked,
 373 * and secondly so we can round up more than one packet to transmit which
 374 * means we can try and avoid generating too many transmit done interrupts.
 375 */
 376static netdev_tx_t ks8851_start_xmit_spi(struct sk_buff *skb,
 377                                         struct net_device *dev)
 378{
 379        unsigned int needed = calc_txlen(skb->len);
 380        struct ks8851_net *ks = netdev_priv(dev);
 381        netdev_tx_t ret = NETDEV_TX_OK;
 382        struct ks8851_net_spi *kss;
 383
 384        kss = to_ks8851_spi(ks);
 385
 386        netif_dbg(ks, tx_queued, ks->netdev,
 387                  "%s: skb %p, %d@%p\n", __func__, skb, skb->len, skb->data);
 388
 389        spin_lock(&ks->statelock);
 390
 391        if (needed > ks->tx_space) {
 392                netif_stop_queue(dev);
 393                ret = NETDEV_TX_BUSY;
 394        } else {
 395                ks->tx_space -= needed;
 396                skb_queue_tail(&ks->txq, skb);
 397        }
 398
 399        spin_unlock(&ks->statelock);
 400        schedule_work(&kss->tx_work);
 401
 402        return ret;
 403}
 404
 405static int ks8851_probe_spi(struct spi_device *spi)
 406{
 407        struct device *dev = &spi->dev;
 408        struct ks8851_net_spi *kss;
 409        struct net_device *netdev;
 410        struct ks8851_net *ks;
 411
 412        netdev = devm_alloc_etherdev(dev, sizeof(struct ks8851_net_spi));
 413        if (!netdev)
 414                return -ENOMEM;
 415
 416        spi->bits_per_word = 8;
 417
 418        ks = netdev_priv(netdev);
 419
 420        ks->lock = ks8851_lock_spi;
 421        ks->unlock = ks8851_unlock_spi;
 422        ks->rdreg16 = ks8851_rdreg16_spi;
 423        ks->wrreg16 = ks8851_wrreg16_spi;
 424        ks->rdfifo = ks8851_rdfifo_spi;
 425        ks->wrfifo = ks8851_wrfifo_spi;
 426        ks->start_xmit = ks8851_start_xmit_spi;
 427        ks->rx_skb = ks8851_rx_skb_spi;
 428        ks->flush_tx_work = ks8851_flush_tx_work_spi;
 429
 430#define STD_IRQ (IRQ_LCI |      /* Link Change */       \
 431                 IRQ_TXI |      /* TX done */           \
 432                 IRQ_RXI |      /* RX done */           \
 433                 IRQ_SPIBEI |   /* SPI bus error */     \
 434                 IRQ_TXPSI |    /* TX process stop */   \
 435                 IRQ_RXPSI)     /* RX process stop */
 436        ks->rc_ier = STD_IRQ;
 437
 438        kss = to_ks8851_spi(ks);
 439
 440        kss->spidev = spi;
 441        mutex_init(&kss->lock);
 442        INIT_WORK(&kss->tx_work, ks8851_tx_work);
 443
 444        /* initialise pre-made spi transfer messages */
 445        spi_message_init(&kss->spi_msg1);
 446        spi_message_add_tail(&kss->spi_xfer1, &kss->spi_msg1);
 447
 448        spi_message_init(&kss->spi_msg2);
 449        spi_message_add_tail(&kss->spi_xfer2[0], &kss->spi_msg2);
 450        spi_message_add_tail(&kss->spi_xfer2[1], &kss->spi_msg2);
 451
 452        netdev->irq = spi->irq;
 453
 454        return ks8851_probe_common(netdev, dev, msg_enable);
 455}
 456
 457static int ks8851_remove_spi(struct spi_device *spi)
 458{
 459        return ks8851_remove_common(&spi->dev);
 460}
 461
 462static const struct of_device_id ks8851_match_table[] = {
 463        { .compatible = "micrel,ks8851" },
 464        { }
 465};
 466MODULE_DEVICE_TABLE(of, ks8851_match_table);
 467
 468static struct spi_driver ks8851_driver = {
 469        .driver = {
 470                .name = "ks8851",
 471                .of_match_table = ks8851_match_table,
 472                .pm = &ks8851_pm_ops,
 473        },
 474        .probe = ks8851_probe_spi,
 475        .remove = ks8851_remove_spi,
 476};
 477module_spi_driver(ks8851_driver);
 478
 479MODULE_DESCRIPTION("KS8851 Network driver");
 480MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
 481MODULE_LICENSE("GPL");
 482
 483module_param_named(message, msg_enable, int, 0);
 484MODULE_PARM_DESC(message, "Message verbosity level (0=none, 31=all)");
 485MODULE_ALIAS("spi:ks8851");
 486