mbox series

[net-next,v12,0/7] add ethernet driver for Tehuti Networks TN40xx chips

Message ID 20240623235507.108147-1-fujita.tomonori@gmail.com (mailing list archive)
Headers show
Series add ethernet driver for Tehuti Networks TN40xx chips | expand

Message

FUJITA Tomonori June 23, 2024, 11:55 p.m. UTC
This patchset adds a new 10G ethernet driver for Tehuti Networks
TN40xx chips. Note in mainline, there is a driver for Tehuti Networks
(drivers/net/ethernet/tehuti/tehuti.[hc]), which supports TN30xx
chips.

Multiple vendors (DLink, Asus, Edimax, QNAP, etc) developed adapters
based on TN40xx chips. Tehuti Networks went out of business but the
drivers are still distributed under GPL2 with some of the hardware
(and also available on some sites). With some changes, I try to
upstream this driver with a new PHY driver in Rust.

The major change is replacing the PHY abstraction layer in the original
driver with phylink. TN40xx chips are used with various PHY hardware
(AMCC QT2025, TI TLK10232, Aqrate AQR105, and Marvell MV88X3120,
MV88X3310, and MV88E2010).

I've also been working on a new PHY driver for QT2025 in Rust [1]. For
now, I enable only adapters using QT2025 PHY in the PCI ID table of
this driver. I've tested this driver and the QT2025 PHY driver with
Edimax EN-9320 10G adapter and 10G-SR SFP+. In mainline, there are PHY
drivers for AQR105 and Marvell PHYs, which could work for some TN40xx
adapters with this driver.

To make reviewing easier, this patchset has only basic functions. Once
merged, I'll submit features like ethtool support.

v12:
- remove prints in the datapath
- unlock netif_tx_lock during dma_unmap
- fix a comment typo
- make tn40_start_xmit return netdev_tx_t type
- remove netif_trans_update call
- remove all the mdelay calls
- replace long udelay in sleepable functions with usleep_range
v11: https://lore.kernel.org/netdev/20240618051608.95208-7-fujita.tomonori@gmail.com/
- update the subject of the first PCI ID patch (s/add/Add/)
- remove MODULE_AUTHOR
- make Status in MAINTAINERS Maintained
- embed the calculated values in tn40_txd_sizes table
- use msleep instead mdelay in tn40_sw_reset
- use read_poll_timeout to simplify tn40_sw_reset
- remove useless vid range checking in __tn40_vlan_rx_vid
- remove unnecessary tn40_hw_reset call in tn40_priv_init
- replace net_device_stats with rtnl_link_stats64
- fix style issues
v10: https://lore.kernel.org/netdev/20240611045217.78529-7-fujita.tomonori@gmail.com/
- Add Edimax Vendor ID to pci_ids.h (cleanup for wireless drivers later)
- rename functions for mdio (use _c45 suffix for read/write and mdio_wait_nobusy)
- clean up some tn40_rxdb_ functions
- use unsinged int for static, nelem, and top in tn40_rxdb struct instead of int
- return -ENODEV instead of -1 when PHY isn't found
- remove the function to re-setting mdio speec to 1MHZ in tn40_priv_init()
- cleanup tn40_mdio_set_speed()
v9: https://lore.kernel.org/netdev/20240605232608.65471-1-fujita.tomonori@gmail.com/
- move phylink_connect_phy() to simplify the ndo_open callback
v8: https://lore.kernel.org/netdev/20240603064955.58327-1-fujita.tomonori@gmail.com/
- remove phylink_mac_change() call
- fix phylink_start() usage (call it after the driver is ready to operate).
- simplify the way to get the private struct from phylink_config pointer
- fix netif_stop_queue usage in mac_link_down callback
- remove MLO_AN_PHY usage
v7: https://lore.kernel.org/netdev/20240527203928.38206-7-fujita.tomonori@gmail.com/
- use page pool API for rx allocation
- fix NAPI API misuse
- fix error checking of mdio write
v6: https://lore.kernel.org/netdev/20240512085611.79747-2-fujita.tomonori@gmail.com/
- use the firmware for TN30xx chips
- move link up/down code to phylink's mac_link_up/mac_link_down callbacks
- clean up mdio access code
v5: https://lore.kernel.org/netdev/20240508113947.68530-1-fujita.tomonori@gmail.com/
- remove dma_set_mask_and_coherent fallback
- count tx_dropped
- use ndo_get_stats64 instead of ndo_get_stats
- remove unnecessary __packed attribute
- fix NAPI API usage
- rename tn40_recycle_skb to tn40_recycle_rx_buffer
- avoid high order page allocation (the maximum is order-1 now)
v4: https://lore.kernel.org/netdev/20240501230552.53185-1-fujita.tomonori@gmail.com/
- fix warning on 32bit build
- fix inline warnings
- fix header file inclusion
- fix TN40_NDEV_TXQ_LEN
- remove 'select PHYLIB' in Kconfig
- fix access to phydev
- clean up readx_poll_timeout_atomic usage
v3: https://lore.kernel.org/netdev/20240429043827.44407-1-fujita.tomonori@gmail.com/
- remove driver version
- use prefixes tn40_/TN40_ for all function, struct and define names
v2: https://lore.kernel.org/netdev/20240425010354.32605-1-fujita.tomonori@gmail.com/
- split mdio patch into mdio and phy support
- add phylink support
- clean up mdio read/write
- use the standard bit operation macros
- use upper_32/lower_32_bits macro
- use tn40_ prefix instead of bdx_
- fix Sparse errors
- fix compiler warnings
- fix style issues
v1: https://lore.kernel.org/netdev/20240415104352.4685-1-fujita.tomonori@gmail.com/

