linux/drivers/net/ethernet/adi/bfin_mac.c
<<
>>
Prefs
   1/*
   2 * Blackfin On-Chip MAC Driver
   3 *
   4 * Copyright 2004-2010 Analog Devices Inc.
   5 *
   6 * Enter bugs at http://blackfin.uclinux.org/
   7 *
   8 * Licensed under the GPL-2 or later.
   9 */
  10
  11#define DRV_VERSION     "1.1"
  12#define DRV_DESC        "Blackfin on-chip Ethernet MAC driver"
  13
  14#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  15
  16#include <linux/init.h>
  17#include <linux/module.h>
  18#include <linux/kernel.h>
  19#include <linux/sched.h>
  20#include <linux/slab.h>
  21#include <linux/delay.h>
  22#include <linux/timer.h>
  23#include <linux/errno.h>
  24#include <linux/irq.h>
  25#include <linux/io.h>
  26#include <linux/ioport.h>
  27#include <linux/crc32.h>
  28#include <linux/device.h>
  29#include <linux/spinlock.h>
  30#include <linux/mii.h>
  31#include <linux/netdevice.h>
  32#include <linux/etherdevice.h>
  33#include <linux/ethtool.h>
  34#include <linux/skbuff.h>
  35#include <linux/platform_device.h>
  36
  37#include <asm/dma.h>
  38#include <linux/dma-mapping.h>
  39
  40#include <asm/div64.h>
  41#include <asm/dpmc.h>
  42#include <asm/blackfin.h>
  43#include <asm/cacheflush.h>
  44#include <asm/portmux.h>
  45#include <mach/pll.h>
  46
  47#include "bfin_mac.h"
  48
  49MODULE_AUTHOR("Bryan Wu, Luke Yang");
  50MODULE_LICENSE("GPL");
  51MODULE_DESCRIPTION(DRV_DESC);
  52MODULE_ALIAS("platform:bfin_mac");
  53
  54#if defined(CONFIG_BFIN_MAC_USE_L1)
  55# define bfin_mac_alloc(dma_handle, size, num)  l1_data_sram_zalloc(size*num)
  56# define bfin_mac_free(dma_handle, ptr, num)    l1_data_sram_free(ptr)
  57#else
  58# define bfin_mac_alloc(dma_handle, size, num) \
  59        dma_alloc_coherent(NULL, size*num, dma_handle, GFP_KERNEL)
  60# define bfin_mac_free(dma_handle, ptr, num) \
  61        dma_free_coherent(NULL, sizeof(*ptr)*num, ptr, dma_handle)
  62#endif
  63
  64#define PKT_BUF_SZ 1580
  65
  66#define MAX_TIMEOUT_CNT 500
  67
  68/* pointers to maintain transmit list */
  69static struct net_dma_desc_tx *tx_list_head;
  70static struct net_dma_desc_tx *tx_list_tail;
  71static struct net_dma_desc_rx *rx_list_head;
  72static struct net_dma_desc_rx *rx_list_tail;
  73static struct net_dma_desc_rx *current_rx_ptr;
  74static struct net_dma_desc_tx *current_tx_ptr;
  75static struct net_dma_desc_tx *tx_desc;
  76static struct net_dma_desc_rx *rx_desc;
  77
  78static void desc_list_free(void)
  79{
  80        struct net_dma_desc_rx *r;
  81        struct net_dma_desc_tx *t;
  82        int i;
  83#if !defined(CONFIG_BFIN_MAC_USE_L1)
  84        dma_addr_t dma_handle = 0;
  85#endif
  86
  87        if (tx_desc) {
  88                t = tx_list_head;
  89                for (i = 0; i < CONFIG_BFIN_TX_DESC_NUM; i++) {
  90                        if (t) {
  91                                if (t->skb) {
  92                                        dev_kfree_skb(t->skb);
  93                                        t->skb = NULL;
  94                                }
  95                                t = t->next;
  96                        }
  97                }
  98                bfin_mac_free(dma_handle, tx_desc, CONFIG_BFIN_TX_DESC_NUM);
  99        }
 100
 101        if (rx_desc) {
 102                r = rx_list_head;
 103                for (i = 0; i < CONFIG_BFIN_RX_DESC_NUM; i++) {
 104                        if (r) {
 105                                if (r->skb) {
 106                                        dev_kfree_skb(r->skb);
 107                                        r->skb = NULL;
 108                                }
 109                                r = r->next;
 110                        }
 111                }
 112                bfin_mac_free(dma_handle, rx_desc, CONFIG_BFIN_RX_DESC_NUM);
 113        }
 114}
 115
 116static int desc_list_init(struct net_device *dev)
 117{
 118        int i;
 119        struct sk_buff *new_skb;
 120#if !defined(CONFIG_BFIN_MAC_USE_L1)
 121        /*
 122         * This dma_handle is useless in Blackfin dma_alloc_coherent().
 123         * The real dma handler is the return value of dma_alloc_coherent().
 124         */
 125        dma_addr_t dma_handle;
 126#endif
 127
 128        tx_desc = bfin_mac_alloc(&dma_handle,
 129                                sizeof(struct net_dma_desc_tx),
 130                                CONFIG_BFIN_TX_DESC_NUM);
 131        if (tx_desc == NULL)
 132                goto init_error;
 133
 134        rx_desc = bfin_mac_alloc(&dma_handle,
 135                                sizeof(struct net_dma_desc_rx),
 136                                CONFIG_BFIN_RX_DESC_NUM);
 137        if (rx_desc == NULL)
 138                goto init_error;
 139
 140        /* init tx_list */
 141        tx_list_head = tx_list_tail = tx_desc;
 142
 143        for (i = 0; i < CONFIG_BFIN_TX_DESC_NUM; i++) {
 144                struct net_dma_desc_tx *t = tx_desc + i;
 145                struct dma_descriptor *a = &(t->desc_a);
 146                struct dma_descriptor *b = &(t->desc_b);
 147
 148                /*
 149                 * disable DMA
 150                 * read from memory WNR = 0
 151                 * wordsize is 32 bits
 152                 * 6 half words is desc size
 153                 * large desc flow
 154                 */
 155                a->config = WDSIZE_32 | NDSIZE_6 | DMAFLOW_LARGE;
 156                a->start_addr = (unsigned long)t->packet;
 157                a->x_count = 0;
 158                a->next_dma_desc = b;
 159
 160                /*
 161                 * enabled DMA
 162                 * write to memory WNR = 1
 163                 * wordsize is 32 bits
 164                 * disable interrupt
 165                 * 6 half words is desc size
 166                 * large desc flow
 167                 */
 168                b->config = DMAEN | WNR | WDSIZE_32 | NDSIZE_6 | DMAFLOW_LARGE;
 169                b->start_addr = (unsigned long)(&(t->status));
 170                b->x_count = 0;
 171
 172                t->skb = NULL;
 173                tx_list_tail->desc_b.next_dma_desc = a;
 174                tx_list_tail->next = t;
 175                tx_list_tail = t;
 176        }
 177        tx_list_tail->next = tx_list_head;      /* tx_list is a circle */
 178        tx_list_tail->desc_b.next_dma_desc = &(tx_list_head->desc_a);
 179        current_tx_ptr = tx_list_head;
 180
 181        /* init rx_list */
 182        rx_list_head = rx_list_tail = rx_desc;
 183
 184        for (i = 0; i < CONFIG_BFIN_RX_DESC_NUM; i++) {
 185                struct net_dma_desc_rx *r = rx_desc + i;
 186                struct dma_descriptor *a = &(r->desc_a);
 187                struct dma_descriptor *b = &(r->desc_b);
 188
 189                /* allocate a new skb for next time receive */
 190                new_skb = netdev_alloc_skb(dev, PKT_BUF_SZ + NET_IP_ALIGN);
 191                if (!new_skb)
 192                        goto init_error;
 193
 194                skb_reserve(new_skb, NET_IP_ALIGN);
 195                /* Invidate the data cache of skb->data range when it is write back
 196                 * cache. It will prevent overwritting the new data from DMA
 197                 */
 198                blackfin_dcache_invalidate_range((unsigned long)new_skb->head,
 199                                         (unsigned long)new_skb->end);
 200                r->skb = new_skb;
 201
 202                /*
 203                 * enabled DMA
 204                 * write to memory WNR = 1
 205                 * wordsize is 32 bits
 206                 * disable interrupt
 207                 * 6 half words is desc size
 208                 * large desc flow
 209                 */
 210                a->config = DMAEN | WNR | WDSIZE_32 | NDSIZE_6 | DMAFLOW_LARGE;
 211                /* since RXDWA is enabled */
 212                a->start_addr = (unsigned long)new_skb->data - 2;
 213                a->x_count = 0;
 214                a->next_dma_desc = b;
 215
 216                /*
 217                 * enabled DMA
 218                 * write to memory WNR = 1
 219                 * wordsize is 32 bits
 220                 * enable interrupt
 221                 * 6 half words is desc size
 222                 * large desc flow
 223                 */
 224                b->config = DMAEN | WNR | WDSIZE_32 | DI_EN |
 225                                NDSIZE_6 | DMAFLOW_LARGE;
 226                b->start_addr = (unsigned long)(&(r->status));
 227                b->x_count = 0;
 228
 229                rx_list_tail->desc_b.next_dma_desc = a;
 230                rx_list_tail->next = r;
 231                rx_list_tail = r;
 232        }
 233        rx_list_tail->next = rx_list_head;      /* rx_list is a circle */
 234        rx_list_tail->desc_b.next_dma_desc = &(rx_list_head->desc_a);
 235        current_rx_ptr = rx_list_head;
 236
 237        return 0;
 238
 239init_error:
 240        desc_list_free();
 241        pr_err("kmalloc failed\n");
 242        return -ENOMEM;
 243}
 244
 245
 246/*---PHY CONTROL AND CONFIGURATION-----------------------------------------*/
 247
 248/*
 249 * MII operations
 250 */
 251/* Wait until the previous MDC/MDIO transaction has completed */
 252static int bfin_mdio_poll(void)
 253{
 254        int timeout_cnt = MAX_TIMEOUT_CNT;
 255
 256        /* poll the STABUSY bit */
 257        while ((bfin_read_EMAC_STAADD()) & STABUSY) {
 258                udelay(1);
 259                if (timeout_cnt-- < 0) {
 260                        pr_err("wait MDC/MDIO transaction to complete timeout\n");
 261                        return -ETIMEDOUT;
 262                }
 263        }
 264
 265        return 0;
 266}
 267
 268/* Read an off-chip register in a PHY through the MDC/MDIO port */
 269static int bfin_mdiobus_read(struct mii_bus *bus, int phy_addr, int regnum)
 270{
 271        int ret;
 272
 273        ret = bfin_mdio_poll();
 274        if (ret)
 275                return ret;
 276
 277        /* read mode */
 278        bfin_write_EMAC_STAADD(SET_PHYAD((u16) phy_addr) |
 279                                SET_REGAD((u16) regnum) |
 280                                STABUSY);
 281
 282        ret = bfin_mdio_poll();
 283        if (ret)
 284                return ret;
 285
 286        return (int) bfin_read_EMAC_STADAT();
 287}
 288
 289/* Write an off-chip register in a PHY through the MDC/MDIO port */
 290static int bfin_mdiobus_write(struct mii_bus *bus, int phy_addr, int regnum,
 291                              u16 value)
 292{
 293        int ret;
 294
 295        ret = bfin_mdio_poll();
 296        if (ret)
 297                return ret;
 298
 299        bfin_write_EMAC_STADAT((u32) value);
 300
 301        /* write mode */
 302        bfin_write_EMAC_STAADD(SET_PHYAD((u16) phy_addr) |
 303                                SET_REGAD((u16) regnum) |
 304                                STAOP |
 305                                STABUSY);
 306
 307        return bfin_mdio_poll();
 308}
 309
 310static int bfin_mdiobus_reset(struct mii_bus *bus)
 311{
 312        return 0;
 313}
 314
 315static void bfin_mac_adjust_link(struct net_device *dev)
 316{
 317        struct bfin_mac_local *lp = netdev_priv(dev);
 318        struct phy_device *phydev = lp->phydev;
 319        unsigned long flags;
 320        int new_state = 0;
 321
 322        spin_lock_irqsave(&lp->lock, flags);
 323        if (phydev->link) {
 324                /* Now we make sure that we can be in full duplex mode.
 325                 * If not, we operate in half-duplex mode. */
 326                if (phydev->duplex != lp->old_duplex) {
 327                        u32 opmode = bfin_read_EMAC_OPMODE();
 328                        new_state = 1;
 329
 330                        if (phydev->duplex)
 331                                opmode |= FDMODE;
 332                        else
 333                                opmode &= ~(FDMODE);
 334
 335                        bfin_write_EMAC_OPMODE(opmode);
 336                        lp->old_duplex = phydev->duplex;
 337                }
 338
 339                if (phydev->speed != lp->old_speed) {
 340                        if (phydev->interface == PHY_INTERFACE_MODE_RMII) {
 341                                u32 opmode = bfin_read_EMAC_OPMODE();
 342                                switch (phydev->speed) {
 343                                case 10:
 344                                        opmode |= RMII_10;
 345                                        break;
 346                                case 100:
 347                                        opmode &= ~RMII_10;
 348                                        break;
 349                                default:
 350                                        netdev_warn(dev,
 351                                                "Ack! Speed (%d) is not 10/100!\n",
 352                                                phydev->speed);
 353                                        break;
 354                                }
 355                                bfin_write_EMAC_OPMODE(opmode);
 356                        }
 357
 358                        new_state = 1;
 359                        lp->old_speed = phydev->speed;
 360                }
 361
 362                if (!lp->old_link) {
 363                        new_state = 1;
 364                        lp->old_link = 1;
 365                }
 366        } else if (lp->old_link) {
 367                new_state = 1;
 368                lp->old_link = 0;
 369                lp->old_speed = 0;
 370                lp->old_duplex = -1;
 371        }
 372
 373        if (new_state) {
 374                u32 opmode = bfin_read_EMAC_OPMODE();
 375                phy_print_status(phydev);
 376                pr_debug("EMAC_OPMODE = 0x%08x\n", opmode);
 377        }
 378
 379        spin_unlock_irqrestore(&lp->lock, flags);
 380}
 381
 382/* MDC  = 2.5 MHz */
 383#define MDC_CLK 2500000
 384
 385static int mii_probe(struct net_device *dev, int phy_mode)
 386{
 387        struct bfin_mac_local *lp = netdev_priv(dev);
 388        struct phy_device *phydev = NULL;
 389        unsigned short sysctl;
 390        int i;
 391        u32 sclk, mdc_div;
 392
 393        /* Enable PHY output early */
 394        if (!(bfin_read_VR_CTL() & CLKBUFOE))
 395                bfin_write_VR_CTL(bfin_read_VR_CTL() | CLKBUFOE);
 396
 397        sclk = get_sclk();
 398        mdc_div = ((sclk / MDC_CLK) / 2) - 1;
 399
 400        sysctl = bfin_read_EMAC_SYSCTL();
 401        sysctl = (sysctl & ~MDCDIV) | SET_MDCDIV(mdc_div);
 402        bfin_write_EMAC_SYSCTL(sysctl);
 403
 404        /* search for connected PHY device */
 405        for (i = 0; i < PHY_MAX_ADDR; ++i) {
 406                struct phy_device *const tmp_phydev = lp->mii_bus->phy_map[i];
 407
 408                if (!tmp_phydev)
 409                        continue; /* no PHY here... */
 410
 411                phydev = tmp_phydev;
 412                break; /* found it */
 413        }
 414
 415        /* now we are supposed to have a proper phydev, to attach to... */
 416        if (!phydev) {
 417                netdev_err(dev, "no phy device found\n");
 418                return -ENODEV;
 419        }
 420
 421        if (phy_mode != PHY_INTERFACE_MODE_RMII &&
 422                phy_mode != PHY_INTERFACE_MODE_MII) {
 423                netdev_err(dev, "invalid phy interface mode\n");
 424                return -EINVAL;
 425        }
 426
 427        phydev = phy_connect(dev, dev_name(&phydev->dev),
 428                             &bfin_mac_adjust_link, phy_mode);
 429
 430        if (IS_ERR(phydev)) {
 431                netdev_err(dev, "could not attach PHY\n");
 432                return PTR_ERR(phydev);
 433        }
 434
 435        /* mask with MAC supported features */
 436        phydev->supported &= (SUPPORTED_10baseT_Half
 437                              | SUPPORTED_10baseT_Full
 438                              | SUPPORTED_100baseT_Half
 439                              | SUPPORTED_100baseT_Full
 440                              | SUPPORTED_Autoneg
 441                              | SUPPORTED_Pause | SUPPORTED_Asym_Pause
 442                              | SUPPORTED_MII
 443                              | SUPPORTED_TP);
 444
 445        phydev->advertising = phydev->supported;
 446
 447        lp->old_link = 0;
 448        lp->old_speed = 0;
 449        lp->old_duplex = -1;
 450        lp->phydev = phydev;
 451
 452        pr_info("attached PHY driver [%s] "
 453                "(mii_bus:phy_addr=%s, irq=%d, mdc_clk=%dHz(mdc_div=%d)@sclk=%dMHz)\n",
 454                phydev->drv->name, dev_name(&phydev->dev), phydev->irq,
 455                MDC_CLK, mdc_div, sclk/1000000);
 456
 457        return 0;
 458}
 459
 460/*
 461 * Ethtool support
 462 */
 463
 464/*
 465 * interrupt routine for magic packet wakeup
 466 */
 467static irqreturn_t bfin_mac_wake_interrupt(int irq, void *dev_id)
 468{
 469        return IRQ_HANDLED;
 470}
 471
 472static int
 473bfin_mac_ethtool_getsettings(struct net_device *dev, struct ethtool_cmd *cmd)
 474{
 475        struct bfin_mac_local *lp = netdev_priv(dev);
 476
 477        if (lp->phydev)
 478                return phy_ethtool_gset(lp->phydev, cmd);
 479
 480        return -EINVAL;
 481}
 482
 483static int
 484bfin_mac_ethtool_setsettings(struct net_device *dev, struct ethtool_cmd *cmd)
 485{
 486        struct bfin_mac_local *lp = netdev_priv(dev);
 487
 488        if (!capable(CAP_NET_ADMIN))
 489                return -EPERM;
 490
 491        if (lp->phydev)
 492                return phy_ethtool_sset(lp->phydev, cmd);
 493
 494        return -EINVAL;
 495}
 496
 497static void bfin_mac_ethtool_getdrvinfo(struct net_device *dev,
 498                                        struct ethtool_drvinfo *info)
 499{
 500        strlcpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
 501        strlcpy(info->version, DRV_VERSION, sizeof(info->version));
 502        strlcpy(info->fw_version, "N/A", sizeof(info->fw_version));
 503        strlcpy(info->bus_info, dev_name(&dev->dev), sizeof(info->bus_info));
 504}
 505
 506static void bfin_mac_ethtool_getwol(struct net_device *dev,
 507        struct ethtool_wolinfo *wolinfo)
 508{
 509        struct bfin_mac_local *lp = netdev_priv(dev);
 510
 511        wolinfo->supported = WAKE_MAGIC;
 512        wolinfo->wolopts = lp->wol;
 513}
 514
 515static int bfin_mac_ethtool_setwol(struct net_device *dev,
 516        struct ethtool_wolinfo *wolinfo)
 517{
 518        struct bfin_mac_local *lp = netdev_priv(dev);
 519        int rc;
 520
 521        if (wolinfo->wolopts & (WAKE_MAGICSECURE |
 522                                WAKE_UCAST |
 523                                WAKE_MCAST |
 524                                WAKE_BCAST |
 525                                WAKE_ARP))
 526                return -EOPNOTSUPP;
 527
 528        lp->wol = wolinfo->wolopts;
 529
 530        if (lp->wol && !lp->irq_wake_requested) {
 531                /* register wake irq handler */
 532                rc = request_irq(IRQ_MAC_WAKEDET, bfin_mac_wake_interrupt,
 533                                 IRQF_DISABLED, "EMAC_WAKE", dev);
 534                if (rc)
 535                        return rc;
 536                lp->irq_wake_requested = true;
 537        }
 538
 539        if (!lp->wol && lp->irq_wake_requested) {
 540                free_irq(IRQ_MAC_WAKEDET, dev);
 541                lp->irq_wake_requested = false;
 542        }
 543
 544        /* Make sure the PHY driver doesn't suspend */
 545        device_init_wakeup(&dev->dev, lp->wol);
 546
 547        return 0;
 548}
 549
 550#ifdef CONFIG_BFIN_MAC_USE_HWSTAMP
 551static int bfin_mac_ethtool_get_ts_info(struct net_device *dev,
 552        struct ethtool_ts_info *info)
 553{
 554        struct bfin_mac_local *lp = netdev_priv(dev);
 555
 556        info->so_timestamping =
 557                SOF_TIMESTAMPING_TX_HARDWARE |
 558                SOF_TIMESTAMPING_RX_HARDWARE |
 559                SOF_TIMESTAMPING_RAW_HARDWARE;
 560        info->phc_index = lp->phc_index;
 561        info->tx_types =
 562                (1 << HWTSTAMP_TX_OFF) |
 563                (1 << HWTSTAMP_TX_ON);
 564        info->rx_filters =
 565                (1 << HWTSTAMP_FILTER_NONE) |
 566                (1 << HWTSTAMP_FILTER_PTP_V1_L4_EVENT) |
 567                (1 << HWTSTAMP_FILTER_PTP_V2_L2_EVENT) |
 568                (1 << HWTSTAMP_FILTER_PTP_V2_L4_EVENT);
 569        return 0;
 570}
 571#endif
 572
 573static const struct ethtool_ops bfin_mac_ethtool_ops = {
 574        .get_settings = bfin_mac_ethtool_getsettings,
 575        .set_settings = bfin_mac_ethtool_setsettings,
 576        .get_link = ethtool_op_get_link,
 577        .get_drvinfo = bfin_mac_ethtool_getdrvinfo,
 578        .get_wol = bfin_mac_ethtool_getwol,
 579        .set_wol = bfin_mac_ethtool_setwol,
 580#ifdef CONFIG_BFIN_MAC_USE_HWSTAMP
 581        .get_ts_info = bfin_mac_ethtool_get_ts_info,
 582#endif
 583};
 584
 585/**************************************************************************/
 586static void setup_system_regs(struct net_device *dev)
 587{
 588        struct bfin_mac_local *lp = netdev_priv(dev);
 589        int i;
 590        unsigned short sysctl;
 591
 592        /*
 593         * Odd word alignment for Receive Frame DMA word
 594         * Configure checksum support and rcve frame word alignment
 595         */
 596        sysctl = bfin_read_EMAC_SYSCTL();
 597        /*
 598         * check if interrupt is requested for any PHY,
 599         * enable PHY interrupt only if needed
 600         */
 601        for (i = 0; i < PHY_MAX_ADDR; ++i)
 602                if (lp->mii_bus->irq[i] != PHY_POLL)
 603                        break;
 604        if (i < PHY_MAX_ADDR)
 605                sysctl |= PHYIE;
 606        sysctl |= RXDWA;
 607#if defined(BFIN_MAC_CSUM_OFFLOAD)
 608        sysctl |= RXCKS;
 609#else
 610        sysctl &= ~RXCKS;
 611#endif
 612        bfin_write_EMAC_SYSCTL(sysctl);
 613
 614        bfin_write_EMAC_MMC_CTL(RSTC | CROLL);
 615
 616        /* Set vlan regs to let 1522 bytes long packets pass through */
 617        bfin_write_EMAC_VLAN1(lp->vlan1_mask);
 618        bfin_write_EMAC_VLAN2(lp->vlan2_mask);
 619
 620        /* Initialize the TX DMA channel registers */
 621        bfin_write_DMA2_X_COUNT(0);
 622        bfin_write_DMA2_X_MODIFY(4);
 623        bfin_write_DMA2_Y_COUNT(0);
 624        bfin_write_DMA2_Y_MODIFY(0);
 625
 626        /* Initialize the RX DMA channel registers */
 627        bfin_write_DMA1_X_COUNT(0);
 628        bfin_write_DMA1_X_MODIFY(4);
 629        bfin_write_DMA1_Y_COUNT(0);
 630        bfin_write_DMA1_Y_MODIFY(0);
 631}
 632
 633static void setup_mac_addr(u8 *mac_addr)
 634{
 635        u32 addr_low = le32_to_cpu(*(__le32 *) & mac_addr[0]);
 636        u16 addr_hi = le16_to_cpu(*(__le16 *) & mac_addr[4]);
 637
 638        /* this depends on a little-endian machine */
 639        bfin_write_EMAC_ADDRLO(addr_low);
 640        bfin_write_EMAC_ADDRHI(addr_hi);
 641}
 642
 643static int bfin_mac_set_mac_address(struct net_device *dev, void *p)
 644{
 645        struct sockaddr *addr = p;
 646        if (netif_running(dev))
 647                return -EBUSY;
 648        memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
 649        setup_mac_addr(dev->dev_addr);
 650        return 0;
 651}
 652
 653#ifdef CONFIG_BFIN_MAC_USE_HWSTAMP
 654#define bfin_mac_hwtstamp_is_none(cfg) ((cfg) == HWTSTAMP_FILTER_NONE)
 655
 656static u32 bfin_select_phc_clock(u32 input_clk, unsigned int *shift_result)
 657{
 658        u32 ipn = 1000000000UL / input_clk;
 659        u32 ppn = 1;
 660        unsigned int shift = 0;
 661
 662        while (ppn <= ipn) {
 663                ppn <<= 1;
 664                shift++;
 665        }
 666        *shift_result = shift;
 667        return 1000000000UL / ppn;
 668}
 669
 670static int bfin_mac_hwtstamp_ioctl(struct net_device *netdev,
 671                struct ifreq *ifr, int cmd)
 672{
 673        struct hwtstamp_config config;
 674        struct bfin_mac_local *lp = netdev_priv(netdev);
 675        u16 ptpctl;
 676        u32 ptpfv1, ptpfv2, ptpfv3, ptpfoff;
 677
 678        if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
 679                return -EFAULT;
 680
 681        pr_debug("%s config flag:0x%x, tx_type:0x%x, rx_filter:0x%x\n",
 682                        __func__, config.flags, config.tx_type, config.rx_filter);
 683
 684        /* reserved for future extensions */
 685        if (config.flags)
 686                return -EINVAL;
 687
 688        if ((config.tx_type != HWTSTAMP_TX_OFF) &&
 689                        (config.tx_type != HWTSTAMP_TX_ON))
 690                return -ERANGE;
 691
 692        ptpctl = bfin_read_EMAC_PTP_CTL();
 693
 694        switch (config.rx_filter) {
 695        case HWTSTAMP_FILTER_NONE:
 696                /*
 697                 * Dont allow any timestamping
 698                 */
 699                ptpfv3 = 0xFFFFFFFF;
 700                bfin_write_EMAC_PTP_FV3(ptpfv3);
 701                break;
 702        case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
 703        case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
 704        case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
 705                /*
 706                 * Clear the five comparison mask bits (bits[12:8]) in EMAC_PTP_CTL)
 707                 * to enable all the field matches.
 708                 */
 709                ptpctl &= ~0x1F00;
 710                bfin_write_EMAC_PTP_CTL(ptpctl);
 711                /*
 712                 * Keep the default values of the EMAC_PTP_FOFF register.
 713                 */
 714                ptpfoff = 0x4A24170C;
 715                bfin_write_EMAC_PTP_FOFF(ptpfoff);
 716                /*
 717                 * Keep the default values of the EMAC_PTP_FV1 and EMAC_PTP_FV2
 718                 * registers.
 719                 */
 720                ptpfv1 = 0x11040800;
 721                bfin_write_EMAC_PTP_FV1(ptpfv1);
 722                ptpfv2 = 0x0140013F;
 723                bfin_write_EMAC_PTP_FV2(ptpfv2);
 724                /*
 725                 * The default value (0xFFFC) allows the timestamping of both
 726                 * received Sync messages and Delay_Req messages.
 727                 */
 728                ptpfv3 = 0xFFFFFFFC;
 729                bfin_write_EMAC_PTP_FV3(ptpfv3);
 730
 731                config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
 732                break;
 733        case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
 734        case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
 735        case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
 736                /* Clear all five comparison mask bits (bits[12:8]) in the
 737                 * EMAC_PTP_CTL register to enable all the field matches.
 738                 */
 739                ptpctl &= ~0x1F00;
 740                bfin_write_EMAC_PTP_CTL(ptpctl);
 741                /*
 742                 * Keep the default values of the EMAC_PTP_FOFF register, except set
 743                 * the PTPCOF field to 0x2A.
 744                 */
 745                ptpfoff = 0x2A24170C;
 746                bfin_write_EMAC_PTP_FOFF(ptpfoff);
 747                /*
 748                 * Keep the default values of the EMAC_PTP_FV1 and EMAC_PTP_FV2
 749                 * registers.
 750                 */
 751                ptpfv1 = 0x11040800;
 752                bfin_write_EMAC_PTP_FV1(ptpfv1);
 753                ptpfv2 = 0x0140013F;
 754                bfin_write_EMAC_PTP_FV2(ptpfv2);
 755                /*
 756                 * To allow the timestamping of Pdelay_Req and Pdelay_Resp, set
 757                 * the value to 0xFFF0.
 758                 */
 759                ptpfv3 = 0xFFFFFFF0;
 760                bfin_write_EMAC_PTP_FV3(ptpfv3);
 761
 762                config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
 763                break;
 764        case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
 765        case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
 766        case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
 767                /*
 768                 * Clear bits 8 and 12 of the EMAC_PTP_CTL register to enable only the
 769                 * EFTM and PTPCM field comparison.
 770                 */
 771                ptpctl &= ~0x1100;
 772                bfin_write_EMAC_PTP_CTL(ptpctl);
 773                /*
 774                 * Keep the default values of all the fields of the EMAC_PTP_FOFF
 775                 * register, except set the PTPCOF field to 0x0E.
 776                 */
 777                ptpfoff = 0x0E24170C;
 778                bfin_write_EMAC_PTP_FOFF(ptpfoff);
 779                /*
 780                 * Program bits [15:0] of the EMAC_PTP_FV1 register to 0x88F7, which
 781                 * corresponds to PTP messages on the MAC layer.
 782                 */
 783                ptpfv1 = 0x110488F7;
 784                bfin_write_EMAC_PTP_FV1(ptpfv1);
 785                ptpfv2 = 0x0140013F;
 786                bfin_write_EMAC_PTP_FV2(ptpfv2);
 787                /*
 788                 * To allow the timestamping of Pdelay_Req and Pdelay_Resp
 789                 * messages, set the value to 0xFFF0.
 790                 */
 791                ptpfv3 = 0xFFFFFFF0;
 792                bfin_write_EMAC_PTP_FV3(ptpfv3);
 793
 794                config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L2_EVENT;
 795                break;
 796        default:
 797                return -ERANGE;
 798        }
 799
 800        if (config.tx_type == HWTSTAMP_TX_OFF &&
 801            bfin_mac_hwtstamp_is_none(config.rx_filter)) {
 802                ptpctl &= ~PTP_EN;
 803                bfin_write_EMAC_PTP_CTL(ptpctl);
 804
 805                SSYNC();
 806        } else {
 807                ptpctl |= PTP_EN;
 808                bfin_write_EMAC_PTP_CTL(ptpctl);
 809
 810                /*
 811                 * clear any existing timestamp
 812                 */
 813                bfin_read_EMAC_PTP_RXSNAPLO();
 814                bfin_read_EMAC_PTP_RXSNAPHI();
 815
 816                bfin_read_EMAC_PTP_TXSNAPLO();
 817                bfin_read_EMAC_PTP_TXSNAPHI();
 818
 819                SSYNC();
 820        }
 821
 822        lp->stamp_cfg = config;
 823        return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
 824                -EFAULT : 0;
 825}
 826
 827static void bfin_tx_hwtstamp(struct net_device *netdev, struct sk_buff *skb)
 828{
 829        struct bfin_mac_local *lp = netdev_priv(netdev);
 830
 831        if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) {
 832                int timeout_cnt = MAX_TIMEOUT_CNT;
 833
 834                /* When doing time stamping, keep the connection to the socket
 835                 * a while longer
 836                 */
 837                skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
 838
 839                /*
 840                 * The timestamping is done at the EMAC module's MII/RMII interface
 841                 * when the module sees the Start of Frame of an event message packet. This
 842                 * interface is the closest possible place to the physical Ethernet transmission
 843                 * medium, providing the best timing accuracy.
 844                 */
 845                while ((!(bfin_read_EMAC_PTP_ISTAT() & TXTL)) && (--timeout_cnt))
 846                        udelay(1);
 847                if (timeout_cnt == 0)
 848                        netdev_err(netdev, "timestamp the TX packet failed\n");
 849                else {
 850                        struct skb_shared_hwtstamps shhwtstamps;
 851                        u64 ns;
 852                        u64 regval;
 853
 854                        regval = bfin_read_EMAC_PTP_TXSNAPLO();
 855                        regval |= (u64)bfin_read_EMAC_PTP_TXSNAPHI() << 32;
 856                        memset(&shhwtstamps, 0, sizeof(shhwtstamps));
 857                        ns = regval << lp->shift;
 858                        shhwtstamps.hwtstamp = ns_to_ktime(ns);
 859                        skb_tstamp_tx(skb, &shhwtstamps);
 860                }
 861        }
 862}
 863
 864static void bfin_rx_hwtstamp(struct net_device *netdev, struct sk_buff *skb)
 865{
 866        struct bfin_mac_local *lp = netdev_priv(netdev);
 867        u32 valid;
 868        u64 regval, ns;
 869        struct skb_shared_hwtstamps *shhwtstamps;
 870
 871        if (bfin_mac_hwtstamp_is_none(lp->stamp_cfg.rx_filter))
 872                return;
 873
 874        valid = bfin_read_EMAC_PTP_ISTAT() & RXEL;
 875        if (!valid)
 876                return;
 877
 878        shhwtstamps = skb_hwtstamps(skb);
 879
 880        regval = bfin_read_EMAC_PTP_RXSNAPLO();
 881        regval |= (u64)bfin_read_EMAC_PTP_RXSNAPHI() << 32;
 882        ns = regval << lp->shift;
 883        memset(shhwtstamps, 0, sizeof(*shhwtstamps));
 884        shhwtstamps->hwtstamp = ns_to_ktime(ns);
 885}
 886
 887static void bfin_mac_hwtstamp_init(struct net_device *netdev)
 888{
 889        struct bfin_mac_local *lp = netdev_priv(netdev);
 890        u64 addend, ppb;
 891        u32 input_clk, phc_clk;
 892
 893        /* Initialize hardware timer */
 894        input_clk = get_sclk();
 895        phc_clk = bfin_select_phc_clock(input_clk, &lp->shift);
 896        addend = phc_clk * (1ULL << 32);
 897        do_div(addend, input_clk);
 898        bfin_write_EMAC_PTP_ADDEND((u32)addend);
 899
 900        lp->addend = addend;
 901        ppb = 1000000000ULL * input_clk;
 902        do_div(ppb, phc_clk);
 903        lp->max_ppb = ppb - 1000000000ULL - 1ULL;
 904
 905        /* Initialize hwstamp config */
 906        lp->stamp_cfg.rx_filter = HWTSTAMP_FILTER_NONE;
 907        lp->stamp_cfg.tx_type = HWTSTAMP_TX_OFF;
 908}
 909
 910static u64 bfin_ptp_time_read(struct bfin_mac_local *lp)
 911{
 912        u64 ns;
 913        u32 lo, hi;
 914
 915        lo = bfin_read_EMAC_PTP_TIMELO();
 916        hi = bfin_read_EMAC_PTP_TIMEHI();
 917
 918        ns = ((u64) hi) << 32;
 919        ns |= lo;
 920        ns <<= lp->shift;
 921
 922        return ns;
 923}
 924
 925static void bfin_ptp_time_write(struct bfin_mac_local *lp, u64 ns)
 926{
 927        u32 hi, lo;
 928
 929        ns >>= lp->shift;
 930        hi = ns >> 32;
 931        lo = ns & 0xffffffff;
 932
 933        bfin_write_EMAC_PTP_TIMELO(lo);
 934        bfin_write_EMAC_PTP_TIMEHI(hi);
 935}
 936
 937/* PTP Hardware Clock operations */
 938
 939static int bfin_ptp_adjfreq(struct ptp_clock_info *ptp, s32 ppb)
 940{
 941        u64 adj;
 942        u32 diff, addend;
 943        int neg_adj = 0;
 944        struct bfin_mac_local *lp =
 945                container_of(ptp, struct bfin_mac_local, caps);
 946
 947        if (ppb < 0) {
 948                neg_adj = 1;
 949                ppb = -ppb;
 950        }
 951        addend = lp->addend;
 952        adj = addend;
 953        adj *= ppb;
 954        diff = div_u64(adj, 1000000000ULL);
 955
 956        addend = neg_adj ? addend - diff : addend + diff;
 957
 958        bfin_write_EMAC_PTP_ADDEND(addend);
 959
 960        return 0;
 961}
 962
 963static int bfin_ptp_adjtime(struct ptp_clock_info *ptp, s64 delta)
 964{
 965        s64 now;
 966        unsigned long flags;
 967        struct bfin_mac_local *lp =
 968                container_of(ptp, struct bfin_mac_local, caps);
 969
 970        spin_lock_irqsave(&lp->phc_lock, flags);
 971
 972        now = bfin_ptp_time_read(lp);
 973        now += delta;
 974        bfin_ptp_time_write(lp, now);
 975
 976        spin_unlock_irqrestore(&lp->phc_lock, flags);
 977
 978        return 0;
 979}
 980
 981static int bfin_ptp_gettime(struct ptp_clock_info *ptp, struct timespec *ts)
 982{
 983        u64 ns;
 984        u32 remainder;
 985        unsigned long flags;
 986        struct bfin_mac_local *lp =
 987                container_of(ptp, struct bfin_mac_local, caps);
 988
 989        spin_lock_irqsave(&lp->phc_lock, flags);
 990
 991        ns = bfin_ptp_time_read(lp);
 992
 993        spin_unlock_irqrestore(&lp->phc_lock, flags);
 994
 995        ts->tv_sec = div_u64_rem(ns, 1000000000, &remainder);
 996        ts->tv_nsec = remainder;
 997        return 0;
 998}
 999
