linux/drivers/net/ethernet/ibm/emac/core.c
<<
>>
Prefs
   1/*
   2 * drivers/net/ibm_newemac/core.c
   3 *
   4 * Driver for PowerPC 4xx on-chip ethernet controller.
   5 *
   6 * Copyright 2007 Benjamin Herrenschmidt, IBM Corp.
   7 *                <benh@kernel.crashing.org>
   8 *
   9 * Based on the arch/ppc version of the driver:
  10 *
  11 * Copyright (c) 2004, 2005 Zultys Technologies.
  12 * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
  13 *
  14 * Based on original work by
  15 *      Matt Porter <mporter@kernel.crashing.org>
  16 *      (c) 2003 Benjamin Herrenschmidt <benh@kernel.crashing.org>
  17 *      Armin Kuster <akuster@mvista.com>
  18 *      Johnnie Peters <jpeters@mvista.com>
  19 *
  20 * This program is free software; you can redistribute  it and/or modify it
  21 * under  the terms of  the GNU General  Public License as published by the
  22 * Free Software Foundation;  either version 2 of the  License, or (at your
  23 * option) any later version.
  24 *
  25 */
  26
  27#include <linux/module.h>
  28#include <linux/sched.h>
  29#include <linux/string.h>
  30#include <linux/errno.h>
  31#include <linux/delay.h>
  32#include <linux/types.h>
  33#include <linux/pci.h>
  34#include <linux/etherdevice.h>
  35#include <linux/skbuff.h>
  36#include <linux/crc32.h>
  37#include <linux/ethtool.h>
  38#include <linux/mii.h>
  39#include <linux/bitops.h>
  40#include <linux/workqueue.h>
  41#include <linux/of.h>
  42#include <linux/of_net.h>
  43#include <linux/slab.h>
  44
  45#include <asm/processor.h>
  46#include <asm/io.h>
  47#include <asm/dma.h>
  48#include <asm/uaccess.h>
  49#include <asm/dcr.h>
  50#include <asm/dcr-regs.h>
  51
  52#include "core.h"
  53
  54/*
  55 * Lack of dma_unmap_???? calls is intentional.
  56 *
  57 * API-correct usage requires additional support state information to be
  58 * maintained for every RX and TX buffer descriptor (BD). Unfortunately, due to
  59 * EMAC design (e.g. TX buffer passed from network stack can be split into
  60 * several BDs, dma_map_single/dma_map_page can be used to map particular BD),
  61 * maintaining such information will add additional overhead.
  62 * Current DMA API implementation for 4xx processors only ensures cache coherency
  63 * and dma_unmap_???? routines are empty and are likely to stay this way.
  64 * I decided to omit dma_unmap_??? calls because I don't want to add additional
  65 * complexity just for the sake of following some abstract API, when it doesn't
  66 * add any real benefit to the driver. I understand that this decision maybe
  67 * controversial, but I really tried to make code API-correct and efficient
  68 * at the same time and didn't come up with code I liked :(.                --ebs
  69 */
  70
  71#define DRV_NAME        "emac"
  72#define DRV_VERSION     "3.54"
  73#define DRV_DESC        "PPC 4xx OCP EMAC driver"
  74
  75MODULE_DESCRIPTION(DRV_DESC);
  76MODULE_AUTHOR
  77    ("Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>");
  78MODULE_LICENSE("GPL");
  79
  80/*
  81 * PPC64 doesn't (yet) have a cacheable_memcpy
  82 */
  83#ifdef CONFIG_PPC64
  84#define cacheable_memcpy(d,s,n) memcpy((d),(s),(n))
  85#endif
  86
  87/* minimum number of free TX descriptors required to wake up TX process */
  88#define EMAC_TX_WAKEUP_THRESH           (NUM_TX_BUFF / 4)
  89
  90/* If packet size is less than this number, we allocate small skb and copy packet
  91 * contents into it instead of just sending original big skb up
  92 */
  93#define EMAC_RX_COPY_THRESH             CONFIG_IBM_EMAC_RX_COPY_THRESHOLD
  94
  95/* Since multiple EMACs share MDIO lines in various ways, we need
  96 * to avoid re-using the same PHY ID in cases where the arch didn't
  97 * setup precise phy_map entries
  98 *
  99 * XXX This is something that needs to be reworked as we can have multiple
 100 * EMAC "sets" (multiple ASICs containing several EMACs) though we can
 101 * probably require in that case to have explicit PHY IDs in the device-tree
 102 */
 103static u32 busy_phy_map;
 104static DEFINE_MUTEX(emac_phy_map_lock);
 105
 106/* This is the wait queue used to wait on any event related to probe, that
 107 * is discovery of MALs, other EMACs, ZMII/RGMIIs, etc...
 108 */
 109static DECLARE_WAIT_QUEUE_HEAD(emac_probe_wait);
 110
 111/* Having stable interface names is a doomed idea. However, it would be nice
 112 * if we didn't have completely random interface names at boot too :-) It's
 113 * just a matter of making everybody's life easier. Since we are doing
 114 * threaded probing, it's a bit harder though. The base idea here is that
 115 * we make up a list of all emacs in the device-tree before we register the
 116 * driver. Every emac will then wait for the previous one in the list to
 117 * initialize before itself. We should also keep that list ordered by
 118 * cell_index.
 119 * That list is only 4 entries long, meaning that additional EMACs don't
 120 * get ordering guarantees unless EMAC_BOOT_LIST_SIZE is increased.
 121 */
 122
 123#define EMAC_BOOT_LIST_SIZE     4
 124static struct device_node *emac_boot_list[EMAC_BOOT_LIST_SIZE];
 125
 126/* How long should I wait for dependent devices ? */
 127#define EMAC_PROBE_DEP_TIMEOUT  (HZ * 5)
 128
 129/* I don't want to litter system log with timeout errors
 130 * when we have brain-damaged PHY.
 131 */
 132static inline void emac_report_timeout_error(struct emac_instance *dev,
 133                                             const char *error)
 134{
 135        if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX |
 136                                  EMAC_FTR_460EX_PHY_CLK_FIX |
 137                                  EMAC_FTR_440EP_PHY_CLK_FIX))
 138                DBG(dev, "%s" NL, error);
 139        else if (net_ratelimit())
 140                printk(KERN_ERR "%s: %s\n", dev->ofdev->dev.of_node->full_name,
 141                        error);
 142}
 143
 144/* EMAC PHY clock workaround:
 145 * 440EP/440GR has more sane SDR0_MFR register implementation than 440GX,
 146 * which allows controlling each EMAC clock
 147 */
 148static inline void emac_rx_clk_tx(struct emac_instance *dev)
 149{
 150#ifdef CONFIG_PPC_DCR_NATIVE
 151        if (emac_has_feature(dev, EMAC_FTR_440EP_PHY_CLK_FIX))
 152                dcri_clrset(SDR0, SDR0_MFR,
 153                            0, SDR0_MFR_ECS >> dev->cell_index);
 154#endif
 155}
 156
 157static inline void emac_rx_clk_default(struct emac_instance *dev)
 158{
 159#ifdef CONFIG_PPC_DCR_NATIVE
 160        if (emac_has_feature(dev, EMAC_FTR_440EP_PHY_CLK_FIX))
 161                dcri_clrset(SDR0, SDR0_MFR,
 162                            SDR0_MFR_ECS >> dev->cell_index, 0);
 163#endif
 164}
 165
 166/* PHY polling intervals */
 167#define PHY_POLL_LINK_ON        HZ
 168#define PHY_POLL_LINK_OFF       (HZ / 5)
 169
 170/* Graceful stop timeouts in us.
 171 * We should allow up to 1 frame time (full-duplex, ignoring collisions)
 172 */
 173#define STOP_TIMEOUT_10         1230
 174#define STOP_TIMEOUT_100        124
 175#define STOP_TIMEOUT_1000       13
 176#define STOP_TIMEOUT_1000_JUMBO 73
 177
 178static unsigned char default_mcast_addr[] = {
 179        0x01, 0x80, 0xC2, 0x00, 0x00, 0x01
 180};
 181
 182/* Please, keep in sync with struct ibm_emac_stats/ibm_emac_error_stats */
 183static const char emac_stats_keys[EMAC_ETHTOOL_STATS_COUNT][ETH_GSTRING_LEN] = {
 184        "rx_packets", "rx_bytes", "tx_packets", "tx_bytes", "rx_packets_csum",
 185        "tx_packets_csum", "tx_undo", "rx_dropped_stack", "rx_dropped_oom",
 186        "rx_dropped_error", "rx_dropped_resize", "rx_dropped_mtu",
 187        "rx_stopped", "rx_bd_errors", "rx_bd_overrun", "rx_bd_bad_packet",
 188        "rx_bd_runt_packet", "rx_bd_short_event", "rx_bd_alignment_error",
 189        "rx_bd_bad_fcs", "rx_bd_packet_too_long", "rx_bd_out_of_range",
 190        "rx_bd_in_range", "rx_parity", "rx_fifo_overrun", "rx_overrun",
 191        "rx_bad_packet", "rx_runt_packet", "rx_short_event",
 192        "rx_alignment_error", "rx_bad_fcs", "rx_packet_too_long",
 193        "rx_out_of_range", "rx_in_range", "tx_dropped", "tx_bd_errors",
 194        "tx_bd_bad_fcs", "tx_bd_carrier_loss", "tx_bd_excessive_deferral",
 195        "tx_bd_excessive_collisions", "tx_bd_late_collision",
 196        "tx_bd_multple_collisions", "tx_bd_single_collision",
 197        "tx_bd_underrun", "tx_bd_sqe", "tx_parity", "tx_underrun", "tx_sqe",
 198        "tx_errors"
 199};
 200
 201static irqreturn_t emac_irq(int irq, void *dev_instance);
 202static void emac_clean_tx_ring(struct emac_instance *dev);
 203static void __emac_set_multicast_list(struct emac_instance *dev);
 204
 205static inline int emac_phy_supports_gige(int phy_mode)
 206{
 207        return  phy_mode == PHY_MODE_GMII ||
 208                phy_mode == PHY_MODE_RGMII ||
 209                phy_mode == PHY_MODE_SGMII ||
 210                phy_mode == PHY_MODE_TBI ||
 211                phy_mode == PHY_MODE_RTBI;
 212}
 213
 214static inline int emac_phy_gpcs(int phy_mode)
 215{
 216        return  phy_mode == PHY_MODE_SGMII ||
 217                phy_mode == PHY_MODE_TBI ||
 218                phy_mode == PHY_MODE_RTBI;
 219}
 220
 221static inline void emac_tx_enable(struct emac_instance *dev)
 222{
 223        struct emac_regs __iomem *p = dev->emacp;
 224        u32 r;
 225
 226        DBG(dev, "tx_enable" NL);
 227
 228        r = in_be32(&p->mr0);
 229        if (!(r & EMAC_MR0_TXE))
 230                out_be32(&p->mr0, r | EMAC_MR0_TXE);
 231}
 232
 233static void emac_tx_disable(struct emac_instance *dev)
 234{
 235        struct emac_regs __iomem *p = dev->emacp;
 236        u32 r;
 237
 238        DBG(dev, "tx_disable" NL);
 239
 240        r = in_be32(&p->mr0);
 241        if (r & EMAC_MR0_TXE) {
 242                int n = dev->stop_timeout;
 243                out_be32(&p->mr0, r & ~EMAC_MR0_TXE);
 244                while (!(in_be32(&p->mr0) & EMAC_MR0_TXI) && n) {
 245                        udelay(1);
 246                        --n;
 247                }
 248                if (unlikely(!n))
 249                        emac_report_timeout_error(dev, "TX disable timeout");
 250        }
 251}
 252
 253static void emac_rx_enable(struct emac_instance *dev)
 254{
 255        struct emac_regs __iomem *p = dev->emacp;
 256        u32 r;
 257
 258        if (unlikely(test_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags)))
 259                goto out;
 260
 261        DBG(dev, "rx_enable" NL);
 262
 263        r = in_be32(&p->mr0);
 264        if (!(r & EMAC_MR0_RXE)) {
 265                if (unlikely(!(r & EMAC_MR0_RXI))) {
 266                        /* Wait if previous async disable is still in progress */
 267                        int n = dev->stop_timeout;
 268                        while (!(r = in_be32(&p->mr0) & EMAC_MR0_RXI) && n) {
 269                                udelay(1);
 270                                --n;
 271                        }
 272                        if (unlikely(!n))
 273                                emac_report_timeout_error(dev,
 274                                                          "RX disable timeout");
 275                }
 276                out_be32(&p->mr0, r | EMAC_MR0_RXE);
 277        }
 278 out:
 279        ;
 280}
 281
 282static void emac_rx_disable(struct emac_instance *dev)
 283{
 284        struct emac_regs __iomem *p = dev->emacp;
 285        u32 r;
 286
 287        DBG(dev, "rx_disable" NL);
 288
 289        r = in_be32(&p->mr0);
 290        if (r & EMAC_MR0_RXE) {
 291                int n = dev->stop_timeout;
 292                out_be32(&p->mr0, r & ~EMAC_MR0_RXE);
 293                while (!(in_be32(&p->mr0) & EMAC_MR0_RXI) && n) {
 294                        udelay(1);
 295                        --n;
 296                }
 297                if (unlikely(!n))
 298                        emac_report_timeout_error(dev, "RX disable timeout");
 299        }
 300}
 301
 302static inline void emac_netif_stop(struct emac_instance *dev)
 303{
 304        netif_tx_lock_bh(dev->ndev);
 305        netif_addr_lock(dev->ndev);
 306        dev->no_mcast = 1;
 307        netif_addr_unlock(dev->ndev);
 308        netif_tx_unlock_bh(dev->ndev);
 309        dev->ndev->trans_start = jiffies;       /* prevent tx timeout */
 310        mal_poll_disable(dev->mal, &dev->commac);
 311        netif_tx_disable(dev->ndev);
 312}
 313
 314static inline void emac_netif_start(struct emac_instance *dev)
 315{
 316        netif_tx_lock_bh(dev->ndev);
 317        netif_addr_lock(dev->ndev);
 318        dev->no_mcast = 0;
 319        if (dev->mcast_pending && netif_running(dev->ndev))
 320                __emac_set_multicast_list(dev);
 321        netif_addr_unlock(dev->ndev);
 322        netif_tx_unlock_bh(dev->ndev);
 323
 324        netif_wake_queue(dev->ndev);
 325
 326        /* NOTE: unconditional netif_wake_queue is only appropriate
 327         * so long as all callers are assured to have free tx slots
 328         * (taken from tg3... though the case where that is wrong is
 329         *  not terribly harmful)
 330         */
 331        mal_poll_enable(dev->mal, &dev->commac);
 332}
 333
 334static inline void emac_rx_disable_async(struct emac_instance *dev)
 335{
 336        struct emac_regs __iomem *p = dev->emacp;
 337        u32 r;
 338
 339        DBG(dev, "rx_disable_async" NL);
 340
 341        r = in_be32(&p->mr0);
 342        if (r & EMAC_MR0_RXE)
 343                out_be32(&p->mr0, r & ~EMAC_MR0_RXE);
 344}
 345
 346static int emac_reset(struct emac_instance *dev)
 347{
 348        struct emac_regs __iomem *p = dev->emacp;
 349        int n = 20;
 350
 351        DBG(dev, "reset" NL);
 352
 353        if (!dev->reset_failed) {
 354                /* 40x erratum suggests stopping RX channel before reset,
 355                 * we stop TX as well
 356                 */
 357                emac_rx_disable(dev);
 358                emac_tx_disable(dev);
 359        }
 360
 361#ifdef CONFIG_PPC_DCR_NATIVE
 362        /* Enable internal clock source */
 363        if (emac_has_feature(dev, EMAC_FTR_460EX_PHY_CLK_FIX))
 364                dcri_clrset(SDR0, SDR0_ETH_CFG,
 365                            0, SDR0_ETH_CFG_ECS << dev->cell_index);
 366#endif
 367
 368        out_be32(&p->mr0, EMAC_MR0_SRST);
 369        while ((in_be32(&p->mr0) & EMAC_MR0_SRST) && n)
 370                --n;
 371
 372#ifdef CONFIG_PPC_DCR_NATIVE
 373         /* Enable external clock source */
 374        if (emac_has_feature(dev, EMAC_FTR_460EX_PHY_CLK_FIX))
 375                dcri_clrset(SDR0, SDR0_ETH_CFG,
 376                            SDR0_ETH_CFG_ECS << dev->cell_index, 0);
 377#endif
 378
 379        if (n) {
 380                dev->reset_failed = 0;
 381                return 0;
 382        } else {
 383                emac_report_timeout_error(dev, "reset timeout");
 384                dev->reset_failed = 1;
 385                return -ETIMEDOUT;
 386        }
 387}
 388
 389static void emac_hash_mc(struct emac_instance *dev)
 390{
 391        const int regs = EMAC_XAHT_REGS(dev);
 392        u32 *gaht_base = emac_gaht_base(dev);
 393        u32 gaht_temp[regs];
 394        struct netdev_hw_addr *ha;
 395        int i;
 396
 397        DBG(dev, "hash_mc %d" NL, netdev_mc_count(dev->ndev));
 398
 399        memset(gaht_temp, 0, sizeof (gaht_temp));
 400
 401        netdev_for_each_mc_addr(ha, dev->ndev) {
 402                int slot, reg, mask;
 403                DBG2(dev, "mc %pM" NL, ha->addr);
 404
 405                slot = EMAC_XAHT_CRC_TO_SLOT(dev,
 406                                             ether_crc(ETH_ALEN, ha->addr));
 407                reg = EMAC_XAHT_SLOT_TO_REG(dev, slot);
 408                mask = EMAC_XAHT_SLOT_TO_MASK(dev, slot);
 409
 410                gaht_temp[reg] |= mask;
 411        }
 412
 413        for (i = 0; i < regs; i++)
 414                out_be32(gaht_base + i, gaht_temp[i]);
 415}
 416
 417static inline u32 emac_iff2rmr(struct net_device *ndev)
 418{
 419        struct emac_instance *dev = netdev_priv(ndev);
 420        u32 r;
 421
 422        r = EMAC_RMR_SP | EMAC_RMR_SFCS | EMAC_RMR_IAE | EMAC_RMR_BAE;
 423
 424        if (emac_has_feature(dev, EMAC_FTR_EMAC4))
 425            r |= EMAC4_RMR_BASE;
 426        else
 427            r |= EMAC_RMR_BASE;
 428
 429        if (ndev->flags & IFF_PROMISC)
 430                r |= EMAC_RMR_PME;
 431        else if (ndev->flags & IFF_ALLMULTI ||
 432                         (netdev_mc_count(ndev) > EMAC_XAHT_SLOTS(dev)))
 433                r |= EMAC_RMR_PMME;
 434        else if (!netdev_mc_empty(ndev))
 435                r |= EMAC_RMR_MAE;
 436
 437        return r;
 438}
 439
 440static u32 __emac_calc_base_mr1(struct emac_instance *dev, int tx_size, int rx_size)
 441{
 442        u32 ret = EMAC_MR1_VLE | EMAC_MR1_IST | EMAC_MR1_TR0_MULT;
 443
 444        DBG2(dev, "__emac_calc_base_mr1" NL);
 445
 446        switch(tx_size) {
 447        case 2048:
 448                ret |= EMAC_MR1_TFS_2K;
 449                break;
 450        default:
 451                printk(KERN_WARNING "%s: Unknown Tx FIFO size %d\n",
 452                       dev->ndev->name, tx_size);
 453        }
 454
 455        switch(rx_size) {
 456        case 16384:
 457                ret |= EMAC_MR1_RFS_16K;
 458                break;
 459        case 4096:
 460                ret |= EMAC_MR1_RFS_4K;
 461                break;
 462        default:
 463                printk(KERN_WARNING "%s: Unknown Rx FIFO size %d\n",
 464                       dev->ndev->name, rx_size);
 465        }
 466
 467        return ret;
 468}
 469
 470static u32 __emac4_calc_base_mr1(struct emac_instance *dev, int tx_size, int rx_size)
 471{
 472        u32 ret = EMAC_MR1_VLE | EMAC_MR1_IST | EMAC4_MR1_TR |
 473                EMAC4_MR1_OBCI(dev->opb_bus_freq / 1000000);
 474
 475        DBG2(dev, "__emac4_calc_base_mr1" NL);
 476
 477        switch(tx_size) {
 478        case 16384:
 479                ret |= EMAC4_MR1_TFS_16K;
 480                break;
 481        case 4096:
 482                ret |= EMAC4_MR1_TFS_4K;
 483                break;
 484        case 2048:
 485                ret |= EMAC4_MR1_TFS_2K;
 486                break;
 487        default:
 488                printk(KERN_WARNING "%s: Unknown Tx FIFO size %d\n",
 489                       dev->ndev->name, tx_size);
 490        }
 491
 492        switch(rx_size) {
 493        case 16384:
 494                ret |= EMAC4_MR1_RFS_16K;
 495                break;
 496        case 4096:
 497                ret |= EMAC4_MR1_RFS_4K;
 498                break;
 499        case 2048:
 500                ret |= EMAC4_MR1_RFS_2K;
 501                break;
 502        default:
 503                printk(KERN_WARNING "%s: Unknown Rx FIFO size %d\n",
 504                       dev->ndev->name, rx_size);
 505        }
 506
 507        return ret;
 508}
 509
 510static u32 emac_calc_base_mr1(struct emac_instance *dev, int tx_size, int rx_size)
 511{
 512        return emac_has_feature(dev, EMAC_FTR_EMAC4) ?
 513                __emac4_calc_base_mr1(dev, tx_size, rx_size) :
 514                __emac_calc_base_mr1(dev, tx_size, rx_size);
 515}
 516
 517static inline u32 emac_calc_trtr(struct emac_instance *dev, unsigned int size)
 518{
 519        if (emac_has_feature(dev, EMAC_FTR_EMAC4))
 520                return ((size >> 6) - 1) << EMAC_TRTR_SHIFT_EMAC4;
 521        else
 522                return ((size >> 6) - 1) << EMAC_TRTR_SHIFT;
 523}
 524
 525static inline u32 emac_calc_rwmr(struct emac_instance *dev,
 526                                 unsigned int low, unsigned int high)
 527{
 528        if (emac_has_feature(dev, EMAC_FTR_EMAC4))
 529                return (low << 22) | ( (high & 0x3ff) << 6);
 530        else
 531                return (low << 23) | ( (high & 0x1ff) << 7);
 532}
 533
 534static int emac_configure(struct emac_instance *dev)
 535{
 536        struct emac_regs __iomem *p = dev->emacp;
 537        struct net_device *ndev = dev->ndev;
 538        int tx_size, rx_size, link = netif_carrier_ok(dev->ndev);
 539        u32 r, mr1 = 0;
 540
 541        DBG(dev, "configure" NL);
 542
 543        if (!link) {
 544                out_be32(&p->mr1, in_be32(&p->mr1)
 545                         | EMAC_MR1_FDE | EMAC_MR1_ILE);
 546                udelay(100);
 547        } else if (emac_reset(dev) < 0)
 548                return -ETIMEDOUT;
 549
 550        if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
 551                tah_reset(dev->tah_dev);
 552
 553        DBG(dev, " link = %d duplex = %d, pause = %d, asym_pause = %d\n",
 554            link, dev->phy.duplex, dev->phy.pause, dev->phy.asym_pause);
 555
 556        /* Default fifo sizes */
 557        tx_size = dev->tx_fifo_size;
 558        rx_size = dev->rx_fifo_size;
 559
 560        /* No link, force loopback */
 561        if (!link)
 562                mr1 = EMAC_MR1_FDE | EMAC_MR1_ILE;
 563
 564        /* Check for full duplex */
 565        else if (dev->phy.duplex == DUPLEX_FULL)
 566                mr1 |= EMAC_MR1_FDE | EMAC_MR1_MWSW_001;
 567
 568        /* Adjust fifo sizes, mr1 and timeouts based on link speed */
 569        dev->stop_timeout = STOP_TIMEOUT_10;
 570        switch (dev->phy.speed) {
 571        case SPEED_1000:
 572                if (emac_phy_gpcs(dev->phy.mode)) {
 573                        mr1 |= EMAC_MR1_MF_1000GPCS | EMAC_MR1_MF_IPPA(
 574                                (dev->phy.gpcs_address != 0xffffffff) ?
 575                                 dev->phy.gpcs_address : dev->phy.address);
 576
 577                        /* Put some arbitrary OUI, Manuf & Rev IDs so we can
 578                         * identify this GPCS PHY later.
 579                         */
 580                        out_be32(&p->u1.emac4.ipcr, 0xdeadbeef);
 581                } else
 582                        mr1 |= EMAC_MR1_MF_1000;
 583
 584                /* Extended fifo sizes */
 585                tx_size = dev->tx_fifo_size_gige;
 586                rx_size = dev->rx_fifo_size_gige;
 587
 588                if (dev->ndev->mtu > ETH_DATA_LEN) {
 589                        if (emac_has_feature(dev, EMAC_FTR_EMAC4))
 590                                mr1 |= EMAC4_MR1_JPSM;
 591                        else
 592                                mr1 |= EMAC_MR1_JPSM;
 593                        dev->stop_timeout = STOP_TIMEOUT_1000_JUMBO;
 594                } else
 595                        dev->stop_timeout = STOP_TIMEOUT_1000;
 596                break;
 597        case SPEED_100:
 598                mr1 |= EMAC_MR1_MF_100;
 599                dev->stop_timeout = STOP_TIMEOUT_100;
 600                break;
 601        default: /* make gcc happy */
 602                break;
 603        }
 604
 605        if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
 606                rgmii_set_speed(dev->rgmii_dev, dev->rgmii_port,
 607                                dev->phy.speed);
 608        if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
 609                zmii_set_speed(dev->zmii_dev, dev->zmii_port, dev->phy.speed);
 610
 611        /* on 40x erratum forces us to NOT use integrated flow control,
 612         * let's hope it works on 44x ;)
 613         */
 614        if (!emac_has_feature(dev, EMAC_FTR_NO_FLOW_CONTROL_40x) &&
 615            dev->phy.duplex == DUPLEX_FULL) {
 616                if (dev->phy.pause)
 617                        mr1 |= EMAC_MR1_EIFC | EMAC_MR1_APP;
 618                else if (dev->phy.asym_pause)
 619                        mr1 |= EMAC_MR1_APP;
 620        }
 621
 622        /* Add base settings & fifo sizes & program MR1 */
 623        mr1 |= emac_calc_base_mr1(dev, tx_size, rx_size);
 624        out_be32(&p->mr1, mr1);
 625
 626        /* Set individual MAC address */
 627        out_be32(&p->iahr, (ndev->dev_addr[0] << 8) | ndev->dev_addr[1]);
 628        out_be32(&p->ialr, (ndev->dev_addr[2] << 24) |
 629                 (ndev->dev_addr[3] << 16) | (ndev->dev_addr[4] << 8) |
 630                 ndev->dev_addr[5]);
 631
 632        /* VLAN Tag Protocol ID */
 633        out_be32(&p->vtpid, 0x8100);
 634
 635        /* Receive mode register */
 636        r = emac_iff2rmr(ndev);
 637        if (r & EMAC_RMR_MAE)
 638                emac_hash_mc(dev);
 639        out_be32(&p->rmr, r);
 640
 641        /* FIFOs thresholds */
 642        if (emac_has_feature(dev, EMAC_FTR_EMAC4))
 643                r = EMAC4_TMR1((dev->mal_burst_size / dev->fifo_entry_size) + 1,
 644                               tx_size / 2 / dev->fifo_entry_size);
 645        else
 646                r = EMAC_TMR1((dev->mal_burst_size / dev->fifo_entry_size) + 1,
 647                              tx_size / 2 / dev->fifo_entry_size);
 648        out_be32(&p->tmr1, r);
 649        out_be32(&p->trtr, emac_calc_trtr(dev, tx_size / 2));
 650
 651        /* PAUSE frame is sent when RX FIFO reaches its high-water mark,
 652           there should be still enough space in FIFO to allow the our link
 653           partner time to process this frame and also time to send PAUSE
 654           frame itself.
 655
 656           Here is the worst case scenario for the RX FIFO "headroom"
 657           (from "The Switch Book") (100Mbps, without preamble, inter-frame gap):
 658
 659           1) One maximum-length frame on TX                    1522 bytes
 660           2) One PAUSE frame time                                64 bytes
 661           3) PAUSE frame decode time allowance                   64 bytes
 662           4) One maximum-length frame on RX                    1522 bytes
 663           5) Round-trip propagation delay of the link (100Mb)    15 bytes
 664           ----------
 665           3187 bytes
 666
 667           I chose to set high-water mark to RX_FIFO_SIZE / 4 (1024 bytes)
 668           low-water mark  to RX_FIFO_SIZE / 8 (512 bytes)
 669         */
 670        r = emac_calc_rwmr(dev, rx_size / 8 / dev->fifo_entry_size,
 671                           rx_size / 4 / dev->fifo_entry_size);
 672        out_be32(&p->rwmr, r);
 673
 674        /* Set PAUSE timer to the maximum */
 675        out_be32(&p->ptr, 0xffff);
 676
 677        /* IRQ sources */
 678        r = EMAC_ISR_OVR | EMAC_ISR_BP | EMAC_ISR_SE |
 679                EMAC_ISR_ALE | EMAC_ISR_BFCS | EMAC_ISR_PTLE | EMAC_ISR_ORE |
 680                EMAC_ISR_IRE | EMAC_ISR_TE;
 681        if (emac_has_feature(dev, EMAC_FTR_EMAC4))
 682            r |= EMAC4_ISR_TXPE | EMAC4_ISR_RXPE /* | EMAC4_ISR_TXUE |
 683                                                  EMAC4_ISR_RXOE | */;
 684        out_be32(&p->iser,  r);
 685
 686        /* We need to take GPCS PHY out of isolate mode after EMAC reset */
 687        if (emac_phy_gpcs(dev->phy.mode)) {
 688                if (dev->phy.gpcs_address != 0xffffffff)
 689                        emac_mii_reset_gpcs(&dev->phy);
 690                else
 691                        emac_mii_reset_phy(&dev->phy);
 692        }
 693
 694        return 0;
 695}
 696
 697static void emac_reinitialize(struct emac_instance *dev)
 698{
 699        DBG(dev, "reinitialize" NL);
 700
 701        emac_netif_stop(dev);
 702        if (!emac_configure(dev)) {
 703                emac_tx_enable(dev);
 704                emac_rx_enable(dev);
 705        }
 706        emac_netif_start(dev);
 707}
 708
 709static void emac_full_tx_reset(struct emac_instance *dev)
 710{
 711        DBG(dev, "full_tx_reset" NL);
 712
 713        emac_tx_disable(dev);
 714        mal_disable_tx_channel(dev->mal, dev->mal_tx_chan);
 715        emac_clean_tx_ring(dev);
 716        dev->tx_cnt = dev->tx_slot = dev->ack_slot = 0;
 717
 718        emac_configure(dev);
 719
 720        mal_enable_tx_channel(dev->mal, dev->mal_tx_chan);
 721        emac_tx_enable(dev);
 722        emac_rx_enable(dev);
 723}
 724
 725static void emac_reset_work(struct work_struct *work)
 726{
 727        struct emac_instance *dev = container_of(work, struct emac_instance, reset_work);
 728
 729        DBG(dev, "reset_work" NL);
 730
 731        mutex_lock(&dev->link_lock);
 732        if (dev->opened) {
 733                emac_netif_stop(dev);
 734                emac_full_tx_reset(dev);
 735                emac_netif_start(dev);
 736        }
 737        mutex_unlock(&dev->link_lock);
 738}
 739
 740static void emac_tx_timeout(struct net_device *ndev)
 741{
 742        struct emac_instance *dev = netdev_priv(ndev);
 743
 744        DBG(dev, "tx_timeout" NL);
 745
 746        schedule_work(&dev->reset_work);
 747}
 748
 749
 750static inline int emac_phy_done(struct emac_instance *dev, u32 stacr)
 751{
 752        int done = !!(stacr & EMAC_STACR_OC);
 753
 754        if (emac_has_feature(dev, EMAC_FTR_STACR_OC_INVERT))
 755                done = !done;
 756
 757        return done;
 758};
 759
 760static int __emac_mdio_read(struct emac_instance *dev, u8 id, u8 reg)
 761{
 762        struct emac_regs __iomem *p = dev->emacp;
 763        u32 r = 0;
 764        int n, err = -ETIMEDOUT;
 765
 766        mutex_lock(&dev->mdio_lock);
 767
 768        DBG2(dev, "mdio_read(%02x,%02x)" NL, id, reg);
 769
 770        /* Enable proper MDIO port */
 771        if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
 772                zmii_get_mdio(dev->zmii_dev, dev->zmii_port);
 773        if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
 774                rgmii_get_mdio(dev->rgmii_dev, dev->rgmii_port);
 775
 776        /* Wait for management interface to become idle */
 777        n = 20;
 778        while (!emac_phy_done(dev, in_be32(&p->stacr))) {
 779                udelay(1);
 780                if (!--n) {
 781                        DBG2(dev, " -> timeout wait idle\n");
 782                        goto bail;
 783                }
 784        }
 785
 786        /* Issue read command */
 787        if (emac_has_feature(dev, EMAC_FTR_EMAC4))
 788                r = EMAC4_STACR_BASE(dev->opb_bus_freq);
 789        else
 790                r = EMAC_STACR_BASE(dev->opb_bus_freq);
 791        if (emac_has_feature(dev, EMAC_FTR_STACR_OC_INVERT))
 792                r |= EMAC_STACR_OC;
 793        if (emac_has_feature(dev, EMAC_FTR_HAS_NEW_STACR))
 794                r |= EMACX_STACR_STAC_READ;
 795        else
 796                r |= EMAC_STACR_STAC_READ;
 797        r |= (reg & EMAC_STACR_PRA_MASK)
 798                | ((id & EMAC_STACR_PCDA_MASK) << EMAC_STACR_PCDA_SHIFT);
 799        out_be32(&p->stacr, r);
 800
 801        /* Wait for read to complete */
 802        n = 200;
 803        while (!emac_phy_done(dev, (r = in_be32(&p->stacr)))) {
 804                udelay(1);
 805                if (!--n) {
 806                        DBG2(dev, " -> timeout wait complete\n");
 807                        goto bail;
 808                }
 809        }
 810
 811        if (unlikely(r & EMAC_STACR_PHYE)) {
 812                DBG(dev, "mdio_read(%02x, %02x) failed" NL, id, reg);
 813                err = -EREMOTEIO;
 814                goto bail;
 815        }
 816
 817        r = ((r >> EMAC_STACR_PHYD_SHIFT) & EMAC_STACR_PHYD_MASK);
 818
 819        DBG2(dev, "mdio_read -> %04x" NL, r);
 820        err = 0;
 821 bail:
 822        if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
 823                rgmii_put_mdio(dev->rgmii_dev, dev->rgmii_port);
 824        if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
 825                zmii_put_mdio(dev->zmii_dev, dev->zmii_port);
 826        mutex_unlock(&dev->mdio_lock);
 827
 828        return err == 0 ? r : err;
 829}
 830
 831static void __emac_mdio_write(struct emac_instance *dev, u8 id, u8 reg,
 832                              u16 val)
 833{
 834        struct emac_regs __iomem *p = dev->emacp;
 835        u32 r = 0;
 836        int n, err = -ETIMEDOUT;
 837
 838        mutex_lock(&dev->mdio_lock);
 839
 840        DBG2(dev, "mdio_write(%02x,%02x,%04x)" NL, id, reg, val);
 841
 842        /* Enable proper MDIO port */
 843        if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
 844                zmii_get_mdio(dev->zmii_dev, dev->zmii_port);
 845        if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
 846                rgmii_get_mdio(dev->rgmii_dev, dev->rgmii_port);
 847
 848        /* Wait for management interface to be idle */
 849        n = 20;
 850        while (!emac_phy_done(dev, in_be32(&p->stacr))) {
 851                udelay(1);
 852                if (!--n) {
 853                        DBG2(dev, " -> timeout wait idle\n");
 854                        goto bail;
 855                }
 856        }
 857
 858        /* Issue write command */
 859        if (emac_has_feature(dev, EMAC_FTR_EMAC4))
 860                r = EMAC4_STACR_BASE(dev->opb_bus_freq);
 861        else
 862                r = EMAC_STACR_BASE(dev->opb_bus_freq);
 863        if (emac_has_feature(dev, EMAC_FTR_STACR_OC_INVERT))
 864                r |= EMAC_STACR_OC;
 865        if (emac_has_feature(dev, EMAC_FTR_HAS_NEW_STACR))
 866                r |= EMACX_STACR_STAC_WRITE;
 867        else
 868                r |= EMAC_STACR_STAC_WRITE;
 869        r |= (reg & EMAC_STACR_PRA_MASK) |
 870                ((id & EMAC_STACR_PCDA_MASK) << EMAC_STACR_PCDA_SHIFT) |
 871                (val << EMAC_STACR_PHYD_SHIFT);
 872        out_be32(&p->stacr, r);
 873
 874        /* Wait for write to complete */
 875        n = 200;
 876        while (!emac_phy_done(dev, in_be32(&p->stacr))) {
 877                udelay(1);
 878                if (!--n) {
 879                        DBG2(dev, " -> timeout wait complete\n");
 880                        goto bail;
 881                }
 882        }
 883        err = 0;
 884 bail:
 885        if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
 886                rgmii_put_mdio(dev->rgmii_dev, dev->rgmii_port);
 887        if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
 888                zmii_put_mdio(dev->zmii_dev, dev->zmii_port);
 889        mutex_unlock(&dev->mdio_lock);
 890}
 891
 892static int emac_mdio_read(struct net_device *ndev, int id, int reg)
 893{
 894        struct emac_instance *dev = netdev_priv(ndev);
 895        int res;
 896
 897        res = __emac_mdio_read((dev->mdio_instance &&
 898                                dev->phy.gpcs_address != id) ?
 899                                dev->mdio_instance : dev,
 900                               (u8) id, (u8) reg);
 901        return res;
 902}
 903
 904static void emac_mdio_write(struct net_device *ndev, int id, int reg, int val)
 905{
 906        struct emac_instance *dev = netdev_priv(ndev);
 907
 908        __emac_mdio_write((dev->mdio_instance &&
 909                           dev->phy.gpcs_address != id) ?
 910                           dev->mdio_instance : dev,
 911                          (u8) id, (u8) reg, (u16) val);
 912}
 913
 914/* Tx lock BH */
 915static void __emac_set_multicast_list(struct emac_instance *dev)
 916{
 917        struct emac_regs __iomem *p = dev->emacp;
 918        u32 rmr = emac_iff2rmr(dev->ndev);
 919
 920        DBG(dev, "__multicast %08x" NL, rmr);
 921
 922        /* I decided to relax register access rules here to avoid
 923         * full EMAC reset.
 924         *
 925         * There is a real problem with EMAC4 core if we use MWSW_001 bit
 926         * in MR1 register and do a full EMAC reset.
 927         * One TX BD status update is delayed and, after EMAC reset, it
 928         * never happens, resulting in TX hung (it'll be recovered by TX
 929         * timeout handler eventually, but this is just gross).
 930         * So we either have to do full TX reset or try to cheat here :)
 931         *
 932         * The only required change is to RX mode register, so I *think* all
 933         * we need is just to stop RX channel. This seems to work on all
 934         * tested SoCs.                                                --ebs
 935         *
 936         * If we need the full reset, we might just trigger the workqueue
 937         * and do it async... a bit nasty but should work --BenH
 938         */
 939        dev->mcast_pending = 0;
 940        emac_rx_disable(dev);
 941        if (rmr & EMAC_RMR_MAE)
 942                emac_hash_mc(dev);
 943        out_be32(&p->rmr, rmr);
 944        emac_rx_enable(dev);
 945}
 946
 947/* Tx lock BH */
 948static void emac_set_multicast_list(struct net_device *ndev)
 949{
 950        struct emac_instance *dev = netdev_priv(ndev);
 951
 952        DBG(dev, "multicast" NL);
 953
 954        BUG_ON(!netif_running(dev->ndev));
 955
 956        if (dev->no_mcast) {
 957                dev->mcast_pending = 1;
 958                return;
 959        }
 960        __emac_set_multicast_list(dev);
 961}
 962
 963static int emac_resize_rx_ring(struct emac_instance *dev, int new_mtu)
 964{
 965        int rx_sync_size = emac_rx_sync_size(new_mtu);
 966        int rx_skb_size = emac_rx_skb_size(new_mtu);
 967        int i, ret = 0;
 968
 969        mutex_lock(&dev->link_lock);
 970        emac_netif_stop(dev);
 971        emac_rx_disable(dev);
 972        mal_disable_rx_channel(dev->mal, dev->mal_rx_chan);
 973
 974        if (dev->rx_sg_skb) {
 975                ++dev->estats.rx_dropped_resize;
 976                dev_kfree_skb(dev->rx_sg_skb);
 977                dev->rx_sg_skb = NULL;
 978        }
 979
 980        /* Make a first pass over RX ring and mark BDs ready, dropping
 981         * non-processed packets on the way. We need this as a separate pass
 982         * to simplify error recovery in the case of allocation failure later.
 983         */
 984        for (i = 0; i < NUM_RX_BUFF; ++i) {
 985                if (dev->rx_desc[i].ctrl & MAL_RX_CTRL_FIRST)
 986                        ++dev->estats.rx_dropped_resize;
 987
 988                dev->rx_desc[i].data_len = 0;
 989                dev->rx_desc[i].ctrl = MAL_RX_CTRL_EMPTY |
 990                    (i == (NUM_RX_BUFF - 1) ? MAL_RX_CTRL_WRAP : 0);
 991        }
 992
 993        /* Reallocate RX ring only if bigger skb buffers are required */
 994        if (rx_skb_size <= dev->rx_skb_size)
 995                goto skip;
 996
 997        /* Second pass, allocate new skbs */
 998        for (i = 0; i < NUM_RX_BUFF; ++i) {
 999                struct sk_buff *skb = alloc_skb(rx_skb_size, GFP_ATOMIC);
1000                if (!skb) {
1001                        ret = -ENOMEM;
1002                        goto oom;
1003                }
1004
1005                BUG_ON(!dev->rx_skb[i]);
1006                dev_kfree_skb(dev->rx_skb[i]);
1007
1008                skb_reserve(skb, EMAC_RX_SKB_HEADROOM + 2);
1009                dev->rx_desc[i].data_ptr =
1010                    dma_map_single(&dev->ofdev->dev, skb->data - 2, rx_sync_size,
1011                                   DMA_FROM_DEVICE) + 2;
1012                dev->rx_skb[i] = skb;
1013        }
1014 skip:
1015        /* Check if we need to change "Jumbo" bit in MR1 */
1016        if ((new_mtu > ETH_DATA_LEN) ^ (dev->ndev->mtu > ETH_DATA_LEN)) {
1017                /* This is to prevent starting RX channel in emac_rx_enable() */
1018                set_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags);
1019
1020                dev->ndev->mtu = new_mtu;
1021                emac_full_tx_reset(dev);
1022        }
1023
1024        mal_set_rcbs(dev->mal, dev->mal_rx_chan, emac_rx_size(new_mtu));
1025 oom:
1026        /* Restart RX */
1027        clear_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags);
1028        dev->rx_slot = 0;
1029        mal_enable_rx_channel(dev->mal, dev->mal_rx_chan);
1030        emac_rx_enable(dev);
1031        emac_netif_start(dev);
1032        mutex_unlock(&dev->link_lock);
1033
1034        return ret;
1035}
1036
1037/* Process ctx, rtnl_lock semaphore */
1038static int emac_change_mtu(struct net_device *ndev, int new_mtu)
1039{
1040        struct emac_instance *dev = netdev_priv(ndev);
1041        int ret = 0;
1042
1043        if (new_mtu < EMAC_MIN_MTU || new_mtu > dev->max_mtu)
1044                return -EINVAL;
1045
1046        DBG(dev, "change_mtu(%d)" NL, new_mtu);
1047
1048        if (netif_running(ndev)) {
1049                /* Check if we really need to reinitialize RX ring */
1050                if (emac_rx_skb_size(ndev->mtu) != emac_rx_skb_size(new_mtu))
1051                        ret = emac_resize_rx_ring(dev, new_mtu);
1052        }
1053
1054        if (!ret) {
1055                ndev->mtu = new_mtu;
1056                dev->rx_skb_size = emac_rx_skb_size(new_mtu);
1057                dev->rx_sync_size = emac_rx_sync_size(new_mtu);
1058        }
1059
1060        return ret;
1061}
1062
1063static void emac_clean_tx_ring(struct emac_instance *dev)
1064{
1065        int i;
1066
1067        for (i = 0; i < NUM_TX_BUFF; ++i) {
1068                if (dev->tx_skb[i]) {
1069                        dev_kfree_skb(dev->tx_skb[i]);
1070                        dev->tx_skb[i] = NULL;
1071                        if (dev->tx_desc[i].ctrl & MAL_TX_CTRL_READY)
1072                                ++dev->estats.tx_dropped;
1073                }
1074                dev->tx_desc[i].ctrl = 0;
1075                dev->tx_desc[i].data_ptr = 0;
1076        }
1077}
1078
1079static void emac_clean_rx_ring(struct emac_instance *dev)
1080{
1081        int i;
1082
1083        for (i = 0; i < NUM_RX_BUFF; ++i)
1084                if (dev->rx_skb[i]) {
1085                        dev->rx_desc[i].ctrl = 0;
1086                        dev_kfree_skb(dev->rx_skb[i]);
1087                        dev->rx_skb[i] = NULL;
1088                        dev->rx_desc[i].data_ptr = 0;
1089                }
1090
1091        if (dev->rx_sg_skb) {
1092                dev_kfree_skb(dev->rx_sg_skb);
1093                dev->rx_sg_skb = NULL;
1094        }
1095}
1096
1097static inline int emac_alloc_rx_skb(struct emac_instance *dev, int slot,
1098                                    gfp_t flags)
1099{
1100        struct sk_buff *skb = alloc_skb(dev->rx_skb_size, flags);
1101        if (unlikely(!skb))
1102                return -ENOMEM;
1103
1104        dev->rx_skb[slot] = skb;
1105        dev->rx_desc[slot].data_len = 0;
1106
1107        skb_reserve(skb, EMAC_RX_SKB_HEADROOM + 2);
1108        dev->rx_desc[slot].data_ptr =
1109            dma_map_single(&dev->ofdev->dev, skb->data - 2, dev->rx_sync_size,
1110                           DMA_FROM_DEVICE) + 2;
1111        wmb();
1112        dev->rx_desc[slot].ctrl = MAL_RX_CTRL_EMPTY |
1113            (slot == (NUM_RX_BUFF - 1) ? MAL_RX_CTRL_WRAP : 0);
1114
1115        return 0;
1116}
1117
1118static void emac_print_link_status(struct emac_instance *dev)
1119{
1120        if (netif_carrier_ok(dev->ndev))
1121                printk(KERN_INFO "%s: link is up, %d %s%s\n",
1122                       dev->ndev->name, dev->phy.speed,
1123                       dev->phy.duplex == DUPLEX_FULL ? "FDX" : "HDX",
1124                       dev->phy.pause ? ", pause enabled" :
1125                       dev->phy.asym_pause ? ", asymmetric pause enabled" : "");
1126        else
1127                printk(KERN_INFO "%s: link is down\n", dev->ndev->name);
1128}
1129
1130/* Process ctx, rtnl_lock semaphore */
1131static int emac_open(struct net_device *ndev)
1132{
1133        struct emac_instance *dev = netdev_priv(ndev);
1134        int err, i;
1135
1136        DBG(dev, "open" NL);
1137
1138        /* Setup error IRQ handler */
1139        err = request_irq(dev->emac_irq, emac_irq, 0, "EMAC", dev);
1140        if (err) {
1141                printk(KERN_ERR "%s: failed to request IRQ %d\n",
1142                       ndev->name, dev->emac_irq);
1143                return err;
1144        }
1145
1146        /* Allocate RX ring */
1147        for (i = 0; i < NUM_RX_BUFF; ++i)
1148                if (emac_alloc_rx_skb(dev, i, GFP_KERNEL)) {
1149                        printk(KERN_ERR "%s: failed to allocate RX ring\n",
1150                               ndev->name);
1151                        goto oom;
1152                }
1153
1154        dev->tx_cnt = dev->tx_slot = dev->ack_slot = dev->rx_slot = 0;
1155        clear_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags);
1156        dev->rx_sg_skb = NULL;
1157
1158        mutex_lock(&dev->link_lock);
1159        dev->opened = 1;
1160
1161        /* Start PHY polling now.
1162         */
1163        if (dev->phy.address >= 0) {
1164                int link_poll_interval;
1165                if (dev->phy.def->ops->poll_link(&dev->phy)) {
1166                        dev->phy.def->ops->read_link(&dev->phy);
1167                        emac_rx_clk_default(dev);
1168                        netif_carrier_on(dev->ndev);
1169                        link_poll_interval = PHY_POLL_LINK_ON;
1170                } else {
1171                        emac_rx_clk_tx(dev);
1172                        netif_carrier_off(dev->ndev);
1173                        link_poll_interval = PHY_POLL_LINK_OFF;
1174                }
1175                dev->link_polling = 1;
1176                wmb();
1177                schedule_delayed_work(&dev->link_work, link_poll_interval);
1178                emac_print_link_status(dev);
1179        } else
1180                netif_carrier_on(dev->ndev);
1181
1182        /* Required for Pause packet support in EMAC */
1183        dev_mc_add_global(ndev, default_mcast_addr);
1184
1185        emac_configure(dev);
1186        mal_poll_add(dev->mal, &dev->commac);
1187        mal_enable_tx_channel(dev->mal, dev->mal_tx_chan);
1188        mal_set_rcbs(dev->mal, dev->mal_rx_chan, emac_rx_size(ndev->mtu));
1189        mal_enable_rx_channel(dev->mal, dev->mal_rx_chan);
1190        emac_tx_enable(dev);
1191        emac_rx_enable(dev);
1192        emac_netif_start(dev);
1193
1194        mutex_unlock(&dev->link_lock);
1195
1196        return 0;
1197 oom:
1198        emac_clean_rx_ring(dev);
1199        free_irq(dev->emac_irq, dev);
1200
1201        return -ENOMEM;
1202}
1203
1204/* BHs disabled */
1205#if 0
1206static int emac_link_differs(struct emac_instance *dev)
1207{
1208        u32 r = in_be32(&dev->emacp->mr1);
1209
1210        int duplex = r & EMAC_MR1_FDE ? DUPLEX_FULL : DUPLEX_HALF;
1211        int speed, pause, asym_pause;
1212
1213        if (r & EMAC_MR1_MF_1000)
1214                speed = SPEED_1000;
1215        else if (r & EMAC_MR1_MF_100)
1216                speed = SPEED_100;
1217        else
1218                speed = SPEED_10;
1219
1220        switch (r & (EMAC_MR1_EIFC | EMAC_MR1_APP)) {
1221        case (EMAC_MR1_EIFC | EMAC_MR1_APP):
1222                pause = 1;
1223                asym_pause = 0;
1224                break;
1225        case EMAC_MR1_APP:
1226                pause = 0;
1227                asym_pause = 1;
1228                break;
1229        default:
1230                pause = asym_pause = 0;
1231        }
1232        return speed != dev->phy.speed || duplex != dev->phy.duplex ||
1233            pause != dev->phy.pause || asym_pause != dev->phy.asym_pause;
1234}
1235#endif
1236
1237static void emac_link_timer(struct work_struct *work)
1238{
1239        struct emac_instance *dev =
1240                container_of(to_delayed_work(work),
1241                             struct emac_instance, link_work);
1242        int link_poll_interval;
1243
1244        mutex_lock(&dev->link_lock);
1245        DBG2(dev, "link timer" NL);
1246
1247        if (!dev->opened)
1248                goto bail;
1249
1250        if (dev->phy.def->ops->poll_link(&dev->phy)) {
1251                if (!netif_carrier_ok(dev->ndev)) {
1252                        emac_rx_clk_default(dev);
1253                        /* Get new link parameters */
1254                        dev->phy.def->ops->read_link(&dev->phy);
1255
1256                        netif_carrier_on(dev->ndev);
1257                        emac_netif_stop(dev);
1258                        emac_full_tx_reset(dev);
1259                        emac_netif_start(dev);
1260                        emac_print_link_status(dev);
1261                }
1262                link_poll_interval = PHY_POLL_LINK_ON;
1263        } else {
1264                if (netif_carrier_ok(dev->ndev)) {
1265                        emac_rx_clk_tx(dev);
1266                        netif_carrier_off(dev->ndev);
1267                        netif_tx_disable(dev->ndev);
1268                        emac_reinitialize(dev);
1269                        emac_print_link_status(dev);
1270                }
1271                link_poll_interval = PHY_POLL_LINK_OFF;
1272        }
1273        schedule_delayed_work(&dev->link_work, link_poll_interval);
1274 bail:
1275        mutex_unlock(&dev->link_lock);
1276}
1277
1278static void emac_force_link_update(struct emac_instance *dev)
1279{
1280        netif_carrier_off(dev->ndev);
1281        smp_rmb();
1282        if (dev->link_polling) {
1283                cancel_delayed_work_sync(&dev->link_work);
1284                if (dev->link_polling)
1285                        schedule_delayed_work(&dev->link_work,  PHY_POLL_LINK_OFF);
1286        }
1287}
1288
1289/* Process ctx, rtnl_lock semaphore */
1290static int emac_close(struct net_device *ndev)
1291{
1292        struct emac_instance *dev = netdev_priv(ndev);
1293
1294        DBG(dev, "close" NL);
1295
1296        if (dev->phy.address >= 0) {
1297                dev->link_polling = 0;
1298                cancel_delayed_work_sync(&dev->link_work);
1299        }
1300        mutex_lock(&dev->link_lock);
1301        emac_netif_stop(dev);
1302        dev->opened = 0;
1303        mutex_unlock(&dev->link_lock);
1304
1305        emac_rx_disable(dev);
1306        emac_tx_disable(dev);
1307        mal_disable_rx_channel(dev->mal, dev->mal_rx_chan);
1308        mal_disable_tx_channel(dev->mal, dev->mal_tx_chan);
1309        mal_poll_del(dev->mal, &dev->commac);
1310
1311        emac_clean_tx_ring(dev);
1312        emac_clean_rx_ring(dev);
1313
1314        free_irq(dev->emac_irq, dev);
1315
1316        netif_carrier_off(ndev);
1317
1318        return 0;
1319}
1320
1321static inline u16 emac_tx_csum(struct emac_instance *dev,
1322                               struct sk_buff *skb)
1323{
1324        if (emac_has_feature(dev, EMAC_FTR_HAS_TAH) &&
1325                (skb->ip_summed == CHECKSUM_PARTIAL)) {
1326                ++dev->stats.tx_packets_csum;
1327                return EMAC_TX_CTRL_TAH_CSUM;
1328        }
1329        return 0;
1330}
1331
1332static inline int emac_xmit_finish(struct emac_instance *dev, int len)
1333{
1334        struct emac_regs __iomem *p = dev->emacp;
1335        struct net_device *ndev = dev->ndev;
1336
1337        /* Send the packet out. If the if makes a significant perf
1338         * difference, then we can store the TMR0 value in "dev"
1339         * instead
1340         */
1341        if (emac_has_feature(dev, EMAC_FTR_EMAC4))
1342                out_be32(&p->tmr0, EMAC4_TMR0_XMIT);
1343        else
1344                out_be32(&p->tmr0, EMAC_TMR0_XMIT);
1345
1346        if (unlikely(++dev->tx_cnt == NUM_TX_BUFF)) {
1347                netif_stop_queue(ndev);
1348                DBG2(dev, "stopped TX queue" NL);
1349        }
1350
1351        ndev->trans_start = jiffies;
1352        ++dev->stats.tx_packets;
1353        dev->stats.tx_bytes += len;
1354
1355        return NETDEV_TX_OK;
1356}
1357
1358/* Tx lock BH */
1359static int emac_start_xmit(struct sk_buff *skb, struct net_device *ndev)
1360{
1361        struct emac_instance *dev = netdev_priv(ndev);
1362        unsigned int len = skb->len;
1363        int slot;
1364
1365        u16 ctrl = EMAC_TX_CTRL_GFCS | EMAC_TX_CTRL_GP | MAL_TX_CTRL_READY |
1366            MAL_TX_CTRL_LAST | emac_tx_csum(dev, skb);
1367
1368        slot = dev->tx_slot++;
1369        if (dev->tx_slot == NUM_TX_BUFF) {
1370                dev->tx_slot = 0;
1371                ctrl |= MAL_TX_CTRL_WRAP;
1372        }
1373
1374        DBG2(dev, "xmit(%u) %d" NL, len, slot);
1375
1376        dev->tx_skb[slot] = skb;
1377        dev->tx_desc[slot].data_ptr = dma_map_single(&dev->ofdev->dev,
1378                                                     skb->data, len,
1379                                                     DMA_TO_DEVICE);
1380        dev->tx_desc[slot].data_len = (u16) len;
1381        wmb();
1382        dev->tx_desc[slot].ctrl = ctrl;
1383
1384        return emac_xmit_finish(dev, len);
1385}
1386
1387static inline int emac_xmit_split(struct emac_instance *dev, int slot,
1388                                  u32 pd, int len, int last, u16 base_ctrl)
1389{
1390        while (1) {
1391                u16 ctrl = base_ctrl;
1392                int chunk = min(len, MAL_MAX_TX_SIZE);
1393                len -= chunk;
1394
1395                slot = (slot + 1) % NUM_TX_BUFF;
1396
1397                if (last && !len)
1398                        ctrl |= MAL_TX_CTRL_LAST;
1399                if (slot == NUM_TX_BUFF - 1)
1400                        ctrl |= MAL_TX_CTRL_WRAP;
1401
1402                dev->tx_skb[slot] = NULL;
1403                dev->tx_desc[slot].data_ptr = pd;
1404                dev->tx_desc[slot].data_len = (u16) chunk;
1405                dev->tx_desc[slot].ctrl = ctrl;
1406                ++dev->tx_cnt;
1407
1408                if (!len)
1409                        break;
1410
1411                pd += chunk;
1412        }
1413        return slot;
1414}
1415
1416/* Tx lock BH disabled (SG version for TAH equipped EMACs) */
1417static int emac_start_xmit_sg(struct sk_buff *skb, struct net_device *ndev)
1418{
1419        struct emac_instance *dev = netdev_priv(ndev);
1420        int nr_frags = skb_shinfo(skb)->nr_frags;
1421        int len = skb->len, chunk;
1422        int slot, i;
1423        u16 ctrl;
1424        u32 pd;
1425
1426        /* This is common "fast" path */
1427        if (likely(!nr_frags && len <= MAL_MAX_TX_SIZE))
1428                return emac_start_xmit(skb, ndev);
1429
1430        len -= skb->data_len;
1431
1432        /* Note, this is only an *estimation*, we can still run out of empty
1433         * slots because of the additional fragmentation into
1434         * MAL_MAX_TX_SIZE-sized chunks
1435         */
1436        if (unlikely(dev->tx_cnt + nr_frags + mal_tx_chunks(len) > NUM_TX_BUFF))
1437                goto stop_queue;
1438
1439        ctrl = EMAC_TX_CTRL_GFCS | EMAC_TX_CTRL_GP | MAL_TX_CTRL_READY |
1440            emac_tx_csum(dev, skb);
1441        slot = dev->tx_slot;
1442
1443        /* skb data */
1444        dev->tx_skb[slot] = NULL;
1445        chunk = min(len, MAL_MAX_TX_SIZE);
1446        dev->tx_desc[slot].data_ptr = pd =
1447            dma_map_single(&dev->ofdev->dev, skb->data, len, DMA_TO_DEVICE);
1448        dev->tx_desc[slot].data_len = (u16) chunk;
1449        len -= chunk;
1450        if (unlikely(len))
1451                slot = emac_xmit_split(dev, slot, pd + chunk, len, !nr_frags,
1452                                       ctrl);
1453        /* skb fragments */
1454        for (i = 0; i < nr_frags; ++i) {
1455                struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i];
1456                len = skb_frag_size(frag);
1457
1458                if (unlikely(dev->tx_cnt + mal_tx_chunks(len) >= NUM_TX_BUFF))
1459                        goto undo_frame;
1460
1461                pd = skb_frag_dma_map(&dev->ofdev->dev, frag, 0, len,
1462                                      DMA_TO_DEVICE);
1463
1464                slot = emac_xmit_split(dev, slot, pd, len, i == nr_frags - 1,
1465                                       ctrl);
1466        }
1467
1468        DBG2(dev, "xmit_sg(%u) %d - %d" NL, skb->len, dev->tx_slot, slot);
1469
1470        /* Attach skb to the last slot so we don't release it too early */
1471        dev->tx_skb[slot] = skb;
1472
1473        /* Send the packet out */
1474        if (dev->tx_slot == NUM_TX_BUFF - 1)
1475                ctrl |= MAL_TX_CTRL_WRAP;
1476        wmb();
1477        dev->tx_desc[dev->tx_slot].ctrl = ctrl;
1478        dev->tx_slot = (slot + 1) % NUM_TX_BUFF;
1479
1480        return emac_xmit_finish(dev, skb->len);
1481
1482 undo_frame:
1483        /* Well, too bad. Our previous estimation was overly optimistic.
1484         * Undo everything.
1485         */
1486        while (slot != dev->tx_slot) {
1487                dev->tx_desc[slot].ctrl = 0;
1488                --dev->tx_cnt;
1489                if (--slot < 0)
1490                        slot = NUM_TX_BUFF - 1;
1491        }
1492        ++dev->estats.tx_undo;
1493
1494 stop_queue:
1495        netif_stop_queue(ndev);
1496        DBG2(dev, "stopped TX queue" NL);
1497        return NETDEV_TX_BUSY;
1498}
1499
1500/* Tx lock BHs */
1501static void emac_parse_tx_error(struct emac_instance *dev, u16 ctrl)
1502{
1503        struct emac_error_stats *st = &dev->estats;
1504
1505        DBG(dev, "BD TX error %04x" NL, ctrl);
1506
1507        ++st->tx_bd_errors;
1508        if (ctrl & EMAC_TX_ST_BFCS)
1509                ++st->tx_bd_bad_fcs;
1510        if (ctrl & EMAC_TX_ST_LCS)
1511                ++st->tx_bd_carrier_loss;
1512        if (ctrl & EMAC_TX_ST_ED)
1513                ++st->tx_bd_excessive_deferral;
1514        if (ctrl & EMAC_TX_ST_EC)
1515                ++st->tx_bd_excessive_collisions;
1516        if (ctrl & EMAC_TX_ST_LC)
1517                ++st->tx_bd_late_collision;
1518        if (ctrl & EMAC_TX_ST_MC)
1519                ++st->tx_bd_multple_collisions;
1520        if (ctrl & EMAC_TX_ST_SC)
1521                ++st->tx_bd_single_collision;
1522        if (ctrl & EMAC_TX_ST_UR)
1523                ++st->tx_bd_underrun;
1524        if (ctrl & EMAC_TX_ST_SQE)
1525                ++st->tx_bd_sqe;
1526}
1527
1528static void emac_poll_tx(void *param)
1529{
1530        struct emac_instance *dev = param;
1531        u32 bad_mask;
1532
1533        DBG2(dev, "poll_tx, %d %d" NL, dev->tx_cnt, dev->ack_slot);
1534
1535        if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
1536                bad_mask = EMAC_IS_BAD_TX_TAH;
1537        else
1538                bad_mask = EMAC_IS_BAD_TX;
1539
1540        netif_tx_lock_bh(dev->ndev);
1541        if (dev->tx_cnt) {
1542                u16 ctrl;
1543                int slot = dev->ack_slot, n = 0;
1544        again:
1545                ctrl = dev->tx_desc[slot].ctrl;
1546                if (!(ctrl & MAL_TX_CTRL_READY)) {
1547                        struct sk_buff *skb = dev->tx_skb[slot];
1548                        ++n;
1549
1550                        if (skb) {
1551                                dev_kfree_skb(skb);
1552                                dev->tx_skb[slot] = NULL;
1553                        }
1554                        slot = (slot + 1) % NUM_TX_BUFF;
1555
1556                        if (unlikely(ctrl & bad_mask))
1557                                emac_parse_tx_error(dev, ctrl);
1558
1559                        if (--dev->tx_cnt)
1560                                goto again;
1561                }
1562                if (n) {
1563                        dev->ack_slot = slot;
1564                        if (netif_queue_stopped(dev->ndev) &&
1565                            dev->tx_cnt < EMAC_TX_WAKEUP_THRESH)
1566                                netif_wake_queue(dev->ndev);
1567
1568                        DBG2(dev, "tx %d pkts" NL, n);
1569                }
1570        }
1571        netif_tx_unlock_bh(dev->ndev);
1572}
1573
1574static inline void emac_recycle_rx_skb(struct emac_instance *dev, int slot,
1575                                       int len)
1576{
1577        struct sk_buff *skb = dev->rx_skb[slot];
1578
1579        DBG2(dev, "recycle %d %d" NL, slot, len);
1580
1581        if (len)
1582                dma_map_single(&dev->ofdev->dev, skb->data - 2,
1583                               EMAC_DMA_ALIGN(len + 2), DMA_FROM_DEVICE);
1584
1585        dev->rx_desc[slot].data_len = 0;
1586        wmb();
1587        dev->rx_desc[slot].ctrl = MAL_RX_CTRL_EMPTY |
1588            (slot == (NUM_RX_BUFF - 1) ? MAL_RX_CTRL_WRAP : 0);
1589}
1590
1591static void emac_parse_rx_error(struct emac_instance *dev, u16 ctrl)
1592{
1593        struct emac_error_stats *st = &dev->estats;
1594
1595        DBG(dev, "BD RX error %04x" NL, ctrl);
1596
1597        ++st->rx_bd_errors;
1598        if (ctrl & EMAC_RX_ST_OE)
1599                ++st->rx_bd_overrun;
1600        if (ctrl & EMAC_RX_ST_BP)
1601                ++st->rx_bd_bad_packet;
1602        if (ctrl & EMAC_RX_ST_RP)
1603                ++st->rx_bd_runt_packet;
1604        if (ctrl & EMAC_RX_ST_SE)
1605                ++st->rx_bd_short_event;
1606        if (ctrl & EMAC_RX_ST_AE)
1607                ++st->rx_bd_alignment_error;
1608        if (ctrl & EMAC_RX_ST_BFCS)
1609                ++st->rx_bd_bad_fcs;
1610        if (ctrl & EMAC_RX_ST_PTL)
1611                ++st->rx_bd_packet_too_long;
1612        if (ctrl & EMAC_RX_ST_ORE)
1613                ++st->rx_bd_out_of_range;
1614        if (ctrl & EMAC_RX_ST_IRE)
1615                ++st->rx_bd_in_range;
1616}
1617
1618static inline void emac_rx_csum(struct emac_instance *dev,
1619                                struct sk_buff *skb, u16 ctrl)
1620{
1621#ifdef CONFIG_IBM_EMAC_TAH
1622        if (!ctrl && dev->tah_dev) {
1623                skb->ip_summed = CHECKSUM_UNNECESSARY;
1624                ++dev->stats.rx_packets_csum;
1625        }
1626#endif
1627}
1628
1629static inline int emac_rx_sg_append(struct emac_instance *dev, int slot)
1630{
1631        if (likely(dev->rx_sg_skb != NULL)) {
1632                int len = dev->rx_desc[slot].data_len;
1633                int tot_len = dev->rx_sg_skb->len + len;
1634
1635                if (unlikely(tot_len + 2 > dev->rx_skb_size)) {
1636                        ++dev->estats.rx_dropped_mtu;
1637                        dev_kfree_skb(dev->rx_sg_skb);
1638                        dev->rx_sg_skb = NULL;
1639                } else {
1640                        cacheable_memcpy(skb_tail_pointer(dev->rx_sg_skb),
1641                                         dev->rx_skb[slot]->data, len);
1642                        skb_put(dev->rx_sg_skb, len);
1643                        emac_recycle_rx_skb(dev, slot, len);
1644                        return 0;
1645                }
1646        }
1647        emac_recycle_rx_skb(dev, slot, 0);
1648        return -1;
1649}
1650
1651/* NAPI poll context */
1652static int emac_poll_rx(void *param, int budget)
1653{
1654        struct emac_instance *dev = param;
1655        int slot = dev->rx_slot, received = 0;
1656
1657        DBG2(dev, "poll_rx(%d)" NL, budget);
1658
1659 again:
1660        while (budget > 0) {
1661                int len;
1662                struct sk_buff *skb;
1663                u16 ctrl = dev->rx_desc[slot].ctrl;
1664
1665                if (ctrl & MAL_RX_CTRL_EMPTY)
1666                        break;
1667
1668                skb = dev->rx_skb[slot];
1669                mb();
1670                len = dev->rx_desc[slot].data_len;
1671
1672                if (unlikely(!MAL_IS_SINGLE_RX(ctrl)))
1673                        goto sg;
1674
1675                ctrl &= EMAC_BAD_RX_MASK;
1676                if (unlikely(ctrl && ctrl != EMAC_RX_TAH_BAD_CSUM)) {
1677                        emac_parse_rx_error(dev, ctrl);
1678                        ++dev->estats.rx_dropped_error;
1679                        emac_recycle_rx_skb(dev, slot, 0);
1680                        len = 0;
1681                        goto next;
1682                }
1683
1684                if (len < ETH_HLEN) {
1685                        ++dev->estats.rx_dropped_stack;
1686                        emac_recycle_rx_skb(dev, slot, len);
1687                        goto next;
1688                }
1689
1690                if (len && len < EMAC_RX_COPY_THRESH) {
1691                        struct sk_buff *copy_skb =
1692                            alloc_skb(len + EMAC_RX_SKB_HEADROOM + 2, GFP_ATOMIC);
1693                        if (unlikely(!copy_skb))
1694                                goto oom;
1695
1696                        skb_reserve(copy_skb, EMAC_RX_SKB_HEADROOM + 2);
1697                        cacheable_memcpy(copy_skb->data - 2, skb->data - 2,
1698                                         len + 2);
1699                        emac_recycle_rx_skb(dev, slot, len);
1700                        skb = copy_skb;
1701                } else if (unlikely(emac_alloc_rx_skb(dev, slot, GFP_ATOMIC)))
1702                        goto oom;
1703
1704                skb_put(skb, len);
1705        push_packet:
1706                skb->protocol = eth_type_trans(skb, dev->ndev);
1707                emac_rx_csum(dev, skb, ctrl);
1708
1709                if (unlikely(netif_receive_skb(skb) == NET_RX_DROP))
1710                        ++dev->estats.rx_dropped_stack;
1711        next:
1712                ++dev->stats.rx_packets;
1713        skip:
1714                dev->stats.rx_bytes += len;
1715                slot = (slot + 1) % NUM_RX_BUFF;
1716                --budget;
1717                ++received;
1718                continue;
1719        sg:
1720                if (ctrl & MAL_RX_CTRL_FIRST) {
1721                        BUG_ON(dev->rx_sg_skb);
1722                        if (unlikely(emac_alloc_rx_skb(dev, slot, GFP_ATOMIC))) {
1723                                DBG(dev, "rx OOM %d" NL, slot);
1724                                ++dev->estats.rx_dropped_oom;
1725                                emac_recycle_rx_skb(dev, slot, 0);
1726                        } else {
1727                                dev->rx_sg_skb = skb;
1728                                skb_put(skb, len);
1729                        }
1730                } else if (!emac_rx_sg_append(dev, slot) &&
1731                           (ctrl & MAL_RX_CTRL_LAST)) {
1732
1733                        skb = dev->rx_sg_skb;
1734                        dev->rx_sg_skb = NULL;
1735
1736                        ctrl &= EMAC_BAD_RX_MASK;
1737                        if (unlikely(ctrl && ctrl != EMAC_RX_TAH_BAD_CSUM)) {
1738                                emac_parse_rx_error(dev, ctrl);
1739                                ++dev->estats.rx_dropped_error;
1740                                dev_kfree_skb(skb);
1741                                len = 0;
1742                        } else
1743                                goto push_packet;
1744                }
1745                goto skip;
1746        oom:
1747                DBG(dev, "rx OOM %d" NL, slot);
1748                /* Drop the packet and recycle skb */
1749                ++dev->estats.rx_dropped_oom;
1750                emac_recycle_rx_skb(dev, slot, 0);
1751                goto next;
1752        }
1753
1754        if (received) {
1755                DBG2(dev, "rx %d BDs" NL, received);
1756                dev->rx_slot = slot;
1757        }
1758
1759        if (unlikely(budget && test_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags))) {
1760                mb();
1761                if (!(dev->rx_desc[slot].ctrl & MAL_RX_CTRL_EMPTY)) {
1762                        DBG2(dev, "rx restart" NL);
1763                        received = 0;
1764                        goto again;
1765                }
1766
1767                if (dev->rx_sg_skb) {
1768                        DBG2(dev, "dropping partial rx packet" NL);
1769                        ++dev->estats.rx_dropped_error;
1770                        dev_kfree_skb(dev->rx_sg_skb);
1771                        dev->rx_sg_skb = NULL;
1772                }
1773
1774                clear_bit(MAL_COMMAC_RX_STOPPED, &dev->commac.flags);
1775                mal_enable_rx_channel(dev->mal, dev->mal_rx_chan);
1776                emac_rx_enable(dev);
1777                dev->rx_slot = 0;
1778        }
1779        return received;
1780}
1781
1782/* NAPI poll context */
1783static int emac_peek_rx(void *param)
1784{
1785        struct emac_instance *dev = param;
1786
1787        return !(dev->rx_desc[dev->rx_slot].ctrl & MAL_RX_CTRL_EMPTY);
1788}
1789
1790/* NAPI poll context */
1791static int emac_peek_rx_sg(void *param)
1792{
1793        struct emac_instance *dev = param;
1794
1795        int slot = dev->rx_slot;
1796        while (1) {
1797                u16 ctrl = dev->rx_desc[slot].ctrl;
1798                if (ctrl & MAL_RX_CTRL_EMPTY)
1799                        return 0;
1800                else if (ctrl & MAL_RX_CTRL_LAST)
1801                        return 1;
1802
1803                slot = (slot + 1) % NUM_RX_BUFF;
1804
1805                /* I'm just being paranoid here :) */
1806                if (unlikely(slot == dev->rx_slot))
1807                        return 0;
1808        }
1809}
1810
1811/* Hard IRQ */
1812static void emac_rxde(void *param)
1813{
1814        struct emac_instance *dev = param;
1815
1816        ++dev->estats.rx_stopped;
1817        emac_rx_disable_async(dev);
1818}
1819
1820/* Hard IRQ */
1821static irqreturn_t emac_irq(int irq, void *dev_instance)
1822{
1823        struct emac_instance *dev = dev_instance;
1824        struct emac_regs __iomem *p = dev->emacp;
1825        struct emac_error_stats *st = &dev->estats;
1826        u32 isr;
1827
1828        spin_lock(&dev->lock);
1829
1830        isr = in_be32(&p->isr);
1831        out_be32(&p->isr, isr);
1832
1833        DBG(dev, "isr = %08x" NL, isr);
1834
1835        if (isr & EMAC4_ISR_TXPE)
1836                ++st->tx_parity;
1837        if (isr & EMAC4_ISR_RXPE)
1838                ++st->rx_parity;
1839        if (isr & EMAC4_ISR_TXUE)
1840                ++st->tx_underrun;
1841        if (isr & EMAC4_ISR_RXOE)
1842                ++st->rx_fifo_overrun;
1843        if (isr & EMAC_ISR_OVR)
1844                ++st->rx_overrun;
1845        if (isr & EMAC_ISR_BP)
1846                ++st->rx_bad_packet;
1847        if (isr & EMAC_ISR_RP)
1848                ++st->rx_runt_packet;
1849        if (isr & EMAC_ISR_SE)
1850                ++st->rx_short_event;
1851        if (isr & EMAC_ISR_ALE)
1852                ++st->rx_alignment_error;
1853        if (isr & EMAC_ISR_BFCS)
1854                ++st->rx_bad_fcs;
1855        if (isr & EMAC_ISR_PTLE)
1856                ++st->rx_packet_too_long;
1857        if (isr & EMAC_ISR_ORE)
1858                ++st->rx_out_of_range;
1859        if (isr & EMAC_ISR_IRE)
1860                ++st->rx_in_range;
1861        if (isr & EMAC_ISR_SQE)
1862                ++st->tx_sqe;
1863        if (isr & EMAC_ISR_TE)
1864                ++st->tx_errors;
1865
1866        spin_unlock(&dev->lock);
1867
1868        return IRQ_HANDLED;
1869}
1870
1871static struct net_device_stats *emac_stats(struct net_device *ndev)
1872{
1873        struct emac_instance *dev = netdev_priv(ndev);
1874        struct emac_stats *st = &dev->stats;
1875        struct emac_error_stats *est = &dev->estats;
1876        struct net_device_stats *nst = &dev->nstats;
1877        unsigned long flags;
1878
1879        DBG2(dev, "stats" NL);
1880
1881        /* Compute "legacy" statistics */
1882        spin_lock_irqsave(&dev->lock, flags);
1883        nst->rx_packets = (unsigned long)st->rx_packets;
1884        nst->rx_bytes = (unsigned long)st->rx_bytes;
1885        nst->tx_packets = (unsigned long)st->tx_packets;
1886        nst->tx_bytes = (unsigned long)st->tx_bytes;
1887        nst->rx_dropped = (unsigned long)(est->rx_dropped_oom +
1888                                          est->rx_dropped_error +
1889                                          est->rx_dropped_resize +
1890                                          est->rx_dropped_mtu);
1891        nst->tx_dropped = (unsigned long)est->tx_dropped;
1892
1893        nst->rx_errors = (unsigned long)est->rx_bd_errors;
1894        nst->rx_fifo_errors = (unsigned long)(est->rx_bd_overrun +
1895                                              est->rx_fifo_overrun +
1896                                              est->rx_overrun);
1897        nst->rx_frame_errors = (unsigned long)(est->rx_bd_alignment_error +
1898                                               est->rx_alignment_error);
1899        nst->rx_crc_errors = (unsigned long)(est->rx_bd_bad_fcs +
1900                                             est->rx_bad_fcs);
1901        nst->rx_length_errors = (unsigned long)(est->rx_bd_runt_packet +
1902                                                est->rx_bd_short_event +
1903                                                est->rx_bd_packet_too_long +
1904                                                est->rx_bd_out_of_range +
1905                                                est->rx_bd_in_range +
1906                                                est->rx_runt_packet +
1907                                                est->rx_short_event +
1908                                                est->rx_packet_too_long +
1909                                                est->rx_out_of_range +
1910                                                est->rx_in_range);
1911
1912        nst->tx_errors = (unsigned long)(est->tx_bd_errors + est->tx_errors);
1913        nst->tx_fifo_errors = (unsigned long)(est->tx_bd_underrun +
1914                                              est->tx_underrun);
1915        nst->tx_carrier_errors = (unsigned long)est->tx_bd_carrier_loss;
1916        nst->collisions = (unsigned long)(est->tx_bd_excessive_deferral +
1917                                          est->tx_bd_excessive_collisions +
1918                                          est->tx_bd_late_collision +
1919                                          est->tx_bd_multple_collisions);
1920        spin_unlock_irqrestore(&dev->lock, flags);
1921        return nst;
1922}
1923
1924static struct mal_commac_ops emac_commac_ops = {
1925        .poll_tx = &emac_poll_tx,
1926        .poll_rx = &emac_poll_rx,
1927        .peek_rx = &emac_peek_rx,
1928        .rxde = &emac_rxde,
1929};
1930
1931static struct mal_commac_ops emac_commac_sg_ops = {
1932        .poll_tx = &emac_poll_tx,
1933        .poll_rx = &emac_poll_rx,
1934        .peek_rx = &emac_peek_rx_sg,
1935        .rxde = &emac_rxde,
1936};
1937
1938/* Ethtool support */
1939static int emac_ethtool_get_settings(struct net_device *ndev,
1940                                     struct ethtool_cmd *cmd)
1941{
1942        struct emac_instance *dev = netdev_priv(ndev);
1943
1944        cmd->supported = dev->phy.features;
1945        cmd->port = PORT_MII;
1946        cmd->phy_address = dev->phy.address;
1947        cmd->transceiver =
1948            dev->phy.address >= 0 ? XCVR_EXTERNAL : XCVR_INTERNAL;
1949
1950        mutex_lock(&dev->link_lock);
1951        cmd->advertising = dev->phy.advertising;
1952        cmd->autoneg = dev->phy.autoneg;
1953        cmd->speed = dev->phy.speed;
1954        cmd->duplex = dev->phy.duplex;
1955        mutex_unlock(&dev->link_lock);
1956
1957        return 0;
1958}
1959
1960static int emac_ethtool_set_settings(struct net_device *ndev,
1961                                     struct ethtool_cmd *cmd)
1962{
1963        struct emac_instance *dev = netdev_priv(ndev);
1964        u32 f = dev->phy.features;
1965
1966        DBG(dev, "set_settings(%d, %d, %d, 0x%08x)" NL,
1967            cmd->autoneg, cmd->speed, cmd->duplex, cmd->advertising);
1968
1969        /* Basic sanity checks */
1970        if (dev->phy.address < 0)
1971                return -EOPNOTSUPP;
1972        if (cmd->autoneg != AUTONEG_ENABLE && cmd->autoneg != AUTONEG_DISABLE)
1973                return -EINVAL;
1974        if (cmd->autoneg == AUTONEG_ENABLE && cmd->advertising == 0)
1975                return -EINVAL;
1976        if (cmd->duplex != DUPLEX_HALF && cmd->duplex != DUPLEX_FULL)
1977                return -EINVAL;
1978
1979        if (cmd->autoneg == AUTONEG_DISABLE) {
1980                switch (cmd->speed) {
1981                case SPEED_10:
1982                        if (cmd->duplex == DUPLEX_HALF &&
1983                            !(f & SUPPORTED_10baseT_Half))
1984                                return -EINVAL;
1985                        if (cmd->duplex == DUPLEX_FULL &&
1986                            !(f & SUPPORTED_10baseT_Full))
1987                                return -EINVAL;
1988                        break;
1989                case SPEED_100:
1990                        if (cmd->duplex == DUPLEX_HALF &&
1991                            !(f & SUPPORTED_100baseT_Half))
1992                                return -EINVAL;
1993                        if (cmd->duplex == DUPLEX_FULL &&
1994                            !(f & SUPPORTED_100baseT_Full))
1995                                return -EINVAL;
1996                        break;
1997                case SPEED_1000:
1998                        if (cmd->duplex == DUPLEX_HALF &&
1999                            !(f & SUPPORTED_1000baseT_Half))
2000                                return -EINVAL;
2001                        if (cmd->duplex == DUPLEX_FULL &&
2002                            !(f & SUPPORTED_1000baseT_Full))
2003                                return -EINVAL;
2004                        break;
2005                default:
2006                        return -EINVAL;
2007                }
2008
2009                mutex_lock(&dev->link_lock);
2010                dev->phy.def->ops->setup_forced(&dev->phy, cmd->speed,
2011                                                cmd->duplex);
2012                mutex_unlock(&dev->link_lock);
2013
2014        } else {
2015                if (!(f & SUPPORTED_Autoneg))
2016                        return -EINVAL;
2017
2018                mutex_lock(&dev->link_lock);
2019                dev->phy.def->ops->setup_aneg(&dev->phy,
2020                                              (cmd->advertising & f) |
2021                                              (dev->phy.advertising &
2022                                               (ADVERTISED_Pause |
2023                                                ADVERTISED_Asym_Pause)));
2024                mutex_unlock(&dev->link_lock);
2025        }
2026        emac_force_link_update(dev);
2027
2028        return 0;
2029}
2030
2031static void emac_ethtool_get_ringparam(struct net_device *ndev,
2032                                       struct ethtool_ringparam *rp)
2033{
2034        rp->rx_max_pending = rp->rx_pending = NUM_RX_BUFF;
2035        rp->tx_max_pending = rp->tx_pending = NUM_TX_BUFF;
2036}
2037
2038static void emac_ethtool_get_pauseparam(struct net_device *ndev,
2039                                        struct ethtool_pauseparam *pp)
2040{
2041        struct emac_instance *dev = netdev_priv(ndev);
2042
2043        mutex_lock(&dev->link_lock);
2044        if ((dev->phy.features & SUPPORTED_Autoneg) &&
2045            (dev->phy.advertising & (ADVERTISED_Pause | ADVERTISED_Asym_Pause)))
2046                pp->autoneg = 1;
2047
2048        if (dev->phy.duplex == DUPLEX_FULL) {
2049                if (dev->phy.pause)
2050                        pp->rx_pause = pp->tx_pause = 1;
2051                else if (dev->phy.asym_pause)
2052                        pp->tx_pause = 1;
2053        }
2054        mutex_unlock(&dev->link_lock);
2055}
2056
2057static int emac_get_regs_len(struct emac_instance *dev)
2058{
2059        if (emac_has_feature(dev, EMAC_FTR_EMAC4))
2060                return sizeof(struct emac_ethtool_regs_subhdr) +
2061                        EMAC4_ETHTOOL_REGS_SIZE(dev);
2062        else
2063                return sizeof(struct emac_ethtool_regs_subhdr) +
2064                        EMAC_ETHTOOL_REGS_SIZE(dev);
2065}
2066
2067static int emac_ethtool_get_regs_len(struct net_device *ndev)
2068{
2069        struct emac_instance *dev = netdev_priv(ndev);
2070        int size;
2071
2072        size = sizeof(struct emac_ethtool_regs_hdr) +
2073                emac_get_regs_len(dev) + mal_get_regs_len(dev->mal);
2074        if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
2075                size += zmii_get_regs_len(dev->zmii_dev);
2076        if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
2077                size += rgmii_get_regs_len(dev->rgmii_dev);
2078        if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
2079                size += tah_get_regs_len(dev->tah_dev);
2080
2081        return size;
2082}
2083
2084static void *emac_dump_regs(struct emac_instance *dev, void *buf)
2085{
2086        struct emac_ethtool_regs_subhdr *hdr = buf;
2087
2088        hdr->index = dev->cell_index;
2089        if (emac_has_feature(dev, EMAC_FTR_EMAC4)) {
2090                hdr->version = EMAC4_ETHTOOL_REGS_VER;
2091                memcpy_fromio(hdr + 1, dev->emacp, EMAC4_ETHTOOL_REGS_SIZE(dev));
2092                return (void *)(hdr + 1) + EMAC4_ETHTOOL_REGS_SIZE(dev);
2093        } else {
2094                hdr->version = EMAC_ETHTOOL_REGS_VER;
2095                memcpy_fromio(hdr + 1, dev->emacp, EMAC_ETHTOOL_REGS_SIZE(dev));
2096                return (void *)(hdr + 1) + EMAC_ETHTOOL_REGS_SIZE(dev);
2097        }
2098}
2099
2100static void emac_ethtool_get_regs(struct net_device *ndev,
2101                                  struct ethtool_regs *regs, void *buf)
2102{
2103        struct emac_instance *dev = netdev_priv(ndev);
2104        struct emac_ethtool_regs_hdr *hdr = buf;
2105
2106        hdr->components = 0;
2107        buf = hdr + 1;
2108
2109        buf = mal_dump_regs(dev->mal, buf);
2110        buf = emac_dump_regs(dev, buf);
2111        if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII)) {
2112                hdr->components |= EMAC_ETHTOOL_REGS_ZMII;
2113                buf = zmii_dump_regs(dev->zmii_dev, buf);
2114        }
2115        if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII)) {
2116                hdr->components |= EMAC_ETHTOOL_REGS_RGMII;
2117                buf = rgmii_dump_regs(dev->rgmii_dev, buf);
2118        }
2119        if (emac_has_feature(dev, EMAC_FTR_HAS_TAH)) {
2120                hdr->components |= EMAC_ETHTOOL_REGS_TAH;
2121                buf = tah_dump_regs(dev->tah_dev, buf);
2122        }
2123}
2124
2125static int emac_ethtool_nway_reset(struct net_device *ndev)
2126{
2127        struct emac_instance *dev = netdev_priv(ndev);
2128        int res = 0;
2129
2130        DBG(dev, "nway_reset" NL);
2131
2132        if (dev->phy.address < 0)
2133                return -EOPNOTSUPP;
2134
2135        mutex_lock(&dev->link_lock);
2136        if (!dev->phy.autoneg) {
2137                res = -EINVAL;
2138                goto out;
2139        }
2140
2141        dev->phy.def->ops->setup_aneg(&dev->phy, dev->phy.advertising);
2142 out:
2143        mutex_unlock(&dev->link_lock);
2144        emac_force_link_update(dev);
2145        return res;
2146}
2147
2148static int emac_ethtool_get_sset_count(struct net_device *ndev, int stringset)
2149{
2150        if (stringset == ETH_SS_STATS)
2151                return EMAC_ETHTOOL_STATS_COUNT;
2152        else
2153                return -EINVAL;
2154}
2155
2156static void emac_ethtool_get_strings(struct net_device *ndev, u32 stringset,
2157                                     u8 * buf)
2158{
2159        if (stringset == ETH_SS_STATS)
2160                memcpy(buf, &emac_stats_keys, sizeof(emac_stats_keys));
2161}
2162
2163static void emac_ethtool_get_ethtool_stats(struct net_device *ndev,
2164                                           struct ethtool_stats *estats,
2165                                           u64 * tmp_stats)
2166{
2167        struct emac_instance *dev = netdev_priv(ndev);
2168
2169        memcpy(tmp_stats, &dev->stats, sizeof(dev->stats));
2170        tmp_stats += sizeof(dev->stats) / sizeof(u64);
2171        memcpy(tmp_stats, &dev->estats, sizeof(dev->estats));
2172}
2173
2174static void emac_ethtool_get_drvinfo(struct net_device *ndev,
2175                                     struct ethtool_drvinfo *info)
2176{
2177        struct emac_instance *dev = netdev_priv(ndev);
2178
2179        strcpy(info->driver, "ibm_emac");
2180        strcpy(info->version, DRV_VERSION);
2181        info->fw_version[0] = '\0';
2182        sprintf(info->bus_info, "PPC 4xx EMAC-%d %s",
2183                dev->cell_index, dev->ofdev->dev.of_node->full_name);
2184        info->regdump_len = emac_ethtool_get_regs_len(ndev);
2185}
2186
2187static const struct ethtool_ops emac_ethtool_ops = {
2188        .get_settings = emac_ethtool_get_settings,
2189        .set_settings = emac_ethtool_set_settings,
2190        .get_drvinfo = emac_ethtool_get_drvinfo,
2191
2192        .get_regs_len = emac_ethtool_get_regs_len,
2193        .get_regs = emac_ethtool_get_regs,
2194
2195        .nway_reset = emac_ethtool_nway_reset,
2196
2197        .get_ringparam = emac_ethtool_get_ringparam,
2198        .get_pauseparam = emac_ethtool_get_pauseparam,
2199
2200        .get_strings = emac_ethtool_get_strings,
2201        .get_sset_count = emac_ethtool_get_sset_count,
2202        .get_ethtool_stats = emac_ethtool_get_ethtool_stats,
2203
2204        .get_link = ethtool_op_get_link,
2205};
2206
2207static int emac_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd)
2208{
2209        struct emac_instance *dev = netdev_priv(ndev);
2210        struct mii_ioctl_data *data = if_mii(rq);
2211
2212        DBG(dev, "ioctl %08x" NL, cmd);
2213
2214        if (dev->phy.address < 0)
2215                return -EOPNOTSUPP;
2216
2217        switch (cmd) {
2218        case SIOCGMIIPHY:
2219                data->phy_id = dev->phy.address;
2220                /* Fall through */
2221        case SIOCGMIIREG:
2222                data->val_out = emac_mdio_read(ndev, dev->phy.address,
2223                                               data->reg_num);
2224                return 0;
2225
2226        case SIOCSMIIREG:
2227                emac_mdio_write(ndev, dev->phy.address, data->reg_num,
2228                                data->val_in);
2229                return 0;
2230        default:
2231                return -EOPNOTSUPP;
2232        }
2233}
2234
2235struct emac_depentry {
2236        u32                     phandle;
2237        struct device_node      *node;
2238        struct platform_device  *ofdev;
2239        void                    *drvdata;
2240};
2241
2242#define EMAC_DEP_MAL_IDX        0
2243#define EMAC_DEP_ZMII_IDX       1
2244#define EMAC_DEP_RGMII_IDX      2
2245#define EMAC_DEP_TAH_IDX        3
2246#define EMAC_DEP_MDIO_IDX       4
2247#define EMAC_DEP_PREV_IDX       5
2248#define EMAC_DEP_COUNT          6
2249
2250static int __devinit emac_check_deps(struct emac_instance *dev,
2251                                     struct emac_depentry *deps)
2252{
2253        int i, there = 0;
2254        struct device_node *np;
2255
2256        for (i = 0; i < EMAC_DEP_COUNT; i++) {
2257                /* no dependency on that item, allright */
2258                if (deps[i].phandle == 0) {
2259                        there++;
2260                        continue;
2261                }
2262                /* special case for blist as the dependency might go away */
2263                if (i == EMAC_DEP_PREV_IDX) {
2264                        np = *(dev->blist - 1);
2265                        if (np == NULL) {
2266                                deps[i].phandle = 0;
2267                                there++;
2268                                continue;
2269                        }
2270                        if (deps[i].node == NULL)
2271                                deps[i].node = of_node_get(np);
2272                }
2273                if (deps[i].node == NULL)
2274                        deps[i].node = of_find_node_by_phandle(deps[i].phandle);
2275                if (deps[i].node == NULL)
2276                        continue;
2277                if (deps[i].ofdev == NULL)
2278                        deps[i].ofdev = of_find_device_by_node(deps[i].node);
2279                if (deps[i].ofdev == NULL)
2280                        continue;
2281                if (deps[i].drvdata == NULL)
2282                        deps[i].drvdata = dev_get_drvdata(&deps[i].ofdev->dev);
2283                if (deps[i].drvdata != NULL)
2284                        there++;
2285        }
2286        return there == EMAC_DEP_COUNT;
2287}
2288
2289static void emac_put_deps(struct emac_instance *dev)
2290{
2291        if (dev->mal_dev)
2292                of_dev_put(dev->mal_dev);
2293        if (dev->zmii_dev)
2294                of_dev_put(dev->zmii_dev);
2295        if (dev->rgmii_dev)
2296                of_dev_put(dev->rgmii_dev);
2297        if (dev->mdio_dev)
2298                of_dev_put(dev->mdio_dev);
2299        if (dev->tah_dev)
2300                of_dev_put(dev->tah_dev);
2301}
2302
2303static int __devinit emac_of_bus_notify(struct notifier_block *nb,
2304                                        unsigned long action, void *data)
2305{
2306        /* We are only intereted in device addition */
2307        if (action == BUS_NOTIFY_BOUND_DRIVER)
2308                wake_up_all(&emac_probe_wait);
2309        return 0;
2310}
2311
2312static struct notifier_block emac_of_bus_notifier __devinitdata = {
2313        .notifier_call = emac_of_bus_notify
2314};
2315
2316static int __devinit emac_wait_deps(struct emac_instance *dev)
2317{
2318        struct emac_depentry deps[EMAC_DEP_COUNT];
2319        int i, err;
2320
2321        memset(&deps, 0, sizeof(deps));
2322
2323        deps[EMAC_DEP_MAL_IDX].phandle = dev->mal_ph;
2324        deps[EMAC_DEP_ZMII_IDX].phandle = dev->zmii_ph;
2325        deps[EMAC_DEP_RGMII_IDX].phandle = dev->rgmii_ph;
2326        if (dev->tah_ph)
2327                deps[EMAC_DEP_TAH_IDX].phandle = dev->tah_ph;
2328        if (dev->mdio_ph)
2329                deps[EMAC_DEP_MDIO_IDX].phandle = dev->mdio_ph;
2330        if (dev->blist && dev->blist > emac_boot_list)
2331                deps[EMAC_DEP_PREV_IDX].phandle = 0xffffffffu;
2332        bus_register_notifier(&platform_bus_type, &emac_of_bus_notifier);
2333        wait_event_timeout(emac_probe_wait,
2334                           emac_check_deps(dev, deps),
2335                           EMAC_PROBE_DEP_TIMEOUT);
2336        bus_unregister_notifier(&platform_bus_type, &emac_of_bus_notifier);
2337        err = emac_check_deps(dev, deps) ? 0 : -ENODEV;
2338        for (i = 0; i < EMAC_DEP_COUNT; i++) {
2339                if (deps[i].node)
2340                        of_node_put(deps[i].node);
2341                if (err && deps[i].ofdev)
2342                        of_dev_put(deps[i].ofdev);
2343        }
2344        if (err == 0) {
2345                dev->mal_dev = deps[EMAC_DEP_MAL_IDX].ofdev;
2346                dev->zmii_dev = deps[EMAC_DEP_ZMII_IDX].ofdev;
2347                dev->rgmii_dev = deps[EMAC_DEP_RGMII_IDX].ofdev;
2348                dev->tah_dev = deps[EMAC_DEP_TAH_IDX].ofdev;
2349                dev->mdio_dev = deps[EMAC_DEP_MDIO_IDX].ofdev;
2350        }
2351        if (deps[EMAC_DEP_PREV_IDX].ofdev)
2352                of_dev_put(deps[EMAC_DEP_PREV_IDX].ofdev);
2353        return err;
2354}
2355
2356static int __devinit emac_read_uint_prop(struct device_node *np, const char *name,
2357                                         u32 *val, int fatal)
2358{
2359        int len;
2360        const u32 *prop = of_get_property(np, name, &len);
2361        if (prop == NULL || len < sizeof(u32)) {
2362                if (fatal)
2363                        printk(KERN_ERR "%s: missing %s property\n",
2364                               np->full_name, name);
2365                return -ENODEV;
2366        }
2367        *val = *prop;
2368        return 0;
2369}
2370
2371static int __devinit emac_init_phy(struct emac_instance *dev)
2372{
2373        struct device_node *np = dev->ofdev->dev.of_node;
2374        struct net_device *ndev = dev->ndev;
2375        u32 phy_map, adv;
2376        int i;
2377
2378        dev->phy.dev = ndev;
2379        dev->phy.mode = dev->phy_mode;
2380
2381        /* PHY-less configuration.
2382         * XXX I probably should move these settings to the dev tree
2383         */
2384        if (dev->phy_address == 0xffffffff && dev->phy_map == 0xffffffff) {
2385                emac_reset(dev);
2386
2387                /* PHY-less configuration.
2388                 * XXX I probably should move these settings to the dev tree
2389                 */
2390                dev->phy.address = -1;
2391                dev->phy.features = SUPPORTED_MII;
2392                if (emac_phy_supports_gige(dev->phy_mode))
2393                        dev->phy.features |= SUPPORTED_1000baseT_Full;
2394                else
2395                        dev->phy.features |= SUPPORTED_100baseT_Full;
2396                dev->phy.pause = 1;
2397
2398                return 0;
2399        }
2400
2401        mutex_lock(&emac_phy_map_lock);
2402        phy_map = dev->phy_map | busy_phy_map;
2403
2404        DBG(dev, "PHY maps %08x %08x" NL, dev->phy_map, busy_phy_map);
2405
2406        dev->phy.mdio_read = emac_mdio_read;
2407        dev->phy.mdio_write = emac_mdio_write;
2408
2409        /* Enable internal clock source */
2410#ifdef CONFIG_PPC_DCR_NATIVE
2411        if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX))
2412                dcri_clrset(SDR0, SDR0_MFR, 0, SDR0_MFR_ECS);
2413#endif
2414        /* PHY clock workaround */
2415        emac_rx_clk_tx(dev);
2416
2417        /* Enable internal clock source on 440GX*/
2418#ifdef CONFIG_PPC_DCR_NATIVE
2419        if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX))
2420                dcri_clrset(SDR0, SDR0_MFR, 0, SDR0_MFR_ECS);
2421#endif
2422        /* Configure EMAC with defaults so we can at least use MDIO
2423         * This is needed mostly for 440GX
2424         */
2425        if (emac_phy_gpcs(dev->phy.mode)) {
2426                /* XXX
2427                 * Make GPCS PHY address equal to EMAC index.
2428                 * We probably should take into account busy_phy_map
2429                 * and/or phy_map here.
2430                 *
2431                 * Note that the busy_phy_map is currently global
2432                 * while it should probably be per-ASIC...
2433                 */
2434                dev->phy.gpcs_address = dev->gpcs_address;
2435                if (dev->phy.gpcs_address == 0xffffffff)
2436                        dev->phy.address = dev->cell_index;
2437        }
2438
2439        emac_configure(dev);
2440
2441        if (dev->phy_address != 0xffffffff)
2442                phy_map = ~(1 << dev->phy_address);
2443
2444        for (i = 0; i < 0x20; phy_map >>= 1, ++i)
2445                if (!(phy_map & 1)) {
2446                        int r;
2447                        busy_phy_map |= 1 << i;
2448
2449                        /* Quick check if there is a PHY at the address */
2450                        r = emac_mdio_read(dev->ndev, i, MII_BMCR);
2451                        if (r == 0xffff || r < 0)
2452                                continue;
2453                        if (!emac_mii_phy_probe(&dev->phy, i))
2454                                break;
2455                }
2456
2457        /* Enable external clock source */
2458#ifdef CONFIG_PPC_DCR_NATIVE
2459        if (emac_has_feature(dev, EMAC_FTR_440GX_PHY_CLK_FIX))
2460                dcri_clrset(SDR0, SDR0_MFR, SDR0_MFR_ECS, 0);
2461#endif
2462        mutex_unlock(&emac_phy_map_lock);
2463        if (i == 0x20) {
2464                printk(KERN_WARNING "%s: can't find PHY!\n", np->full_name);
2465                return -ENXIO;
2466        }
2467
2468        /* Init PHY */
2469        if (dev->phy.def->ops->init)
2470                dev->phy.def->ops->init(&dev->phy);
2471
2472        /* Disable any PHY features not supported by the platform */
2473        dev->phy.def->features &= ~dev->phy_feat_exc;
2474
2475        /* Setup initial link parameters */
2476        if (dev->phy.features & SUPPORTED_Autoneg) {
2477                adv = dev->phy.features;
2478                if (!emac_has_feature(dev, EMAC_FTR_NO_FLOW_CONTROL_40x))
2479                        adv |= ADVERTISED_Pause | ADVERTISED_Asym_Pause;
2480                /* Restart autonegotiation */
2481                dev->phy.def->ops->setup_aneg(&dev->phy, adv);
2482        } else {
2483                u32 f = dev->phy.def->features;
2484                int speed = SPEED_10, fd = DUPLEX_HALF;
2485
2486                /* Select highest supported speed/duplex */
2487                if (f & SUPPORTED_1000baseT_Full) {
2488                        speed = SPEED_1000;
2489                        fd = DUPLEX_FULL;
2490                } else if (f & SUPPORTED_1000baseT_Half)
2491                        speed = SPEED_1000;
2492                else if (f & SUPPORTED_100baseT_Full) {
2493                        speed = SPEED_100;
2494                        fd = DUPLEX_FULL;
2495                } else if (f & SUPPORTED_100baseT_Half)
2496                        speed = SPEED_100;
2497                else if (f & SUPPORTED_10baseT_Full)
2498                        fd = DUPLEX_FULL;
2499
2500                /* Force link parameters */
2501                dev->phy.def->ops->setup_forced(&dev->phy, speed, fd);
2502        }
2503        return 0;
2504}
2505
2506static int __devinit emac_init_config(struct emac_instance *dev)
2507{
2508        struct device_node *np = dev->ofdev->dev.of_node;
2509        const void *p;
2510
2511        /* Read config from device-tree */
2512        if (emac_read_uint_prop(np, "mal-device", &dev->mal_ph, 1))
2513                return -ENXIO;
2514        if (emac_read_uint_prop(np, "mal-tx-channel", &dev->mal_tx_chan, 1))
2515                return -ENXIO;
2516        if (emac_read_uint_prop(np, "mal-rx-channel", &dev->mal_rx_chan, 1))
2517                return -ENXIO;
2518        if (emac_read_uint_prop(np, "cell-index", &dev->cell_index, 1))
2519                return -ENXIO;
2520        if (emac_read_uint_prop(np, "max-frame-size", &dev->max_mtu, 0))
2521                dev->max_mtu = 1500;
2522        if (emac_read_uint_prop(np, "rx-fifo-size", &dev->rx_fifo_size, 0))
2523                dev->rx_fifo_size = 2048;
2524        if (emac_read_uint_prop(np, "tx-fifo-size", &dev->tx_fifo_size, 0))
2525                dev->tx_fifo_size = 2048;
2526        if (emac_read_uint_prop(np, "rx-fifo-size-gige", &dev->rx_fifo_size_gige, 0))
2527                dev->rx_fifo_size_gige = dev->rx_fifo_size;
2528        if (emac_read_uint_prop(np, "tx-fifo-size-gige", &dev->tx_fifo_size_gige, 0))
2529                dev->tx_fifo_size_gige = dev->tx_fifo_size;
2530        if (emac_read_uint_prop(np, "phy-address", &dev->phy_address, 0))
2531                dev->phy_address = 0xffffffff;
2532        if (emac_read_uint_prop(np, "phy-map", &dev->phy_map, 0))
2533                dev->phy_map = 0xffffffff;
2534        if (emac_read_uint_prop(np, "gpcs-address", &dev->gpcs_address, 0))
2535                dev->gpcs_address = 0xffffffff;
2536        if (emac_read_uint_prop(np->parent, "clock-frequency", &dev->opb_bus_freq, 1))
2537                return -ENXIO;
2538        if (emac_read_uint_prop(np, "tah-device", &dev->tah_ph, 0))
2539                dev->tah_ph = 0;
2540        if (emac_read_uint_prop(np, "tah-channel", &dev->tah_port, 0))
2541                dev->tah_port = 0;
2542        if (emac_read_uint_prop(np, "mdio-device", &dev->mdio_ph, 0))
2543                dev->mdio_ph = 0;
2544        if (emac_read_uint_prop(np, "zmii-device", &dev->zmii_ph, 0))
2545                dev->zmii_ph = 0;
2546        if (emac_read_uint_prop(np, "zmii-channel", &dev->zmii_port, 0))
2547                dev->zmii_port = 0xffffffff;
2548        if (emac_read_uint_prop(np, "rgmii-device", &dev->rgmii_ph, 0))
2549                dev->rgmii_ph = 0;
2550        if (emac_read_uint_prop(np, "rgmii-channel", &dev->rgmii_port, 0))
2551                dev->rgmii_port = 0xffffffff;
2552        if (emac_read_uint_prop(np, "fifo-entry-size", &dev->fifo_entry_size, 0))
2553                dev->fifo_entry_size = 16;
2554        if (emac_read_uint_prop(np, "mal-burst-size", &dev->mal_burst_size, 0))
2555                dev->mal_burst_size = 256;
2556
2557        /* PHY mode needs some decoding */
2558        dev->phy_mode = of_get_phy_mode(np);
2559        if (dev->phy_mode < 0)
2560                dev->phy_mode = PHY_MODE_NA;
2561
2562        /* Check EMAC version */
2563        if (of_device_is_compatible(np, "ibm,emac4sync")) {
2564                dev->features |= (EMAC_FTR_EMAC4 | EMAC_FTR_EMAC4SYNC);
2565                if (of_device_is_compatible(np, "ibm,emac-460ex") ||
2566                    of_device_is_compatible(np, "ibm,emac-460gt"))
2567                        dev->features |= EMAC_FTR_460EX_PHY_CLK_FIX;
2568                if (of_device_is_compatible(np, "ibm,emac-405ex") ||
2569                    of_device_is_compatible(np, "ibm,emac-405exr"))
2570                        dev->features |= EMAC_FTR_440EP_PHY_CLK_FIX;
2571        } else if (of_device_is_compatible(np, "ibm,emac4")) {
2572                dev->features |= EMAC_FTR_EMAC4;
2573                if (of_device_is_compatible(np, "ibm,emac-440gx"))
2574                        dev->features |= EMAC_FTR_440GX_PHY_CLK_FIX;
2575        } else {
2576                if (of_device_is_compatible(np, "ibm,emac-440ep") ||
2577                    of_device_is_compatible(np, "ibm,emac-440gr"))
2578                        dev->features |= EMAC_FTR_440EP_PHY_CLK_FIX;
2579                if (of_device_is_compatible(np, "ibm,emac-405ez")) {
2580#ifdef CONFIG_IBM_EMAC_NO_FLOW_CTRL
2581                        dev->features |= EMAC_FTR_NO_FLOW_CONTROL_40x;
2582#else
2583                        printk(KERN_ERR "%s: Flow control not disabled!\n",
2584                                        np->full_name);
2585                        return -ENXIO;
2586#endif
2587                }
2588
2589        }
2590
2591        /* Fixup some feature bits based on the device tree */
2592        if (of_get_property(np, "has-inverted-stacr-oc", NULL))
2593                dev->features |= EMAC_FTR_STACR_OC_INVERT;
2594        if (of_get_property(np, "has-new-stacr-staopc", NULL))
2595                dev->features |= EMAC_FTR_HAS_NEW_STACR;
2596
2597        /* CAB lacks the appropriate properties */
2598        if (of_device_is_compatible(np, "ibm,emac-axon"))
2599                dev->features |= EMAC_FTR_HAS_NEW_STACR |
2600                        EMAC_FTR_STACR_OC_INVERT;
2601
2602        /* Enable TAH/ZMII/RGMII features as found */
2603        if (dev->tah_ph != 0) {
2604#ifdef CONFIG_IBM_EMAC_TAH
2605                dev->features |= EMAC_FTR_HAS_TAH;
2606#else
2607                printk(KERN_ERR "%s: TAH support not enabled !\n",
2608                       np->full_name);
2609                return -ENXIO;
2610#endif
2611        }
2612
2613        if (dev->zmii_ph != 0) {
2614#ifdef CONFIG_IBM_EMAC_ZMII
2615                dev->features |= EMAC_FTR_HAS_ZMII;
2616#else
2617                printk(KERN_ERR "%s: ZMII support not enabled !\n",
2618                       np->full_name);
2619                return -ENXIO;
2620#endif
2621        }
2622
2623        if (dev->rgmii_ph != 0) {
2624#ifdef CONFIG_IBM_EMAC_RGMII
2625                dev->features |= EMAC_FTR_HAS_RGMII;
2626#else
2627                printk(KERN_ERR "%s: RGMII support not enabled !\n",
2628                       np->full_name);
2629                return -ENXIO;
2630#endif
2631        }
2632
2633        /* Read MAC-address */
2634        p = of_get_property(np, "local-mac-address", NULL);
2635        if (p == NULL) {
2636                printk(KERN_ERR "%s: Can't find local-mac-address property\n",
2637                       np->full_name);
2638                return -ENXIO;
2639        }
2640        memcpy(dev->ndev->dev_addr, p, 6);
2641
2642        /* IAHT and GAHT filter parameterization */
2643        if (emac_has_feature(dev, EMAC_FTR_EMAC4SYNC)) {
2644                dev->xaht_slots_shift = EMAC4SYNC_XAHT_SLOTS_SHIFT;
2645                dev->xaht_width_shift = EMAC4SYNC_XAHT_WIDTH_SHIFT;
2646        } else {
2647                dev->xaht_slots_shift = EMAC4_XAHT_SLOTS_SHIFT;
2648                dev->xaht_width_shift = EMAC4_XAHT_WIDTH_SHIFT;
2649        }
2650
2651        DBG(dev, "features     : 0x%08x / 0x%08x\n", dev->features, EMAC_FTRS_POSSIBLE);
2652        DBG(dev, "tx_fifo_size : %d (%d gige)\n", dev->tx_fifo_size, dev->tx_fifo_size_gige);
2653        DBG(dev, "rx_fifo_size : %d (%d gige)\n", dev->rx_fifo_size, dev->rx_fifo_size_gige);
2654        DBG(dev, "max_mtu      : %d\n", dev->max_mtu);
2655        DBG(dev, "OPB freq     : %d\n", dev->opb_bus_freq);
2656
2657        return 0;
2658}
2659
2660static const struct net_device_ops emac_netdev_ops = {
2661        .ndo_open               = emac_open,
2662        .ndo_stop               = emac_close,
2663        .ndo_get_stats          = emac_stats,
2664        .ndo_set_rx_mode        = emac_set_multicast_list,
2665        .ndo_do_ioctl           = emac_ioctl,
2666        .ndo_tx_timeout         = emac_tx_timeout,
2667        .ndo_validate_addr      = eth_validate_addr,
2668        .ndo_set_mac_address    = eth_mac_addr,
2669        .ndo_start_xmit         = emac_start_xmit,
2670        .ndo_change_mtu         = eth_change_mtu,
2671};
2672
2673static const struct net_device_ops emac_gige_netdev_ops = {
2674        .ndo_open               = emac_open,
2675        .ndo_stop               = emac_close,
2676        .ndo_get_stats          = emac_stats,
2677        .ndo_set_rx_mode        = emac_set_multicast_list,
2678        .ndo_do_ioctl           = emac_ioctl,
2679        .ndo_tx_timeout         = emac_tx_timeout,
2680        .ndo_validate_addr      = eth_validate_addr,
2681        .ndo_set_mac_address    = eth_mac_addr,
2682        .ndo_start_xmit         = emac_start_xmit_sg,
2683        .ndo_change_mtu         = emac_change_mtu,
2684};
2685
2686static int __devinit emac_probe(struct platform_device *ofdev)
2687{
2688        struct net_device *ndev;
2689        struct emac_instance *dev;
2690        struct device_node *np = ofdev->dev.of_node;
2691        struct device_node **blist = NULL;
2692        int err, i;
2693
2694        /* Skip unused/unwired EMACS.  We leave the check for an unused
2695         * property here for now, but new flat device trees should set a
2696         * status property to "disabled" instead.
2697         */
2698        if (of_get_property(np, "unused", NULL) || !of_device_is_available(np))
2699                return -ENODEV;
2700
2701        /* Find ourselves in the bootlist if we are there */
2702        for (i = 0; i < EMAC_BOOT_LIST_SIZE; i++)
2703                if (emac_boot_list[i] == np)
2704                        blist = &emac_boot_list[i];
2705
2706        /* Allocate our net_device structure */
2707        err = -ENOMEM;
2708        ndev = alloc_etherdev(sizeof(struct emac_instance));
2709        if (!ndev) {
2710                printk(KERN_ERR "%s: could not allocate ethernet device!\n",
2711                       np->full_name);
2712                goto err_gone;
2713        }
2714        dev = netdev_priv(ndev);
2715        dev->ndev = ndev;
2716        dev->ofdev = ofdev;
2717        dev->blist = blist;
2718        SET_NETDEV_DEV(ndev, &ofdev->dev);
2719
2720        /* Initialize some embedded data structures */
2721        mutex_init(&dev->mdio_lock);
2722        mutex_init(&dev->link_lock);
2723        spin_lock_init(&dev->lock);
2724        INIT_WORK(&dev->reset_work, emac_reset_work);
2725
2726        /* Init various config data based on device-tree */
2727        err = emac_init_config(dev);
2728        if (err != 0)
2729                goto err_free;
2730
2731        /* Get interrupts. EMAC irq is mandatory, WOL irq is optional */
2732        dev->emac_irq = irq_of_parse_and_map(np, 0);
2733        dev->wol_irq = irq_of_parse_and_map(np, 1);
2734        if (dev->emac_irq == NO_IRQ) {
2735                printk(KERN_ERR "%s: Can't map main interrupt\n", np->full_name);
2736                goto err_free;
2737        }
2738        ndev->irq = dev->emac_irq;
2739
2740        /* Map EMAC regs */
2741        if (of_address_to_resource(np, 0, &dev->rsrc_regs)) {
2742                printk(KERN_ERR "%s: Can't get registers address\n",
2743                       np->full_name);
2744                goto err_irq_unmap;
2745        }
2746        // TODO : request_mem_region
2747        dev->emacp = ioremap(dev->rsrc_regs.start,
2748                             resource_size(&dev->rsrc_regs));
2749        if (dev->emacp == NULL) {
2750                printk(KERN_ERR "%s: Can't map device registers!\n",
2751                       np->full_name);
2752                err = -ENOMEM;
2753                goto err_irq_unmap;
2754        }
2755
2756        /* Wait for dependent devices */
2757        err = emac_wait_deps(dev);
2758        if (err) {
2759                printk(KERN_ERR
2760                       "%s: Timeout waiting for dependent devices\n",
2761                       np->full_name);
2762                /*  display more info about what's missing ? */
2763                goto err_reg_unmap;
2764        }
2765        dev->mal = dev_get_drvdata(&dev->mal_dev->dev);
2766        if (dev->mdio_dev != NULL)
2767                dev->mdio_instance = dev_get_drvdata(&dev->mdio_dev->dev);
2768
2769        /* Register with MAL */
2770        dev->commac.ops = &emac_commac_ops;
2771        dev->commac.dev = dev;
2772        dev->commac.tx_chan_mask = MAL_CHAN_MASK(dev->mal_tx_chan);
2773        dev->commac.rx_chan_mask = MAL_CHAN_MASK(dev->mal_rx_chan);
2774        err = mal_register_commac(dev->mal, &dev->commac);
2775        if (err) {
2776                printk(KERN_ERR "%s: failed to register with mal %s!\n",
2777                       np->full_name, dev->mal_dev->dev.of_node->full_name);
2778                goto err_rel_deps;
2779        }
2780        dev->rx_skb_size = emac_rx_skb_size(ndev->mtu);
2781        dev->rx_sync_size = emac_rx_sync_size(ndev->mtu);
2782
2783        /* Get pointers to BD rings */
2784        dev->tx_desc =
2785            dev->mal->bd_virt + mal_tx_bd_offset(dev->mal, dev->mal_tx_chan);
2786        dev->rx_desc =
2787            dev->mal->bd_virt + mal_rx_bd_offset(dev->mal, dev->mal_rx_chan);
2788
2789        DBG(dev, "tx_desc %p" NL, dev->tx_desc);
2790        DBG(dev, "rx_desc %p" NL, dev->rx_desc);
2791
2792        /* Clean rings */
2793        memset(dev->tx_desc, 0, NUM_TX_BUFF * sizeof(struct mal_descriptor));
2794        memset(dev->rx_desc, 0, NUM_RX_BUFF * sizeof(struct mal_descriptor));
2795        memset(dev->tx_skb, 0, NUM_TX_BUFF * sizeof(struct sk_buff *));
2796        memset(dev->rx_skb, 0, NUM_RX_BUFF * sizeof(struct sk_buff *));
2797
2798        /* Attach to ZMII, if needed */
2799        if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII) &&
2800            (err = zmii_attach(dev->zmii_dev, dev->zmii_port, &dev->phy_mode)) != 0)
2801                goto err_unreg_commac;
2802
2803        /* Attach to RGMII, if needed */
2804        if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII) &&
2805            (err = rgmii_attach(dev->rgmii_dev, dev->rgmii_port, dev->phy_mode)) != 0)
2806                goto err_detach_zmii;
2807
2808        /* Attach to TAH, if needed */
2809        if (emac_has_feature(dev, EMAC_FTR_HAS_TAH) &&
2810            (err = tah_attach(dev->tah_dev, dev->tah_port)) != 0)
2811                goto err_detach_rgmii;
2812
2813        /* Set some link defaults before we can find out real parameters */
2814        dev->phy.speed = SPEED_100;
2815        dev->phy.duplex = DUPLEX_FULL;
2816        dev->phy.autoneg = AUTONEG_DISABLE;
2817        dev->phy.pause = dev->phy.asym_pause = 0;
2818        dev->stop_timeout = STOP_TIMEOUT_100;
2819        INIT_DELAYED_WORK(&dev->link_work, emac_link_timer);
2820
2821        /* Find PHY if any */
2822        err = emac_init_phy(dev);
2823        if (err != 0)
2824                goto err_detach_tah;
2825
2826        if (dev->tah_dev) {
2827                ndev->hw_features = NETIF_F_IP_CSUM | NETIF_F_SG;
2828                ndev->features |= ndev->hw_features | NETIF_F_RXCSUM;
2829        }
2830        ndev->watchdog_timeo = 5 * HZ;
2831        if (emac_phy_supports_gige(dev->phy_mode)) {
2832                ndev->netdev_ops = &emac_gige_netdev_ops;
2833                dev->commac.ops = &emac_commac_sg_ops;
2834        } else
2835                ndev->netdev_ops = &emac_netdev_ops;
2836        SET_ETHTOOL_OPS(ndev, &emac_ethtool_ops);
2837
2838        netif_carrier_off(ndev);
2839
2840        err = register_netdev(ndev);
2841        if (err) {
2842                printk(KERN_ERR "%s: failed to register net device (%d)!\n",
2843                       np->full_name, err);
2844                goto err_detach_tah;
2845        }
2846
2847        /* Set our drvdata last as we don't want them visible until we are
2848         * fully initialized
2849         */
2850        wmb();
2851        dev_set_drvdata(&ofdev->dev, dev);
2852
2853        /* There's a new kid in town ! Let's tell everybody */
2854        wake_up_all(&emac_probe_wait);
2855
2856
2857        printk(KERN_INFO "%s: EMAC-%d %s, MAC %pM\n",
2858               ndev->name, dev->cell_index, np->full_name, ndev->dev_addr);
2859
2860        if (dev->phy_mode == PHY_MODE_SGMII)
2861                printk(KERN_NOTICE "%s: in SGMII mode\n", ndev->name);
2862
2863        if (dev->phy.address >= 0)
2864                printk("%s: found %s PHY (0x%02x)\n", ndev->name,
2865                       dev->phy.def->name, dev->phy.address);
2866
2867        emac_dbg_register(dev);
2868
2869        /* Life is good */
2870        return 0;
2871
2872        /* I have a bad feeling about this ... */
2873
2874 err_detach_tah:
2875        if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
2876                tah_detach(dev->tah_dev, dev->tah_port);
2877 err_detach_rgmii:
2878        if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
2879                rgmii_detach(dev->rgmii_dev, dev->rgmii_port);
2880 err_detach_zmii:
2881        if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
2882                zmii_detach(dev->zmii_dev, dev->zmii_port);
2883 err_unreg_commac:
2884        mal_unregister_commac(dev->mal, &dev->commac);
2885 err_rel_deps:
2886        emac_put_deps(dev);
2887 err_reg_unmap:
2888        iounmap(dev->emacp);
2889 err_irq_unmap:
2890        if (dev->wol_irq != NO_IRQ)
2891                irq_dispose_mapping(dev->wol_irq);
2892        if (dev->emac_irq != NO_IRQ)
2893                irq_dispose_mapping(dev->emac_irq);
2894 err_free:
2895        free_netdev(ndev);
2896 err_gone:
2897        /* if we were on the bootlist, remove us as we won't show up and
2898         * wake up all waiters to notify them in case they were waiting
2899         * on us
2900         */
2901        if (blist) {
2902                *blist = NULL;
2903                wake_up_all(&emac_probe_wait);
2904        }
2905        return err;
2906}
2907
2908static int __devexit emac_remove(struct platform_device *ofdev)
2909{
2910        struct emac_instance *dev = dev_get_drvdata(&ofdev->dev);
2911
2912        DBG(dev, "remove" NL);
2913
2914        dev_set_drvdata(&ofdev->dev, NULL);
2915
2916        unregister_netdev(dev->ndev);
2917
2918        cancel_work_sync(&dev->reset_work);
2919
2920        if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
2921                tah_detach(dev->tah_dev, dev->tah_port);
2922        if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
2923                rgmii_detach(dev->rgmii_dev, dev->rgmii_port);
2924        if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
2925                zmii_detach(dev->zmii_dev, dev->zmii_port);
2926
2927        mal_unregister_commac(dev->mal, &dev->commac);
2928        emac_put_deps(dev);
2929
2930        emac_dbg_unregister(dev);
2931        iounmap(dev->emacp);
2932
2933        if (dev->wol_irq != NO_IRQ)
2934                irq_dispose_mapping(dev->wol_irq);
2935        if (dev->emac_irq != NO_IRQ)
2936                irq_dispose_mapping(dev->emac_irq);
2937
2938        free_netdev(dev->ndev);
2939
2940        return 0;
2941}
2942
2943/* XXX Features in here should be replaced by properties... */
2944static struct of_device_id emac_match[] =
2945{
2946        {
2947                .type           = "network",
2948                .compatible     = "ibm,emac",
2949        },
2950        {
2951                .type           = "network",
2952                .compatible     = "ibm,emac4",
2953        },
2954        {
2955                .type           = "network",
2956                .compatible     = "ibm,emac4sync",
2957        },
2958        {},
2959};
2960MODULE_DEVICE_TABLE(of, emac_match);
2961
2962static struct platform_driver emac_driver = {
2963        .driver = {
2964                .name = "emac",
2965                .owner = THIS_MODULE,
2966                .of_match_table = emac_match,
2967        },
2968        .probe = emac_probe,
2969        .remove = emac_remove,
2970};
2971
2972static void __init emac_make_bootlist(void)
2973{
2974        struct device_node *np = NULL;
2975        int j, max, i = 0, k;
2976        int cell_indices[EMAC_BOOT_LIST_SIZE];
2977
2978        /* Collect EMACs */
2979        while((np = of_find_all_nodes(np)) != NULL) {
2980                const u32 *idx;
2981
2982                if (of_match_node(emac_match, np) == NULL)
2983                        continue;
2984                if (of_get_property(np, "unused", NULL))
2985                        continue;
2986                idx = of_get_property(np, "cell-index", NULL);
2987                if (idx == NULL)
2988                        continue;
2989                cell_indices[i] = *idx;
2990                emac_boot_list[i++] = of_node_get(np);
2991                if (i >= EMAC_BOOT_LIST_SIZE) {
2992                        of_node_put(np);
2993                        break;
2994                }
2995        }
2996        max = i;
2997
2998        /* Bubble sort them (doh, what a creative algorithm :-) */
2999        for (i = 0; max > 1 && (i < (max - 1)); i++)
3000                for (j = i; j < max; j++) {
3001                        if (cell_indices[i] > cell_indices[j]) {
3002                                np = emac_boot_list[i];
3003                                emac_boot_list[i] = emac_boot_list[j];
3004                                emac_boot_list[j] = np;
3005                                k = cell_indices[i];
3006                                cell_indices[i] = cell_indices[j];
3007                                cell_indices[j] = k;
3008                        }
3009                }
3010}
3011
3012static int __init emac_init(void)
3013{
3014        int rc;
3015
3016        printk(KERN_INFO DRV_DESC ", version " DRV_VERSION "\n");
3017
3018        /* Init debug stuff */
3019        emac_init_debug();
3020
3021        /* Build EMAC boot list */
3022        emac_make_bootlist();
3023
3024        /* Init submodules */
3025        rc = mal_init();
3026        if (rc)
3027                goto err;
3028        rc = zmii_init();
3029        if (rc)
3030                goto err_mal;
3031        rc = rgmii_init();
3032        if (rc)
3033                goto err_zmii;
3034        rc = tah_init();
3035        if (rc)
3036                goto err_rgmii;
3037        rc = platform_driver_register(&emac_driver);
3038        if (rc)
3039                goto err_tah;
3040
3041        return 0;
3042
3043 err_tah:
3044        tah_exit();
3045 err_rgmii:
3046        rgmii_exit();
3047 err_zmii:
3048        zmii_exit();
3049 err_mal:
3050        mal_exit();
3051 err:
3052        return rc;
3053}
3054
3055static void __exit emac_exit(void)
3056{
3057        int i;
3058
3059        platform_driver_unregister(&emac_driver);
3060
3061        tah_exit();
3062        rgmii_exit();
3063        zmii_exit();
3064        mal_exit();
3065        emac_fini_debug();
3066
3067        /* Destroy EMAC boot list */
3068        for (i = 0; i < EMAC_BOOT_LIST_SIZE; i++)
3069                if (emac_boot_list[i])
3070                        of_node_put(emac_boot_list[i]);
3071}
3072
3073module_init(emac_init);
3074module_exit(emac_exit);
3075