[PATCH net-next v16 0/3] AX88796C SPI Ethernet Adapter

From: Łukasz Stelmach
Date: Wed Sep 29 2021 - 10:09:19 EST


This is a driver for AX88796C Ethernet Adapter connected in SPI mode as
found on ARTIK5 evaluation board. The driver has been ported from a
v3.10.9 vendor kernel for ARTIK5 board.

Dear David and Jakub, since the driver, despite minor fixes, has
been mostly stable for the past few versions, how do you see the
chances of merging it?

Changes in v16:
- rebased onto net-next 5.15-rc2 (7fec4d39198b)

Changes in v15:
- rebased onto net-next 5.14-rc2 (268ca4129d8d)
- added explicit cast of le16_to_cpus() argument to u16*
(reported by: kernel test robot <lkp@xxxxxxxxx>)
- removed invalid and superfluous call to u64_stats_init()
(reported by: Jakub Kicinski <kuba@xxxxxxxxxx>)

Changes in v14:
- rebased onto net-next 5.14-rc1 (0d6835ffe50c)

Changes in v13:
- rebased onto net-next (ebbf5fcb94a7)
- minor fix: use u64_stats_update_{begin_irqsave,end_irqrestore}
- minor fix: initialize the syncp lock

Changes in v12:
- rebased to net-next-5.13
- added missing spaces after commas
- corrected indentation

Changes in v11:
- changed stat counters to 64-bit
- replaced WARN_ON(!mutex_is_locked()) with lockdep_assert_held()
- replaced ax88796c_free_skb_queue() with __skb_queue_purge()
- added cancel_work_sync() for ax_work
- removed unused fields of struct skb_data
- replaced MAX() with max() from minmax.h
- rebased to net-next (resend)

Changes in v10:
- removed unused variable

Changes in v9:
- used pskb_extend_head()
- used ethtool private flags instead of tunables to switch SPI
compression
- changed
- alloc_skb() to netdev_alloc(skb)
- __pskb_trim() to pskb_trim()
- removed:
- chages to skb->truesize
- unnecessary casting to short
- return f() in a void function
- IRQF_SHARED flags
- unnecessary memset(0) of kzalloc()ed buffer
- unused endiannes detection
- unnecessary __packed attribute for some structures
- added:
- temporary variable in AX_WRITE/READ sequences
- missin mutex_unlock() in error paths
- axspi_read_reg() returns a constant value in case of an error

Changes in v8:
- fixed the entry in MAINTAINERS
- removed unnecessary netif_err()
- changed netif_rx() to netif_rx_ni() for code running in a process
context
- added explicit type casting for ~BIT()

Changes in v7:
- removed duplicate code
- moved a constant buffer definition away from a header file

Changes in v6:
- fixed typos in Kconfig
- checked argument value in ax88796c_set_tunable
- updated tags in commit messages

Changes in v5:
- coding style (local variable declarations)
- added spi0 node in the DT binding example and removed
interrupt-parent
- removed comp module parameter
- added CONFIG_SPI_AX88796C_COMPRESSION option to set the initial
state of SPI compression
- introduced new ethtool tunable "spi-compression" to controll SPI
transfer compression
- removed unused fields in struct ax88796c_device
- switched from using buffers allocated on stack for SPI transfers
to DMA safe ones embedded in struct ax_spi and allocated with
kmalloc()

Changes in v4:
- fixed compilation problems in asix,ax88796c.yaml and in
ax88796c_main.c introduced in v3

Changes in v3:
- modify vendor-prefixes.yaml in a separate patch
- fix several problems in the dt binding
- removed unnecessary descriptions and properties
- changed the order of entries
- fixed problems with missing defines in the example
- change (1 << N) to BIT(N), left a few (0 << N)
- replace ax88796c_get_link(), ax88796c_get_link_ksettings(),
ax88796c_set_link_ksettings(), ax88796c_nway_reset(),
ax88796c_set_mac_address() with appropriate kernel functions.
- disable PHY auto-polling in MAC and use PHYLIB to track the state
of PHY and configure MAC
- propagate return values instead of returning constants in several
places
- add WARN_ON() for unlocked mutex
- remove local work queue and use the system_wq
- replace phy_connect_direct() with phy_connect() and move
devm_register_netdev() to the end of ax88796c_probe()
(Unlike phy_connect_direct() phy_connect() does not crash if the
network device isn't registered yet.)
- remove error messages on ENOMEM
- move free_irq() to the end of ax88796c_close() to avoid race
condition
- implement flow-control

Changes in v2:
- use phylib
- added DT bindings
- moved #includes to *.c files
- used mutex instead of a semaphore for locking
- renamed some constants
- added error propagation for several functions
- used ethtool for dumping registers
- added control over checksum offloading
- remove vendor specific PM
- removed macaddr module parameter and added support for reading a MAC
address from platform data (e.g. DT)
- removed dependency on SPI from NET_VENDOR_ASIX
- added an entry in the MAINTAINERS file
- simplified logging with appropriate netif_* and netdev_* helpers
- lots of style fixes

Łukasz Stelmach (3):
dt-bindings: vendor-prefixes: Add asix prefix
dt-bindings: net: Add bindings for AX88796C SPI Ethernet Adapter
net: ax88796c: ASIX AX88796C SPI Ethernet Adapter Driver

.../bindings/net/asix,ax88796c.yaml | 73 ++
.../devicetree/bindings/vendor-prefixes.yaml | 2 +
MAINTAINERS | 6 +
drivers/net/ethernet/Kconfig | 1 +
drivers/net/ethernet/Makefile | 1 +
drivers/net/ethernet/asix/Kconfig | 35 +
drivers/net/ethernet/asix/Makefile | 6 +
drivers/net/ethernet/asix/ax88796c_ioctl.c | 239 ++++
drivers/net/ethernet/asix/ax88796c_ioctl.h | 26 +
drivers/net/ethernet/asix/ax88796c_main.c | 1148 +++++++++++++++++
drivers/net/ethernet/asix/ax88796c_main.h | 568 ++++++++
drivers/net/ethernet/asix/ax88796c_spi.c | 115 ++
drivers/net/ethernet/asix/ax88796c_spi.h | 69 +
13 files changed, 2289 insertions(+)
create mode 100644 Documentation/devicetree/bindings/net/asix,ax88796c.yaml
create mode 100644 drivers/net/ethernet/asix/Kconfig
create mode 100644 drivers/net/ethernet/asix/Makefile
create mode 100644 drivers/net/ethernet/asix/ax88796c_ioctl.c
create mode 100644 drivers/net/ethernet/asix/ax88796c_ioctl.h
create mode 100644 drivers/net/ethernet/asix/ax88796c_main.c
create mode 100644 drivers/net/ethernet/asix/ax88796c_main.h
create mode 100644 drivers/net/ethernet/asix/ax88796c_spi.c
create mode 100644 drivers/net/ethernet/asix/ax88796c_spi.h

--
2.30.2