1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* Applied Micro X-Gene SoC Ethernet Driver 3 * 4 * Copyright (c) 2014, Applied Micro Circuits Corporation 5 * Authors: Iyappan Subramanian <isubramanian@apm.com> 6 * Ravi Patel <rapatel@apm.com> 7 * Keyur Chudgar <kchudgar@apm.com> 8 */ 9 10 #include <linux/gpio.h> 11 #include "xgene_enet_main.h" 12 #include "xgene_enet_hw.h" 13 #include "xgene_enet_sgmac.h" 14 #include "xgene_enet_xgmac.h" 15 16 #define RES_ENET_CSR 0 17 #define RES_RING_CSR 1 18 #define RES_RING_CMD 2 19 20 static void xgene_enet_init_bufpool(struct xgene_enet_desc_ring *buf_pool) 21 { 22 struct xgene_enet_raw_desc16 *raw_desc; 23 int i; 24 25 if (!buf_pool) 26 return; 27 28 for (i = 0; i < buf_pool->slots; i++) { 29 raw_desc = &buf_pool->raw_desc16[i]; 30 31 /* Hardware expects descriptor in little endian format */ 32 raw_desc->m0 = cpu_to_le64(i | 33 SET_VAL(FPQNUM, buf_pool->dst_ring_num) | 34 SET_VAL(STASH, 3)); 35 } 36 } 37 38 static u16 xgene_enet_get_data_len(u64 bufdatalen) 39 { 40 u16 hw_len, mask; 41 42 hw_len = GET_VAL(BUFDATALEN, bufdatalen); 43 44 if (unlikely(hw_len == 0x7800)) { 45 return 0; 46 } else if (!(hw_len & BIT(14))) { 47 mask = GENMASK(13, 0); 48 return (hw_len & mask) ? (hw_len & mask) : SIZE_16K; 49 } else if (!(hw_len & GENMASK(13, 12))) { 50 mask = GENMASK(11, 0); 51 return (hw_len & mask) ? (hw_len & mask) : SIZE_4K; 52 } else { 53 mask = GENMASK(11, 0); 54 return (hw_len & mask) ? (hw_len & mask) : SIZE_2K; 55 } 56 } 57 58 static u16 xgene_enet_set_data_len(u32 size) 59 { 60 u16 hw_len; 61 62 hw_len = (size == SIZE_4K) ? BIT(14) : 0; 63 64 return hw_len; 65 } 66 67 static int xgene_enet_refill_pagepool(struct xgene_enet_desc_ring *buf_pool, 68 u32 nbuf) 69 { 70 struct xgene_enet_raw_desc16 *raw_desc; 71 struct xgene_enet_pdata *pdata; 72 struct net_device *ndev; 73 dma_addr_t dma_addr; 74 struct device *dev; 75 struct page *page; 76 u32 slots, tail; 77 u16 hw_len; 78 int i; 79 80 if (unlikely(!buf_pool)) 81 return 0; 82 83 ndev = buf_pool->ndev; 84 pdata = netdev_priv(ndev); 85 dev = ndev_to_dev(ndev); 86 slots = buf_pool->slots - 1; 87 tail = buf_pool->tail; 88 89 for (i = 0; i < nbuf; i++) { 90 raw_desc = &buf_pool->raw_desc16[tail]; 91 92 page = dev_alloc_page(); 93 if (unlikely(!page)) 94 return -ENOMEM; 95 96 dma_addr = dma_map_page(dev, page, 0, 97 PAGE_SIZE, DMA_FROM_DEVICE); 98 if (unlikely(dma_mapping_error(dev, dma_addr))) { 99 put_page(page); 100 return -ENOMEM; 101 } 102 103 hw_len = xgene_enet_set_data_len(PAGE_SIZE); 104 raw_desc->m1 = cpu_to_le64(SET_VAL(DATAADDR, dma_addr) | 105 SET_VAL(BUFDATALEN, hw_len) | 106 SET_BIT(COHERENT)); 107 108 buf_pool->frag_page[tail] = page; 109 tail = (tail + 1) & slots; 110 } 111 112 pdata->ring_ops->wr_cmd(buf_pool, nbuf); 113 buf_pool->tail = tail; 114 115 return 0; 116 } 117 118 static int xgene_enet_refill_bufpool(struct xgene_enet_desc_ring *buf_pool, 119 u32 nbuf) 120 { 121 struct sk_buff *skb; 122 struct xgene_enet_raw_desc16 *raw_desc; 123 struct xgene_enet_pdata *pdata; 124 struct net_device *ndev; 125 struct device *dev; 126 dma_addr_t dma_addr; 127 u32 tail = buf_pool->tail; 128 u32 slots = buf_pool->slots - 1; 129 u16 bufdatalen, len; 130 int i; 131 132 ndev = buf_pool->ndev; 133 dev = ndev_to_dev(buf_pool->ndev); 134 pdata = netdev_priv(ndev); 135 136 bufdatalen = BUF_LEN_CODE_2K | (SKB_BUFFER_SIZE & GENMASK(11, 0)); 137 len = XGENE_ENET_STD_MTU; 138 139 for (i = 0; i < nbuf; i++) { 140 raw_desc = &buf_pool->raw_desc16[tail]; 141 142 skb = netdev_alloc_skb_ip_align(ndev, len); 143 if (unlikely(!skb)) 144 return -ENOMEM; 145 146 dma_addr = dma_map_single(dev, skb->data, len, DMA_FROM_DEVICE); 147 if (dma_mapping_error(dev, dma_addr)) { 148 netdev_err(ndev, "DMA mapping error\n"); 149 dev_kfree_skb_any(skb); 150 return -EINVAL; 151 } 152 153 buf_pool->rx_skb[tail] = skb; 154 155 raw_desc->m1 = cpu_to_le64(SET_VAL(DATAADDR, dma_addr) | 156 SET_VAL(BUFDATALEN, bufdatalen) | 157 SET_BIT(COHERENT)); 158 tail = (tail + 1) & slots; 159 } 160 161 pdata->ring_ops->wr_cmd(buf_pool, nbuf); 162 buf_pool->tail = tail; 163 164 return 0; 165 } 166 167 static u8 xgene_enet_hdr_len(const void *data) 168 { 169 const struct ethhdr *eth = data; 170 171 return (eth->h_proto == htons(ETH_P_8021Q)) ? VLAN_ETH_HLEN : ETH_HLEN; 172 } 173 174 static void xgene_enet_delete_bufpool(struct xgene_enet_desc_ring *buf_pool) 175 { 176 struct device *dev = ndev_to_dev(buf_pool->ndev); 177 struct xgene_enet_raw_desc16 *raw_desc; 178 dma_addr_t dma_addr; 179 int i; 180 181 /* Free up the buffers held by hardware */ 182 for (i = 0; i < buf_pool->slots; i++) { 183 if (buf_pool->rx_skb[i]) { 184 dev_kfree_skb_any(buf_pool->rx_skb[i]); 185 186 raw_desc = &buf_pool->raw_desc16[i]; 187 dma_addr = GET_VAL(DATAADDR, le64_to_cpu(raw_desc->m1)); 188 dma_unmap_single(dev, dma_addr, XGENE_ENET_MAX_MTU, 189 DMA_FROM_DEVICE); 190 } 191 } 192 } 193 194 static void xgene_enet_delete_pagepool(struct xgene_enet_desc_ring *buf_pool) 195 { 196 struct device *dev = ndev_to_dev(buf_pool->ndev); 197 dma_addr_t dma_addr; 198 struct page *page; 199 int i; 200 201 /* Free up the buffers held by hardware */ 202 for (i = 0; i < buf_pool->slots; i++) { 203 page = buf_pool->frag_page[i]; 204 if (page) { 205 dma_addr = buf_pool->frag_dma_addr[i]; 206 dma_unmap_page(dev, dma_addr, PAGE_SIZE, 207 DMA_FROM_DEVICE); 208 put_page(page); 209 } 210 } 211 } 212 213 static irqreturn_t xgene_enet_rx_irq(const int irq, void *data) 214 { 215 struct xgene_enet_desc_ring *rx_ring = data; 216 217 if (napi_schedule_prep(&rx_ring->napi)) { 218 disable_irq_nosync(irq); 219 __napi_schedule(&rx_ring->napi); 220 } 221 222 return IRQ_HANDLED; 223 } 224 225 static int xgene_enet_tx_completion(struct xgene_enet_desc_ring *cp_ring, 226 struct xgene_enet_raw_desc *raw_desc) 227 { 228 struct xgene_enet_pdata *pdata = netdev_priv(cp_ring->ndev); 229 struct sk_buff *skb; 230 struct device *dev; 231 skb_frag_t *frag; 232 dma_addr_t *frag_dma_addr; 233 u16 skb_index; 234 u8 mss_index; 235 u8 status; 236 int i; 237 238 skb_index = GET_VAL(USERINFO, le64_to_cpu(raw_desc->m0)); 239 skb = cp_ring->cp_skb[skb_index]; 240 frag_dma_addr = &cp_ring->frag_dma_addr[skb_index * MAX_SKB_FRAGS]; 241 242 dev = ndev_to_dev(cp_ring->ndev); 243 dma_unmap_single(dev, GET_VAL(DATAADDR, le64_to_cpu(raw_desc->m1)), 244 skb_headlen(skb), 245 DMA_TO_DEVICE); 246 247 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { 248 frag = &skb_shinfo(skb)->frags[i]; 249 dma_unmap_page(dev, frag_dma_addr[i], skb_frag_size(frag), 250 DMA_TO_DEVICE); 251 } 252 253 if (GET_BIT(ET, le64_to_cpu(raw_desc->m3))) { 254 mss_index = GET_VAL(MSS, le64_to_cpu(raw_desc->m3)); 255 spin_lock(&pdata->mss_lock); 256 pdata->mss_refcnt[mss_index]--; 257 spin_unlock(&pdata->mss_lock); 258 } 259 260 /* Checking for error */ 261 status = GET_VAL(LERR, le64_to_cpu(raw_desc->m0)); 262 if (unlikely(status > 2)) { 263 cp_ring->tx_dropped++; 264 cp_ring->tx_errors++; 265 } 266 267 if (likely(skb)) { 268 dev_kfree_skb_any(skb); 269 } else { 270 netdev_err(cp_ring->ndev, "completion skb is NULL\n"); 271 } 272 273 return 0; 274 } 275 276 static int xgene_enet_setup_mss(struct net_device *ndev, u32 mss) 277 { 278 struct xgene_enet_pdata *pdata = netdev_priv(ndev); 279 int mss_index = -EBUSY; 280 int i; 281 282 spin_lock(&pdata->mss_lock); 283 284 /* Reuse the slot if MSS matches */ 285 for (i = 0; mss_index < 0 && i < NUM_MSS_REG; i++) { 286 if (pdata->mss[i] == mss) { 287 pdata->mss_refcnt[i]++; 288 mss_index = i; 289 } 290 } 291 292 /* Overwrite the slot with ref_count = 0 */ 293 for (i = 0; mss_index < 0 && i < NUM_MSS_REG; i++) { 294 if (!pdata->mss_refcnt[i]) { 295 pdata->mss_refcnt[i]++; 296 pdata->mac_ops->set_mss(pdata, mss, i); 297 pdata->mss[i] = mss; 298 mss_index = i; 299 } 300 } 301 302 spin_unlock(&pdata->mss_lock); 303 304 return mss_index; 305 } 306 307 static int xgene_enet_work_msg(struct sk_buff *skb, u64 *hopinfo) 308 { 309 struct net_device *ndev = skb->dev; 310 struct iphdr *iph; 311 u8 l3hlen = 0, l4hlen = 0; 312 u8 ethhdr, proto = 0, csum_enable = 0; 313 u32 hdr_len, mss = 0; 314 u32 i, len, nr_frags; 315 int mss_index; 316 317 ethhdr = xgene_enet_hdr_len(skb->data); 318 319 if (unlikely(skb->protocol != htons(ETH_P_IP)) && 320 unlikely(skb->protocol != htons(ETH_P_8021Q))) 321 goto out; 322 323 if (unlikely(!(skb->dev->features & NETIF_F_IP_CSUM))) 324 goto out; 325 326 iph = ip_hdr(skb); 327 if (unlikely(ip_is_fragment(iph))) 328 goto out; 329 330 if (likely(iph->protocol == IPPROTO_TCP)) { 331 l4hlen = tcp_hdrlen(skb) >> 2; 332 csum_enable = 1; 333 proto = TSO_IPPROTO_TCP; 334 if (ndev->features & NETIF_F_TSO) { 335 hdr_len = ethhdr + ip_hdrlen(skb) + tcp_hdrlen(skb); 336 mss = skb_shinfo(skb)->gso_size; 337 338 if (skb_is_nonlinear(skb)) { 339 len = skb_headlen(skb); 340 nr_frags = skb_shinfo(skb)->nr_frags; 341 342 for (i = 0; i < 2 && i < nr_frags; i++) 343 len += skb_frag_size( 344 &skb_shinfo(skb)->frags[i]); 345 346 /* HW requires header must reside in 3 buffer */ 347 if (unlikely(hdr_len > len)) { 348 if (skb_linearize(skb)) 349 return 0; 350 } 351 } 352 353 if (!mss || ((skb->len - hdr_len) <= mss)) 354 goto out; 355 356 mss_index = xgene_enet_setup_mss(ndev, mss); 357 if (unlikely(mss_index < 0)) 358 return -EBUSY; 359 360 *hopinfo |= SET_BIT(ET) | SET_VAL(MSS, mss_index); 361 } 362 } else if (iph->protocol == IPPROTO_UDP) { 363 l4hlen = UDP_HDR_SIZE; 364 csum_enable = 1; 365 } 366 out: 367 l3hlen = ip_hdrlen(skb) >> 2; 368 *hopinfo |= SET_VAL(TCPHDR, l4hlen) | 369 SET_VAL(IPHDR, l3hlen) | 370 SET_VAL(ETHHDR, ethhdr) | 371 SET_VAL(EC, csum_enable) | 372 SET_VAL(IS, proto) | 373 SET_BIT(IC) | 374 SET_BIT(TYPE_ETH_WORK_MESSAGE); 375 376 return 0; 377 } 378 379 static u16 xgene_enet_encode_len(u16 len) 380 { 381 return (len == BUFLEN_16K) ? 0 : len; 382 } 383 384 static void xgene_set_addr_len(__le64 *desc, u32 idx, dma_addr_t addr, u32 len) 385 { 386 desc[idx ^ 1] = cpu_to_le64(SET_VAL(DATAADDR, addr) | 387 SET_VAL(BUFDATALEN, len)); 388 } 389 390 static __le64 *xgene_enet_get_exp_bufs(struct xgene_enet_desc_ring *ring) 391 { 392 __le64 *exp_bufs; 393 394 exp_bufs = &ring->exp_bufs[ring->exp_buf_tail * MAX_EXP_BUFFS]; 395 memset(exp_bufs, 0, sizeof(__le64) * MAX_EXP_BUFFS); 396 ring->exp_buf_tail = (ring->exp_buf_tail + 1) & ((ring->slots / 2) - 1); 397 398 return exp_bufs; 399 } 400 401 static dma_addr_t *xgene_get_frag_dma_array(struct xgene_enet_desc_ring *ring) 402 { 403 return &ring->cp_ring->frag_dma_addr[ring->tail * MAX_SKB_FRAGS]; 404 } 405 406 static int xgene_enet_setup_tx_desc(struct xgene_enet_desc_ring *tx_ring, 407 struct sk_buff *skb) 408 { 409 struct device *dev = ndev_to_dev(tx_ring->ndev); 410 struct xgene_enet_pdata *pdata = netdev_priv(tx_ring->ndev); 411 struct xgene_enet_raw_desc *raw_desc; 412 __le64 *exp_desc = NULL, *exp_bufs = NULL; 413 dma_addr_t dma_addr, pbuf_addr, *frag_dma_addr; 414 skb_frag_t *frag; 415 u16 tail = tx_ring->tail; 416 u64 hopinfo = 0; 417 u32 len, hw_len; 418 u8 ll = 0, nv = 0, idx = 0; 419 bool split = false; 420 u32 size, offset, ell_bytes = 0; 421 u32 i, fidx, nr_frags, count = 1; 422 int ret; 423 424 raw_desc = &tx_ring->raw_desc[tail]; 425 tail = (tail + 1) & (tx_ring->slots - 1); 426 memset(raw_desc, 0, sizeof(struct xgene_enet_raw_desc)); 427 428 ret = xgene_enet_work_msg(skb, &hopinfo); 429 if (ret) 430 return ret; 431 432 raw_desc->m3 = cpu_to_le64(SET_VAL(HENQNUM, tx_ring->dst_ring_num) | 433 hopinfo); 434 435 len = skb_headlen(skb); 436 hw_len = xgene_enet_encode_len(len); 437 438 dma_addr = dma_map_single(dev, skb->data, len, DMA_TO_DEVICE); 439 if (dma_mapping_error(dev, dma_addr)) { 440 netdev_err(tx_ring->ndev, "DMA mapping error\n"); 441 return -EINVAL; 442 } 443 444 /* Hardware expects descriptor in little endian format */ 445 raw_desc->m1 = cpu_to_le64(SET_VAL(DATAADDR, dma_addr) | 446 SET_VAL(BUFDATALEN, hw_len) | 447 SET_BIT(COHERENT)); 448 449 if (!skb_is_nonlinear(skb)) 450 goto out; 451 452 /* scatter gather */ 453 nv = 1; 454 exp_desc = (void *)&tx_ring->raw_desc[tail]; 455 tail = (tail + 1) & (tx_ring->slots - 1); 456 memset(exp_desc, 0, sizeof(struct xgene_enet_raw_desc)); 457 458 nr_frags = skb_shinfo(skb)->nr_frags; 459 for (i = nr_frags; i < 4 ; i++) 460 exp_desc[i ^ 1] = cpu_to_le64(LAST_BUFFER); 461 462 frag_dma_addr = xgene_get_frag_dma_array(tx_ring); 463 464 for (i = 0, fidx = 0; split || (fidx < nr_frags); i++) { 465 if (!split) { 466 frag = &skb_shinfo(skb)->frags[fidx]; 467 size = skb_frag_size(frag); 468 offset = 0; 469 470 pbuf_addr = skb_frag_dma_map(dev, frag, 0, size, 471 DMA_TO_DEVICE); 472 if (dma_mapping_error(dev, pbuf_addr)) 473 return -EINVAL; 474 475 frag_dma_addr[fidx] = pbuf_addr; 476 fidx++; 477 478 if (size > BUFLEN_16K) 479 split = true; 480 } 481 482 if (size > BUFLEN_16K) { 483 len = BUFLEN_16K; 484 size -= BUFLEN_16K; 485 } else { 486 len = size; 487 split = false; 488 } 489 490 dma_addr = pbuf_addr + offset; 491 hw_len = xgene_enet_encode_len(len); 492 493 switch (i) { 494 case 0: 495 case 1: 496 case 2: 497 xgene_set_addr_len(exp_desc, i, dma_addr, hw_len); 498 break; 499 case 3: 500 if (split || (fidx != nr_frags)) { 501 exp_bufs = xgene_enet_get_exp_bufs(tx_ring); 502 xgene_set_addr_len(exp_bufs, idx, dma_addr, 503 hw_len); 504 idx++; 505 ell_bytes += len; 506 } else { 507 xgene_set_addr_len(exp_desc, i, dma_addr, 508 hw_len); 509 } 510 break; 511 default: 512 xgene_set_addr_len(exp_bufs, idx, dma_addr, hw_len); 513 idx++; 514 ell_bytes += len; 515 break; 516 } 517 518 if (split) 519 offset += BUFLEN_16K; 520 } 521 count++; 522 523 if (idx) { 524 ll = 1; 525 dma_addr = dma_map_single(dev, exp_bufs, 526 sizeof(u64) * MAX_EXP_BUFFS, 527 DMA_TO_DEVICE); 528 if (dma_mapping_error(dev, dma_addr)) { 529 dev_kfree_skb_any(skb); 530 return -EINVAL; 531 } 532 i = ell_bytes >> LL_BYTES_LSB_LEN; 533 exp_desc[2] = cpu_to_le64(SET_VAL(DATAADDR, dma_addr) | 534 SET_VAL(LL_BYTES_MSB, i) | 535 SET_VAL(LL_LEN, idx)); 536 raw_desc->m2 = cpu_to_le64(SET_VAL(LL_BYTES_LSB, ell_bytes)); 537 } 538 539 out: 540 raw_desc->m0 = cpu_to_le64(SET_VAL(LL, ll) | SET_VAL(NV, nv) | 541 SET_VAL(USERINFO, tx_ring->tail)); 542 tx_ring->cp_ring->cp_skb[tx_ring->tail] = skb; 543 pdata->tx_level[tx_ring->cp_ring->index] += count; 544 tx_ring->tail = tail; 545 546 return count; 547 } 548 549 static netdev_tx_t xgene_enet_start_xmit(struct sk_buff *skb, 550 struct net_device *ndev) 551 { 552 struct xgene_enet_pdata *pdata = netdev_priv(ndev); 553 struct xgene_enet_desc_ring *tx_ring; 554 int index = skb->queue_mapping; 555 u32 tx_level = pdata->tx_level[index]; 556 int count; 557 558 tx_ring = pdata->tx_ring[index]; 559 if (tx_level < pdata->txc_level[index]) 560 tx_level += ((typeof(pdata->tx_level[index]))~0U); 561 562 if ((tx_level - pdata->txc_level[index]) > pdata->tx_qcnt_hi) { 563 netif_stop_subqueue(ndev, index); 564 return NETDEV_TX_BUSY; 565 } 566 567 if (skb_padto(skb, XGENE_MIN_ENET_FRAME_SIZE)) 568 return NETDEV_TX_OK; 569 570 count = xgene_enet_setup_tx_desc(tx_ring, skb); 571 if (count == -EBUSY) 572 return NETDEV_TX_BUSY; 573 574 if (count <= 0) { 575 dev_kfree_skb_any(skb); 576 return NETDEV_TX_OK; 577 } 578 579 skb_tx_timestamp(skb); 580 581 tx_ring->tx_packets++; 582 tx_ring->tx_bytes += skb->len; 583 584 pdata->ring_ops->wr_cmd(tx_ring, count); 585 return NETDEV_TX_OK; 586 } 587 588 static void xgene_enet_rx_csum(struct sk_buff *skb) 589 { 590 struct net_device *ndev = skb->dev; 591 struct iphdr *iph = ip_hdr(skb); 592 593 if (!(ndev->features & NETIF_F_RXCSUM)) 594 return; 595 596 if (skb->protocol != htons(ETH_P_IP)) 597 return; 598 599 if (ip_is_fragment(iph)) 600 return; 601 602 if (iph->protocol != IPPROTO_TCP && iph->protocol != IPPROTO_UDP) 603 return; 604 605 skb->ip_summed = CHECKSUM_UNNECESSARY; 606 } 607 608 static void xgene_enet_free_pagepool(struct xgene_enet_desc_ring *buf_pool, 609 struct xgene_enet_raw_desc *raw_desc, 610 struct xgene_enet_raw_desc *exp_desc) 611 { 612 __le64 *desc = (void *)exp_desc; 613 dma_addr_t dma_addr; 614 struct device *dev; 615 struct page *page; 616 u16 slots, head; 617 u32 frag_size; 618 int i; 619 620 if (!buf_pool || !raw_desc || !exp_desc || 621 (!GET_VAL(NV, le64_to_cpu(raw_desc->m0)))) 622 return; 623 624 dev = ndev_to_dev(buf_pool->ndev); 625 slots = buf_pool->slots - 1; 626 head = buf_pool->head; 627 628 for (i = 0; i < 4; i++) { 629 frag_size = xgene_enet_get_data_len(le64_to_cpu(desc[i ^ 1])); 630 if (!frag_size) 631 break; 632 633 dma_addr = GET_VAL(DATAADDR, le64_to_cpu(desc[i ^ 1])); 634 dma_unmap_page(dev, dma_addr, PAGE_SIZE, DMA_FROM_DEVICE); 635 636 page = buf_pool->frag_page[head]; 637 put_page(page); 638 639 buf_pool->frag_page[head] = NULL; 640 head = (head + 1) & slots; 641 } 642 buf_pool->head = head; 643 } 644 645 /* Errata 10GE_10 and ENET_15 - Fix duplicated HW statistic counters */ 646 static bool xgene_enet_errata_10GE_10(struct sk_buff *skb, u32 len, u8 status) 647 { 648 if (status == INGRESS_CRC && 649 len >= (ETHER_STD_PACKET + 1) && 650 len <= (ETHER_STD_PACKET + 4) && 651 skb->protocol == htons(ETH_P_8021Q)) 652 return true; 653 654 return false; 655 } 656 657 /* Errata 10GE_8 and ENET_11 - allow packet with length <=64B */ 658 static bool xgene_enet_errata_10GE_8(struct sk_buff *skb, u32 len, u8 status) 659 { 660 if (status == INGRESS_PKT_LEN && len == ETHER_MIN_PACKET) { 661 if (ntohs(eth_hdr(skb)->h_proto) < 46) 662 return true; 663 } 664 665 return false; 666 } 667 668 static int xgene_enet_rx_frame(struct xgene_enet_desc_ring *rx_ring, 669 struct xgene_enet_raw_desc *raw_desc, 670 struct xgene_enet_raw_desc *exp_desc) 671 { 672 struct xgene_enet_desc_ring *buf_pool, *page_pool; 673 u32 datalen, frag_size, skb_index; 674 struct xgene_enet_pdata *pdata; 675 struct net_device *ndev; 676 dma_addr_t dma_addr; 677 struct sk_buff *skb; 678 struct device *dev; 679 struct page *page; 680 u16 slots, head; 681 int i, ret = 0; 682 __le64 *desc; 683 u8 status; 684 bool nv; 685 686 ndev = rx_ring->ndev; 687 pdata = netdev_priv(ndev); 688 dev = ndev_to_dev(rx_ring->ndev); 689 buf_pool = rx_ring->buf_pool; 690 page_pool = rx_ring->page_pool; 691 692 dma_unmap_single(dev, GET_VAL(DATAADDR, le64_to_cpu(raw_desc->m1)), 693 XGENE_ENET_STD_MTU, DMA_FROM_DEVICE); 694 skb_index = GET_VAL(USERINFO, le64_to_cpu(raw_desc->m0)); 695 skb = buf_pool->rx_skb[skb_index]; 696 buf_pool->rx_skb[skb_index] = NULL; 697 698 datalen = xgene_enet_get_data_len(le64_to_cpu(raw_desc->m1)); 699 skb_put(skb, datalen); 700 prefetch(skb->data - NET_IP_ALIGN); 701 skb->protocol = eth_type_trans(skb, ndev); 702 703 /* checking for error */ 704 status = (GET_VAL(ELERR, le64_to_cpu(raw_desc->m0)) << LERR_LEN) | 705 GET_VAL(LERR, le64_to_cpu(raw_desc->m0)); 706 if (unlikely(status)) { 707 if (xgene_enet_errata_10GE_8(skb, datalen, status)) { 708 pdata->false_rflr++; 709 } else if (xgene_enet_errata_10GE_10(skb, datalen, status)) { 710 pdata->vlan_rjbr++; 711 } else { 712 dev_kfree_skb_any(skb); 713 xgene_enet_free_pagepool(page_pool, raw_desc, exp_desc); 714 xgene_enet_parse_error(rx_ring, status); 715 rx_ring->rx_dropped++; 716 goto out; 717 } 718 } 719 720 nv = GET_VAL(NV, le64_to_cpu(raw_desc->m0)); 721 if (!nv) { 722 /* strip off CRC as HW isn't doing this */ 723 datalen -= 4; 724 goto skip_jumbo; 725 } 726 727 slots = page_pool->slots - 1; 728 head = page_pool->head; 729 desc = (void *)exp_desc; 730 731 for (i = 0; i < 4; i++) { 732 frag_size = xgene_enet_get_data_len(le64_to_cpu(desc[i ^ 1])); 733 if (!frag_size) 734 break; 735 736 dma_addr = GET_VAL(DATAADDR, le64_to_cpu(desc[i ^ 1])); 737 dma_unmap_page(dev, dma_addr, PAGE_SIZE, DMA_FROM_DEVICE); 738 739 page = page_pool->frag_page[head]; 740 skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, page, 0, 741 frag_size, PAGE_SIZE); 742 743 datalen += frag_size; 744 745 page_pool->frag_page[head] = NULL; 746 head = (head + 1) & slots; 747 } 748 749 page_pool->head = head; 750 rx_ring->npagepool -= skb_shinfo(skb)->nr_frags; 751 752 skip_jumbo: 753 skb_checksum_none_assert(skb); 754 xgene_enet_rx_csum(skb); 755 756 rx_ring->rx_packets++; 757 rx_ring->rx_bytes += datalen; 758 napi_gro_receive(&rx_ring->napi, skb); 759 760 out: 761 if (rx_ring->npagepool <= 0) { 762 ret = xgene_enet_refill_pagepool(page_pool, NUM_NXTBUFPOOL); 763 rx_ring->npagepool = NUM_NXTBUFPOOL; 764 if (ret) 765 return ret; 766 } 767 768 if (--rx_ring->nbufpool == 0) { 769 ret = xgene_enet_refill_bufpool(buf_pool, NUM_BUFPOOL); 770 rx_ring->nbufpool = NUM_BUFPOOL; 771 } 772 773 return ret; 774 } 775 776 static bool is_rx_desc(struct xgene_enet_raw_desc *raw_desc) 777 { 778 return GET_VAL(FPQNUM, le64_to_cpu(raw_desc->m0)) ? true : false; 779 } 780 781 static int xgene_enet_process_ring(struct xgene_enet_desc_ring *ring, 782 int budget) 783 { 784 struct net_device *ndev = ring->ndev; 785 struct xgene_enet_pdata *pdata = netdev_priv(ndev); 786 struct xgene_enet_raw_desc *raw_desc, *exp_desc; 787 u16 head = ring->head; 788 u16 slots = ring->slots - 1; 789 int ret, desc_count, count = 0, processed = 0; 790 bool is_completion; 791 792 do { 793 raw_desc = &ring->raw_desc[head]; 794 desc_count = 0; 795 is_completion = false; 796 exp_desc = NULL; 797 if (unlikely(xgene_enet_is_desc_slot_empty(raw_desc))) 798 break; 799 800 /* read fpqnum field after dataaddr field */ 801 dma_rmb(); 802 if (GET_BIT(NV, le64_to_cpu(raw_desc->m0))) { 803 head = (head + 1) & slots; 804 exp_desc = &ring->raw_desc[head]; 805 806 if (unlikely(xgene_enet_is_desc_slot_empty(exp_desc))) { 807 head = (head - 1) & slots; 808 break; 809 } 810 dma_rmb(); 811 count++; 812 desc_count++; 813 } 814 if (is_rx_desc(raw_desc)) { 815 ret = xgene_enet_rx_frame(ring, raw_desc, exp_desc); 816 } else { 817 ret = xgene_enet_tx_completion(ring, raw_desc); 818 is_completion = true; 819 } 820 xgene_enet_mark_desc_slot_empty(raw_desc); 821 if (exp_desc) 822 xgene_enet_mark_desc_slot_empty(exp_desc); 823 824 head = (head + 1) & slots; 825 count++; 826 desc_count++; 827 processed++; 828 if (is_completion) 829 pdata->txc_level[ring->index] += desc_count; 830 831 if (ret) 832 break; 833 } while (--budget); 834 835 if (likely(count)) { 836 pdata->ring_ops->wr_cmd(ring, -count); 837 ring->head = head; 838 839 if (__netif_subqueue_stopped(ndev, ring->index)) 840 netif_start_subqueue(ndev, ring->index); 841 } 842 843 return processed; 844 } 845 846 static int xgene_enet_napi(struct napi_struct *napi, const int budget) 847 { 848 struct xgene_enet_desc_ring *ring; 849 int processed; 850 851 ring = container_of(napi, struct xgene_enet_desc_ring, napi); 852 processed = xgene_enet_process_ring(ring, budget); 853 854 if (processed != budget) { 855 napi_complete_done(napi, processed); 856 enable_irq(ring->irq); 857 } 858 859 return processed; 860 } 861 862 static void xgene_enet_timeout(struct net_device *ndev) 863 { 864 struct xgene_enet_pdata *pdata = netdev_priv(ndev); 865 struct netdev_queue *txq; 866 int i; 867 868 pdata->mac_ops->reset(pdata); 869 870 for (i = 0; i < pdata->txq_cnt; i++) { 871 txq = netdev_get_tx_queue(ndev, i); 872 txq->trans_start = jiffies; 873 netif_tx_start_queue(txq); 874 } 875 } 876 877 static void xgene_enet_set_irq_name(struct net_device *ndev) 878 { 879 struct xgene_enet_pdata *pdata = netdev_priv(ndev); 880 struct xgene_enet_desc_ring *ring; 881 int i; 882 883 for (i = 0; i < pdata->rxq_cnt; i++) { 884 ring = pdata->rx_ring[i]; 885 if (!pdata->cq_cnt) { 886 snprintf(ring->irq_name, IRQ_ID_SIZE, "%s-rx-txc", 887 ndev->name); 888 } else { 889 snprintf(ring->irq_name, IRQ_ID_SIZE, "%s-rx-%d", 890 ndev->name, i); 891 } 892 } 893 894 for (i = 0; i < pdata->cq_cnt; i++) { 895 ring = pdata->tx_ring[i]->cp_ring; 896 snprintf(ring->irq_name, IRQ_ID_SIZE, "%s-txc-%d", 897 ndev->name, i); 898 } 899 } 900 901 static int xgene_enet_register_irq(struct net_device *ndev) 902 { 903 struct xgene_enet_pdata *pdata = netdev_priv(ndev); 904 struct device *dev = ndev_to_dev(ndev); 905 struct xgene_enet_desc_ring *ring; 906 int ret = 0, i; 907 908 xgene_enet_set_irq_name(ndev); 909 for (i = 0; i < pdata->rxq_cnt; i++) { 910 ring = pdata->rx_ring[i]; 911 irq_set_status_flags(ring->irq, IRQ_DISABLE_UNLAZY); 912 ret = devm_request_irq(dev, ring->irq, xgene_enet_rx_irq, 913 0, ring->irq_name, ring); 914 if (ret) { 915 netdev_err(ndev, "Failed to request irq %s\n", 916 ring->irq_name); 917 } 918 } 919 920 for (i = 0; i < pdata->cq_cnt; i++) { 921 ring = pdata->tx_ring[i]->cp_ring; 922 irq_set_status_flags(ring->irq, IRQ_DISABLE_UNLAZY); 923 ret = devm_request_irq(dev, ring->irq, xgene_enet_rx_irq, 924 0, ring->irq_name, ring); 925 if (ret) { 926 netdev_err(ndev, "Failed to request irq %s\n", 927 ring->irq_name); 928 } 929 } 930 931 return ret; 932 } 933 934 static void xgene_enet_free_irq(struct net_device *ndev) 935 { 936 struct xgene_enet_pdata *pdata; 937 struct xgene_enet_desc_ring *ring; 938 struct device *dev; 939 int i; 940 941 pdata = netdev_priv(ndev); 942 dev = ndev_to_dev(ndev); 943 944 for (i = 0; i < pdata->rxq_cnt; i++) { 945 ring = pdata->rx_ring[i]; 946 irq_clear_status_flags(ring->irq, IRQ_DISABLE_UNLAZY); 947 devm_free_irq(dev, ring->irq, ring); 948 } 949 950 for (i = 0; i < pdata->cq_cnt; i++) { 951 ring = pdata->tx_ring[i]->cp_ring; 952 irq_clear_status_flags(ring->irq, IRQ_DISABLE_UNLAZY); 953 devm_free_irq(dev, ring->irq, ring); 954 } 955 } 956 957 static void xgene_enet_napi_enable(struct xgene_enet_pdata *pdata) 958 { 959 struct napi_struct *napi; 960 int i; 961 962 for (i = 0; i < pdata->rxq_cnt; i++) { 963 napi = &pdata->rx_ring[i]->napi; 964 napi_enable(napi); 965 } 966 967 for (i = 0; i < pdata->cq_cnt; i++) { 968 napi = &pdata->tx_ring[i]->cp_ring->napi; 969 napi_enable(napi); 970 } 971 } 972 973 static void xgene_enet_napi_disable(struct xgene_enet_pdata *pdata) 974 { 975 struct napi_struct *napi; 976 int i; 977 978 for (i = 0; i < pdata->rxq_cnt; i++) { 979 napi = &pdata->rx_ring[i]->napi; 980 napi_disable(napi); 981 } 982 983 for (i = 0; i < pdata->cq_cnt; i++) { 984 napi = &pdata->tx_ring[i]->cp_ring->napi; 985 napi_disable(napi); 986 } 987 } 988 989 static int xgene_enet_open(struct net_device *ndev) 990 { 991 struct xgene_enet_pdata *pdata = netdev_priv(ndev); 992 const struct xgene_mac_ops *mac_ops = pdata->mac_ops; 993 int ret; 994 995 ret = netif_set_real_num_tx_queues(ndev, pdata->txq_cnt); 996 if (ret) 997 return ret; 998 999 ret = netif_set_real_num_rx_queues(ndev, pdata->rxq_cnt); 1000 if (ret) 1001 return ret; 1002 1003 xgene_enet_napi_enable(pdata); 1004 ret = xgene_enet_register_irq(ndev); 1005 if (ret) 1006 return ret; 1007 1008 if (ndev->phydev) { 1009 phy_start(ndev->phydev); 1010 } else { 1011 schedule_delayed_work(&pdata->link_work, PHY_POLL_LINK_OFF); 1012 netif_carrier_off(ndev); 1013 } 1014 1015 mac_ops->tx_enable(pdata); 1016 mac_ops->rx_enable(pdata); 1017 netif_tx_start_all_queues(ndev); 1018 1019 return ret; 1020 } 1021 1022 static int xgene_enet_close(struct net_device *ndev) 1023 { 1024 struct xgene_enet_pdata *pdata = netdev_priv(ndev); 1025 const struct xgene_mac_ops *mac_ops = pdata->mac_ops; 1026 int i; 1027 1028 netif_tx_stop_all_queues(ndev); 1029 mac_ops->tx_disable(pdata); 1030 mac_ops->rx_disable(pdata); 1031 1032 if (ndev->phydev) 1033 phy_stop(ndev->phydev); 1034 else 1035 cancel_delayed_work_sync(&pdata->link_work); 1036 1037 xgene_enet_free_irq(ndev); 1038 xgene_enet_napi_disable(pdata); 1039 for (i = 0; i < pdata->rxq_cnt; i++) 1040 xgene_enet_process_ring(pdata->rx_ring[i], -1); 1041 1042 return 0; 1043 } 1044 static void xgene_enet_delete_ring(struct xgene_enet_desc_ring *ring) 1045 { 1046 struct xgene_enet_pdata *pdata; 1047 struct device *dev; 1048 1049 pdata = netdev_priv(ring->ndev); 1050 dev = ndev_to_dev(ring->ndev); 1051 1052 pdata->ring_ops->clear(ring); 1053 dmam_free_coherent(dev, ring->size, ring->desc_addr, ring->dma); 1054 } 1055 1056 static void xgene_enet_delete_desc_rings(struct xgene_enet_pdata *pdata) 1057 { 1058 struct xgene_enet_desc_ring *buf_pool, *page_pool; 1059 struct xgene_enet_desc_ring *ring; 1060 int i; 1061 1062 for (i = 0; i < pdata->txq_cnt; i++) { 1063 ring = pdata->tx_ring[i]; 1064 if (ring) { 1065 xgene_enet_delete_ring(ring); 1066 pdata->port_ops->clear(pdata, ring); 1067 if (pdata->cq_cnt) 1068 xgene_enet_delete_ring(ring->cp_ring); 1069 pdata->tx_ring[i] = NULL; 1070 } 1071 1072 } 1073 1074 for (i = 0; i < pdata->rxq_cnt; i++) { 1075 ring = pdata->rx_ring[i]; 1076 if (ring) { 1077 page_pool = ring->page_pool; 1078 if (page_pool) { 1079 xgene_enet_delete_pagepool(page_pool); 1080 xgene_enet_delete_ring(page_pool); 1081 pdata->port_ops->clear(pdata, page_pool); 1082 } 1083 1084 buf_pool = ring->buf_pool; 1085 xgene_enet_delete_bufpool(buf_pool); 1086 xgene_enet_delete_ring(buf_pool); 1087 pdata->port_ops->clear(pdata, buf_pool); 1088 1089 xgene_enet_delete_ring(ring); 1090 pdata->rx_ring[i] = NULL; 1091 } 1092 1093 } 1094 } 1095 1096 static int xgene_enet_get_ring_size(struct device *dev, 1097 enum xgene_enet_ring_cfgsize cfgsize) 1098 { 1099 int size = -EINVAL; 1100 1101 switch (cfgsize) { 1102 case RING_CFGSIZE_512B: 1103 size = 0x200; 1104 break; 1105 case RING_CFGSIZE_2KB: 1106 size = 0x800; 1107 break; 1108 case RING_CFGSIZE_16KB: 1109 size = 0x4000; 1110 break; 1111 case RING_CFGSIZE_64KB: 1112 size = 0x10000; 1113 break; 1114 case RING_CFGSIZE_512KB: 1115 size = 0x80000; 1116 break; 1117 default: 1118 dev_err(dev, "Unsupported cfg ring size %d\n", cfgsize); 1119 break; 1120 } 1121 1122 return size; 1123 } 1124 1125 static void xgene_enet_free_desc_ring(struct xgene_enet_desc_ring *ring) 1126 { 1127 struct xgene_enet_pdata *pdata; 1128 struct device *dev; 1129 1130 if (!ring) 1131 return; 1132 1133 dev = ndev_to_dev(ring->ndev); 1134 pdata = netdev_priv(ring->ndev); 1135 1136 if (ring->desc_addr) { 1137 pdata->ring_ops->clear(ring); 1138 dmam_free_coherent(dev, ring->size, ring->desc_addr, ring->dma); 1139 } 1140 devm_kfree(dev, ring); 1141 } 1142 1143 static void xgene_enet_free_desc_rings(struct xgene_enet_pdata *pdata) 1144 { 1145 struct xgene_enet_desc_ring *page_pool; 1146 struct device *dev = &pdata->pdev->dev; 1147 struct xgene_enet_desc_ring *ring; 1148 void *p; 1149 int i; 1150 1151 for (i = 0; i < pdata->txq_cnt; i++) { 1152 ring = pdata->tx_ring[i]; 1153 if (ring) { 1154 if (ring->cp_ring && ring->cp_ring->cp_skb) 1155 devm_kfree(dev, ring->cp_ring->cp_skb); 1156 1157 if (ring->cp_ring && pdata->cq_cnt) 1158 xgene_enet_free_desc_ring(ring->cp_ring); 1159 1160 xgene_enet_free_desc_ring(ring); 1161 } 1162 1163 } 1164 1165 for (i = 0; i < pdata->rxq_cnt; i++) { 1166 ring = pdata->rx_ring[i]; 1167 if (ring) { 1168 if (ring->buf_pool) { 1169 if (ring->buf_pool->rx_skb) 1170 devm_kfree(dev, ring->buf_pool->rx_skb); 1171 1172 xgene_enet_free_desc_ring(ring->buf_pool); 1173 } 1174 1175 page_pool = ring->page_pool; 1176 if (page_pool) { 1177 p = page_pool->frag_page; 1178 if (p) 1179 devm_kfree(dev, p); 1180 1181 p = page_pool->frag_dma_addr; 1182 if (p) 1183 devm_kfree(dev, p); 1184 } 1185 1186 xgene_enet_free_desc_ring(ring); 1187 } 1188 } 1189 } 1190 1191 static bool is_irq_mbox_required(struct xgene_enet_pdata *pdata, 1192 struct xgene_enet_desc_ring *ring) 1193 { 1194 if ((pdata->enet_id == XGENE_ENET2) && 1195 (xgene_enet_ring_owner(ring->id) == RING_OWNER_CPU)) { 1196 return true; 1197 } 1198 1199 return false; 1200 } 1201 1202 static void __iomem *xgene_enet_ring_cmd_base(struct xgene_enet_pdata *pdata, 1203 struct xgene_enet_desc_ring *ring) 1204 { 1205 u8 num_ring_id_shift = pdata->ring_ops->num_ring_id_shift; 1206 1207 return pdata->ring_cmd_addr + (ring->num << num_ring_id_shift); 1208 } 1209 1210 static struct xgene_enet_desc_ring *xgene_enet_create_desc_ring( 1211 struct net_device *ndev, u32 ring_num, 1212 enum xgene_enet_ring_cfgsize cfgsize, u32 ring_id) 1213 { 1214 struct xgene_enet_pdata *pdata = netdev_priv(ndev); 1215 struct device *dev = ndev_to_dev(ndev); 1216 struct xgene_enet_desc_ring *ring; 1217 void *irq_mbox_addr; 1218 int size; 1219 1220 size = xgene_enet_get_ring_size(dev, cfgsize); 1221 if (size < 0) 1222 return NULL; 1223 1224 ring = devm_kzalloc(dev, sizeof(struct xgene_enet_desc_ring), 1225 GFP_KERNEL); 1226 if (!ring) 1227 return NULL; 1228 1229 ring->ndev = ndev; 1230 ring->num = ring_num; 1231 ring->cfgsize = cfgsize; 1232 ring->id = ring_id; 1233 1234 ring->desc_addr = dmam_alloc_coherent(dev, size, &ring->dma, 1235 GFP_KERNEL | __GFP_ZERO); 1236 if (!ring->desc_addr) { 1237 devm_kfree(dev, ring); 1238 return NULL; 1239 } 1240 ring->size = size; 1241 1242 if (is_irq_mbox_required(pdata, ring)) { 1243 irq_mbox_addr = dmam_alloc_coherent(dev, INTR_MBOX_SIZE, 1244 &ring->irq_mbox_dma, 1245 GFP_KERNEL | __GFP_ZERO); 1246 if (!irq_mbox_addr) { 1247 dmam_free_coherent(dev, size, ring->desc_addr, 1248 ring->dma); 1249 devm_kfree(dev, ring); 1250 return NULL; 1251 } 1252 ring->irq_mbox_addr = irq_mbox_addr; 1253 } 1254 1255 ring->cmd_base = xgene_enet_ring_cmd_base(pdata, ring); 1256 ring->cmd = ring->cmd_base + INC_DEC_CMD_ADDR; 1257 ring = pdata->ring_ops->setup(ring); 1258 netdev_dbg(ndev, "ring info: num=%d size=%d id=%d slots=%d\n", 1259 ring->num, ring->size, ring->id, ring->slots); 1260 1261 return ring; 1262 } 1263 1264 static u16 xgene_enet_get_ring_id(enum xgene_ring_owner owner, u8 bufnum) 1265 { 1266 return (owner << 6) | (bufnum & GENMASK(5, 0)); 1267 } 1268 1269 static enum xgene_ring_owner xgene_derive_ring_owner(struct xgene_enet_pdata *p) 1270 { 1271 enum xgene_ring_owner owner; 1272 1273 if (p->enet_id == XGENE_ENET1) { 1274 switch (p->phy_mode) { 1275 case PHY_INTERFACE_MODE_SGMII: 1276 owner = RING_OWNER_ETH0; 1277 break; 1278 default: 1279 owner = (!p->port_id) ? RING_OWNER_ETH0 : 1280 RING_OWNER_ETH1; 1281 break; 1282 } 1283 } else { 1284 owner = (!p->port_id) ? RING_OWNER_ETH0 : RING_OWNER_ETH1; 1285 } 1286 1287 return owner; 1288 } 1289 1290 static u8 xgene_start_cpu_bufnum(struct xgene_enet_pdata *pdata) 1291 { 1292 struct device *dev = &pdata->pdev->dev; 1293 u32 cpu_bufnum; 1294 int ret; 1295 1296 ret = device_property_read_u32(dev, "channel", &cpu_bufnum); 1297 1298 return (!ret) ? cpu_bufnum : pdata->cpu_bufnum; 1299 } 1300 1301 static int xgene_enet_create_desc_rings(struct net_device *ndev) 1302 { 1303 struct xgene_enet_desc_ring *rx_ring, *tx_ring, *cp_ring; 1304 struct xgene_enet_pdata *pdata = netdev_priv(ndev); 1305 struct xgene_enet_desc_ring *page_pool = NULL; 1306 struct xgene_enet_desc_ring *buf_pool = NULL; 1307 struct device *dev = ndev_to_dev(ndev); 1308 u8 eth_bufnum = pdata->eth_bufnum; 1309 u8 bp_bufnum = pdata->bp_bufnum; 1310 u16 ring_num = pdata->ring_num; 1311 enum xgene_ring_owner owner; 1312 dma_addr_t dma_exp_bufs; 1313 u16 ring_id, slots; 1314 __le64 *exp_bufs; 1315 int i, ret, size; 1316 u8 cpu_bufnum; 1317 1318 cpu_bufnum = xgene_start_cpu_bufnum(pdata); 1319 1320 for (i = 0; i < pdata->rxq_cnt; i++) { 1321 /* allocate rx descriptor ring */ 1322 owner = xgene_derive_ring_owner(pdata); 1323 ring_id = xgene_enet_get_ring_id(RING_OWNER_CPU, cpu_bufnum++); 1324 rx_ring = xgene_enet_create_desc_ring(ndev, ring_num++, 1325 RING_CFGSIZE_16KB, 1326 ring_id); 1327 if (!rx_ring) { 1328 ret = -ENOMEM; 1329 goto err; 1330 } 1331 1332 /* allocate buffer pool for receiving packets */ 1333 owner = xgene_derive_ring_owner(pdata); 1334 ring_id = xgene_enet_get_ring_id(owner, bp_bufnum++); 1335 buf_pool = xgene_enet_create_desc_ring(ndev, ring_num++, 1336 RING_CFGSIZE_16KB, 1337 ring_id); 1338 if (!buf_pool) { 1339 ret = -ENOMEM; 1340 goto err; 1341 } 1342 1343 rx_ring->nbufpool = NUM_BUFPOOL; 1344 rx_ring->npagepool = NUM_NXTBUFPOOL; 1345 rx_ring->irq = pdata->irqs[i]; 1346 buf_pool->rx_skb = devm_kcalloc(dev, buf_pool->slots, 1347 sizeof(struct sk_buff *), 1348 GFP_KERNEL); 1349 if (!buf_pool->rx_skb) { 1350 ret = -ENOMEM; 1351 goto err; 1352 } 1353 1354 buf_pool->dst_ring_num = xgene_enet_dst_ring_num(buf_pool); 1355 rx_ring->buf_pool = buf_pool; 1356 pdata->rx_ring[i] = rx_ring; 1357 1358 if ((pdata->enet_id == XGENE_ENET1 && pdata->rxq_cnt > 4) || 1359 (pdata->enet_id == XGENE_ENET2 && pdata->rxq_cnt > 16)) { 1360 break; 1361 } 1362 1363 /* allocate next buffer pool for jumbo packets */ 1364 owner = xgene_derive_ring_owner(pdata); 1365 ring_id = xgene_enet_get_ring_id(owner, bp_bufnum++); 1366 page_pool = xgene_enet_create_desc_ring(ndev, ring_num++, 1367 RING_CFGSIZE_16KB, 1368 ring_id); 1369 if (!page_pool) { 1370 ret = -ENOMEM; 1371 goto err; 1372 } 1373 1374 slots = page_pool->slots; 1375 page_pool->frag_page = devm_kcalloc(dev, slots, 1376 sizeof(struct page *), 1377 GFP_KERNEL); 1378 if (!page_pool->frag_page) { 1379 ret = -ENOMEM; 1380 goto err; 1381 } 1382 1383 page_pool->frag_dma_addr = devm_kcalloc(dev, slots, 1384 sizeof(dma_addr_t), 1385 GFP_KERNEL); 1386 if (!page_pool->frag_dma_addr) { 1387 ret = -ENOMEM; 1388 goto err; 1389 } 1390 1391 page_pool->dst_ring_num = xgene_enet_dst_ring_num(page_pool); 1392 rx_ring->page_pool = page_pool; 1393 } 1394 1395 for (i = 0; i < pdata->txq_cnt; i++) { 1396 /* allocate tx descriptor ring */ 1397 owner = xgene_derive_ring_owner(pdata); 1398 ring_id = xgene_enet_get_ring_id(owner, eth_bufnum++); 1399 tx_ring = xgene_enet_create_desc_ring(ndev, ring_num++, 1400 RING_CFGSIZE_16KB, 1401 ring_id); 1402 if (!tx_ring) { 1403 ret = -ENOMEM; 1404 goto err; 1405 } 1406 1407 size = (tx_ring->slots / 2) * sizeof(__le64) * MAX_EXP_BUFFS; 1408 exp_bufs = dmam_alloc_coherent(dev, size, &dma_exp_bufs, 1409 GFP_KERNEL | __GFP_ZERO); 1410 if (!exp_bufs) { 1411 ret = -ENOMEM; 1412 goto err; 1413 } 1414 tx_ring->exp_bufs = exp_bufs; 1415 1416 pdata->tx_ring[i] = tx_ring; 1417 1418 if (!pdata->cq_cnt) { 1419 cp_ring = pdata->rx_ring[i]; 1420 } else { 1421 /* allocate tx completion descriptor ring */ 1422 ring_id = xgene_enet_get_ring_id(RING_OWNER_CPU, 1423 cpu_bufnum++); 1424 cp_ring = xgene_enet_create_desc_ring(ndev, ring_num++, 1425 RING_CFGSIZE_16KB, 1426 ring_id); 1427 if (!cp_ring) { 1428 ret = -ENOMEM; 1429 goto err; 1430 } 1431 1432 cp_ring->irq = pdata->irqs[pdata->rxq_cnt + i]; 1433 cp_ring->index = i; 1434 } 1435 1436 cp_ring->cp_skb = devm_kcalloc(dev, tx_ring->slots, 1437 sizeof(struct sk_buff *), 1438 GFP_KERNEL); 1439 if (!cp_ring->cp_skb) { 1440 ret = -ENOMEM; 1441 goto err; 1442 } 1443 1444 size = sizeof(dma_addr_t) * MAX_SKB_FRAGS; 1445 cp_ring->frag_dma_addr = devm_kcalloc(dev, tx_ring->slots, 1446 size, GFP_KERNEL); 1447 if (!cp_ring->frag_dma_addr) { 1448 devm_kfree(dev, cp_ring->cp_skb); 1449 ret = -ENOMEM; 1450 goto err; 1451 } 1452 1453 tx_ring->cp_ring = cp_ring; 1454 tx_ring->dst_ring_num = xgene_enet_dst_ring_num(cp_ring); 1455 } 1456 1457 if (pdata->ring_ops->coalesce) 1458 pdata->ring_ops->coalesce(pdata->tx_ring[0]); 1459 pdata->tx_qcnt_hi = pdata->tx_ring[0]->slots - 128; 1460 1461 return 0; 1462 1463 err: 1464 xgene_enet_free_desc_rings(pdata); 1465 return ret; 1466 } 1467 1468 static void xgene_enet_get_stats64( 1469 struct net_device *ndev, 1470 struct rtnl_link_stats64 *stats) 1471 { 1472 struct xgene_enet_pdata *pdata = netdev_priv(ndev); 1473 struct xgene_enet_desc_ring *ring; 1474 int i; 1475 1476 for (i = 0; i < pdata->txq_cnt; i++) { 1477 ring = pdata->tx_ring[i]; 1478 if (ring) { 1479 stats->tx_packets += ring->tx_packets; 1480 stats->tx_bytes += ring->tx_bytes; 1481 stats->tx_dropped += ring->tx_dropped; 1482 stats->tx_errors += ring->tx_errors; 1483 } 1484 } 1485 1486 for (i = 0; i < pdata->rxq_cnt; i++) { 1487 ring = pdata->rx_ring[i]; 1488 if (ring) { 1489 stats->rx_packets += ring->rx_packets; 1490 stats->rx_bytes += ring->rx_bytes; 1491 stats->rx_dropped += ring->rx_dropped; 1492 stats->rx_errors += ring->rx_errors + 1493 ring->rx_length_errors + 1494 ring->rx_crc_errors + 1495 ring->rx_frame_errors + 1496 ring->rx_fifo_errors; 1497 stats->rx_length_errors += ring->rx_length_errors; 1498 stats->rx_crc_errors += ring->rx_crc_errors; 1499 stats->rx_frame_errors += ring->rx_frame_errors; 1500 stats->rx_fifo_errors += ring->rx_fifo_errors; 1501 } 1502 } 1503 } 1504 1505 static int xgene_enet_set_mac_address(struct net_device *ndev, void *addr) 1506 { 1507 struct xgene_enet_pdata *pdata = netdev_priv(ndev); 1508 int ret; 1509 1510 ret = eth_mac_addr(ndev, addr); 1511 if (ret) 1512 return ret; 1513 pdata->mac_ops->set_mac_addr(pdata); 1514 1515 return ret; 1516 } 1517 1518 static int xgene_change_mtu(struct net_device *ndev, int new_mtu) 1519 { 1520 struct xgene_enet_pdata *pdata = netdev_priv(ndev); 1521 int frame_size; 1522 1523 if (!netif_running(ndev)) 1524 return 0; 1525 1526 frame_size = (new_mtu > ETH_DATA_LEN) ? (new_mtu + 18) : 0x600; 1527 1528 xgene_enet_close(ndev); 1529 ndev->mtu = new_mtu; 1530 pdata->mac_ops->set_framesize(pdata, frame_size); 1531 xgene_enet_open(ndev); 1532 1533 return 0; 1534 } 1535 1536 static const struct net_device_ops xgene_ndev_ops = { 1537 .ndo_open = xgene_enet_open, 1538 .ndo_stop = xgene_enet_close, 1539 .ndo_start_xmit = xgene_enet_start_xmit, 1540 .ndo_tx_timeout = xgene_enet_timeout, 1541 .ndo_get_stats64 = xgene_enet_get_stats64, 1542 .ndo_change_mtu = xgene_change_mtu, 1543 .ndo_set_mac_address = xgene_enet_set_mac_address, 1544 }; 1545 1546 #ifdef CONFIG_ACPI 1547 static void xgene_get_port_id_acpi(struct device *dev, 1548 struct xgene_enet_pdata *pdata) 1549 { 1550 acpi_status status; 1551 u64 temp; 1552 1553 status = acpi_evaluate_integer(ACPI_HANDLE(dev), "_SUN", NULL, &temp); 1554 if (ACPI_FAILURE(status)) { 1555 pdata->port_id = 0; 1556 } else { 1557 pdata->port_id = temp; 1558 } 1559 1560 return; 1561 } 1562 #endif 1563 1564 static void xgene_get_port_id_dt(struct device *dev, struct xgene_enet_pdata *pdata) 1565 { 1566 u32 id = 0; 1567 1568 of_property_read_u32(dev->of_node, "port-id", &id); 1569 1570 pdata->port_id = id & BIT(0); 1571 1572 return; 1573 } 1574 1575 static int xgene_get_tx_delay(struct xgene_enet_pdata *pdata) 1576 { 1577 struct device *dev = &pdata->pdev->dev; 1578 int delay, ret; 1579 1580 ret = device_property_read_u32(dev, "tx-delay", &delay); 1581 if (ret) { 1582 pdata->tx_delay = 4; 1583 return 0; 1584 } 1585 1586 if (delay < 0 || delay > 7) { 1587 dev_err(dev, "Invalid tx-delay specified\n"); 1588 return -EINVAL; 1589 } 1590 1591 pdata->tx_delay = delay; 1592 1593 return 0; 1594 } 1595 1596 static int xgene_get_rx_delay(struct xgene_enet_pdata *pdata) 1597 { 1598 struct device *dev = &pdata->pdev->dev; 1599 int delay, ret; 1600 1601 ret = device_property_read_u32(dev, "rx-delay", &delay); 1602 if (ret) { 1603 pdata->rx_delay = 2; 1604 return 0; 1605 } 1606 1607 if (delay < 0 || delay > 7) { 1608 dev_err(dev, "Invalid rx-delay specified\n"); 1609 return -EINVAL; 1610 } 1611 1612 pdata->rx_delay = delay; 1613 1614 return 0; 1615 } 1616 1617 static int xgene_enet_get_irqs(struct xgene_enet_pdata *pdata) 1618 { 1619 struct platform_device *pdev = pdata->pdev; 1620 struct device *dev = &pdev->dev; 1621 int i, ret, max_irqs; 1622 1623 if (phy_interface_mode_is_rgmii(pdata->phy_mode)) 1624 max_irqs = 1; 1625 else if (pdata->phy_mode == PHY_INTERFACE_MODE_SGMII) 1626 max_irqs = 2; 1627 else 1628 max_irqs = XGENE_MAX_ENET_IRQ; 1629 1630 for (i = 0; i < max_irqs; i++) { 1631 ret = platform_get_irq(pdev, i); 1632 if (ret <= 0) { 1633 if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) { 1634 max_irqs = i; 1635 pdata->rxq_cnt = max_irqs / 2; 1636 pdata->txq_cnt = max_irqs / 2; 1637 pdata->cq_cnt = max_irqs / 2; 1638 break; 1639 } 1640 dev_err(dev, "Unable to get ENET IRQ\n"); 1641 ret = ret ? : -ENXIO; 1642 return ret; 1643 } 1644 pdata->irqs[i] = ret; 1645 } 1646 1647 return 0; 1648 } 1649 1650 static void xgene_enet_check_phy_handle(struct xgene_enet_pdata *pdata) 1651 { 1652 int ret; 1653 1654 if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) 1655 return; 1656 1657 if (!IS_ENABLED(CONFIG_MDIO_XGENE)) 1658 return; 1659 1660 ret = xgene_enet_phy_connect(pdata->ndev); 1661 if (!ret) 1662 pdata->mdio_driver = true; 1663 } 1664 1665 static void xgene_enet_gpiod_get(struct xgene_enet_pdata *pdata) 1666 { 1667 struct device *dev = &pdata->pdev->dev; 1668 1669 pdata->sfp_gpio_en = false; 1670 if (pdata->phy_mode != PHY_INTERFACE_MODE_XGMII || 1671 (!device_property_present(dev, "sfp-gpios") && 1672 !device_property_present(dev, "rxlos-gpios"))) 1673 return; 1674 1675 pdata->sfp_gpio_en = true; 1676 pdata->sfp_rdy = gpiod_get(dev, "rxlos", GPIOD_IN); 1677 if (IS_ERR(pdata->sfp_rdy)) 1678 pdata->sfp_rdy = gpiod_get(dev, "sfp", GPIOD_IN); 1679 } 1680 1681 static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata) 1682 { 1683 struct platform_device *pdev; 1684 struct net_device *ndev; 1685 struct device *dev; 1686 struct resource *res; 1687 void __iomem *base_addr; 1688 u32 offset; 1689 int ret = 0; 1690 1691 pdev = pdata->pdev; 1692 dev = &pdev->dev; 1693 ndev = pdata->ndev; 1694 1695 res = platform_get_resource(pdev, IORESOURCE_MEM, RES_ENET_CSR); 1696 if (!res) { 1697 dev_err(dev, "Resource enet_csr not defined\n"); 1698 return -ENODEV; 1699 } 1700 pdata->base_addr = devm_ioremap(dev, res->start, resource_size(res)); 1701 if (!pdata->base_addr) { 1702 dev_err(dev, "Unable to retrieve ENET Port CSR region\n"); 1703 return -ENOMEM; 1704 } 1705 1706 res = platform_get_resource(pdev, IORESOURCE_MEM, RES_RING_CSR); 1707 if (!res) { 1708 dev_err(dev, "Resource ring_csr not defined\n"); 1709 return -ENODEV; 1710 } 1711 pdata->ring_csr_addr = devm_ioremap(dev, res->start, 1712 resource_size(res)); 1713 if (!pdata->ring_csr_addr) { 1714 dev_err(dev, "Unable to retrieve ENET Ring CSR region\n"); 1715 return -ENOMEM; 1716 } 1717 1718 res = platform_get_resource(pdev, IORESOURCE_MEM, RES_RING_CMD); 1719 if (!res) { 1720 dev_err(dev, "Resource ring_cmd not defined\n"); 1721 return -ENODEV; 1722 } 1723 pdata->ring_cmd_addr = devm_ioremap(dev, res->start, 1724 resource_size(res)); 1725 if (!pdata->ring_cmd_addr) { 1726 dev_err(dev, "Unable to retrieve ENET Ring command region\n"); 1727 return -ENOMEM; 1728 } 1729 1730 if (dev->of_node) 1731 xgene_get_port_id_dt(dev, pdata); 1732 #ifdef CONFIG_ACPI 1733 else 1734 xgene_get_port_id_acpi(dev, pdata); 1735 #endif 1736 1737 if (!device_get_mac_address(dev, ndev->dev_addr, ETH_ALEN)) 1738 eth_hw_addr_random(ndev); 1739 1740 memcpy(ndev->perm_addr, ndev->dev_addr, ndev->addr_len); 1741 1742 pdata->phy_mode = device_get_phy_mode(dev); 1743 if (pdata->phy_mode < 0) { 1744 dev_err(dev, "Unable to get phy-connection-type\n"); 1745 return pdata->phy_mode; 1746 } 1747 if (!phy_interface_mode_is_rgmii(pdata->phy_mode) && 1748 pdata->phy_mode != PHY_INTERFACE_MODE_SGMII && 1749 pdata->phy_mode != PHY_INTERFACE_MODE_XGMII) { 1750 dev_err(dev, "Incorrect phy-connection-type specified\n"); 1751 return -ENODEV; 1752 } 1753 1754 ret = xgene_get_tx_delay(pdata); 1755 if (ret) 1756 return ret; 1757 1758 ret = xgene_get_rx_delay(pdata); 1759 if (ret) 1760 return ret; 1761 1762 ret = xgene_enet_get_irqs(pdata); 1763 if (ret) 1764 return ret; 1765 1766 xgene_enet_gpiod_get(pdata); 1767 1768 pdata->clk = devm_clk_get(&pdev->dev, NULL); 1769 if (IS_ERR(pdata->clk)) { 1770 if (pdata->phy_mode != PHY_INTERFACE_MODE_SGMII) { 1771 /* Abort if the clock is defined but couldn't be 1772 * retrived. Always abort if the clock is missing on 1773 * DT system as the driver can't cope with this case. 1774 */ 1775 if (PTR_ERR(pdata->clk) != -ENOENT || dev->of_node) 1776 return PTR_ERR(pdata->clk); 1777 /* Firmware may have set up the clock already. */ 1778 dev_info(dev, "clocks have been setup already\n"); 1779 } 1780 } 1781 1782 if (pdata->phy_mode != PHY_INTERFACE_MODE_XGMII) 1783 base_addr = pdata->base_addr - (pdata->port_id * MAC_OFFSET); 1784 else 1785 base_addr = pdata->base_addr; 1786 pdata->eth_csr_addr = base_addr + BLOCK_ETH_CSR_OFFSET; 1787 pdata->cle.base = base_addr + BLOCK_ETH_CLE_CSR_OFFSET; 1788 pdata->eth_ring_if_addr = base_addr + BLOCK_ETH_RING_IF_OFFSET; 1789 pdata->eth_diag_csr_addr = base_addr + BLOCK_ETH_DIAG_CSR_OFFSET; 1790 if (phy_interface_mode_is_rgmii(pdata->phy_mode) || 1791 pdata->phy_mode == PHY_INTERFACE_MODE_SGMII) { 1792 pdata->mcx_mac_addr = pdata->base_addr + BLOCK_ETH_MAC_OFFSET; 1793 pdata->mcx_stats_addr = 1794 pdata->base_addr + BLOCK_ETH_STATS_OFFSET; 1795 offset = (pdata->enet_id == XGENE_ENET1) ? 1796 BLOCK_ETH_MAC_CSR_OFFSET : 1797 X2_BLOCK_ETH_MAC_CSR_OFFSET; 1798 pdata->mcx_mac_csr_addr = base_addr + offset; 1799 } else { 1800 pdata->mcx_mac_addr = base_addr + BLOCK_AXG_MAC_OFFSET; 1801 pdata->mcx_stats_addr = base_addr + BLOCK_AXG_STATS_OFFSET; 1802 pdata->mcx_mac_csr_addr = base_addr + BLOCK_AXG_MAC_CSR_OFFSET; 1803 pdata->pcs_addr = base_addr + BLOCK_PCS_OFFSET; 1804 } 1805 pdata->rx_buff_cnt = NUM_PKT_BUF; 1806 1807 return 0; 1808 } 1809 1810 static int xgene_enet_init_hw(struct xgene_enet_pdata *pdata) 1811 { 1812 struct xgene_enet_cle *enet_cle = &pdata->cle; 1813 struct xgene_enet_desc_ring *page_pool; 1814 struct net_device *ndev = pdata->ndev; 1815 struct xgene_enet_desc_ring *buf_pool; 1816 u16 dst_ring_num, ring_id; 1817 int i, ret; 1818 u32 count; 1819 1820 ret = pdata->port_ops->reset(pdata); 1821 if (ret) 1822 return ret; 1823 1824 ret = xgene_enet_create_desc_rings(ndev); 1825 if (ret) { 1826 netdev_err(ndev, "Error in ring configuration\n"); 1827 return ret; 1828 } 1829 1830 /* setup buffer pool */ 1831 for (i = 0; i < pdata->rxq_cnt; i++) { 1832 buf_pool = pdata->rx_ring[i]->buf_pool; 1833 xgene_enet_init_bufpool(buf_pool); 1834 page_pool = pdata->rx_ring[i]->page_pool; 1835 xgene_enet_init_bufpool(page_pool); 1836 1837 count = pdata->rx_buff_cnt; 1838 ret = xgene_enet_refill_bufpool(buf_pool, count); 1839 if (ret) 1840 goto err; 1841 1842 ret = xgene_enet_refill_pagepool(page_pool, count); 1843 if (ret) 1844 goto err; 1845 1846 } 1847 1848 dst_ring_num = xgene_enet_dst_ring_num(pdata->rx_ring[0]); 1849 buf_pool = pdata->rx_ring[0]->buf_pool; 1850 if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) { 1851 /* Initialize and Enable PreClassifier Tree */ 1852 enet_cle->max_nodes = 512; 1853 enet_cle->max_dbptrs = 1024; 1854 enet_cle->parsers = 3; 1855 enet_cle->active_parser = PARSER_ALL; 1856 enet_cle->ptree.start_node = 0; 1857 enet_cle->ptree.start_dbptr = 0; 1858 enet_cle->jump_bytes = 8; 1859 ret = pdata->cle_ops->cle_init(pdata); 1860 if (ret) { 1861 netdev_err(ndev, "Preclass Tree init error\n"); 1862 goto err; 1863 } 1864 1865 } else { 1866 dst_ring_num = xgene_enet_dst_ring_num(pdata->rx_ring[0]); 1867 buf_pool = pdata->rx_ring[0]->buf_pool; 1868 page_pool = pdata->rx_ring[0]->page_pool; 1869 ring_id = (page_pool) ? page_pool->id : 0; 1870 pdata->port_ops->cle_bypass(pdata, dst_ring_num, 1871 buf_pool->id, ring_id); 1872 } 1873 1874 ndev->max_mtu = XGENE_ENET_MAX_MTU; 1875 pdata->phy_speed = SPEED_UNKNOWN; 1876 pdata->mac_ops->init(pdata); 1877 1878 return ret; 1879 1880 err: 1881 xgene_enet_delete_desc_rings(pdata); 1882 return ret; 1883 } 1884 1885 static void xgene_enet_setup_ops(struct xgene_enet_pdata *pdata) 1886 { 1887 switch (pdata->phy_mode) { 1888 case PHY_INTERFACE_MODE_RGMII: 1889 case PHY_INTERFACE_MODE_RGMII_ID: 1890 case PHY_INTERFACE_MODE_RGMII_RXID: 1891 case PHY_INTERFACE_MODE_RGMII_TXID: 1892 pdata->mac_ops = &xgene_gmac_ops; 1893 pdata->port_ops = &xgene_gport_ops; 1894 pdata->rm = RM3; 1895 pdata->rxq_cnt = 1; 1896 pdata->txq_cnt = 1; 1897 pdata->cq_cnt = 0; 1898 break; 1899 case PHY_INTERFACE_MODE_SGMII: 1900 pdata->mac_ops = &xgene_sgmac_ops; 1901 pdata->port_ops = &xgene_sgport_ops; 1902 pdata->rm = RM1; 1903 pdata->rxq_cnt = 1; 1904 pdata->txq_cnt = 1; 1905 pdata->cq_cnt = 1; 1906 break; 1907 default: 1908 pdata->mac_ops = &xgene_xgmac_ops; 1909 pdata->port_ops = &xgene_xgport_ops; 1910 pdata->cle_ops = &xgene_cle3in_ops; 1911 pdata->rm = RM0; 1912 if (!pdata->rxq_cnt) { 1913 pdata->rxq_cnt = XGENE_NUM_RX_RING; 1914 pdata->txq_cnt = XGENE_NUM_TX_RING; 1915 pdata->cq_cnt = XGENE_NUM_TXC_RING; 1916 } 1917 break; 1918 } 1919 1920 if (pdata->enet_id == XGENE_ENET1) { 1921 switch (pdata->port_id) { 1922 case 0: 1923 if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) { 1924 pdata->cpu_bufnum = X2_START_CPU_BUFNUM_0; 1925 pdata->eth_bufnum = X2_START_ETH_BUFNUM_0; 1926 pdata->bp_bufnum = X2_START_BP_BUFNUM_0; 1927 pdata->ring_num = START_RING_NUM_0; 1928 } else { 1929 pdata->cpu_bufnum = START_CPU_BUFNUM_0; 1930 pdata->eth_bufnum = START_ETH_BUFNUM_0; 1931 pdata->bp_bufnum = START_BP_BUFNUM_0; 1932 pdata->ring_num = START_RING_NUM_0; 1933 } 1934 break; 1935 case 1: 1936 if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) { 1937 pdata->cpu_bufnum = XG_START_CPU_BUFNUM_1; 1938 pdata->eth_bufnum = XG_START_ETH_BUFNUM_1; 1939 pdata->bp_bufnum = XG_START_BP_BUFNUM_1; 1940 pdata->ring_num = XG_START_RING_NUM_1; 1941 } else { 1942 pdata->cpu_bufnum = START_CPU_BUFNUM_1; 1943 pdata->eth_bufnum = START_ETH_BUFNUM_1; 1944 pdata->bp_bufnum = START_BP_BUFNUM_1; 1945 pdata->ring_num = START_RING_NUM_1; 1946 } 1947 break; 1948 default: 1949 break; 1950 } 1951 pdata->ring_ops = &xgene_ring1_ops; 1952 } else { 1953 switch (pdata->port_id) { 1954 case 0: 1955 pdata->cpu_bufnum = X2_START_CPU_BUFNUM_0; 1956 pdata->eth_bufnum = X2_START_ETH_BUFNUM_0; 1957 pdata->bp_bufnum = X2_START_BP_BUFNUM_0; 1958 pdata->ring_num = X2_START_RING_NUM_0; 1959 break; 1960 case 1: 1961 pdata->cpu_bufnum = X2_START_CPU_BUFNUM_1; 1962 pdata->eth_bufnum = X2_START_ETH_BUFNUM_1; 1963 pdata->bp_bufnum = X2_START_BP_BUFNUM_1; 1964 pdata->ring_num = X2_START_RING_NUM_1; 1965 break; 1966 default: 1967 break; 1968 } 1969 pdata->rm = RM0; 1970 pdata->ring_ops = &xgene_ring2_ops; 1971 } 1972 } 1973 1974 static void xgene_enet_napi_add(struct xgene_enet_pdata *pdata) 1975 { 1976 struct napi_struct *napi; 1977 int i; 1978 1979 for (i = 0; i < pdata->rxq_cnt; i++) { 1980 napi = &pdata->rx_ring[i]->napi; 1981 netif_napi_add(pdata->ndev, napi, xgene_enet_napi, 1982 NAPI_POLL_WEIGHT); 1983 } 1984 1985 for (i = 0; i < pdata->cq_cnt; i++) { 1986 napi = &pdata->tx_ring[i]->cp_ring->napi; 1987 netif_napi_add(pdata->ndev, napi, xgene_enet_napi, 1988 NAPI_POLL_WEIGHT); 1989 } 1990 } 1991 1992 #ifdef CONFIG_ACPI 1993 static const struct acpi_device_id xgene_enet_acpi_match[] = { 1994 { "APMC0D05", XGENE_ENET1}, 1995 { "APMC0D30", XGENE_ENET1}, 1996 { "APMC0D31", XGENE_ENET1}, 1997 { "APMC0D3F", XGENE_ENET1}, 1998 { "APMC0D26", XGENE_ENET2}, 1999 { "APMC0D25", XGENE_ENET2}, 2000 { } 2001 }; 2002 MODULE_DEVICE_TABLE(acpi, xgene_enet_acpi_match); 2003 #endif 2004 2005 static const struct of_device_id xgene_enet_of_match[] = { 2006 {.compatible = "apm,xgene-enet", .data = (void *)XGENE_ENET1}, 2007 {.compatible = "apm,xgene1-sgenet", .data = (void *)XGENE_ENET1}, 2008 {.compatible = "apm,xgene1-xgenet", .data = (void *)XGENE_ENET1}, 2009 {.compatible = "apm,xgene2-sgenet", .data = (void *)XGENE_ENET2}, 2010 {.compatible = "apm,xgene2-xgenet", .data = (void *)XGENE_ENET2}, 2011 {}, 2012 }; 2013 2014 MODULE_DEVICE_TABLE(of, xgene_enet_of_match); 2015 2016 static int xgene_enet_probe(struct platform_device *pdev) 2017 { 2018 struct net_device *ndev; 2019 struct xgene_enet_pdata *pdata; 2020 struct device *dev = &pdev->dev; 2021 void (*link_state)(struct work_struct *); 2022 const struct of_device_id *of_id; 2023 int ret; 2024 2025 ndev = alloc_etherdev_mqs(sizeof(struct xgene_enet_pdata), 2026 XGENE_NUM_RX_RING, XGENE_NUM_TX_RING); 2027 if (!ndev) 2028 return -ENOMEM; 2029 2030 pdata = netdev_priv(ndev); 2031 2032 pdata->pdev = pdev; 2033 pdata->ndev = ndev; 2034 SET_NETDEV_DEV(ndev, dev); 2035 platform_set_drvdata(pdev, pdata); 2036 ndev->netdev_ops = &xgene_ndev_ops; 2037 xgene_enet_set_ethtool_ops(ndev); 2038 ndev->features |= NETIF_F_IP_CSUM | 2039 NETIF_F_GSO | 2040 NETIF_F_GRO | 2041 NETIF_F_SG; 2042 2043 of_id = of_match_device(xgene_enet_of_match, &pdev->dev); 2044 if (of_id) { 2045 pdata->enet_id = (enum xgene_enet_id)of_id->data; 2046 } 2047 #ifdef CONFIG_ACPI 2048 else { 2049 const struct acpi_device_id *acpi_id; 2050 2051 acpi_id = acpi_match_device(xgene_enet_acpi_match, &pdev->dev); 2052 if (acpi_id) 2053 pdata->enet_id = (enum xgene_enet_id) acpi_id->driver_data; 2054 } 2055 #endif 2056 if (!pdata->enet_id) { 2057 ret = -ENODEV; 2058 goto err; 2059 } 2060 2061 ret = xgene_enet_get_resources(pdata); 2062 if (ret) 2063 goto err; 2064 2065 xgene_enet_setup_ops(pdata); 2066 spin_lock_init(&pdata->mac_lock); 2067 2068 if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) { 2069 ndev->features |= NETIF_F_TSO | NETIF_F_RXCSUM; 2070 spin_lock_init(&pdata->mss_lock); 2071 } 2072 ndev->hw_features = ndev->features; 2073 2074 ret = dma_coerce_mask_and_coherent(dev, DMA_BIT_MASK(64)); 2075 if (ret) { 2076 netdev_err(ndev, "No usable DMA configuration\n"); 2077 goto err; 2078 } 2079 2080 xgene_enet_check_phy_handle(pdata); 2081 2082 ret = xgene_enet_init_hw(pdata); 2083 if (ret) 2084 goto err2; 2085 2086 link_state = pdata->mac_ops->link_state; 2087 if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) { 2088 INIT_DELAYED_WORK(&pdata->link_work, link_state); 2089 } else if (!pdata->mdio_driver) { 2090 if (phy_interface_mode_is_rgmii(pdata->phy_mode)) 2091 ret = xgene_enet_mdio_config(pdata); 2092 else 2093 INIT_DELAYED_WORK(&pdata->link_work, link_state); 2094 2095 if (ret) 2096 goto err1; 2097 } 2098 2099 spin_lock_init(&pdata->stats_lock); 2100 ret = xgene_extd_stats_init(pdata); 2101 if (ret) 2102 goto err1; 2103 2104 xgene_enet_napi_add(pdata); 2105 ret = register_netdev(ndev); 2106 if (ret) { 2107 netdev_err(ndev, "Failed to register netdev\n"); 2108 goto err1; 2109 } 2110 2111 return 0; 2112 2113 err1: 2114 /* 2115 * If necessary, free_netdev() will call netif_napi_del() and undo 2116 * the effects of xgene_enet_napi_add()'s calls to netif_napi_add(). 2117 */ 2118 2119 xgene_enet_delete_desc_rings(pdata); 2120 2121 err2: 2122 if (pdata->mdio_driver) 2123 xgene_enet_phy_disconnect(pdata); 2124 else if (phy_interface_mode_is_rgmii(pdata->phy_mode)) 2125 xgene_enet_mdio_remove(pdata); 2126 err: 2127 free_netdev(ndev); 2128 return ret; 2129 } 2130 2131 static int xgene_enet_remove(struct platform_device *pdev) 2132 { 2133 struct xgene_enet_pdata *pdata; 2134 struct net_device *ndev; 2135 2136 pdata = platform_get_drvdata(pdev); 2137 ndev = pdata->ndev; 2138 2139 rtnl_lock(); 2140 if (netif_running(ndev)) 2141 dev_close(ndev); 2142 rtnl_unlock(); 2143 2144 if (pdata->mdio_driver) 2145 xgene_enet_phy_disconnect(pdata); 2146 else if (phy_interface_mode_is_rgmii(pdata->phy_mode)) 2147 xgene_enet_mdio_remove(pdata); 2148 2149 unregister_netdev(ndev); 2150 xgene_enet_delete_desc_rings(pdata); 2151 pdata->port_ops->shutdown(pdata); 2152 free_netdev(ndev); 2153 2154 return 0; 2155 } 2156 2157 static void xgene_enet_shutdown(struct platform_device *pdev) 2158 { 2159 struct xgene_enet_pdata *pdata; 2160 2161 pdata = platform_get_drvdata(pdev); 2162 if (!pdata) 2163 return; 2164 2165 if (!pdata->ndev) 2166 return; 2167 2168 xgene_enet_remove(pdev); 2169 } 2170 2171 static struct platform_driver xgene_enet_driver = { 2172 .driver = { 2173 .name = "xgene-enet", 2174 .of_match_table = of_match_ptr(xgene_enet_of_match), 2175 .acpi_match_table = ACPI_PTR(xgene_enet_acpi_match), 2176 }, 2177 .probe = xgene_enet_probe, 2178 .remove = xgene_enet_remove, 2179 .shutdown = xgene_enet_shutdown, 2180 }; 2181 2182 module_platform_driver(xgene_enet_driver); 2183 2184 MODULE_DESCRIPTION("APM X-Gene SoC Ethernet driver"); 2185 MODULE_VERSION(XGENE_DRV_VERSION); 2186 MODULE_AUTHOR("Iyappan Subramanian <isubramanian@apm.com>"); 2187 MODULE_AUTHOR("Keyur Chudgar <kchudgar@apm.com>"); 2188 MODULE_LICENSE("GPL"); 2189