[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250512012748.79749-1-damien.riegel@silabs.com>
Date: Sun, 11 May 2025 21:27:33 -0400
From: Damien Riégel <damien.riegel@...abs.com>
To: Andrew Lunn <andrew+netdev@...n.ch>,
"David S . Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>, Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>, Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley <conor+dt@...nel.org>,
Silicon Labs Kernel Team <linux-devel@...abs.com>,
netdev@...r.kernel.org, devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: [RFC net-next 00/15] Add support for Silicon Labs CPC
Hi,
This patchset brings initial support for Silicon Labs CPC protocol,
standing for Co-Processor Communication. This protocol is used by the
EFR32 Series [1]. These devices offer a variety for radio protocols,
such as Bluetooth, Z-Wave, Zigbee [2].
Some of the devices support several protocols in one chipset, and the
main raison d'etre for CPC is to facilicate the co-existence of these
protocols by providing each radio stack a dedicated communication
channel over a shared physical link, such as SPI or SDIO.
These separate communication channels are called endpoints and the
protocol provides:
- reliability by retransmitting unacknowledged packets. This is not
part of the current patchset
- ordered delivery
- resource management, by avoiding sending packets to the radio
co-processor if it doesn't have the room for receiving them
The current patchset showcases a full example with Bluetooth over SPI.
In the future, other buses should be supported, as well as other radio
protocols.
For the RFC, I've bundled everything together in a big module to avoid
submitting patches to different subsystems, but I expect to get comments
about that and the final version of these series will probably be split
into two or three modules. Please let me know if it makes sense or not:
- net/cpc for the core implementation of the protocol
- drivers/bluetooth/ for the bluetooth endpoint
- optionally, the SPI driver could be separated from the main module
and moved to drivers/spi
I've tried to split the patchset in digestible atomic commits but as
we're introducing a new protocol the first 12 commits are all needed to
get it to work. The SPI and Bluetooth driver are more standalone and
illustrates how new bus or radio protocols would be added in the future.
[1] https://www.silabs.com/wireless/gecko-series-2
[2] https://www.silabs.com/wireless
Damien Riégel (15):
net: cpc: add base skeleton driver
net: cpc: add endpoint infrastructure
net: cpc: introduce CPC driver and bus
net: cpc: add protocol header structure and API
net: cpc: implement basic transmit path
net: cpc: implement basic receive path
net: cpc: implement sequencing and ack
net: cpc: add support for connecting endpoints
net: cpc: add support for RST frames
net: cpc: make disconnect blocking
net: cpc: add system endpoint
net: cpc: create system endpoint with a new interface
dt-bindings: net: cpc: add silabs,cpc-spi.yaml
net: cpc: add SPI interface driver
net: cpc: add Bluetooth HCI driver
.../bindings/net/silabs,cpc-spi.yaml | 54 ++
MAINTAINERS | 6 +
drivers/net/Kconfig | 2 +
drivers/net/Makefile | 1 +
drivers/net/cpc/Kconfig | 16 +
drivers/net/cpc/Makefile | 5 +
drivers/net/cpc/ble.c | 147 +++++
drivers/net/cpc/ble.h | 14 +
drivers/net/cpc/cpc.h | 204 +++++++
drivers/net/cpc/endpoint.c | 333 +++++++++++
drivers/net/cpc/header.c | 237 ++++++++
drivers/net/cpc/header.h | 83 +++
drivers/net/cpc/interface.c | 308 ++++++++++
drivers/net/cpc/interface.h | 117 ++++
drivers/net/cpc/main.c | 163 ++++++
drivers/net/cpc/protocol.c | 309 ++++++++++
drivers/net/cpc/protocol.h | 27 +
drivers/net/cpc/spi.c | 550 ++++++++++++++++++
drivers/net/cpc/spi.h | 12 +
drivers/net/cpc/system.c | 432 ++++++++++++++
drivers/net/cpc/system.h | 14 +
21 files changed, 3034 insertions(+)
create mode 100644 Documentation/devicetree/bindings/net/silabs,cpc-spi.yaml
create mode 100644 drivers/net/cpc/Kconfig
create mode 100644 drivers/net/cpc/Makefile
create mode 100644 drivers/net/cpc/ble.c
create mode 100644 drivers/net/cpc/ble.h
create mode 100644 drivers/net/cpc/cpc.h
create mode 100644 drivers/net/cpc/endpoint.c
create mode 100644 drivers/net/cpc/header.c
create mode 100644 drivers/net/cpc/header.h
create mode 100644 drivers/net/cpc/interface.c
create mode 100644 drivers/net/cpc/interface.h
create mode 100644 drivers/net/cpc/main.c
create mode 100644 drivers/net/cpc/protocol.c
create mode 100644 drivers/net/cpc/protocol.h
create mode 100644 drivers/net/cpc/spi.c
create mode 100644 drivers/net/cpc/spi.h
create mode 100644 drivers/net/cpc/system.c
create mode 100644 drivers/net/cpc/system.h
--
2.49.0
Powered by blists - more mailing lists