Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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