1000static int bfin_ptp_settime(struct ptp_clock_info *ptp,
1001                           const struct timespec *ts)
1002{
1003        u64 ns;
1004        unsigned long flags;
1005        struct bfin_mac_local *lp =
1006                container_of(ptp, struct bfin_mac_local, caps);
1007
1008        ns = ts->tv_sec * 1000000000ULL;
1009        ns += ts->tv_nsec;
1010
1011        spin_lock_irqsave(&lp->phc_lock, flags);
1012
1013        bfin_ptp_time_write(lp, ns);
1014
1015        spin_unlock_irqrestore(&lp->phc_lock, flags);
1016
1017        return 0;
1018}
1019
1020static int bfin_ptp_enable(struct ptp_clock_info *ptp,
1021                          struct ptp_clock_request *rq, int on)
1022{
1023        return -EOPNOTSUPP;
1024}
1025
1026static struct ptp_clock_info bfin_ptp_caps = {
1027        .owner          = THIS_MODULE,
1028        .name           = "BF518 clock",
1029        .max_adj        = 0,
1030        .n_alarm        = 0,
1031        .n_ext_ts       = 0,
1032        .n_per_out      = 0,
1033        .pps            = 0,
1034        .adjfreq        = bfin_ptp_adjfreq,
1035        .adjtime        = bfin_ptp_adjtime,
1036        .gettime        = bfin_ptp_gettime,
1037        .settime        = bfin_ptp_settime,
1038        .enable         = bfin_ptp_enable,
1039};
1040
1041static int bfin_phc_init(struct net_device *netdev, struct device *dev)
1042{
1043        struct bfin_mac_local *lp = netdev_priv(netdev);
1044
1045        lp->caps = bfin_ptp_caps;
1046        lp->caps.max_adj = lp->max_ppb;
1047        lp->clock = ptp_clock_register(&lp->caps, dev);
1048        if (IS_ERR(lp->clock))
1049                return PTR_ERR(lp->clock);
1050
1051        lp->phc_index = ptp_clock_index(lp->clock);
1052        spin_lock_init(&lp->phc_lock);
1053
1054        return 0;
1055}
1056
1057static void bfin_phc_release(struct bfin_mac_local *lp)
1058{
1059        ptp_clock_unregister(lp->clock);
1060}
1061
1062#else
1063# define bfin_mac_hwtstamp_is_none(cfg) 0
1064# define bfin_mac_hwtstamp_init(dev)
1065# define bfin_mac_hwtstamp_ioctl(dev, ifr, cmd) (-EOPNOTSUPP)
1066# define bfin_rx_hwtstamp(dev, skb)
1067# define bfin_tx_hwtstamp(dev, skb)
1068# define bfin_phc_init(netdev, dev) 0
1069# define bfin_phc_release(lp)
1070#endif
1071
1072static inline void _tx_reclaim_skb(void)
1073{
1074        do {
1075                tx_list_head->desc_a.config &= ~DMAEN;
1076                tx_list_head->status.status_word = 0;
1077                if (tx_list_head->skb) {
1078                        dev_kfree_skb(tx_list_head->skb);
1079                        tx_list_head->skb = NULL;
1080                }
1081                tx_list_head = tx_list_head->next;
1082
1083        } while (tx_list_head->status.status_word != 0);
1084}
1085
1086static void tx_reclaim_skb(struct bfin_mac_local *lp)
1087{
1088        int timeout_cnt = MAX_TIMEOUT_CNT;
1089
1090        if (tx_list_head->status.status_word != 0)
1091                _tx_reclaim_skb();
1092
1093        if (current_tx_ptr->next == tx_list_head) {
1094                while (tx_list_head->status.status_word == 0) {
1095                        /* slow down polling to avoid too many queue stop. */
1096                        udelay(10);
1097                        /* reclaim skb if DMA is not running. */
1098                        if (!(bfin_read_DMA2_IRQ_STATUS() & DMA_RUN))
1099                                break;
1100                        if (timeout_cnt-- < 0)
1101                                break;
1102                }
1103
1104                if (timeout_cnt >= 0)
1105                        _tx_reclaim_skb();
1106                else
1107                        netif_stop_queue(lp->ndev);
1108        }
1109
1110        if (current_tx_ptr->next != tx_list_head &&
1111                netif_queue_stopped(lp->ndev))
1112                netif_wake_queue(lp->ndev);
1113
1114        if (tx_list_head != current_tx_ptr) {
1115                /* shorten the timer interval if tx queue is stopped */
1116                if (netif_queue_stopped(lp->ndev))
1117                        lp->tx_reclaim_timer.expires =
1118                                jiffies + (TX_RECLAIM_JIFFIES >> 4);
1119                else
1120                        lp->tx_reclaim_timer.expires =
1121                                jiffies + TX_RECLAIM_JIFFIES;
1122
1123                mod_timer(&lp->tx_reclaim_timer,
1124                        lp->tx_reclaim_timer.expires);
1125        }
1126
1127        return;
1128}
1129
1130static void tx_reclaim_skb_timeout(unsigned long lp)
1131{
1132        tx_reclaim_skb((struct bfin_mac_local *)lp);
1133}
1134
1135static int bfin_mac_hard_start_xmit(struct sk_buff *skb,
1136                                struct net_device *dev)
1137{
1138        struct bfin_mac_local *lp = netdev_priv(dev);
1139        u16 *data;
1140        u32 data_align = (unsigned long)(skb->data) & 0x3;
1141
1142        current_tx_ptr->skb = skb;
1143
1144        if (data_align == 0x2) {
1145                /* move skb->data to current_tx_ptr payload */
1146                data = (u16 *)(skb->data) - 1;
1147                *data = (u16)(skb->len);
1148                /*
1149                 * When transmitting an Ethernet packet, the PTP_TSYNC module requires
1150                 * a DMA_Length_Word field associated with the packet. The lower 12 bits
1151                 * of this field are the length of the packet payload in bytes and the higher
1152                 * 4 bits are the timestamping enable field.
1153                 */
1154                if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)
1155                        *data |= 0x1000;
1156
1157                current_tx_ptr->desc_a.start_addr = (u32)data;
1158                /* this is important! */
1159                blackfin_dcache_flush_range((u32)data,
1160                                (u32)((u8 *)data + skb->len + 4));
1161        } else {
1162                *((u16 *)(current_tx_ptr->packet)) = (u16)(skb->len);
1163                /* enable timestamping for the sent packet */
1164                if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)
1165                        *((u16 *)(current_tx_ptr->packet)) |= 0x1000;
1166                memcpy((u8 *)(current_tx_ptr->packet + 2), skb->data,
1167                        skb->len);
1168                current_tx_ptr->desc_a.start_addr =
1169                        (u32)current_tx_ptr->packet;
1170                blackfin_dcache_flush_range(
1171                        (u32)current_tx_ptr->packet,
1172                        (u32)(current_tx_ptr->packet + skb->len + 2));
1173        }
1174
1175        /* make sure the internal data buffers in the core are drained
1176         * so that the DMA descriptors are completely written when the
1177         * DMA engine goes to fetch them below
1178         */
1179        SSYNC();
1180
1181        /* always clear status buffer before start tx dma */
1182        current_tx_ptr->status.status_word = 0;
1183
1184        /* enable this packet's dma */
1185        current_tx_ptr->desc_a.config |= DMAEN;
1186
1187        /* tx dma is running, just return */
1188        if (bfin_read_DMA2_IRQ_STATUS() & DMA_RUN)
1189                goto out;
1190
1191        /* tx dma is not running */
1192        bfin_write_DMA2_NEXT_DESC_PTR(&(current_tx_ptr->desc_a));
1193        /* dma enabled, read from memory, size is 6 */
1194        bfin_write_DMA2_CONFIG(current_tx_ptr->desc_a.config);
1195        /* Turn on the EMAC tx */
1196        bfin_write_EMAC_OPMODE(bfin_read_EMAC_OPMODE() | TE);
1197
1198out:
1199        bfin_tx_hwtstamp(dev, skb);
1200
1201        current_tx_ptr = current_tx_ptr->next;
1202        dev->stats.tx_packets++;
1203        dev->stats.tx_bytes += (skb->len);
1204
1205        tx_reclaim_skb(lp);
1206
1207        return NETDEV_TX_OK;
1208}
1209
1210#define IP_HEADER_OFF  0
1211#define RX_ERROR_MASK (RX_LONG | RX_ALIGN | RX_CRC | RX_LEN | \
1212        RX_FRAG | RX_ADDR | RX_DMAO | RX_PHY | RX_LATE | RX_RANGE)
1213
1214static void bfin_mac_rx(struct net_device *dev)
1215{
1216        struct sk_buff *skb, *new_skb;
1217        unsigned short len;
1218        struct bfin_mac_local *lp __maybe_unused = netdev_priv(dev);
1219#if defined(BFIN_MAC_CSUM_OFFLOAD)
1220        unsigned int i;
1221        unsigned char fcs[ETH_FCS_LEN + 1];
1222#endif
1223
1224        /* check if frame status word reports an error condition
1225         * we which case we simply drop the packet
1226         */
1227        if (current_rx_ptr->status.status_word & RX_ERROR_MASK) {
1228                netdev_notice(dev, "rx: receive error - packet dropped\n");
1229                dev->stats.rx_dropped++;
1230                goto out;
1231        }
1232
1233        /* allocate a new skb for next time receive */
1234        skb = current_rx_ptr->skb;
1235
1236        new_skb = netdev_alloc_skb(dev, PKT_BUF_SZ + NET_IP_ALIGN);
1237        if (!new_skb) {
1238                dev->stats.rx_dropped++;
1239                goto out;
1240        }
1241        /* reserve 2 bytes for RXDWA padding */
1242        skb_reserve(new_skb, NET_IP_ALIGN);
1243        /* Invidate the data cache of skb->data range when it is write back
1244         * cache. It will prevent overwritting the new data from DMA
1245         */
1246        blackfin_dcache_invalidate_range((unsigned long)new_skb->head,
1247                                         (unsigned long)new_skb->end);
1248
1249        current_rx_ptr->skb = new_skb;
1250        current_rx_ptr->desc_a.start_addr = (unsigned long)new_skb->data - 2;
1251
1252        len = (unsigned short)((current_rx_ptr->status.status_word) & RX_FRLEN);
1253        /* Deduce Ethernet FCS length from Ethernet payload length */
1254        len -= ETH_FCS_LEN;
1255        skb_put(skb, len);
1256
1257        skb->protocol = eth_type_trans(skb, dev);
1258
1259        bfin_rx_hwtstamp(dev, skb);
1260
1261#if defined(BFIN_MAC_CSUM_OFFLOAD)
1262        /* Checksum offloading only works for IPv4 packets with the standard IP header
1263         * length of 20 bytes, because the blackfin MAC checksum calculation is
1264         * based on that assumption. We must NOT use the calculated checksum if our
1265         * IP version or header break that assumption.
1266         */
1267        if (skb->data[IP_HEADER_OFF] == 0x45) {
1268                skb->csum = current_rx_ptr->status.ip_payload_csum;
1269                /*
1270                 * Deduce Ethernet FCS from hardware generated IP payload checksum.
1271                 * IP checksum is based on 16-bit one's complement algorithm.
1272                 * To deduce a value from checksum is equal to add its inversion.
1273                 * If the IP payload len is odd, the inversed FCS should also
1274                 * begin from odd address and leave first byte zero.
1275                 */
1276                if (skb->len % 2) {
1277                        fcs[0] = 0;
1278                        for (i = 0; i < ETH_FCS_LEN; i++)
1279                                fcs[i + 1] = ~skb->data[skb->len + i];
1280                        skb->csum = csum_partial(fcs, ETH_FCS_LEN + 1, skb->csum);
1281                } else {
1282                        for (i = 0; i < ETH_FCS_LEN; i++)
1283                                fcs[i] = ~skb->data[skb->len + i];
1284                        skb->csum = csum_partial(fcs, ETH_FCS_LEN, skb->csum);
1285                }
1286                skb->ip_summed = CHECKSUM_COMPLETE;
1287        }
1288#endif
1289
1290        netif_rx(skb);
1291        dev->stats.rx_packets++;
1292        dev->stats.rx_bytes += len;
1293out:
1294        current_rx_ptr->status.status_word = 0x00000000;
1295        current_rx_ptr = current_rx_ptr->next;
1296}
1297
1298/* interrupt routine to handle rx and error signal */
1299static irqreturn_t bfin_mac_interrupt(int irq, void *dev_id)
1300{
1301        struct net_device *dev = dev_id;
1302        int number = 0;
1303
1304get_one_packet:
1305        if (current_rx_ptr->status.status_word == 0) {
1306                /* no more new packet received */
1307                if (number == 0) {
1308                        if (current_rx_ptr->next->status.status_word != 0) {
1309                                current_rx_ptr = current_rx_ptr->next;
1310                                goto real_rx;
1311                        }
1312                }
1313                bfin_write_DMA1_IRQ_STATUS(bfin_read_DMA1_IRQ_STATUS() |
1314                                           DMA_DONE | DMA_ERR);
1315                return IRQ_HANDLED;
1316        }
1317
1318real_rx:
1319        bfin_mac_rx(dev);
1320        number++;
1321        goto get_one_packet;
1322}
1323
1324#ifdef CONFIG_NET_POLL_CONTROLLER
1325static void bfin_mac_poll(struct net_device *dev)
1326{
1327        struct bfin_mac_local *lp = netdev_priv(dev);
1328
1329        disable_irq(IRQ_MAC_RX);
1330        bfin_mac_interrupt(IRQ_MAC_RX, dev);
1331        tx_reclaim_skb(lp);
1332        enable_irq(IRQ_MAC_RX);
1333}
1334#endif                          /* CONFIG_NET_POLL_CONTROLLER */
1335
1336static void bfin_mac_disable(void)
1337{
1338        unsigned int opmode;
1339
1340        opmode = bfin_read_EMAC_OPMODE();
1341        opmode &= (~RE);
1342        opmode &= (~TE);
1343        /* Turn off the EMAC */
1344        bfin_write_EMAC_OPMODE(opmode);
1345}
1346
1347/*
1348 * Enable Interrupts, Receive, and Transmit
1349 */
1350static int bfin_mac_enable(struct phy_device *phydev)
1351{
1352        int ret;
1353        u32 opmode;
1354
1355        pr_debug("%s\n", __func__);
1356
1357        /* Set RX DMA */
1358        bfin_write_DMA1_NEXT_DESC_PTR(&(rx_list_head->desc_a));
1359        bfin_write_DMA1_CONFIG(rx_list_head->desc_a.config);
1360
1361        /* Wait MII done */
1362        ret = bfin_mdio_poll();
1363        if (ret)
1364                return ret;
1365
1366        /* We enable only RX here */
1367        /* ASTP   : Enable Automatic Pad Stripping
1368           PR     : Promiscuous Mode for test
1369           PSF    : Receive frames with total length less than 64 bytes.
1370           FDMODE : Full Duplex Mode
1371           LB     : Internal Loopback for test
1372           RE     : Receiver Enable */
1373        opmode = bfin_read_EMAC_OPMODE();
1374        if (opmode & FDMODE)
1375                opmode |= PSF;
1376        else
1377                opmode |= DRO | DC | PSF;
1378        opmode |= RE;
1379
1380        if (phydev->interface == PHY_INTERFACE_MODE_RMII) {
1381                opmode |= RMII; /* For Now only 100MBit are supported */
1382#if defined(CONFIG_BF537) || defined(CONFIG_BF536)
1383                if (__SILICON_REVISION__ < 3) {
1384                        /*
1385                         * This isn't publicly documented (fun times!), but in
1386                         * silicon <=0.2, the RX and TX pins are clocked together.
1387                         * So in order to recv, we must enable the transmit side
1388                         * as well.  This will cause a spurious TX interrupt too,
1389                         * but we can easily consume that.
1390                         */
1391                        opmode |= TE;
1392                }
1393#endif
1394        }
1395
1396        /* Turn on the EMAC rx */
1397        bfin_write_EMAC_OPMODE(opmode);
1398
1399        return 0;
1400}
1401
1402/* Our watchdog timed out. Called by the networking layer */
1403static void bfin_mac_timeout(struct net_device *dev)
1404{
1405        struct bfin_mac_local *lp = netdev_priv(dev);
1406
1407        pr_debug("%s: %s\n", dev->name, __func__);
1408
1409        bfin_mac_disable();
1410
1411        del_timer(&lp->tx_reclaim_timer);
1412
1413        /* reset tx queue and free skb */
1414        while (tx_list_head != current_tx_ptr) {
1415                tx_list_head->desc_a.config &= ~DMAEN;
1416                tx_list_head->status.status_word = 0;
1417                if (tx_list_head->skb) {
1418                        dev_kfree_skb(tx_list_head->skb);
1419                        tx_list_head->skb = NULL;
1420                }
1421                tx_list_head = tx_list_head->next;
1422        }
1423
1424        if (netif_queue_stopped(lp->ndev))
1425                netif_wake_queue(lp->ndev);
1426
1427        bfin_mac_enable(lp->phydev);
1428
1429        /* We can accept TX packets again */
1430        dev->trans_start = jiffies; /* prevent tx timeout */
1431        netif_wake_queue(dev);
1432}
1433
1434static void bfin_mac_multicast_hash(struct net_device *dev)
1435{
1436        u32 emac_hashhi, emac_hashlo;
1437        struct netdev_hw_addr *ha;
1438        u32 crc;
1439
1440        emac_hashhi = emac_hashlo = 0;
1441
1442        netdev_for_each_mc_addr(ha, dev) {
1443                crc = ether_crc(ETH_ALEN, ha->addr);
1444                crc >>= 26;
1445
1446                if (crc & 0x20)
1447                        emac_hashhi |= 1 << (crc & 0x1f);
1448                else
1449                        emac_hashlo |= 1 << (crc & 0x1f);
1450        }
1451
1452        bfin_write_EMAC_HASHHI(emac_hashhi);
1453        bfin_write_EMAC_HASHLO(emac_hashlo);
1454}
1455
1456/*
1457 * This routine will, depending on the values passed to it,
1458 * either make it accept multicast packets, go into
1459 * promiscuous mode (for TCPDUMP and cousins) or accept
1460 * a select set of multicast packets
1461 */
1462static void bfin_mac_set_multicast_list(struct net_device *dev)
1463{
1464        u32 sysctl;
1465
1466        if (dev->flags & IFF_PROMISC) {
1467                netdev_info(dev, "set promisc mode\n");
1468                sysctl = bfin_read_EMAC_OPMODE();
1469                sysctl |= PR;
1470                bfin_write_EMAC_OPMODE(sysctl);
1471        } else if (dev->flags & IFF_ALLMULTI) {
1472                /* accept all multicast */
1473                sysctl = bfin_read_EMAC_OPMODE();
1474                sysctl |= PAM;
1475                bfin_write_EMAC_OPMODE(sysctl);
1476        } else if (!netdev_mc_empty(dev)) {
1477                /* set up multicast hash table */
1478                sysctl = bfin_read_EMAC_OPMODE();
1479                sysctl |= HM;
1480                bfin_write_EMAC_OPMODE(sysctl);
1481                bfin_mac_multicast_hash(dev);
1482        } else {
1483                /* clear promisc or multicast mode */
1484                sysctl = bfin_read_EMAC_OPMODE();
1485                sysctl &= ~(RAF | PAM);
1486                bfin_write_EMAC_OPMODE(sysctl);
1487        }
1488}
1489
1490static int bfin_mac_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
1491{
1492        struct bfin_mac_local *lp = netdev_priv(netdev);
1493
1494        if (!netif_running(netdev))
1495                return -EINVAL;
1496
1497        switch (cmd) {
1498        case SIOCSHWTSTAMP:
1499                return bfin_mac_hwtstamp_ioctl(netdev, ifr, cmd);
1500        default:
1501                if (lp->phydev)
1502                        return phy_mii_ioctl(lp->phydev, ifr, cmd);
1503                else
1504                        return -EOPNOTSUPP;
1505        }
1506}
1507
1508/*
1509 * this puts the device in an inactive state
1510 */
1511static void bfin_mac_shutdown(struct net_device *dev)
1512{
1513        /* Turn off the EMAC */
1514        bfin_write_EMAC_OPMODE(0x00000000);
1515        /* Turn off the EMAC RX DMA */
1516        bfin_write_DMA1_CONFIG(0x0000);
1517        bfin_write_DMA2_CONFIG(0x0000);
1518}
1519
1520/*
1521 * Open and Initialize the interface
1522 *
1523 * Set up everything, reset the card, etc..
1524 */
1525static int bfin_mac_open(struct net_device *dev)
1526{
1527        struct bfin_mac_local *lp = netdev_priv(dev);
1528        int ret;
1529        pr_debug("%s: %s\n", dev->name, __func__);
1530
1531        /*
1532         * Check that the address is valid.  If its not, refuse
1533         * to bring the device up.  The user must specify an
1534         * address using ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx
1535         */
1536        if (!is_valid_ether_addr(dev->dev_addr)) {
1537                netdev_warn(dev, "no valid ethernet hw addr\n");
1538                return -EINVAL;
1539        }
1540
1541        /* initial rx and tx list */
1542        ret = desc_list_init(dev);
1543        if (ret)
1544                return ret;
1545
1546        phy_start(lp->phydev);
1547        phy_write(lp->phydev, MII_BMCR, BMCR_RESET);
1548        setup_system_regs(dev);
1549        setup_mac_addr(dev->dev_addr);
1550
1551        bfin_mac_disable();
1552        ret = bfin_mac_enable(lp->phydev);
1553        if (ret)
1554                return ret;
1555        pr_debug("hardware init finished\n");
1556
1557        netif_start_queue(dev);
1558        netif_carrier_on(dev);
1559
1560        return 0;
1561}
1562
1563/*
1564 * this makes the board clean up everything that it can
1565 * and not talk to the outside world.   Caused by
1566 * an 'ifconfig ethX down'
1567 */
1568static int bfin_mac_close(struct net_device *dev)
1569{
1570        struct bfin_mac_local *lp = netdev_priv(dev);
1571        pr_debug("%s: %s\n", dev->name, __func__);
1572
1573        netif_stop_queue(dev);
1574        netif_carrier_off(dev);
1575
1576        phy_stop(lp->phydev);
1577        phy_write(lp->phydev, MII_BMCR, BMCR_PDOWN);
1578
1579        /* clear everything */
1580        bfin_mac_shutdown(dev);
1581
1582        /* free the rx/tx buffers */
1583        desc_list_free();
1584
1585        return 0;
1586}
1587
1588static const struct net_device_ops bfin_mac_netdev_ops = {
1589        .ndo_open               = bfin_mac_open,
1590        .ndo_stop               = bfin_mac_close,
1591        .ndo_start_xmit         = bfin_mac_hard_start_xmit,
1592        .ndo_set_mac_address    = bfin_mac_set_mac_address,
1593        .ndo_tx_timeout         = bfin_mac_timeout,
1594        .ndo_set_rx_mode        = bfin_mac_set_multicast_list,
1595        .ndo_do_ioctl           = bfin_mac_ioctl,
1596        .ndo_validate_addr      = eth_validate_addr,
1597        .ndo_change_mtu         = eth_change_mtu,
1598#ifdef CONFIG_NET_POLL_CONTROLLER
1599        .ndo_poll_controller    = bfin_mac_poll,
1600#endif
1601};
1602
1603static int bfin_mac_probe(struct platform_device *pdev)
1604{
1605        struct net_device *ndev;
1606        struct bfin_mac_local *lp;
1607        struct platform_device *pd;
1608        struct bfin_mii_bus_platform_data *mii_bus_data;
1609        int rc;
1610
1611        ndev = alloc_etherdev(sizeof(struct bfin_mac_local));
1612        if (!ndev)
1613                return -ENOMEM;
1614
1615        SET_NETDEV_DEV(ndev, &pdev->dev);
1616        platform_set_drvdata(pdev, ndev);
1617        lp = netdev_priv(ndev);
1618        lp->ndev = ndev;
1619
1620        /* Grab the MAC address in the MAC */
1621        *(__le32 *) (&(ndev->dev_addr[0])) = cpu_to_le32(bfin_read_EMAC_ADDRLO());
1622        *(__le16 *) (&(ndev->dev_addr[4])) = cpu_to_le16((u16) bfin_read_EMAC_ADDRHI());
1623
1624        /* probe mac */
1625        /*todo: how to proble? which is revision_register */
1626        bfin_write_EMAC_ADDRLO(0x12345678);
1627        if (bfin_read_EMAC_ADDRLO() != 0x12345678) {
1628                dev_err(&pdev->dev, "Cannot detect Blackfin on-chip ethernet MAC controller!\n");
1629                rc = -ENODEV;
1630                goto out_err_probe_mac;
1631        }
1632
1633
1634        /*
1635         * Is it valid? (Did bootloader initialize it?)
1636         * Grab the MAC from the board somehow
1637         * this is done in the arch/blackfin/mach-bfxxx/boards/eth_mac.c
1638         */
1639        if (!is_valid_ether_addr(ndev->dev_addr)) {
1640                if (bfin_get_ether_addr(ndev->dev_addr) ||
1641                     !is_valid_ether_addr(ndev->dev_addr)) {
1642                        /* Still not valid, get a random one */
1643                        netdev_warn(ndev, "Setting Ethernet MAC to a random one\n");
1644                        eth_hw_addr_random(ndev);
1645                }
1646        }
1647
1648        setup_mac_addr(ndev->dev_addr);
1649
1650        if (!pdev->dev.platform_data) {
1651                dev_err(&pdev->dev, "Cannot get platform device bfin_mii_bus!\n");
1652                rc = -ENODEV;
1653                goto out_err_probe_mac;
1654        }
1655        pd = pdev->dev.platform_data;
1656        lp->mii_bus = platform_get_drvdata(pd);
1657        if (!lp->mii_bus) {
1658                dev_err(&pdev->dev, "Cannot get mii_bus!\n");
1659                rc = -ENODEV;
1660                goto out_err_probe_mac;
1661        }
1662        lp->mii_bus->priv = ndev;
1663        mii_bus_data = pd->dev.platform_data;
1664
1665        rc = mii_probe(ndev, mii_bus_data->phy_mode);
1666        if (rc) {
1667                dev_err(&pdev->dev, "MII Probe failed!\n");
1668                goto out_err_mii_probe;
1669        }
1670
1671        lp->vlan1_mask = ETH_P_8021Q | mii_bus_data->vlan1_mask;
1672        lp->vlan2_mask = ETH_P_8021Q | mii_bus_data->vlan2_mask;
1673
1674        /* Fill in the fields of the device structure with ethernet values. */
1675        ether_setup(ndev);
1676
1677        ndev->netdev_ops = &bfin_mac_netdev_ops;
1678        ndev->ethtool_ops = &bfin_mac_ethtool_ops;
1679
1680        init_timer(&lp->tx_reclaim_timer);
1681        lp->tx_reclaim_timer.data = (unsigned long)lp;
1682        lp->tx_reclaim_timer.function = tx_reclaim_skb_timeout;
1683
1684        spin_lock_init(&lp->lock);
1685
1686        /* now, enable interrupts */
1687        /* register irq handler */
1688        rc = request_irq(IRQ_MAC_RX, bfin_mac_interrupt,
1689                        IRQF_DISABLED, "EMAC_RX", ndev);
1690        if (rc) {
1691                dev_err(&pdev->dev, "Cannot request Blackfin MAC RX IRQ!\n");
1692                rc = -EBUSY;
1693                goto out_err_request_irq;
1694        }
1695
1696        rc = register_netdev(ndev);
1697        if (rc) {
1698                dev_err(&pdev->dev, "Cannot register net device!\n");
1699                goto out_err_reg_ndev;
1700        }
1701
1702        bfin_mac_hwtstamp_init(ndev);
1703        rc = bfin_phc_init(ndev, &pdev->dev);
1704        if (rc) {
1705                dev_err(&pdev->dev, "Cannot register PHC device!\n");
1706                goto out_err_phc;
1707        }
1708
1709        /* now, print out the card info, in a short format.. */
1710        netdev_info(ndev, "%s, Version %s\n", DRV_DESC, DRV_VERSION);
1711
1712        return 0;
1713
1714out_err_phc:
1715out_err_reg_ndev:
1716        free_irq(IRQ_MAC_RX, ndev);
1717out_err_request_irq:
1718out_err_mii_probe:
1719        mdiobus_unregister(lp->mii_bus);
1720        mdiobus_free(lp->mii_bus);
1721out_err_probe_mac:
1722        platform_set_drvdata(pdev, NULL);
1723        free_netdev(ndev);
1724
1725        return rc;
1726}
1727
1728static int bfin_mac_remove(struct platform_device *pdev)
1729{
1730        struct net_device *ndev = platform_get_drvdata(pdev);
1731        struct bfin_mac_local *lp = netdev_priv(ndev);
1732
1733        bfin_phc_release(lp);
1734
1735        platform_set_drvdata(pdev, NULL);
1736
1737        lp->mii_bus->priv = NULL;
1738
1739        unregister_netdev(ndev);
1740
1741        free_irq(IRQ_MAC_RX, ndev);
1742
1743        free_netdev(ndev);
1744
1745        return 0;
1746}
1747
1748#ifdef CONFIG_PM
1749static int bfin_mac_suspend(struct platform_device *pdev, pm_message_t mesg)
1750{
1751        struct net_device *net_dev = platform_get_drvdata(pdev);
1752        struct bfin_mac_local *lp = netdev_priv(net_dev);
1753
1754        if (lp->wol) {
1755                bfin_write_EMAC_OPMODE((bfin_read_EMAC_OPMODE() & ~TE) | RE);
1756                bfin_write_EMAC_WKUP_CTL(MPKE);
1757                enable_irq_wake(IRQ_MAC_WAKEDET);
1758        } else {
1759                if (netif_running(net_dev))
1760                        bfin_mac_close(net_dev);
1761        }
1762
1763        return 0;
1764}
1765
1766static int bfin_mac_resume(struct platform_device *pdev)
1767{
1768        struct net_device *net_dev = platform_get_drvdata(pdev);
1769        struct bfin_mac_local *lp = netdev_priv(net_dev);
1770
1771        if (lp->wol) {
1772                bfin_write_EMAC_OPMODE(bfin_read_EMAC_OPMODE() | TE);
1773                bfin_write_EMAC_WKUP_CTL(0);
1774                disable_irq_wake(IRQ_MAC_WAKEDET);
1775        } else {
1776                if (netif_running(net_dev))
1777                        bfin_mac_open(net_dev);
1778        }
1779
1780        return 0;
1781}
1782#else
1783#define bfin_mac_suspend NULL
1784#define bfin_mac_resume NULL
1785#endif  /* CONFIG_PM */
1786
1787static int bfin_mii_bus_probe(struct platform_device *pdev)
1788{
1789        struct mii_bus *miibus;
1790        struct bfin_mii_bus_platform_data *mii_bus_pd;
1791        const unsigned short *pin_req;
1792        int rc, i;
1793
1794        mii_bus_pd = dev_get_platdata(&pdev->dev);
1795        if (!mii_bus_pd) {
1796                dev_err(&pdev->dev, "No peripherals in platform data!\n");
1797                return -EINVAL;
1798        }
1799
1800        /*
1801         * We are setting up a network card,
1802         * so set the GPIO pins to Ethernet mode
1803         */
1804        pin_req = mii_bus_pd->mac_peripherals;
1805        rc = peripheral_request_list(pin_req, KBUILD_MODNAME);
1806        if (rc) {
1807                dev_err(&pdev->dev, "Requesting peripherals failed!\n");
1808                return rc;
1809        }
1810
1811        rc = -ENOMEM;
1812        miibus = mdiobus_alloc();
1813        if (miibus == NULL)
1814                goto out_err_alloc;
1815        miibus->read = bfin_mdiobus_read;
1816        miibus->write = bfin_mdiobus_write;
1817        miibus->reset = bfin_mdiobus_reset;
1818
1819        miibus->parent = &pdev->dev;
1820        miibus->name = "bfin_mii_bus";
1821        miibus->phy_mask = mii_bus_pd->phy_mask;
1822
1823        snprintf(miibus->id, MII_BUS_ID_SIZE, "%s-%x",
1824                pdev->name, pdev->id);
1825        miibus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
1826        if (!miibus->irq)
1827                goto out_err_irq_alloc;
1828
1829        for (i = rc; i < PHY_MAX_ADDR; ++i)
1830                miibus->irq[i] = PHY_POLL;
1831
1832        rc = clamp(mii_bus_pd->phydev_number, 0, PHY_MAX_ADDR);
1833        if (rc != mii_bus_pd->phydev_number)
1834                dev_err(&pdev->dev, "Invalid number (%i) of phydevs\n",
1835                        mii_bus_pd->phydev_number);
1836        for (i = 0; i < rc; ++i) {
1837                unsigned short phyaddr = mii_bus_pd->phydev_data[i].addr;
1838                if (phyaddr < PHY_MAX_ADDR)
1839                        miibus->irq[phyaddr] = mii_bus_pd->phydev_data[i].irq;
1840                else
1841                        dev_err(&pdev->dev,
1842                                "Invalid PHY address %i for phydev %i\n",
1843                                phyaddr, i);
1844        }
1845
1846        rc = mdiobus_register(miibus);
1847        if (rc) {
1848                dev_err(&pdev->dev, "Cannot register MDIO bus!\n");
1849                goto out_err_mdiobus_register;
1850        }
1851
1852        platform_set_drvdata(pdev, miibus);
1853        return 0;
1854
1855out_err_mdiobus_register:
1856        kfree(miibus->irq);
1857out_err_irq_alloc:
1858        mdiobus_free(miibus);
1859out_err_alloc:
1860        peripheral_free_list(pin_req);
1861
1862        return rc;
1863}
1864
1865static int bfin_mii_bus_remove(struct platform_device *pdev)
1866{
1867        struct mii_bus *miibus = platform_get_drvdata(pdev);
1868        struct bfin_mii_bus_platform_data *mii_bus_pd =
1869                dev_get_platdata(&pdev->dev);
1870
1871        platform_set_drvdata(pdev, NULL);
1872        mdiobus_unregister(miibus);
1873        kfree(miibus->irq);
1874        mdiobus_free(miibus);
1875        peripheral_free_list(mii_bus_pd->mac_peripherals);
1876
1877        return 0;
1878}
1879
1880static struct platform_driver bfin_mii_bus_driver = {
1881        .probe = bfin_mii_bus_probe,
1882        .remove = bfin_mii_bus_remove,
1883        .driver = {
1884                .name = "bfin_mii_bus",
1885                .owner  = THIS_MODULE,
1886        },
1887};
1888
1889static struct platform_driver bfin_mac_driver = {
1890        .probe = bfin_mac_probe,
1891        .remove = bfin_mac_remove,
1892        .resume = bfin_mac_resume,
1893        .suspend = bfin_mac_suspend,
1894        .driver = {
1895                .name = KBUILD_MODNAME,
1896                .owner  = THIS_MODULE,
1897        },
1898};
1899
1900static int __init bfin_mac_init(void)
1901{
1902        int ret;
1903        ret = platform_driver_register(&bfin_mii_bus_driver);
1904        if (!ret)
1905                return platform_driver_register(&bfin_mac_driver);
1906        return -ENODEV;
1907}
1908
1909module_init(bfin_mac_init);
1910
1911static void __exit bfin_mac_cleanup(void)
1912{
1913        platform_driver_unregister(&bfin_mac_driver);
1914        platform_driver_unregister(&bfin_mii_bus_driver);
1915}
1916
1917module_exit(bfin_mac_cleanup);
1918
1919