[1] https://lore.kernel.org/netdev/20240415104701.4772-1-fujita.tomonori@gmail.com/

FUJITA Tomonori (7):
  PCI: Add Edimax Vendor ID to pci_ids.h
  net: tn40xx: add pci driver for Tehuti Networks TN40xx chips
  net: tn40xx: add register defines
  net: tn40xx: add basic Tx handling
  net: tn40xx: add basic Rx handling
  net: tn40xx: add mdio bus support
  net: tn40xx: add phylink support

 MAINTAINERS                             |    8 +-
 drivers/net/ethernet/tehuti/Kconfig     |   15 +
 drivers/net/ethernet/tehuti/Makefile    |    3 +
 drivers/net/ethernet/tehuti/tn40.c      | 1786 +++++++++++++++++++++++
 drivers/net/ethernet/tehuti/tn40.h      |  232 +++
 drivers/net/ethernet/tehuti/tn40_mdio.c |  142 ++
 drivers/net/ethernet/tehuti/tn40_phy.c  |   76 +
 drivers/net/ethernet/tehuti/tn40_regs.h |  245 ++++
 include/linux/pci_ids.h                 |    2 +
 9 files changed, 2508 insertions(+), 1 deletion(-)
 create mode 100644 drivers/net/ethernet/tehuti/tn40.c
 create mode 100644 drivers/net/ethernet/tehuti/tn40.h
 create mode 100644 drivers/net/ethernet/tehuti/tn40_mdio.c
 create mode 100644 drivers/net/ethernet/tehuti/tn40_phy.c
 create mode 100644 drivers/net/ethernet/tehuti/tn40_regs.h


base-commit: 185d72112b951404968cfaa9f77cd9ee19207205

Comments

patchwork-bot+netdevbpf@kernel.org June 26, 2024, 2 a.m. UTC | #1
Hello:

This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Mon, 24 Jun 2024 08:55:00 +0900 you wrote:
> This patchset adds a new 10G ethernet driver for Tehuti Networks
> TN40xx chips. Note in mainline, there is a driver for Tehuti Networks
> (drivers/net/ethernet/tehuti/tehuti.[hc]), which supports TN30xx
> chips.
> 
> Multiple vendors (DLink, Asus, Edimax, QNAP, etc) developed adapters
> based on TN40xx chips. Tehuti Networks went out of business but the
> drivers are still distributed under GPL2 with some of the hardware
> (and also available on some sites). With some changes, I try to
> upstream this driver with a new PHY driver in Rust.
> 
> [...]

Here is the summary with links:
  - [net-next,v12,1/7] PCI: Add Edimax Vendor ID to pci_ids.h
    https://git.kernel.org/netdev/net-next/c/eee5528890d5
  - [net-next,v12,2/7] net: tn40xx: add pci driver for Tehuti Networks TN40xx chips
    https://git.kernel.org/netdev/net-next/c/ab61adc60001
  - [net-next,v12,3/7] net: tn40xx: add register defines
    https://git.kernel.org/netdev/net-next/c/ffa28c748b38
  - [net-next,v12,4/7] net: tn40xx: add basic Tx handling
    https://git.kernel.org/netdev/net-next/c/dd2a0ff55408
  - [net-next,v12,5/7] net: tn40xx: add basic Rx handling
    https://git.kernel.org/netdev/net-next/c/37c4947af44d
  - [net-next,v12,6/7] net: tn40xx: add mdio bus support
    https://git.kernel.org/netdev/net-next/c/7fdbd2f2bb5d
  - [net-next,v12,7/7] net: tn40xx: add phylink support
    https://git.kernel.org/netdev/net-next/c/308241224224

You are awesome, thank you!