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