700-bgmac-add-support-for-the-3rd-bus-core-device.patch 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. From f5d5afc0b1402aae0f6a2350e43241603dbaff1e Mon Sep 17 00:00:00 2001
  2. From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <zajec5@gmail.com>
  3. Date: Wed, 13 May 2015 10:46:47 +0200
  4. Subject: [PATCH] bgmac: add support for the 3rd bus core (device)
  5. MIME-Version: 1.0
  6. Content-Type: text/plain; charset=UTF-8
  7. Content-Transfer-Encoding: 8bit
  8. So far we were supporting up to 2 cores but recent devices (e.g. Netgear
  9. R8000) may use 3rd as well. Lower ones (1st, 2nd) are usually used for
  10. some offloading then.
  11. Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
  12. ---
  13. drivers/net/ethernet/broadcom/bgmac.c | 28 +++++++++++++++++++++++-----
  14. 1 file changed, 23 insertions(+), 5 deletions(-)
  15. --- a/drivers/net/ethernet/broadcom/bgmac.c
  16. +++ b/drivers/net/ethernet/broadcom/bgmac.c
  17. @@ -1561,11 +1561,20 @@ static int bgmac_probe(struct bcma_devic
  18. struct net_device *net_dev;
  19. struct bgmac *bgmac;
  20. struct ssb_sprom *sprom = &core->bus->sprom;
  21. - u8 *mac = core->core_unit ? sprom->et1mac : sprom->et0mac;
  22. + u8 *mac;
  23. int err;
  24. - /* We don't support 2nd, 3rd, ... units, SPROM has to be adjusted */
  25. - if (core->core_unit > 1) {
  26. + switch (core->core_unit) {
  27. + case 0:
  28. + mac = sprom->et0mac;
  29. + break;
  30. + case 1:
  31. + mac = sprom->et1mac;
  32. + break;
  33. + case 2:
  34. + mac = sprom->et2mac;
  35. + break;
  36. + default:
  37. pr_err("Unsupported core_unit %d\n", core->core_unit);
  38. return -ENOTSUPP;
  39. }
  40. @@ -1600,8 +1609,17 @@ static int bgmac_probe(struct bcma_devic
  41. }
  42. bgmac->cmn = core->bus->drv_gmac_cmn.core;
  43. - bgmac->phyaddr = core->core_unit ? sprom->et1phyaddr :
  44. - sprom->et0phyaddr;
  45. + switch (core->core_unit) {
  46. + case 0:
  47. + bgmac->phyaddr = sprom->et0phyaddr;
  48. + break;
  49. + case 1:
  50. + bgmac->phyaddr = sprom->et1phyaddr;
  51. + break;
  52. + case 2:
  53. + bgmac->phyaddr = sprom->et2phyaddr;
  54. + break;
  55. + }
  56. bgmac->phyaddr &= BGMAC_PHY_MASK;
  57. if (bgmac->phyaddr == BGMAC_PHY_MASK) {
  58. bgmac_err(bgmac, "No PHY found\n");