aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDivy Le Ray <divy@chelsio.com>2009-07-07 15:49:09 -0400
committerDavid S. Miller <davem@davemloft.net>2009-07-08 13:54:24 -0400
commit2e8c07c35b3ffee7689406be61fd1448ee45d3cd (patch)
treead90ee33b8c13f48c7b330b8cf474e520d32fb50
parent5e659515569220701bfe3c8936dcab67554cc286 (diff)
cxgb3: use request_firmware() for the EDC registers setup
use request_firmware() to load the phy's EDC programmation Signed-off-by: Divy Le Ray <divy@chelsio.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/cxgb3/adapter.h2
-rw-r--r--drivers/net/cxgb3/ael1002.c1081
-rw-r--r--drivers/net/cxgb3/common.h10
-rw-r--r--drivers/net/cxgb3/cxgb3_main.c69
-rw-r--r--firmware/Makefile5
-rw-r--r--firmware/WHENCE17
-rw-r--r--firmware/cxgb3/ael2005_opt_edc.bin.ihex69
-rw-r--r--firmware/cxgb3/ael2005_twx_edc.bin.ihex93
-rw-r--r--firmware/cxgb3/ael2020_twx_edc.bin.ihex100
9 files changed, 395 insertions, 1051 deletions
diff --git a/drivers/net/cxgb3/adapter.h b/drivers/net/cxgb3/adapter.h
index bfa312d43d86..74723f2e7431 100644
--- a/drivers/net/cxgb3/adapter.h
+++ b/drivers/net/cxgb3/adapter.h
@@ -320,4 +320,6 @@ int t3_get_desc(const struct sge_qset *qs, unsigned int qnum, unsigned int idx,
320 unsigned char *data); 320 unsigned char *data);
321irqreturn_t t3_sge_intr_msix(int irq, void *cookie); 321irqreturn_t t3_sge_intr_msix(int irq, void *cookie);
322 322
323int t3_get_edc_fw(struct cphy *phy, int edc_idx, int size);
324
323#endif /* __T3_ADAPTER_H__ */ 325#endif /* __T3_ADAPTER_H__ */
diff --git a/drivers/net/cxgb3/ael1002.c b/drivers/net/cxgb3/ael1002.c
index 66e47f76f32b..5248f9e0b2f4 100644
--- a/drivers/net/cxgb3/ael1002.c
+++ b/drivers/net/cxgb3/ael1002.c
@@ -298,279 +298,7 @@ static int ael2005_setup_sr_edc(struct cphy *phy)
298 { MDIO_MMD_PMAPMD, 0xc04a, 0xffff, 0x5200 }, 298 { MDIO_MMD_PMAPMD, 0xc04a, 0xffff, 0x5200 },
299 { 0, 0, 0, 0 } 299 { 0, 0, 0, 0 }
300 }; 300 };
301 static u16 sr_edc[] = { 301
302 0xcc00, 0x2ff4,
303 0xcc01, 0x3cd4,
304 0xcc02, 0x2015,
305 0xcc03, 0x3105,
306 0xcc04, 0x6524,
307 0xcc05, 0x27ff,
308 0xcc06, 0x300f,
309 0xcc07, 0x2c8b,
310 0xcc08, 0x300b,
311 0xcc09, 0x4009,
312 0xcc0a, 0x400e,
313 0xcc0b, 0x2f72,
314 0xcc0c, 0x3002,
315 0xcc0d, 0x1002,
316 0xcc0e, 0x2172,
317 0xcc0f, 0x3012,
318 0xcc10, 0x1002,
319 0xcc11, 0x25d2,
320 0xcc12, 0x3012,
321 0xcc13, 0x1002,
322 0xcc14, 0xd01e,
323 0xcc15, 0x27d2,
324 0xcc16, 0x3012,
325 0xcc17, 0x1002,
326 0xcc18, 0x2004,
327 0xcc19, 0x3c84,
328 0xcc1a, 0x6436,
329 0xcc1b, 0x2007,
330 0xcc1c, 0x3f87,
331 0xcc1d, 0x8676,
332 0xcc1e, 0x40b7,
333 0xcc1f, 0xa746,
334 0xcc20, 0x4047,
335 0xcc21, 0x5673,
336 0xcc22, 0x2982,
337 0xcc23, 0x3002,
338 0xcc24, 0x13d2,
339 0xcc25, 0x8bbd,
340 0xcc26, 0x2862,
341 0xcc27, 0x3012,
342 0xcc28, 0x1002,
343 0xcc29, 0x2092,
344 0xcc2a, 0x3012,
345 0xcc2b, 0x1002,
346 0xcc2c, 0x5cc3,
347 0xcc2d, 0x314,
348 0xcc2e, 0x2942,
349 0xcc2f, 0x3002,
350 0xcc30, 0x1002,
351 0xcc31, 0xd019,
352 0xcc32, 0x2032,
353 0xcc33, 0x3012,
354 0xcc34, 0x1002,
355 0xcc35, 0x2a04,
356 0xcc36, 0x3c74,
357 0xcc37, 0x6435,
358 0xcc38, 0x2fa4,
359 0xcc39, 0x3cd4,
360 0xcc3a, 0x6624,
361 0xcc3b, 0x5563,
362 0xcc3c, 0x2d42,
363 0xcc3d, 0x3002,
364 0xcc3e, 0x13d2,
365 0xcc3f, 0x464d,
366 0xcc40, 0x2862,
367 0xcc41, 0x3012,
368 0xcc42, 0x1002,
369 0xcc43, 0x2032,
370 0xcc44, 0x3012,
371 0xcc45, 0x1002,
372 0xcc46, 0x2fb4,
373 0xcc47, 0x3cd4,
374 0xcc48, 0x6624,
375 0xcc49, 0x5563,
376 0xcc4a, 0x2d42,
377 0xcc4b, 0x3002,
378 0xcc4c, 0x13d2,
379 0xcc4d, 0x2ed2,
380 0xcc4e, 0x3002,
381 0xcc4f, 0x1002,
382 0xcc50, 0x2fd2,
383 0xcc51, 0x3002,
384 0xcc52, 0x1002,
385 0xcc53, 0x004,
386 0xcc54, 0x2942,
387 0xcc55, 0x3002,
388 0xcc56, 0x1002,
389 0xcc57, 0x2092,
390 0xcc58, 0x3012,
391 0xcc59, 0x1002,
392 0xcc5a, 0x5cc3,
393 0xcc5b, 0x317,
394 0xcc5c, 0x2f72,
395 0xcc5d, 0x3002,
396 0xcc5e, 0x1002,
397 0xcc5f, 0x2942,
398 0xcc60, 0x3002,
399 0xcc61, 0x1002,
400 0xcc62, 0x22cd,
401 0xcc63, 0x301d,
402 0xcc64, 0x2862,
403 0xcc65, 0x3012,
404 0xcc66, 0x1002,
405 0xcc67, 0x2ed2,
406 0xcc68, 0x3002,
407 0xcc69, 0x1002,
408 0xcc6a, 0x2d72,
409 0xcc6b, 0x3002,
410 0xcc6c, 0x1002,
411 0xcc6d, 0x628f,
412 0xcc6e, 0x2112,
413 0xcc6f, 0x3012,
414 0xcc70, 0x1002,
415 0xcc71, 0x5aa3,
416 0xcc72, 0x2dc2,
417 0xcc73, 0x3002,
418 0xcc74, 0x1312,
419 0xcc75, 0x6f72,
420 0xcc76, 0x1002,
421 0xcc77, 0x2807,
422 0xcc78, 0x31a7,
423 0xcc79, 0x20c4,
424 0xcc7a, 0x3c24,
425 0xcc7b, 0x6724,
426 0xcc7c, 0x1002,
427 0xcc7d, 0x2807,
428 0xcc7e, 0x3187,
429 0xcc7f, 0x20c4,
430 0xcc80, 0x3c24,
431 0xcc81, 0x6724,
432 0xcc82, 0x1002,
433 0xcc83, 0x2514,
434 0xcc84, 0x3c64,
435 0xcc85, 0x6436,
436 0xcc86, 0xdff4,
437 0xcc87, 0x6436,
438 0xcc88, 0x1002,
439 0xcc89, 0x40a4,
440 0xcc8a, 0x643c,
441 0xcc8b, 0x4016,
442 0xcc8c, 0x8c6c,
443 0xcc8d, 0x2b24,
444 0xcc8e, 0x3c24,
445 0xcc8f, 0x6435,
446 0xcc90, 0x1002,
447 0xcc91, 0x2b24,
448 0xcc92, 0x3c24,
449 0xcc93, 0x643a,
450 0xcc94, 0x4025,
451 0xcc95, 0x8a5a,
452 0xcc96, 0x1002,
453 0xcc97, 0x2731,
454 0xcc98, 0x3011,
455 0xcc99, 0x1001,
456 0xcc9a, 0xc7a0,
457 0xcc9b, 0x100,
458 0xcc9c, 0xc502,
459 0xcc9d, 0x53ac,
460 0xcc9e, 0xc503,
461 0xcc9f, 0xd5d5,
462 0xcca0, 0xc600,
463 0xcca1, 0x2a6d,
464 0xcca2, 0xc601,
465 0xcca3, 0x2a4c,
466 0xcca4, 0xc602,
467 0xcca5, 0x111,
468 0xcca6, 0xc60c,
469 0xcca7, 0x5900,
470 0xcca8, 0xc710,
471 0xcca9, 0x700,
472 0xccaa, 0xc718,
473 0xccab, 0x700,
474 0xccac, 0xc720,
475 0xccad, 0x4700,
476 0xccae, 0xc801,
477 0xccaf, 0x7f50,
478 0xccb0, 0xc802,
479 0xccb1, 0x7760,
480 0xccb2, 0xc803,
481 0xccb3, 0x7fce,
482 0xccb4, 0xc804,
483 0xccb5, 0x5700,
484 0xccb6, 0xc805,
485 0xccb7, 0x5f11,
486 0xccb8, 0xc806,
487 0xccb9, 0x4751,
488 0xccba, 0xc807,
489 0xccbb, 0x57e1,
490 0xccbc, 0xc808,
491 0xccbd, 0x2700,
492 0xccbe, 0xc809,
493 0xccbf, 0x000,
494 0xccc0, 0xc821,
495 0xccc1, 0x002,
496 0xccc2, 0xc822,
497 0xccc3, 0x014,
498 0xccc4, 0xc832,
499 0xccc5, 0x1186,
500 0xccc6, 0xc847,
501 0xccc7, 0x1e02,
502 0xccc8, 0xc013,
503 0xccc9, 0xf341,
504 0xccca, 0xc01a,
505 0xcccb, 0x446,
506 0xcccc, 0xc024,
507 0xcccd, 0x1000,
508 0xccce, 0xc025,
509 0xcccf, 0xa00,
510 0xccd0, 0xc026,
511 0xccd1, 0xc0c,
512 0xccd2, 0xc027,
513 0xccd3, 0xc0c,
514 0xccd4, 0xc029,
515 0xccd5, 0x0a0,
516 0xccd6, 0xc030,
517 0xccd7, 0xa00,
518 0xccd8, 0xc03c,
519 0xccd9, 0x01c,
520 0xccda, 0xc005,
521 0xccdb, 0x7a06,
522 0xccdc, 0x000,
523 0xccdd, 0x2731,
524 0xccde, 0x3011,
525 0xccdf, 0x1001,
526 0xcce0, 0xc620,
527 0xcce1, 0x000,
528 0xcce2, 0xc621,
529 0xcce3, 0x03f,
530 0xcce4, 0xc622,
531 0xcce5, 0x000,
532 0xcce6, 0xc623,
533 0xcce7, 0x000,
534 0xcce8, 0xc624,
535 0xcce9, 0x000,
536 0xccea, 0xc625,
537 0xcceb, 0x000,
538 0xccec, 0xc627,
539 0xcced, 0x000,
540 0xccee, 0xc628,
541 0xccef, 0x000,
542 0xccf0, 0xc62c,
543 0xccf1, 0x000,
544 0xccf2, 0x000,
545 0xccf3, 0x2806,
546 0xccf4, 0x3cb6,
547 0xccf5, 0xc161,
548 0xccf6, 0x6134,
549 0xccf7, 0x6135,
550 0xccf8, 0x5443,
551 0xccf9, 0x303,
552 0xccfa, 0x6524,
553 0xccfb, 0x00b,
554 0xccfc, 0x1002,
555 0xccfd, 0x2104,
556 0xccfe, 0x3c24,
557 0xccff, 0x2105,
558 0xcd00, 0x3805,
559 0xcd01, 0x6524,
560 0xcd02, 0xdff4,
561 0xcd03, 0x4005,
562 0xcd04, 0x6524,
563 0xcd05, 0x1002,
564 0xcd06, 0x5dd3,
565 0xcd07, 0x306,
566 0xcd08, 0x2ff7,
567 0xcd09, 0x38f7,
568 0xcd0a, 0x60b7,
569 0xcd0b, 0xdffd,
570 0xcd0c, 0x00a,
571 0xcd0d, 0x1002,
572 0xcd0e, 0
573 };
574 int i, err; 302 int i, err;
575 303
576 err = set_phy_regs(phy, regs); 304 err = set_phy_regs(phy, regs);
@@ -579,9 +307,16 @@ static int ael2005_setup_sr_edc(struct cphy *phy)
579 307
580 msleep(50); 308 msleep(50);
581 309
582 for (i = 0; i < ARRAY_SIZE(sr_edc) && !err; i += 2) 310 if (phy->priv != edc_sr)
583 err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, sr_edc[i], 311 err = t3_get_edc_fw(phy, EDC_OPT_AEL2005,
584 sr_edc[i + 1]); 312 EDC_OPT_AEL2005_SIZE);
313 if (err)
314 return err;
315
316 for (i = 0; i < EDC_OPT_AEL2005_SIZE / sizeof(u16) && !err; i += 2)
317 err = t3_mdio_write(phy, MDIO_MMD_PMAPMD,
318 phy->phy_cache[i],
319 phy->phy_cache[i + 1]);
585 if (!err) 320 if (!err)
586 phy->priv = edc_sr; 321 phy->priv = edc_sr;
587 return err; 322 return err;
@@ -598,374 +333,6 @@ static int ael2005_setup_twinax_edc(struct cphy *phy, int modtype)
598 { MDIO_MMD_PMAPMD, 0xc015, 0xffff, 0xa000 }, 333 { MDIO_MMD_PMAPMD, 0xc015, 0xffff, 0xa000 },
599 { 0, 0, 0, 0 } 334 { 0, 0, 0, 0 }
600 }; 335 };
601 static u16 twinax_edc[] = {
602 0xcc00, 0x4009,
603 0xcc01, 0x27ff,
604 0xcc02, 0x300f,
605 0xcc03, 0x40aa,
606 0xcc04, 0x401c,
607 0xcc05, 0x401e,
608 0xcc06, 0x2ff4,
609 0xcc07, 0x3cd4,
610 0xcc08, 0x2035,
611 0xcc09, 0x3145,
612 0xcc0a, 0x6524,
613 0xcc0b, 0x26a2,
614 0xcc0c, 0x3012,
615 0xcc0d, 0x1002,
616 0xcc0e, 0x29c2,
617 0xcc0f, 0x3002,
618 0xcc10, 0x1002,
619 0xcc11, 0x2072,
620 0xcc12, 0x3012,
621 0xcc13, 0x1002,
622 0xcc14, 0x22cd,
623 0xcc15, 0x301d,
624 0xcc16, 0x2e52,
625 0xcc17, 0x3012,
626 0xcc18, 0x1002,
627 0xcc19, 0x28e2,
628 0xcc1a, 0x3002,
629 0xcc1b, 0x1002,
630 0xcc1c, 0x628f,
631 0xcc1d, 0x2ac2,
632 0xcc1e, 0x3012,
633 0xcc1f, 0x1002,
634 0xcc20, 0x5553,
635 0xcc21, 0x2ae2,
636 0xcc22, 0x3002,
637 0xcc23, 0x1302,
638 0xcc24, 0x401e,
639 0xcc25, 0x2be2,
640 0xcc26, 0x3012,
641 0xcc27, 0x1002,
642 0xcc28, 0x2da2,
643 0xcc29, 0x3012,
644 0xcc2a, 0x1002,
645 0xcc2b, 0x2ba2,
646 0xcc2c, 0x3002,
647 0xcc2d, 0x1002,
648 0xcc2e, 0x5ee3,
649 0xcc2f, 0x305,
650 0xcc30, 0x400e,
651 0xcc31, 0x2bc2,
652 0xcc32, 0x3002,
653 0xcc33, 0x1002,
654 0xcc34, 0x2b82,
655 0xcc35, 0x3012,
656 0xcc36, 0x1002,
657 0xcc37, 0x5663,
658 0xcc38, 0x302,
659 0xcc39, 0x401e,
660 0xcc3a, 0x6f72,
661 0xcc3b, 0x1002,
662 0xcc3c, 0x628f,
663 0xcc3d, 0x2be2,
664 0xcc3e, 0x3012,
665 0xcc3f, 0x1002,
666 0xcc40, 0x22cd,
667 0xcc41, 0x301d,
668 0xcc42, 0x2e52,
669 0xcc43, 0x3012,
670 0xcc44, 0x1002,
671 0xcc45, 0x2522,
672 0xcc46, 0x3012,
673 0xcc47, 0x1002,
674 0xcc48, 0x2da2,
675 0xcc49, 0x3012,
676 0xcc4a, 0x1002,
677 0xcc4b, 0x2ca2,
678 0xcc4c, 0x3012,
679 0xcc4d, 0x1002,
680 0xcc4e, 0x2fa4,
681 0xcc4f, 0x3cd4,
682 0xcc50, 0x6624,
683 0xcc51, 0x410b,
684 0xcc52, 0x56b3,
685 0xcc53, 0x3c4,
686 0xcc54, 0x2fb2,
687 0xcc55, 0x3002,
688 0xcc56, 0x1002,
689 0xcc57, 0x220b,
690 0xcc58, 0x303b,
691 0xcc59, 0x56b3,
692 0xcc5a, 0x3c3,
693 0xcc5b, 0x866b,
694 0xcc5c, 0x400c,
695 0xcc5d, 0x23a2,
696 0xcc5e, 0x3012,
697 0xcc5f, 0x1002,
698 0xcc60, 0x2da2,
699 0xcc61, 0x3012,
700 0xcc62, 0x1002,
701 0xcc63, 0x2ca2,
702 0xcc64, 0x3012,
703 0xcc65, 0x1002,
704 0xcc66, 0x2fb4,
705 0xcc67, 0x3cd4,
706 0xcc68, 0x6624,
707 0xcc69, 0x56b3,
708 0xcc6a, 0x3c3,
709 0xcc6b, 0x866b,
710 0xcc6c, 0x401c,
711 0xcc6d, 0x2205,
712 0xcc6e, 0x3035,
713 0xcc6f, 0x5b53,
714 0xcc70, 0x2c52,
715 0xcc71, 0x3002,
716 0xcc72, 0x13c2,
717 0xcc73, 0x5cc3,
718 0xcc74, 0x317,
719 0xcc75, 0x2522,
720 0xcc76, 0x3012,
721 0xcc77, 0x1002,
722 0xcc78, 0x2da2,
723 0xcc79, 0x3012,
724 0xcc7a, 0x1002,
725 0xcc7b, 0x2b82,
726 0xcc7c, 0x3012,
727 0xcc7d, 0x1002,
728 0xcc7e, 0x5663,
729 0xcc7f, 0x303,
730 0xcc80, 0x401e,
731 0xcc81, 0x004,
732 0xcc82, 0x2c42,
733 0xcc83, 0x3012,
734 0xcc84, 0x1002,
735 0xcc85, 0x6f72,
736 0xcc86, 0x1002,
737 0xcc87, 0x628f,
738 0xcc88, 0x2304,
739 0xcc89, 0x3c84,
740 0xcc8a, 0x6436,
741 0xcc8b, 0xdff4,
742 0xcc8c, 0x6436,
743 0xcc8d, 0x2ff5,
744 0xcc8e, 0x3005,
745 0xcc8f, 0x8656,
746 0xcc90, 0xdfba,
747 0xcc91, 0x56a3,
748 0xcc92, 0xd05a,
749 0xcc93, 0x21c2,
750 0xcc94, 0x3012,
751 0xcc95, 0x1392,
752 0xcc96, 0xd05a,
753 0xcc97, 0x56a3,
754 0xcc98, 0xdfba,
755 0xcc99, 0x383,
756 0xcc9a, 0x6f72,
757 0xcc9b, 0x1002,
758 0xcc9c, 0x28c5,
759 0xcc9d, 0x3005,
760 0xcc9e, 0x4178,
761 0xcc9f, 0x5653,
762 0xcca0, 0x384,
763 0xcca1, 0x22b2,
764 0xcca2, 0x3012,
765 0xcca3, 0x1002,
766 0xcca4, 0x2be5,
767 0xcca5, 0x3005,
768 0xcca6, 0x41e8,
769 0xcca7, 0x5653,
770 0xcca8, 0x382,
771 0xcca9, 0x002,
772 0xccaa, 0x4258,
773 0xccab, 0x2474,
774 0xccac, 0x3c84,
775 0xccad, 0x6437,
776 0xccae, 0xdff4,
777 0xccaf, 0x6437,
778 0xccb0, 0x2ff5,
779 0xccb1, 0x3c05,
780 0xccb2, 0x8757,
781 0xccb3, 0xb888,
782 0xccb4, 0x9787,
783 0xccb5, 0xdff4,
784 0xccb6, 0x6724,
785 0xccb7, 0x866a,
786 0xccb8, 0x6f72,
787 0xccb9, 0x1002,
788 0xccba, 0x2d01,
789 0xccbb, 0x3011,
790 0xccbc, 0x1001,
791 0xccbd, 0xc620,
792 0xccbe, 0x14e5,
793 0xccbf, 0xc621,
794 0xccc0, 0xc53d,
795 0xccc1, 0xc622,
796 0xccc2, 0x3cbe,
797 0xccc3, 0xc623,
798 0xccc4, 0x4452,
799 0xccc5, 0xc624,
800 0xccc6, 0xc5c5,
801 0xccc7, 0xc625,
802 0xccc8, 0xe01e,
803 0xccc9, 0xc627,
804 0xccca, 0x000,
805 0xcccb, 0xc628,
806 0xcccc, 0x000,
807 0xcccd, 0xc62b,
808 0xccce, 0x000,
809 0xcccf, 0xc62c,
810 0xccd0, 0x000,
811 0xccd1, 0x000,
812 0xccd2, 0x2d01,
813 0xccd3, 0x3011,
814 0xccd4, 0x1001,
815 0xccd5, 0xc620,
816 0xccd6, 0x000,
817 0xccd7, 0xc621,
818 0xccd8, 0x000,
819 0xccd9, 0xc622,
820 0xccda, 0x0ce,
821 0xccdb, 0xc623,
822 0xccdc, 0x07f,
823 0xccdd, 0xc624,
824 0xccde, 0x032,
825 0xccdf, 0xc625,
826 0xcce0, 0x000,
827 0xcce1, 0xc627,
828 0xcce2, 0x000,
829 0xcce3, 0xc628,
830 0xcce4, 0x000,
831 0xcce5, 0xc62b,
832 0xcce6, 0x000,
833 0xcce7, 0xc62c,
834 0xcce8, 0x000,
835 0xcce9, 0x000,
836 0xccea, 0x2d01,
837 0xcceb, 0x3011,
838 0xccec, 0x1001,
839 0xcced, 0xc502,
840 0xccee, 0x609f,
841 0xccef, 0xc600,
842 0xccf0, 0x2a6e,
843 0xccf1, 0xc601,
844 0xccf2, 0x2a2c,
845 0xccf3, 0xc60c,
846 0xccf4, 0x5400,
847 0xccf5, 0xc710,
848 0xccf6, 0x700,
849 0xccf7, 0xc718,
850 0xccf8, 0x700,
851 0xccf9, 0xc720,
852 0xccfa, 0x4700,
853 0xccfb, 0xc728,
854 0xccfc, 0x700,
855 0xccfd, 0xc729,
856 0xccfe, 0x1207,
857 0xccff, 0xc801,
858 0xcd00, 0x7f50,
859 0xcd01, 0xc802,
860 0xcd02, 0x7760,
861 0xcd03, 0xc803,
862 0xcd04, 0x7fce,
863 0xcd05, 0xc804,
864 0xcd06, 0x520e,
865 0xcd07, 0xc805,
866 0xcd08, 0x5c11,
867 0xcd09, 0xc806,
868 0xcd0a, 0x3c51,
869 0xcd0b, 0xc807,
870 0xcd0c, 0x4061,
871 0xcd0d, 0xc808,
872 0xcd0e, 0x49c1,
873 0xcd0f, 0xc809,
874 0xcd10, 0x3840,
875 0xcd11, 0xc80a,
876 0xcd12, 0x000,
877 0xcd13, 0xc821,
878 0xcd14, 0x002,
879 0xcd15, 0xc822,
880 0xcd16, 0x046,
881 0xcd17, 0xc844,
882 0xcd18, 0x182f,
883 0xcd19, 0xc013,
884 0xcd1a, 0xf341,
885 0xcd1b, 0xc01a,
886 0xcd1c, 0x446,
887 0xcd1d, 0xc024,
888 0xcd1e, 0x1000,
889 0xcd1f, 0xc025,
890 0xcd20, 0xa00,
891 0xcd21, 0xc026,
892 0xcd22, 0xc0c,
893 0xcd23, 0xc027,
894 0xcd24, 0xc0c,
895 0xcd25, 0xc029,
896 0xcd26, 0x0a0,
897 0xcd27, 0xc030,
898 0xcd28, 0xa00,
899 0xcd29, 0xc03c,
900 0xcd2a, 0x01c,
901 0xcd2b, 0x000,
902 0xcd2c, 0x2b84,
903 0xcd2d, 0x3c74,
904 0xcd2e, 0x6435,
905 0xcd2f, 0xdff4,
906 0xcd30, 0x6435,
907 0xcd31, 0x2806,
908 0xcd32, 0x3006,
909 0xcd33, 0x8565,
910 0xcd34, 0x2b24,
911 0xcd35, 0x3c24,
912 0xcd36, 0x6436,
913 0xcd37, 0x1002,
914 0xcd38, 0x2b24,
915 0xcd39, 0x3c24,
916 0xcd3a, 0x6436,
917 0xcd3b, 0x4045,
918 0xcd3c, 0x8656,
919 0xcd3d, 0x1002,
920 0xcd3e, 0x2807,
921 0xcd3f, 0x31a7,
922 0xcd40, 0x20c4,
923 0xcd41, 0x3c24,
924 0xcd42, 0x6724,
925 0xcd43, 0x1002,
926 0xcd44, 0x2807,
927 0xcd45, 0x3187,
928 0xcd46, 0x20c4,
929 0xcd47, 0x3c24,
930 0xcd48, 0x6724,
931 0xcd49, 0x1002,
932 0xcd4a, 0x2514,
933 0xcd4b, 0x3c64,
934 0xcd4c, 0x6436,
935 0xcd4d, 0xdff4,
936 0xcd4e, 0x6436,
937 0xcd4f, 0x1002,
938 0xcd50, 0x2806,
939 0xcd51, 0x3cb6,
940 0xcd52, 0xc161,
941 0xcd53, 0x6134,
942 0xcd54, 0x6135,
943 0xcd55, 0x5443,
944 0xcd56, 0x303,
945 0xcd57, 0x6524,
946 0xcd58, 0x00b,
947 0xcd59, 0x1002,
948 0xcd5a, 0xd019,
949 0xcd5b, 0x2104,
950 0xcd5c, 0x3c24,
951 0xcd5d, 0x2105,
952 0xcd5e, 0x3805,
953 0xcd5f, 0x6524,
954 0xcd60, 0xdff4,
955 0xcd61, 0x4005,
956 0xcd62, 0x6524,
957 0xcd63, 0x2e8d,
958 0xcd64, 0x303d,
959 0xcd65, 0x5dd3,
960 0xcd66, 0x306,
961 0xcd67, 0x2ff7,
962 0xcd68, 0x38f7,
963 0xcd69, 0x60b7,
964 0xcd6a, 0xdffd,
965 0xcd6b, 0x00a,
966 0xcd6c, 0x1002,
967 0xcd6d, 0
968 };
969 int i, err; 336 int i, err;
970 337
971 err = set_phy_regs(phy, regs); 338 err = set_phy_regs(phy, regs);
@@ -976,9 +343,16 @@ static int ael2005_setup_twinax_edc(struct cphy *phy, int modtype)
976 343
977 msleep(50); 344 msleep(50);
978 345
979 for (i = 0; i < ARRAY_SIZE(twinax_edc) && !err; i += 2) 346 if (phy->priv != edc_twinax)
980 err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, twinax_edc[i], 347 err = t3_get_edc_fw(phy, EDC_TWX_AEL2005,
981 twinax_edc[i + 1]); 348 EDC_TWX_AEL2005_SIZE);
349 if (err)
350 return err;
351
352 for (i = 0; i < EDC_TWX_AEL2005_SIZE / sizeof(u16) && !err; i += 2)
353 err = t3_mdio_write(phy, MDIO_MMD_PMAPMD,
354 phy->phy_cache[i],
355 phy->phy_cache[i + 1]);
982 if (!err) 356 if (!err)
983 phy->priv = edc_twinax; 357 phy->priv = edc_twinax;
984 return err; 358 return err;
@@ -1195,405 +569,6 @@ static int ael2020_setup_twinax_edc(struct cphy *phy, int modtype)
1195 { MDIO_MMD_PMAPMD, 0xd092, 0xffff, 0x0000 }, 569 { MDIO_MMD_PMAPMD, 0xd092, 0xffff, 0x0000 },
1196 { 0, 0, 0, 0 } 570 { 0, 0, 0, 0 }
1197 }; 571 };
1198
1199 /* TWINAX EDC firmware */
1200 static u16 twinax_edc[] = {
1201 0xd800, 0x4009,
1202 0xd801, 0x2fff,
1203 0xd802, 0x300f,
1204 0xd803, 0x40aa,
1205 0xd804, 0x401c,
1206 0xd805, 0x401e,
1207 0xd806, 0x2ff4,
1208 0xd807, 0x3dc4,
1209 0xd808, 0x2035,
1210 0xd809, 0x3035,
1211 0xd80a, 0x6524,
1212 0xd80b, 0x2cb2,
1213 0xd80c, 0x3012,
1214 0xd80d, 0x1002,
1215 0xd80e, 0x26e2,
1216 0xd80f, 0x3022,
1217 0xd810, 0x1002,
1218 0xd811, 0x27d2,
1219 0xd812, 0x3022,
1220 0xd813, 0x1002,
1221 0xd814, 0x2822,
1222 0xd815, 0x3012,
1223 0xd816, 0x1002,
1224 0xd817, 0x2492,
1225 0xd818, 0x3022,
1226 0xd819, 0x1002,
1227 0xd81a, 0x2772,
1228 0xd81b, 0x3012,
1229 0xd81c, 0x1002,
1230 0xd81d, 0x23d2,
1231 0xd81e, 0x3022,
1232 0xd81f, 0x1002,
1233 0xd820, 0x22cd,
1234 0xd821, 0x301d,
1235 0xd822, 0x27f2,
1236 0xd823, 0x3022,
1237 0xd824, 0x1002,
1238 0xd825, 0x5553,
1239 0xd826, 0x0307,
1240 0xd827, 0x2522,
1241 0xd828, 0x3022,
1242 0xd829, 0x1002,
1243 0xd82a, 0x2142,
1244 0xd82b, 0x3012,
1245 0xd82c, 0x1002,
1246 0xd82d, 0x4016,
1247 0xd82e, 0x5e63,
1248 0xd82f, 0x0344,
1249 0xd830, 0x2142,
1250 0xd831, 0x3012,
1251 0xd832, 0x1002,
1252 0xd833, 0x400e,
1253 0xd834, 0x2522,
1254 0xd835, 0x3022,
1255 0xd836, 0x1002,
1256 0xd837, 0x2b52,
1257 0xd838, 0x3012,
1258 0xd839, 0x1002,
1259 0xd83a, 0x2742,
1260 0xd83b, 0x3022,
1261 0xd83c, 0x1002,
1262 0xd83d, 0x25e2,
1263 0xd83e, 0x3022,
1264 0xd83f, 0x1002,
1265 0xd840, 0x2fa4,
1266 0xd841, 0x3dc4,
1267 0xd842, 0x6624,
1268 0xd843, 0x414b,
1269 0xd844, 0x56b3,
1270 0xd845, 0x03c6,
1271 0xd846, 0x866b,
1272 0xd847, 0x400c,
1273 0xd848, 0x2712,
1274 0xd849, 0x3012,
1275 0xd84a, 0x1002,
1276 0xd84b, 0x2c4b,
1277 0xd84c, 0x309b,
1278 0xd84d, 0x56b3,
1279 0xd84e, 0x03c3,
1280 0xd84f, 0x866b,
1281 0xd850, 0x400c,
1282 0xd851, 0x2272,
1283 0xd852, 0x3022,
1284 0xd853, 0x1002,
1285 0xd854, 0x2742,
1286 0xd855, 0x3022,
1287 0xd856, 0x1002,
1288 0xd857, 0x25e2,
1289 0xd858, 0x3022,
1290 0xd859, 0x1002,
1291 0xd85a, 0x2fb4,
1292 0xd85b, 0x3dc4,
1293 0xd85c, 0x6624,
1294 0xd85d, 0x56b3,
1295 0xd85e, 0x03c3,
1296 0xd85f, 0x866b,
1297 0xd860, 0x401c,
1298 0xd861, 0x2c45,
1299 0xd862, 0x3095,
1300 0xd863, 0x5b53,
1301 0xd864, 0x2372,
1302 0xd865, 0x3012,
1303 0xd866, 0x13c2,
1304 0xd867, 0x5cc3,
1305 0xd868, 0x2712,
1306 0xd869, 0x3012,
1307 0xd86a, 0x1312,
1308 0xd86b, 0x2b52,
1309 0xd86c, 0x3012,
1310 0xd86d, 0x1002,
1311 0xd86e, 0x2742,
1312 0xd86f, 0x3022,
1313 0xd870, 0x1002,
1314 0xd871, 0x2582,
1315 0xd872, 0x3022,
1316 0xd873, 0x1002,
1317 0xd874, 0x2142,
1318 0xd875, 0x3012,
1319 0xd876, 0x1002,
1320 0xd877, 0x628f,
1321 0xd878, 0x2985,
1322 0xd879, 0x33a5,
1323 0xd87a, 0x25e2,
1324 0xd87b, 0x3022,
1325 0xd87c, 0x1002,
1326 0xd87d, 0x5653,
1327 0xd87e, 0x03d2,
1328 0xd87f, 0x401e,
1329 0xd880, 0x6f72,
1330 0xd881, 0x1002,
1331 0xd882, 0x628f,
1332 0xd883, 0x2304,
1333 0xd884, 0x3c84,
1334 0xd885, 0x6436,
1335 0xd886, 0xdff4,
1336 0xd887, 0x6436,
1337 0xd888, 0x2ff5,
1338 0xd889, 0x3005,
1339 0xd88a, 0x8656,
1340 0xd88b, 0xdfba,
1341 0xd88c, 0x56a3,
1342 0xd88d, 0xd05a,
1343 0xd88e, 0x2972,
1344 0xd88f, 0x3012,
1345 0xd890, 0x1392,
1346 0xd891, 0xd05a,
1347 0xd892, 0x56a3,
1348 0xd893, 0xdfba,
1349 0xd894, 0x0383,
1350 0xd895, 0x6f72,
1351 0xd896, 0x1002,
1352 0xd897, 0x2b45,
1353 0xd898, 0x3005,
1354 0xd899, 0x4178,
1355 0xd89a, 0x5653,
1356 0xd89b, 0x0384,
1357 0xd89c, 0x2a62,
1358 0xd89d, 0x3012,
1359 0xd89e, 0x1002,
1360 0xd89f, 0x2f05,
1361 0xd8a0, 0x3005,
1362 0xd8a1, 0x41c8,
1363 0xd8a2, 0x5653,
1364 0xd8a3, 0x0382,
1365 0xd8a4, 0x0002,
1366 0xd8a5, 0x4218,
1367 0xd8a6, 0x2474,
1368 0xd8a7, 0x3c84,
1369 0xd8a8, 0x6437,
1370 0xd8a9, 0xdff4,
1371 0xd8aa, 0x6437,
1372 0xd8ab, 0x2ff5,
1373 0xd8ac, 0x3c05,
1374 0xd8ad, 0x8757,
1375 0xd8ae, 0xb888,
1376 0xd8af, 0x9787,
1377 0xd8b0, 0xdff4,
1378 0xd8b1, 0x6724,
1379 0xd8b2, 0x866a,
1380 0xd8b3, 0x6f72,
1381 0xd8b4, 0x1002,
1382 0xd8b5, 0x2641,
1383 0xd8b6, 0x3021,
1384 0xd8b7, 0x1001,
1385 0xd8b8, 0xc620,
1386 0xd8b9, 0x0000,
1387 0xd8ba, 0xc621,
1388 0xd8bb, 0x0000,
1389 0xd8bc, 0xc622,
1390 0xd8bd, 0x00ce,
1391 0xd8be, 0xc623,
1392 0xd8bf, 0x007f,
1393 0xd8c0, 0xc624,
1394 0xd8c1, 0x0032,
1395 0xd8c2, 0xc625,
1396 0xd8c3, 0x0000,
1397 0xd8c4, 0xc627,
1398 0xd8c5, 0x0000,
1399 0xd8c6, 0xc628,
1400 0xd8c7, 0x0000,
1401 0xd8c8, 0xc62c,
1402 0xd8c9, 0x0000,
1403 0xd8ca, 0x0000,
1404 0xd8cb, 0x2641,
1405 0xd8cc, 0x3021,
1406 0xd8cd, 0x1001,
1407 0xd8ce, 0xc502,
1408 0xd8cf, 0x53ac,
1409 0xd8d0, 0xc503,
1410 0xd8d1, 0x2cd3,
1411 0xd8d2, 0xc600,
1412 0xd8d3, 0x2a6e,
1413 0xd8d4, 0xc601,
1414 0xd8d5, 0x2a2c,
1415 0xd8d6, 0xc605,
1416 0xd8d7, 0x5557,
1417 0xd8d8, 0xc60c,
1418 0xd8d9, 0x5400,
1419 0xd8da, 0xc710,
1420 0xd8db, 0x0700,
1421 0xd8dc, 0xc711,
1422 0xd8dd, 0x0f06,
1423 0xd8de, 0xc718,
1424 0xd8df, 0x0700,
1425 0xd8e0, 0xc719,
1426 0xd8e1, 0x0f06,
1427 0xd8e2, 0xc720,
1428 0xd8e3, 0x4700,
1429 0xd8e4, 0xc721,
1430 0xd8e5, 0x0f06,
1431 0xd8e6, 0xc728,
1432 0xd8e7, 0x0700,
1433 0xd8e8, 0xc729,
1434 0xd8e9, 0x1207,
1435 0xd8ea, 0xc801,
1436 0xd8eb, 0x7f50,
1437 0xd8ec, 0xc802,
1438 0xd8ed, 0x7760,
1439 0xd8ee, 0xc803,
1440 0xd8ef, 0x7fce,
1441 0xd8f0, 0xc804,
1442 0xd8f1, 0x520e,
1443 0xd8f2, 0xc805,
1444 0xd8f3, 0x5c11,
1445 0xd8f4, 0xc806,
1446 0xd8f5, 0x3c51,
1447 0xd8f6, 0xc807,
1448 0xd8f7, 0x4061,
1449 0xd8f8, 0xc808,
1450 0xd8f9, 0x49c1,
1451 0xd8fa, 0xc809,
1452 0xd8fb, 0x3840,
1453 0xd8fc, 0xc80a,
1454 0xd8fd, 0x0000,
1455 0xd8fe, 0xc821,
1456 0xd8ff, 0x0002,
1457 0xd900, 0xc822,
1458 0xd901, 0x0046,
1459 0xd902, 0xc844,
1460 0xd903, 0x182f,
1461 0xd904, 0xc013,
1462 0xd905, 0xf341,
1463 0xd906, 0xc084,
1464 0xd907, 0x0030,
1465 0xd908, 0xc904,
1466 0xd909, 0x1401,
1467 0xd90a, 0xcb0c,
1468 0xd90b, 0x0004,
1469 0xd90c, 0xcb0e,
1470 0xd90d, 0xa00a,
1471 0xd90e, 0xcb0f,
1472 0xd90f, 0xc0c0,
1473 0xd910, 0xcb10,
1474 0xd911, 0xc0c0,
1475 0xd912, 0xcb11,
1476 0xd913, 0x00a0,
1477 0xd914, 0xcb12,
1478 0xd915, 0x0007,
1479 0xd916, 0xc241,
1480 0xd917, 0xa000,
1481 0xd918, 0xc243,
1482 0xd919, 0x7fe0,
1483 0xd91a, 0xc604,
1484 0xd91b, 0x000e,
1485 0xd91c, 0xc609,
1486 0xd91d, 0x00f5,
1487 0xd91e, 0xc611,
1488 0xd91f, 0x000e,
1489 0xd920, 0xc660,
1490 0xd921, 0x9600,
1491 0xd922, 0xc687,
1492 0xd923, 0x0004,
1493 0xd924, 0xc60a,
1494 0xd925, 0x04f5,
1495 0xd926, 0x0000,
1496 0xd927, 0x2641,
1497 0xd928, 0x3021,
1498 0xd929, 0x1001,
1499 0xd92a, 0xc620,
1500 0xd92b, 0x14e5,
1501 0xd92c, 0xc621,
1502 0xd92d, 0xc53d,
1503 0xd92e, 0xc622,
1504 0xd92f, 0x3cbe,
1505 0xd930, 0xc623,
1506 0xd931, 0x4452,
1507 0xd932, 0xc624,
1508 0xd933, 0xc5c5,
1509 0xd934, 0xc625,
1510 0xd935, 0xe01e,
1511 0xd936, 0xc627,
1512 0xd937, 0x0000,
1513 0xd938, 0xc628,
1514 0xd939, 0x0000,
1515 0xd93a, 0xc62c,
1516 0xd93b, 0x0000,
1517 0xd93c, 0x0000,
1518 0xd93d, 0x2b84,
1519 0xd93e, 0x3c74,
1520 0xd93f, 0x6435,
1521 0xd940, 0xdff4,
1522 0xd941, 0x6435,
1523 0xd942, 0x2806,
1524 0xd943, 0x3006,
1525 0xd944, 0x8565,
1526 0xd945, 0x2b24,
1527 0xd946, 0x3c24,
1528 0xd947, 0x6436,
1529 0xd948, 0x1002,
1530 0xd949, 0x2b24,
1531 0xd94a, 0x3c24,
1532 0xd94b, 0x6436,
1533 0xd94c, 0x4045,
1534 0xd94d, 0x8656,
1535 0xd94e, 0x5663,
1536 0xd94f, 0x0302,
1537 0xd950, 0x401e,
1538 0xd951, 0x1002,
1539 0xd952, 0x2807,
1540 0xd953, 0x31a7,
1541 0xd954, 0x20c4,
1542 0xd955, 0x3c24,
1543 0xd956, 0x6724,
1544 0xd957, 0x1002,
1545 0xd958, 0x2807,
1546 0xd959, 0x3187,
1547 0xd95a, 0x20c4,
1548 0xd95b, 0x3c24,
1549 0xd95c, 0x6724,
1550 0xd95d, 0x1002,
1551 0xd95e, 0x24f4,
1552 0xd95f, 0x3c64,
1553 0xd960, 0x6436,
1554 0xd961, 0xdff4,
1555 0xd962, 0x6436,
1556 0xd963, 0x1002,
1557 0xd964, 0x2006,
1558 0xd965, 0x3d76,
1559 0xd966, 0xc161,
1560 0xd967, 0x6134,
1561 0xd968, 0x6135,
1562 0xd969, 0x5443,
1563 0xd96a, 0x0303,
1564 0xd96b, 0x6524,
1565 0xd96c, 0x00fb,
1566 0xd96d, 0x1002,
1567 0xd96e, 0x20d4,
1568 0xd96f, 0x3c24,
1569 0xd970, 0x2025,
1570 0xd971, 0x3005,
1571 0xd972, 0x6524,
1572 0xd973, 0x1002,
1573 0xd974, 0xd019,
1574 0xd975, 0x2104,
1575 0xd976, 0x3c24,
1576 0xd977, 0x2105,
1577 0xd978, 0x3805,
1578 0xd979, 0x6524,
1579 0xd97a, 0xdff4,
1580 0xd97b, 0x4005,
1581 0xd97c, 0x6524,
1582 0xd97d, 0x2e8d,
1583 0xd97e, 0x303d,
1584 0xd97f, 0x2408,
1585 0xd980, 0x35d8,
1586 0xd981, 0x5dd3,
1587 0xd982, 0x0307,
1588 0xd983, 0x8887,
1589 0xd984, 0x63a7,
1590 0xd985, 0x8887,
1591 0xd986, 0x63a7,
1592 0xd987, 0xdffd,
1593 0xd988, 0x00f9,
1594 0xd989, 0x1002,
1595 0xd98a, 0x0000,
1596 };
1597 int i, err; 572 int i, err;
1598 573
1599 /* set uC clock and activate it */ 574 /* set uC clock and activate it */
@@ -1606,10 +581,16 @@ static int ael2020_setup_twinax_edc(struct cphy *phy, int modtype)
1606 if (err) 581 if (err)
1607 return err; 582 return err;
1608 583
1609 /* write TWINAX EDC firmware into PHY */ 584 if (phy->priv != edc_twinax)
1610 for (i = 0; i < ARRAY_SIZE(twinax_edc) && !err; i += 2) 585 err = t3_get_edc_fw(phy, EDC_TWX_AEL2020,
1611 err = t3_mdio_write(phy, MDIO_MMD_PMAPMD, twinax_edc[i], 586 EDC_TWX_AEL2020_SIZE);
1612 twinax_edc[i + 1]); 587 if (err)
588 return err;
589
590 for (i = 0; i < EDC_TWX_AEL2020_SIZE / sizeof(u16) && !err; i += 2)
591 err = t3_mdio_write(phy, MDIO_MMD_PMAPMD,
592 phy->phy_cache[i],
593 phy->phy_cache[i + 1]);
1613 /* activate uC */ 594 /* activate uC */
1614 err = set_phy_regs(phy, uCactivate); 595 err = set_phy_regs(phy, uCactivate);
1615 if (!err) 596 if (!err)
diff --git a/drivers/net/cxgb3/common.h b/drivers/net/cxgb3/common.h
index d21b705501a9..1b2c305fb82b 100644
--- a/drivers/net/cxgb3/common.h
+++ b/drivers/net/cxgb3/common.h
@@ -566,6 +566,15 @@ struct cphy_ops {
566 566
567 u32 mmds; 567 u32 mmds;
568}; 568};
569enum {
570 EDC_OPT_AEL2005 = 0,
571 EDC_OPT_AEL2005_SIZE = 1084,
572 EDC_TWX_AEL2005 = 1,
573 EDC_TWX_AEL2005_SIZE = 1464,
574 EDC_TWX_AEL2020 = 2,
575 EDC_TWX_AEL2020_SIZE = 1628,
576 EDC_MAX_SIZE = EDC_TWX_AEL2020_SIZE, /* Max cache size */
577};
569 578
570/* A PHY instance */ 579/* A PHY instance */
571struct cphy { 580struct cphy {
@@ -577,6 +586,7 @@ struct cphy {
577 unsigned long fifo_errors; /* FIFO over/under-flows */ 586 unsigned long fifo_errors; /* FIFO over/under-flows */
578 const struct cphy_ops *ops; /* PHY operations */ 587 const struct cphy_ops *ops; /* PHY operations */
579 struct mdio_if_info mdio; 588 struct mdio_if_info mdio;
589 u16 phy_cache[EDC_MAX_SIZE]; /* EDC cache */
580}; 590};
581 591
582/* Convenience MDIO read/write wrappers */ 592/* Convenience MDIO read/write wrappers */
diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c
index 538dda4422dc..27e7ef592b59 100644
--- a/drivers/net/cxgb3/cxgb3_main.c
+++ b/drivers/net/cxgb3/cxgb3_main.c
@@ -964,6 +964,75 @@ static int bind_qsets(struct adapter *adap)
964 964
965#define FW_FNAME "cxgb3/t3fw-%d.%d.%d.bin" 965#define FW_FNAME "cxgb3/t3fw-%d.%d.%d.bin"
966#define TPSRAM_NAME "cxgb3/t3%c_psram-%d.%d.%d.bin" 966#define TPSRAM_NAME "cxgb3/t3%c_psram-%d.%d.%d.bin"
967#define AEL2005_OPT_EDC_NAME "cxgb3/ael2005_opt_edc.bin"
968#define AEL2005_TWX_EDC_NAME "cxgb3/ael2005_twx_edc.bin"
969#define AEL2020_TWX_EDC_NAME "cxgb3/ael2005_twx_edc.bin"
970
971static inline const char *get_edc_fw_name(int edc_idx)
972{
973 const char *fw_name = NULL;
974
975 switch (edc_idx) {
976 case EDC_OPT_AEL2005:
977 fw_name = AEL2005_OPT_EDC_NAME;
978 break;
979 case EDC_TWX_AEL2005:
980 fw_name = AEL2005_TWX_EDC_NAME;
981 break;
982 case EDC_TWX_AEL2020:
983 fw_name = AEL2020_TWX_EDC_NAME;
984 break;
985 }
986 return fw_name;
987}
988
989int t3_get_edc_fw(struct cphy *phy, int edc_idx, int size)
990{
991 struct adapter *adapter = phy->adapter;
992 const struct firmware *fw;
993 char buf[64];
994 u32 csum;
995 const __be32 *p;
996 u16 *cache = phy->phy_cache;
997 int i, ret;
998
999 snprintf(buf, sizeof(buf), get_edc_fw_name(edc_idx));
1000
1001 ret = request_firmware(&fw, buf, &adapter->pdev->dev);
1002 if (ret < 0) {
1003 dev_err(&adapter->pdev->dev,
1004 "could not upgrade firmware: unable to load %s\n",
1005 buf);
1006 return ret;
1007 }
1008
1009 /* check size, take checksum in account */
1010 if (fw->size > size + 4) {
1011 CH_ERR(adapter, "firmware image too large %u, expected %d\n",
1012 (unsigned int)fw->size, size + 4);
1013 ret = -EINVAL;
1014 }
1015
1016 /* compute checksum */
1017 p = (const __be32 *)fw->data;
1018 for (csum = 0, i = 0; i < fw->size / sizeof(csum); i++)
1019 csum += ntohl(p[i]);
1020
1021 if (csum != 0xffffffff) {
1022 CH_ERR(adapter, "corrupted firmware image, checksum %u\n",
1023 csum);
1024 ret = -EINVAL;
1025 }
1026
1027 for (i = 0; i < size / 4 ; i++) {
1028 *cache++ = (be32_to_cpu(p[i]) & 0xffff0000) >> 16;
1029 *cache++ = be32_to_cpu(p[i]) & 0xffff;
1030 }
1031
1032 release_firmware(fw);
1033
1034 return ret;
1035}
967 1036
968static int upgrade_fw(struct adapter *adap) 1037static int upgrade_fw(struct adapter *adap)
969{ 1038{
diff --git a/firmware/Makefile b/firmware/Makefile
index 621de8e952f7..44313b25580f 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -41,7 +41,10 @@ fw-shipped-$(CONFIG_CASSINI) += sun/cassini.bin
41fw-shipped-$(CONFIG_COMPUTONE) += intelliport2.bin 41fw-shipped-$(CONFIG_COMPUTONE) += intelliport2.bin
42fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \ 42fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \
43 cxgb3/t3c_psram-1.1.0.bin \ 43 cxgb3/t3c_psram-1.1.0.bin \
44 cxgb3/t3fw-7.4.0.bin 44 cxgb3/t3fw-7.4.0.bin \
45 cxgb3/ael2005_opt_edc.bin \
46 cxgb3/ael2005_twx_edc.bin \
47 cxgb3/ael2020_twx_edc.bin
45fw-shipped-$(CONFIG_DVB_AV7110) += av7110/bootcode.bin 48fw-shipped-$(CONFIG_DVB_AV7110) += av7110/bootcode.bin
46fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin 49fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin
47fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \ 50fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \
diff --git a/firmware/WHENCE b/firmware/WHENCE
index 0f5649a08c0c..d9e3a94cb4df 100644
--- a/firmware/WHENCE
+++ b/firmware/WHENCE
@@ -418,6 +418,23 @@ License: GPLv2 or OpenIB.org BSD license, no source visible
418 418
419-------------------------------------------------------------------------- 419--------------------------------------------------------------------------
420 420
421Driver: cxgb3 - Chelsio Terminator 3 1G/10G Ethernet adapter
422
423File: cxgb3/ael2005_opt_edc.bin.ihex
424File: cxgb3/ael2005_twx_edc.bin.ihex
425File: cxgb3/ael2020_twx_edc.bin.ihex
426
427Licence:
428 * Copyright (c) 2007-2009 NetLogic Microsystems, Inc.
429 *
430 * Permission is hereby granted for the distribution of this firmware
431 * data in hexadecimal or equivalent format, provided this copyright
432 * notice is accompanying it.
433
434Found in hex form in kernel source.
435
436--------------------------------------------------------------------------
437
421Driver: e100 -- Intel PRO/100 Ethernet NIC 438Driver: e100 -- Intel PRO/100 Ethernet NIC
422 439
423File: e100/d101m_ucode.bin 440File: e100/d101m_ucode.bin
diff --git a/firmware/cxgb3/ael2005_opt_edc.bin.ihex b/firmware/cxgb3/ael2005_opt_edc.bin.ihex
new file mode 100644
index 000000000000..c1d6e5d3bea7
--- /dev/null
+++ b/firmware/cxgb3/ael2005_opt_edc.bin.ihex
@@ -0,0 +1,69 @@
1:10000000CC002FF4CC013CD4CC022015CC0331051C
2:10001000CC046524CC0527FFCC06300FCC072C8BF5
3:10002000CC08300BCC094009CC0A400ECC0B2F7207
4:10003000CC0C3002CC0D1002CC0E2172CC0F301241
5:10004000CC101002CC1125D2CC123012CC131002DD
6:10005000CC14D01ECC1527D2CC163012CC171002DF
7:10006000CC182004CC193C84CC1A6436CC1B200755
8:10007000CC1C3F87CC1D8676CC1E40B7CC1FA74634
9:10008000CC204047CC215673CC222982CC2330028D
10:10009000CC2413D2CC258BBDCC262862CC273012A1
11:1000A000CC281002CC292092CC2A3012CC2B100262
12:1000B000CC2C5CC3CC2D0314CC2E2942CC2F300287
13:1000C000CC301002CC31D019CC322032CC333012AB
14:1000D000CC341002CC352A04CC363C74CC37643591
15:1000E000CC382FA4CC393CD4CC3A6624CC3B5563D5
16:1000F000CC3C2D42CC3D3002CC3E13D2CC3F464DC1
17:10010000CC402862CC413012CC421002CC43203289
18:10011000CC443012CC451002CC462FB4CC473CD452
19:10012000CC486624CC495563CC4A2D42CC4B300296
20:10013000CC4C13D2CC4D2ED2CC4E3002CC4F100230
21:10014000CC502FD2CC513002CC521002CC530004F0
22:10015000CC542942CC553002CC561002CC572092B8
23:10016000CC583012CC591002CC5A5CC3CC5B03176C
24:10017000CC5C2F72CC5D3002CC5E1002CC5F294289
25:10018000CC603002CC611002CC6222CDCC63301D39
26:10019000CC642862CC653012CC661002CC672ED2BB
27:1001A000CC683002CC691002CC6A2D72CC6B300264
28:1001B000CC6C1002CC6D628FCC6E2112CC6F3012E1
29:1001C000CC701002CC715AA3CC722DC2CC73300209
30:1001D000CC741312CC756F72CC761002CC772807D2
31:1001E000CC7831A7CC7920C4CC7A3C24CC7B672452
32:1001F000CC7C1002CC7D2807CC7E3187CC7F20C4FC
33:10020000CC803C24CC816724CC821002CC83251482
34:10021000CC843C64CC856436CC86DFF4CC876436F1
35:10022000CC881002CC8940A4CC8A643CCC8B40168C
36:10023000CC8C8C6CCC8D2B24CC8E3C24CC8F643518
37:10024000CC901002CC912B24CC923C24CC93643AD9
38:10025000CC944025CC958A5ACC961002CC97273165
39:10026000CC983011CC991001CC9AC7A0CC9B01003E
40:10027000CC9CC502CC9D53ACCC9EC503CC9FD5D5A0
41:10028000CCA0C600CCA12A6DCCA2C601CCA32A4C1E
42:10029000CCA4C602CCA50111CCA6C60CCCA7590093
43:1002A000CCA8C710CCA90700CCAAC718CCAB0700B4
44:1002B000CCACC720CCAD4700CCAEC801CCAF7F5092
45:1002C000CCB0C802CCB17760CCB2C803CCB37FCE7F
46:1002D000CCB4C804CCB55700CCB6C805CCB75F11B8
47:1002E000CCB8C806CCB94751CCBAC807CCBB57E18B
48:1002F000CCBCC808CCBD2700CCBEC809CCBF000010
49:10030000CCC0C821CCC10002CCC2C822CCC30014CE
50:10031000CCC4C832CCC51186CCC6C847CCC71E02D7
51:10032000CCC8C013CCC9F341CCCAC01ACCCB04464C
52:10033000CCCCC024CCCD1000CCCEC025CCCF0A0074
53:10034000CCD0C026CCD10C0CCCD2C027CCD30C0C3A
54:10035000CCD4C029CCD500A0CCD6C030CCD70A0094
55:10036000CCD8C03CCCD9001CCCDAC005CCDB7A069A
56:10037000CCDC0000CCDD2731CCDE3011CCDF10012D
57:10038000CCE0C620CCE10000CCE2C621CCE3003FAB
58:10039000CCE4C622CCE50000CCE6C623CCE70000C6
59:1003A000CCE8C624CCE90000CCEAC625CCEB0000A2
60:1003B000CCECC627CCED0000CCEEC628CCEF00007C
61:1003C000CCF0C62CCCF10000CCF20000CCF3280617
62:1003D000CCF43CB6CCF5C161CCF66134CCF76135D8
63:1003E000CCF85443CCF90303CCFA6524CCFB000BC6
64:1003F000CCFC1002CCFD2104CCFE3C24CCFF21051A
65:10040000CD003805CD016524CD02DFF4CD034005D4
66:10041000CD046524CD051002CD065DD3CD070306BE
67:10042000CD082FF7CD0938F7CD0A60B7CD0BDFFD2A
68:10043000CD0C000ACD0D1002CD0E00007CC7AE59C8
69:00000001FF
diff --git a/firmware/cxgb3/ael2005_twx_edc.bin.ihex b/firmware/cxgb3/ael2005_twx_edc.bin.ihex
new file mode 100644
index 000000000000..9b5e9e51fcb7
--- /dev/null
+++ b/firmware/cxgb3/ael2005_twx_edc.bin.ihex
@@ -0,0 +1,93 @@
1:10000000CC004009CC0127FFCC02300FCC0340AA22
2:10001000CC04401CCC05401ECC062FF4CC073CD4AD
3:10002000CC082035CC093145CC0A6524CC0B26A25E
4:10003000CC0C3012CC0D1002CC0E29C2CC0F3002E9
5:10004000CC101002CC112072CC123012CC13100242
6:10005000CC1422CDCC15301DCC162E52CC1730121C
7:10006000CC181002CC1928E2CC1A3002CC1B10029A
8:10007000CC1C628FCC1D2AC2CC1E3012CC1F1002A9
9:10008000CC205553CC212AE2CC223002CC231302BF
10:10009000CC24401ECC252BE2CC263012CC271002DB
11:1000A000CC282DA2CC293012CC2A1002CC2B2BA28A
12:1000B000CC2C3002CC2D1002CC2E5EE3CC2F0305CD
13:1000C000CC30400ECC312BC2CC323002CC331002BB
14:1000D000CC342B82CC353012CC361002CC37566360
15:1000E000CC380302CC39401ECC3A6F72CC3B1002A4
16:1000F000CC3C628FCC3D2BE2CC3E3012CC3F100288
17:10010000CC4022CDCC41301DCC422E52CC433012BB
18:10011000CC441002CC452522CC463012CC471002EC
19:10012000CC482DA2CC493012CC4A1002CC4B2CA288
20:10013000CC4C3012CC4D1002CC4E2FA4CC4F3CD422
21:10014000CC506624CC51410BCC5256B3CC5303C493
22:10015000CC542FB2CC553002CC561002CC57220BC7
23:10016000CC58303BCC5956B3CC5A03C3CC5B866BCE
24:10017000CC5C400CCC5D23A2CC5E3012CC5F100274
25:10018000CC602DA2CC613012CC621002CC632CA2C8
26:10019000CC643012CC651002CC662FB4CC673CD452
27:1001A000CC686624CC6956B3CC6A03C3CC6B866B2F
28:1001B000CC6C401CCC6D2205CC6E3035CC6F5B53C3
29:1001C000CC702C52CC713002CC7213C2CC735CC395
30:1001D000CC740317CC752522CC763012CC77100264
31:1001E000CC782DA2CC793012CC7A1002CC7B2B8229
32:1001F000CC7C3012CC7D1002CC7E5663CC7F0303C6
33:10020000CC80401ECC810004CC822C42CC833012A6
34:10021000CC841002CC856F72CC861002CC87628FA2
35:10022000CC882304CC893C84CC8A6436CC8BDFF424
36:10023000CC8C6436CC8D2FF5CC8E3005CC8F865689
37:10024000CC90DFBACC9156A3CC92D05ACC9321C299
38:10025000CC943012CC951392CC96D05ACC9756A30E
39:10026000CC98DFBACC990383CC9A6F72CC9B1002E6
40:10027000CC9C28C5CC9D3005CC9E4178CC9F565354
41:10028000CCA00384CCA122B2CCA23012CCA3100209
42:10029000CCA42BE5CCA53005CCA641E8CCA7565381
43:1002A000CCA80382CCA90002CCAA4258CCAB2474BF
44:1002B000CCAC3C84CCAD6437CCAEDFF4CCAF64378F
45:1002C000CCB02FF5CCB13C05CCB28757CCB3B888B5
46:1002D000CCB49787CCB5DFF4CCB66724CCB7866AAC
47:1002E000CCB86F72CCB91002CCBA2D01CCBB301196
48:1002F000CCBC1001CCBDC620CCBE14E5CCBFC62101
49:10030000CCC0C53DCCC1C622CCC23CBECCC3C623EA
50:10031000CCC44452CCC5C624CCC6C5C5CCC7C625A2
51:10032000CCC8E01ECCC9C627CCCA0000CCCBC6289E
52:10033000CCCC0000CCCDC62BCCCE0000CCCFC62C74
53:10034000CCD00000CCD10000CCD22D01CCD33011C8
54:10035000CCD41001CCD5C620CCD60000CCD7C62139
55:10036000CCD80000CCD9C622CCDA00CECCDBC62358
56:10037000CCDC007FCCDDC624CCDE0032CCDFC62551
57:10038000CCE00000CCE1C627CCE20000CCE3C628DC
58:10039000CCE40000CCE5C62BCCE60000CCE7C62CB4
59:1003A000CCE80000CCE90000CCEA2D01CCEB301108
60:1003B000CCEC1001CCEDC502CCEE609FCCEFC600BA
61:1003C000CCF02A6ECCF1C601CCF22A2CCCF3C60CB0
62:1003D000CCF45400CCF5C710CCF60700CCF7C71806
63:1003E000CCF80700CCF9C720CCFA4700CCFBC728D3
64:1003F000CCFC0700CCFDC729CCFE1207CCFFC801FE
65:10040000CD007F50CD01C802CD027760CD03C80377
66:10041000CD047FCECD05C804CD06520ECD07C8054C
67:10042000CD085C11CD09C806CD0A3C51CD0BC807DB
68:10043000CD0C4061CD0DC808CD0E49C1CD0FC80906
69:10044000CD103840CD11C80ACD120000CD13C821FF
70:10045000CD140002CD15C822CD160046CD17C844D4
71:10046000CD18182FCD19C013CD1AF341CD1BC01ACA
72:10047000CD1C0446CD1DC024CD1E1000CD1FC025AF
73:10048000CD200A00CD21C026CD220C0CCD23C027C3
74:10049000CD240C0CCD25C029CD2600A0CD27C03001
75:1004A000CD280A00CD29C03CCD2A001CCD2B000050
76:1004B000CD2C2B84CD2D3C74CD2E6435CD2FDFF487
77:1004C000CD306435CD312806CD323006CD3385654B
78:1004D000CD342B24CD353C24CD366436CD371002B7
79:1004E000CD382B24CD393C24CD3A6436CD3B404524
80:1004F000CD3C8656CD3D1002CD3E2807CD3F31A7DD
81:10050000CD4020C4CD413C24CD426724CD431002D0
82:10051000CD442807CD453187CD4620C4CD473C2466
83:10052000CD486724CD491002CD4A2514CD4B3C64FB
84:10053000CD4C6436CD4DDFF4CD4E6436CD4F100238
85:10054000CD502806CD513CB6CD52C161CD5361345A
86:10055000CD546135CD555443CD560303CD57652455
87:10056000CD58000BCD591002CD5AD019CD5B2104C6
88:10057000CD5C3C24CD5D2105CD5E3805CD5F652485
89:10058000CD60DFF4CD614005CD626524CD632E8D55
90:10059000CD64303DCD655DD3CD660306CD672FF7C5
91:1005A000CD6838F7CD6960B7CD6ADFFDCD6B000A45
92:0C05B000CD6C1002CD6D000052A76B0E48
93:00000001FF
diff --git a/firmware/cxgb3/ael2020_twx_edc.bin.ihex b/firmware/cxgb3/ael2020_twx_edc.bin.ihex
new file mode 100644
index 000000000000..8b1337f4c329
--- /dev/null
+++ b/firmware/cxgb3/ael2020_twx_edc.bin.ihex
@@ -0,0 +1,100 @@
1:10000000D8004009D8012FFFD802300FD80340AAEA
2:10001000D804401CD805401ED8062FF4D8073DC48C
3:10002000D8082035D8093035D80A6524D80B2CB229
4:10003000D80C3012D80D1002D80E26E2D80F30227C
5:10004000D8101002D81127D2D8123022D81310029B
6:10005000D8142822D8153012D8161002D817249296
7:10006000D8183022D8191002D81A2772D81B30128B
8:10007000D81C1002D81D23D2D81E3022D81F10023F
9:10008000D82022CDD821301DD82227F2D8233022E3
10:10009000D8241002D8255553D8260307D82725225F
11:1000A000D8283022D8291002D82A2142D82B301241
12:1000B000D82C1002D82D4016D82E5E63D82F0344BA
13:1000C000D8302142D8313012D8321002D833400E05
14:1000D000D8342522D8353022D8361002D8372B52C2
15:1000E000D8383012D8391002D83A2742D83B3022BB
16:1000F000D83C1002D83D25E2D83E3022D83F10022D
17:10010000D8402FA4D8413DC4D8426624D843414B9F
18:10011000D84456B3D84503C6D846866BD847400C5A
19:10012000D8482712D8493012D84A1002D84B2C4B45
20:10013000D84C309BD84D56B3D84E03C3D84F866B9E
21:10014000D850400CD8512272D8523022D8531002C5
22:10015000D8542742D8553022D8561002D85725E215
23:10016000D8583022D8591002D85A2FB4D85B3DC481
24:10017000D85C6624D85D56B3D85E03C3D85F866B5F
25:10018000D860401CD8612C45D8623095D8635B5349
26:10019000D8642372D8653012D86613C2D8675CC39E
27:1001A000D8682712D8693012D86A1312D86B2B522C
28:1001B000D86C3012D86D1002D86E2742D86F30221A
29:1001C000D8701002D8712582D8723022D8731002EC
30:1001D000D8742142D8753012D8761002D877628F41
31:1001E000D8782985D87933A5D87A25E2D87B3022EA
32:1001F000D87C1002D87D5653D87E03D2D87F401EBB
33:10020000D8806F72D8811002D882628FD88323047D
34:10021000D8843C84D8856436D886DFF4D8876436A1
35:10022000D8882FF5D8893005D88A8656D88BDFBA7A
36:10023000D88C56A3D88DD05AD88E2972D88F301228
37:10024000D8901392D891D05AD89256A3D893DFBAA7
38:10025000D8940383D8956F72D8961002D8972B45FF
39:10026000D8983005D8994178D89A5653D89B0384AA
40:10027000D89C2A62D89D3012D89E1002D89F2F0594
41:10028000D8A03005D8A141C8D8A25653D8A303821C
42:10029000D8A40002D8A54218D8A62474D8A73C84B4
43:1002A000D8A86437D8A9DFF4D8AA6437D8AB2FF51B
44:1002B000D8AC3C05D8AD8757D8AEB888D8AF9787AB
45:1002C000D8B0DFF4D8B16724D8B2866AD8B36F72D9
46:1002D000D8B41002D8B52641D8B63021D8B710010D
47:1002E000D8B8C620D8B90000D8BAC621D8BB0000FB
48:1002F000D8BCC622D8BD00CED8BEC623D8BF007F8A
49:10030000D8C0C624D8C10032D8C2C625D8C3000080
50:10031000D8C4C627D8C50000D8C6C628D8C700008C
51:10032000D8C8C62CD8C90000D8CA0000D8CB2641EE
52:10033000D8CC3021D8CD1001D8CEC502D8CF53ACFF
53:10034000D8D0C503D8D12CD3D8D2C600D8D32A6EE2
54:10035000D8D4C601D8D52A2CD8D6C605D8D7555753
55:10036000D8D8C60CD8D95400D8DAC710D8DB0700C3
56:10037000D8DCC711D8DD0F06D8DEC718D8DF0700D4
57:10038000D8E0C719D8E10F06D8E2C720D8E3470064
58:10039000D8E4C721D8E50F06D8E6C728D8E7070074
59:1003A000D8E8C729D8E91207D8EAC801D8EB7F50A6
60:1003B000D8ECC802D8ED7760D8EEC803D8EF7FCE6E
61:1003C000D8F0C804D8F1520ED8F2C805D8F35C11A1
62:1003D000D8F4C806D8F53C51D8F6C807D8F740611C
63:1003E000D8F8C808D8F949C1D8FAC809D8FB3840A4
64:1003F000D8FCC80AD8FD0000D8FEC821D8FF0002EA
65:10040000D900C822D9010046D902C844D903182FFF
66:10041000D904C013D905F341D906C084D9070030E7
67:10042000D908C904D9091401D90ACB0CD90B000485
68:10043000D90CCB0ED90DA00AD90ECB0FD90FC0C045
69:10044000D910CB10D911C0C0D912CB11D91300A02B
70:10045000D914CB12D9150007D916C241D917A0005B
71:10046000D918C243D9197FE0D91AC604D91B000E86
72:10047000D91CC609D91D00F5D91EC611D91F000EF9
73:10048000D920C660D9219600D922C687D923000475
74:10049000D924C60AD92504F5D9260000D927264132
75:1004A000D9283021D9291001D92AC620D92B14E501
76:1004B000D92CC621D92DC53DD92EC622D92F3CBE57
77:1004C000D930C623D9314452D932C624D933C5C50F
78:1004D000D934C625D935E01ED936C627D93700000C
79:1004E000D938C628D9390000D93AC62CD93B0000E2
80:1004F000D93C0000D93D2B84D93E3C74D93F6435AA
81:10050000D940DFF4D9416435D9422806D9433006B1
82:10051000D9448565D9452B24D9463C24D94764362E
83:10052000D9481002D9492B24D94A3C24D94B6436E6
84:10053000D94C4045D94D8656D94E5663D94F030202
85:10054000D950401ED9511002D9522807D95331A78A
86:10055000D95420C4D9553C24D9566724D957100200
87:10056000D9582807D9593187D95A20C4D95B3C2496
88:10057000D95C6724D95D1002D95E24F4D95F3C644C
89:10058000D9606436D961DFF4D9626436D963100268
90:10059000D9642006D9653D76D966C161D9676134D1
91:1005A000D9686135D9695443D96A0303D96B652485
92:1005B000D96C00FBD96D1002D96E20D4D96F3C24C0
93:1005C000D9702025D9713005D9726524D9731002EC
94:1005D000D974D019D9752104D9763C24D97721054D
95:1005E000D9783805D9796524D97ADFF4D97B4005E3
96:1005F000D97C6524D97D2E8DD97E303DD97F2408C4
97:10060000D98035D8D9815DD3D9820307D98388872A
98:10061000D98463A7D9858887D98663A7D987DFFD61
99:10062000D98800F9D9891002D98A0000878C30D97D
100:00000001FF