linux/drivers/net
Vladimir Oltean 08839c06e9 net: dsa: sja1105: Switch to scatter/gather API for SPI
This reworks the SPI transfer implementation to make use of more of the
SPI core features. The main benefit is to avoid the memcpy in
sja1105_xfer_buf().

The memcpy was only needed because the function was transferring a
single buffer at a time. So it needed to copy the caller-provided buffer
at buf + 4, to store the SPI message header in the "headroom" area.

But the SPI core supports scatter-gather messages, comprised of multiple
transfers. We can actually use those to break apart every SPI message
into 2 transfers: one for the header and one for the actual payload.

To keep the behavior the same regarding the chip select signal, it is
necessary to tell the SPI core to de-assert the chip select after each
chunk. This was not needed before, because each spi_message contained
only 1 single transfer.

The meaning of the per-transfer cs_change=1 is:

- If the transfer is the last one of the message, keep CS asserted
- Otherwise, deassert CS

We need to deassert CS in the "otherwise" case, which was implicit
before.

Avoiding the memcpy creates yet another opportunity. The device can't
process more than 256 bytes of SPI payload at a time, so the
sja1105_xfer_long_buf() function used to exist, to split the larger
caller buffer into chunks.

But these chunks couldn't be used as scatter/gather buffers for
spi_message until now, because of that memcpy (we would have needed more
memory for each chunk). So we can now remove the sja1105_xfer_long_buf()
function and have a single implementation for long and short buffers.

Another benefit is lower usage of stack memory. Previously we had to
store 2 SPI buffers for each chunk. Due to the elimination of the
memcpy, we can now send pointers to the actual chunks from the
caller-supplied buffer to the SPI core.

Since the patch merges two functions into a rewritten implementation,
the function prototype was also changed, mainly for cosmetic consistency
with the structures used within it.

Signed-off-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-10-15 13:16:57 -04:00
..
appletalk
arcnet drivers: net: Fix Kconfig indentation 2019-09-26 08:56:17 +02:00
bonding
caif Minor fixes to the CAIF Transport drivers Kconfig file 2019-10-02 14:47:51 -07:00
can drivers: net: Fix Kconfig indentation 2019-09-26 08:56:17 +02:00
dsa net: dsa: sja1105: Switch to scatter/gather API for SPI 2019-10-15 13:16:57 -04:00
ethernet net: b44: remove redundant assignment to variable reg 2019-10-15 12:57:55 -04:00
fddi
fjes
hamradio Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2019-09-15 14:17:27 +02:00
hippi
hyperv hv_netvsc: Sync offloading features to VF NIC 2019-09-07 17:42:52 +02:00
ieee802154 Merge tag 'ieee802154-for-davem-2019-09-28' of git://git.kernel.org/pub/scm/linux/kernel/git/sschmidt/wpan 2019-09-30 17:14:45 -07:00
ipvlan ipvlan: consolidate TSO flags using NETIF_F_ALL_TSO 2019-10-10 18:03:29 -07:00
netdevsim netdevsim: implement couple of testing devlink health reporters 2019-10-11 21:02:30 -07:00
phy net: phy: mscc: make arrays static, makes object smaller 2019-10-08 11:47:41 -07:00
plip
ppp netfilter: drop bridge nf reset from nf_reset 2019-10-01 18:42:15 +02:00
slip
team team: call RCU read lock when walking the port_list 2019-10-09 21:13:59 -07:00
usb net: usb: ax88179_178a: write mac to hardware in get_mac_addr 2019-10-11 20:50:37 -07:00
vmxnet3
wan net/wan: dscc4: remove broken dscc4 driver 2019-09-16 09:14:41 +02:00
wimax wimax/i2400m: remove unlikely() from WARN*() condition 2019-09-26 10:10:30 -07:00
wireless A few more small things, nothing really stands out: 2019-10-13 11:29:07 -07:00
xen-netback
dummy.c
eql.c
geneve.c
gtp.c
ifb.c
Kconfig drivers: net: Fix Kconfig indentation 2019-09-26 08:56:17 +02:00
LICENSE.SRC
loopback.c
macsec.c macsec: drop skb sk before calling gro_cells_receive 2019-09-26 09:25:03 +02:00
macvlan.c
macvtap.c
Makefile
mdio.c
mii.c
net_failover.c
netconsole.c
nlmon.c
ntb_netdev.c
rionet.c
sb1000.c
Space.c
sungem_phy.c
tap.c net: tap: clean up an indentation issue 2019-09-27 20:58:35 +02:00
thunderbolt.c
tun.c Revert "tun: call dev_get_valid_name() before register_netdevice()" 2019-10-08 20:49:15 -07:00
veth.c
virtio_net.c netfilter: drop bridge nf reset from nf_reset 2019-10-01 18:42:15 +02:00
vrf.c netfilter: drop bridge nf reset from nf_reset 2019-10-01 18:42:15 +02:00
vsockmon.c
vxlan.c
xen-netfront.c xen-netfront: do not use ~0U as error return value for xennet_fill_frags() 2019-10-01 21:49:51 -04:00