1. 14 10月, 2020 2 次提交
    • W
      macb: support the two tx descriptors on at91rm9200 · 0a4e9ce1
      Willy Tarreau 提交于
      The at91rm9200 variant used by a few chips including the MSC313 supports
      two Tx descriptors (one frame being serialized and another one queued).
      However the driver only implemented a single one, which adds a dead time
      after each transfer to receive and process the interrupt and wake the
      queue up, preventing from reaching line rate.
      
      This patch implements a very basic 2-deep queue to address this limitation.
      The tests run on a Breadbee board equipped with an MSC313E show that at
      1 GHz, HTTP traffic on medium-sized objects (45kB) was limited to exactly
      50 Mbps before this patch, and jumped to 76 Mbps with this patch. And tests
      on a single TCP stream with an MTU of 576 jump from 10kpps to 15kpps. With
      1500 byte packets it's now possible to reach line rate versus 75 Mbps
      before.
      
      Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
      Cc: Claudiu Beznea <claudiu.beznea@microchip.com>
      Cc: Daniel Palmer <daniel@0x0f.com>
      Signed-off-by: NWilly Tarreau <w@1wt.eu>
      Link: https://lore.kernel.org/r/20201011090944.10607-4-w@1wt.euSigned-off-by: NJakub Kicinski <kuba@kernel.org>
      0a4e9ce1
    • W
      macb: prepare at91 to use a 2-frame TX queue · 73d74228
      Willy Tarreau 提交于
      The RM9200 supports one frame being sent while another one is waiting in
      queue. This avoids the dead time that follows the emission of a frame
      and which prevents one from reaching line speed.
      
      Right now the driver supports only a single skb, so we'll first replace
      the rm9200-specific skb info with an array of two macb_tx_skb (already
      used by other drivers). This patch only moves the skb_length to
      txq[0].size and skb_physaddr to skb[0].mapping but doesn't perform any
      other change. It already uses [desc] in order to minimize future changes.
      
      Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
      Cc: Claudiu Beznea <claudiu.beznea@microchip.com>
      Cc: Daniel Palmer <daniel@0x0f.com>
      Signed-off-by: NWilly Tarreau <w@1wt.eu>
      Link: https://lore.kernel.org/r/20201011090944.10607-3-w@1wt.euSigned-off-by: NJakub Kicinski <kuba@kernel.org>
      73d74228
  2. 01 10月, 2020 1 次提交
  3. 26 9月, 2020 1 次提交
    • J
      drivers/net/ethernet: clean up mis-targeted comments · d0ea5cbd
      Jesse Brandeburg 提交于
      As part of the W=1 cleanups for ethernet, a million [*] driver
      comments had to be cleaned up to get the W=1 compilation to
      succeed. This change finally makes the drivers/net/ethernet tree
      compile with W=1 set on the command line. NOTE: The kernel uses
      kdoc style (see Documentation/process/kernel-doc.rst) when
      documenting code, not doxygen or other styles.
      
      After this patch the x86_64 build has no warnings from W=1, however
      scripts/kernel-doc says there are 1545 more warnings in source files, that
      I need to develop a script to fix in a followup patch.
      
      The errors fixed here are all kdoc of a few classes, with a few outliers:
      In file included from drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c:10:
      drivers/net/ethernet/qlogic/netxen/netxen_nic.h:1193:18: warning: ‘FW_DUMP_LEVELS’ defined but not used [-Wunused-const-variable=]
       1193 | static const u32 FW_DUMP_LEVELS[] = { 0x3, 0x7, 0xf, 0x1f, 0x3f, 0x7f, 0xff };
            |                  ^~~~~~~~~~~~~~
      ... repeats 4 times...
      drivers/net/ethernet/sun/cassini.c:2084:24: warning: suggest braces around empty body in an ‘else’ statement [-Wempty-body]
       2084 |    RX_USED_ADD(page, i);
      drivers/net/ethernet/natsemi/ns83820.c: In function ‘phy_intr’:
      drivers/net/ethernet/natsemi/ns83820.c:603:6: warning: variable ‘tbisr’ set but not used [-Wunused-but-set-variable]
        603 |  u32 tbisr, tanar, tanlpar;
            |      ^~~~~
      drivers/net/ethernet/natsemi/ns83820.c: In function ‘ns83820_get_link_ksettings’:
      drivers/net/ethernet/natsemi/ns83820.c:1207:11: warning: variable ‘tanar’ set but not used [-Wunused-but-set-variable]
       1207 |  u32 cfg, tanar, tbicr;
            |           ^~~~~
      drivers/net/ethernet/packetengines/yellowfin.c:1063:18: warning: variable ‘yf_size’ set but not used [-Wunused-but-set-variable]
       1063 |   int data_size, yf_size;
            |                  ^~~~~~~
      
      Normal kdoc fixes:
      warning: Function parameter or member 'x' not described in 'y'
      warning: Excess function parameter 'x' description in 'y'
      warning: Cannot understand <string> on line <NNN> - I thought it was a doc line
      
      [*] - ok it wasn't quite a million, but it felt like it.
      Signed-off-by: NJesse Brandeburg <jesse.brandeburg@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d0ea5cbd
  4. 15 9月, 2020 1 次提交
  5. 07 9月, 2020 1 次提交
  6. 05 8月, 2020 1 次提交
    • S
      net: macb: Properly handle phylink on at91sam9x · f7ba7dbf
      Stefan Roese 提交于
      I just recently noticed that ethernet does not work anymore since v5.5
      on the GARDENA smart Gateway, which is based on the AT91SAM9G25.
      Debugging showed that the "GEM bits" in the NCFGR register are now
      unconditionally accessed, which is incorrect for the !macb_is_gem()
      case.
      
      This patch adds the macb_is_gem() checks back to the code
      (in macb_mac_config() & macb_mac_link_up()), so that the GEM register
      bits are not accessed in this case any more.
      
      Fixes: 7897b071 ("net: macb: convert to phylink")
      Signed-off-by: NStefan Roese <sr@denx.de>
      Cc: Reto Schneider <reto.schneider@husqvarnagroup.com>
      Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
      Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
      Cc: David S. Miller <davem@davemloft.net>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f7ba7dbf
  7. 21 7月, 2020 2 次提交
    • N
      net: macb: Add WoL interrupt support for MACB type of Ethernet controller · 9d45c8e8
      Nicolas Ferre 提交于
      Handle the Wake-on-Lan interrupt for the Cadence MACB Ethernet
      controller.
      As we do for the GEM version, we handle of WoL interrupt in a
      specialized interrupt handler for MACB version that is positionned
      just between suspend() and resume() calls.
      
      Cc: Claudiu Beznea <claudiu.beznea@microchip.com>
      Cc: Harini Katakam <harini.katakam@xilinx.com>
      Signed-off-by: NNicolas Ferre <nicolas.ferre@microchip.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      9d45c8e8
    • N
      net: macb: WoL support for GEM type of Ethernet controller · 558e35cc
      Nicolas Ferre 提交于
      Adapt the Wake-on-Lan feature to the Cadence GEM Ethernet controller.
      This controller has different register layout and cannot be handled by
      previous code.
      We disable completely interrupts on all the queues but the queue 0.
      Handling of WoL interrupt is done in another interrupt handler
      positioned depending on the controller version used, just between
      suspend() and resume() calls.
      It allows to lower pressure on the generic interrupt hot path by
      removing the need to handle 2 tests for each IRQ: the first figuring out
      the controller revision, the second for actually knowing if the WoL bit
      is set.
      
      Queue management in suspend()/resume() functions inspired from RFC patch
      by Harini Katakam <harinik@xilinx.com>, thanks!
      
      Cc: Claudiu Beznea <claudiu.beznea@microchip.com>
      Cc: Harini Katakam <harini.katakam@xilinx.com>
      Signed-off-by: NNicolas Ferre <nicolas.ferre@microchip.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      558e35cc
  8. 18 7月, 2020 1 次提交
  9. 11 7月, 2020 5 次提交
  10. 03 7月, 2020 4 次提交
  11. 26 6月, 2020 2 次提交
  12. 20 6月, 2020 1 次提交
  13. 16 6月, 2020 1 次提交
  14. 11 6月, 2020 1 次提交
    • C
      net: cadence: macb: disable NAPI on error · 014406ba
      Corentin Labbe 提交于
      When the PHY is not working, the macb driver crash on a second try to
      setup it.
      [   78.545994] macb e000b000.ethernet eth0: Could not attach PHY (-19)
      ifconfig: SIOCSIFFLAGS: No such device
      [   78.655457] ------------[ cut here ]------------
      [   78.656014] kernel BUG at /linux-next/include/linux/netdevice.h:521!
      [   78.656504] Internal error: Oops - BUG: 0 [#1] SMP ARM
      [   78.657079] Modules linked in:
      [   78.657795] CPU: 0 PID: 122 Comm: ifconfig Not tainted 5.7.0-next-20200609 #1
      [   78.658202] Hardware name: Xilinx Zynq Platform
      [   78.659632] PC is at macb_open+0x220/0x294
      [   78.660160] LR is at 0x0
      [   78.660373] pc : [<c0b0a634>]    lr : [<00000000>]    psr: 60000013
      [   78.660716] sp : c89ffd70  ip : c8a28800  fp : c199bac0
      [   78.661040] r10: 00000000  r9 : c8838540  r8 : c8838568
      [   78.661362] r7 : 00000001  r6 : c8838000  r5 : c883c000  r4 : 00000000
      [   78.661724] r3 : 00000010  r2 : 00000000  r1 : 00000000  r0 : 00000000
      [   78.662187] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
      [   78.662635] Control: 10c5387d  Table: 08b64059  DAC: 00000051
      [   78.663035] Process ifconfig (pid: 122, stack limit = 0x(ptrval))
      [   78.663476] Stack: (0xc89ffd70 to 0xc8a00000)
      [   78.664121] fd60:                                     00000000 c89fe000 c8838000 c89fe000
      [   78.664866] fd80: 00000000 c11ff9ac c8838028 00000000 00000000 c0de6f2c 00000001 c1804eec
      [   78.665579] fda0: c19b8178 c8838000 00000000 ca760866 c8838000 00000001 00001043 c89fe000
      [   78.666355] fdc0: 00001002 c0de72f4 c89fe000 c0de8dc0 00008914 c89fe000 c199bac0 ca760866
      [   78.667111] fde0: c89ffddc c8838000 00001002 00000000 c8838138 c881010c 00008914 c0de7364
      [   78.667862] fe00: 00000000 c89ffe70 c89fe000 ffffffff c881010c c0e8bd48 00000003 00000000
      [   78.668601] fe20: c8838000 c8810100 39c1118f 00039c11 c89a0960 00001043 00000000 000a26d0
      [   78.669343] fe40: b6f43000 ca760866 c89a0960 00000051 befe6c50 00008914 c8b2a3c0 befe6c50
      [   78.670086] fe60: 00000003 ee610500 00000000 c0e8ef58 30687465 00000000 00000000 00000000
      [   78.670865] fe80: 00001043 00000000 000a26d0 b6f43000 c89a0600 ee40ae7c c8870d00 c0ddabf4
      [   78.671593] fea0: c89ffeec c0ddabf4 c89ffeec c199bac0 00008913 c0ddac48 c89ffeec c89fe000
      [   78.672324] fec0: befe6c50 ca760866 befe6c50 00008914 c89fe000 befe6c50 c8b2a3c0 c0dc00e4
      [   78.673088] fee0: c89a0480 00000201 00000cc0 30687465 00000000 00000000 00000000 00001002
      [   78.673822] ff00: 00000000 000a26d0 b6f43000 ca760866 00008914 c8b2a3c0 000a0ec4 c8b2a3c0
      [   78.674576] ff20: befe6c50 c04b21bc 000d5004 00000817 c89a0480 c0315f94 00000000 00000003
      [   78.675415] ff40: c19a2bc8 c8a3cc00 c89fe000 00000255 00000000 00000000 00000000 000d5000
      [   78.676182] ff60: 000f6000 c180b2a0 00000817 c0315e64 000d5004 c89fffb0 b6ec0c30 ca760866
      [   78.676928] ff80: 00000000 000b609b befe6c50 000a0ec4 00000036 c03002c4 c89fe000 00000036
      [   78.677673] ffa0: 00000000 c03000c0 000b609b befe6c50 00000003 00008914 befe6c50 000b609b
      [   78.678415] ffc0: 000b609b befe6c50 000a0ec4 00000036 befe6e0c befe6f1a 000d5150 00000000
      [   78.679154] ffe0: 000d41e4 befe6bf4 00019648 b6e4509c 20000010 00000003 00000000 00000000
      [   78.681059] [<c0b0a634>] (macb_open) from [<c0de6f2c>] (__dev_open+0xd0/0x154)
      [   78.681571] [<c0de6f2c>] (__dev_open) from [<c0de72f4>] (__dev_change_flags+0x16c/0x1c4)
      [   78.682015] [<c0de72f4>] (__dev_change_flags) from [<c0de7364>] (dev_change_flags+0x18/0x48)
      [   78.682493] [<c0de7364>] (dev_change_flags) from [<c0e8bd48>] (devinet_ioctl+0x5e4/0x75c)
      [   78.682945] [<c0e8bd48>] (devinet_ioctl) from [<c0e8ef58>] (inet_ioctl+0x1f0/0x3b4)
      [   78.683381] [<c0e8ef58>] (inet_ioctl) from [<c0dc00e4>] (sock_ioctl+0x39c/0x664)
      [   78.683818] [<c0dc00e4>] (sock_ioctl) from [<c04b21bc>] (ksys_ioctl+0x2d8/0x9c0)
      [   78.684343] [<c04b21bc>] (ksys_ioctl) from [<c03000c0>] (ret_fast_syscall+0x0/0x54)
      [   78.684789] Exception stack(0xc89fffa8 to 0xc89ffff0)
      [   78.685346] ffa0:                   000b609b befe6c50 00000003 00008914 befe6c50 000b609b
      [   78.686106] ffc0: 000b609b befe6c50 000a0ec4 00000036 befe6e0c befe6f1a 000d5150 00000000
      [   78.686710] ffe0: 000d41e4 befe6bf4 00019648 b6e4509c
      [   78.687582] Code: 9a000003 e5983078 e3130001 1affffef (e7f001f2)
      [   78.688788] ---[ end trace e3f2f6ab69754eae ]---
      
      This is due to NAPI left enabled if macb_phylink_connect() fail.
      
      Fixes: 7897b071 ("net: macb: convert to phylink")
      Signed-off-by: NCorentin Labbe <clabbe@baylibre.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      014406ba
  15. 04 5月, 2020 1 次提交
  16. 01 5月, 2020 1 次提交
  17. 01 4月, 2020 1 次提交
  18. 28 2月, 2020 2 次提交
  19. 21 2月, 2020 1 次提交
    • A
      net: macb: Properly handle phylink on at91rm9200 · ac2fcfa9
      Alexandre Belloni 提交于
      at91ether_init was handling the phy mode and speed but since the switch to
      phylink, the NCFGR register got overwritten by macb_mac_config(). The issue
      is that the RM9200_RMII bit and the MACB_CLK_DIV32 field are cleared
      but never restored as they conflict with the PAE, GBE and PCSSEL bits.
      
      Add new capability to differentiate between EMAC and the other versions of
      the IP and use it to set and avoid clearing the relevant bits.
      
      Also, this fixes a NULL pointer dereference in macb_mac_link_up as the EMAC
      doesn't use any rings/bufffers/queues.
      
      Fixes: 7897b071 ("net: macb: convert to phylink")
      Signed-off-by: NAlexandre Belloni <alexandre.belloni@bootlin.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ac2fcfa9
  20. 17 2月, 2020 1 次提交
  21. 05 2月, 2020 2 次提交
    • H
      net: macb: Limit maximum GEM TX length in TSO · f822e9c4
      Harini Katakam 提交于
      GEM_MAX_TX_LEN currently resolves to 0x3FF8 for any IP version supporting
      TSO with full 14bits of length field in payload descriptor. But an IP
      errata causes false amba_error (bit 6 of ISR) when length in payload
      descriptors is specified above 16387. The error occurs because the DMA
      falsely concludes that there is not enough space in SRAM for incoming
      payload. These errors were observed continuously under stress of large
      packets using iperf on a version where SRAM was 16K for each queue. This
      errata will be documented shortly and affects all versions since TSO
      functionality was added. Hence limit the max length to 0x3FC0 (rounded).
      Signed-off-by: NHarini Katakam <harini.katakam@xilinx.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f822e9c4
    • H
      net: macb: Remove unnecessary alignment check for TSO · 41c1ef97
      Harini Katakam 提交于
      The IP TSO implementation does NOT require the length to be a
      multiple of 8. That is only a requirement for UFO as per IP
      documentation. Hence, exit macb_features_check function in the
      beginning if the protocol is not UDP. Only when it is UDP,
      proceed further to the alignment checks. Update comments to
      reflect the same. Also remove dead code checking for protocol
      TCP when calculating header length.
      
      Fixes: 1629dd4f ("cadence: Add LSO support.")
      Signed-off-by: NHarini Katakam <harini.katakam@xilinx.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      41c1ef97
  22. 14 1月, 2020 1 次提交
  23. 10 1月, 2020 1 次提交
  24. 06 1月, 2020 1 次提交
    • S
      macb: Don't unregister clks unconditionally · d89091a4
      Stephen Boyd 提交于
      The only clk init function in this driver that register a clk is
      fu540_c000_clk_init(), and thus we need to unregister the clk when this
      driver is removed on that platform. Other init functions, for example
      macb_clk_init(), don't register clks and therefore we shouldn't
      unregister the clks when this driver is removed. Convert this
      registration path to devm so it gets auto-unregistered when this driver
      is removed and drop the clk_unregister() calls in driver remove (and
      error paths) so that we don't erroneously remove a clk from the system
      that isn't registered by this driver.
      
      Otherwise we get strange crashes with a use-after-free when the
      devm_clk_get() call in macb_clk_init() calls clk_put() on a clk pointer
      that has become invalid because it is freed in clk_unregister().
      
      Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
      Cc: Yash Shah <yash.shah@sifive.com>
      Reported-by: NGuenter Roeck <linux@roeck-us.net>
      Fixes: c218ad55 ("macb: Add support for SiFive FU540-C000")
      Signed-off-by: NStephen Boyd <sboyd@kernel.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d89091a4
  25. 20 12月, 2019 1 次提交
    • A
      net: macb: fix probing of PHY not described in the dt · ef8a2e27
      Antoine Tenart 提交于
      This patch fixes the case where the PHY isn't described in the device
      tree. This is due to the way the MDIO bus is registered in the driver:
      whether the PHY is described in the device tree or not, the bus is
      registered through of_mdiobus_register. The function masks all the PHYs
      and only allow probing the ones described in the device tree. Prior to
      the Phylink conversion this was also done but later on in the driver
      the MDIO bus was manually scanned to circumvent the fact that the PHY
      wasn't described.
      
      This patch fixes it in a proper way, by registering the MDIO bus based
      on if the PHY attached to a given interface is described in the device
      tree or not.
      
      Fixes: 7897b071 ("net: macb: convert to phylink")
      Signed-off-by: NAntoine Tenart <antoine.tenart@bootlin.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ef8a2e27
  26. 29 11月, 2019 1 次提交
  27. 24 11月, 2019 1 次提交
  28. 14 11月, 2019 1 次提交