mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH v3 00/14] greybus: introduce CPC as transport layer
@ 2026-02-12 14:43 Damien Riégel
  2026-02-12 14:43 ` [PATCH v3 01/14] greybus: cpc: add minimal CPC Host Device infrastructure Damien Riégel
                   ` (13 more replies)
  0 siblings, 14 replies; 21+ messages in thread
From: Damien Riégel @ 2026-02-12 14:43 UTC (permalink / raw)
  To: greybus-dev, Johan Hovold, Alex Elder, Greg Kroah-Hartman, linux-kernel
  Cc: Silicon Labs Kernel Team, Damien Riégel

Hi,

This patchset brings support for Silicon Labs' CPC protocol as transport
layer for Greybus. CPC stands for Co-Processor Communication and
currently exists as a userspace daemon [1] that enables multiple
applications on a coprocessor to share a single physical link to a Linux
host, using a protocol loosely based on HDLC [2].

While the userspace implementations serves its purpose, it has some
redundancies with Greybus that makes it not very suitable for kernel
integration as-is, and so the protocol has been modified to better fit
with Greybus. Even though kernel and userspace implementations share the
same name, they are not the same protocol and are not compatible. The
kernel integration with Greybus is intended to superseed the userspace
implementation.

CPC is introduced as a module that sits between Greybus and CPC Host
Device Drivers implementations, like SDIO or SPI. This patchset includes
SDIO as physical layer but the protocol is not final and might change,
it's mostly there to showcase all the elements.

        +----------------------------------------------------+
        |                      Greybus                       |
        +----------------------------------------------------+
                                 /|\
                                  |
                                 \|/
        +----------------------------------------------------+
        |                        CPC                         |
        +----------------------------------------------------+
              /|\                /|\                /|\
               |                  |                  |
              \|/                \|/                \|/
          +----------+       +---------+       +-----------+
          |   SDIO   |       |   SPI   |       |   Others  |
          +----------+       +---------+       +-----------+

CPC implements some of the features of Unipro that Greybus relies upon,
like reliable transmission. CPC takes care of detecting transmission
errors and retransmit frames if necessary, but that feature is not part
of the RFC to keep it concise. There's also a flow-control
feature, preventing sending messages to already full cports.

In order to implement these features, a 4-byte header is prepended to
Greybus messages, making the whole header 12 bytes (Greybus header is 8
bytes).

This RFC starts by implementing a shim layer between physical bus
drivers (like SDIO and SPI) and Greybus, and progressively add more
elements to it to make it useful in its own right. Finally, an SDIO
driver is added to enable the communication with a remote device.

[1] https://github.com/SiliconLabs/cpc-daemon
[2] https://en.wikipedia.org/wiki/High-Level_Data_Link_Control

Changes in v3:
  - addressed Jerome's review comments, mostly for SDIO driver
  - rewrote cover letter and commit messages across the series

Changes in v2:
  - addressed review comments and errors reported by kernel bot
  - for SDIO driver, remove padding between headers and payloads when
    aggregating packets together

Damien Riégel (13):
  greybus: cpc: add minimal CPC Host Device infrastructure
  greybus: cpc: introduce CPC cport structure
  greybus: cpc: use socket buffers instead of gb_message in TX path
  greybus: cpc: pack cport ID in Greybus header
  greybus: cpc: switch RX path to socket buffers
  greybus: cpc: introduce CPC header structure
  greybus: cpc: account for CPC header size in RX and TX path
  greybus: cpc: add and validate sequence numbers
  greybus: cpc: acknowledge all incoming messages
  greybus: cpc: use holding queue instead of sending out immediately
  greybus: cpc: honour remote's RX window
  greybus: cpc: let host device drivers dequeue TX frames
  greybus: cpc: add private data pointer in CPC Host Device

Gabriel Beaulieu (1):
  greybus: cpc: add CPC SDIO host driver

 MAINTAINERS                    |   6 +
 drivers/greybus/Kconfig        |   2 +
 drivers/greybus/Makefile       |   2 +
 drivers/greybus/cpc/Kconfig    |  24 ++
 drivers/greybus/cpc/Makefile   |   9 +
 drivers/greybus/cpc/cpc.h      |  75 ++++++
 drivers/greybus/cpc/cport.c    | 112 ++++++++
 drivers/greybus/cpc/header.c   | 136 ++++++++++
 drivers/greybus/cpc/header.h   |  52 ++++
 drivers/greybus/cpc/host.c     | 319 ++++++++++++++++++++++
 drivers/greybus/cpc/host.h     |  63 +++++
 drivers/greybus/cpc/protocol.c | 170 ++++++++++++
 drivers/greybus/cpc/sdio.c     | 480 +++++++++++++++++++++++++++++++++
 13 files changed, 1450 insertions(+)
 create mode 100644 drivers/greybus/cpc/Kconfig
 create mode 100644 drivers/greybus/cpc/Makefile
 create mode 100644 drivers/greybus/cpc/cpc.h
 create mode 100644 drivers/greybus/cpc/cport.c
 create mode 100644 drivers/greybus/cpc/header.c
 create mode 100644 drivers/greybus/cpc/header.h
 create mode 100644 drivers/greybus/cpc/host.c
 create mode 100644 drivers/greybus/cpc/host.h
 create mode 100644 drivers/greybus/cpc/protocol.c
 create mode 100644 drivers/greybus/cpc/sdio.c

-- 
2.52.0


^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2026-02-19 14:38 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-02-12 14:43 [PATCH v3 00/14] greybus: introduce CPC as transport layer Damien Riégel
2026-02-12 14:43 ` [PATCH v3 01/14] greybus: cpc: add minimal CPC Host Device infrastructure Damien Riégel
2026-02-12 14:43 ` [PATCH v3 02/14] greybus: cpc: introduce CPC cport structure Damien Riégel
2026-02-12 14:43 ` [PATCH v3 03/14] greybus: cpc: use socket buffers instead of gb_message in TX path Damien Riégel
2026-02-12 14:43 ` [PATCH v3 04/14] greybus: cpc: pack cport ID in Greybus header Damien Riégel
2026-02-12 14:43 ` [PATCH v3 05/14] greybus: cpc: switch RX path to socket buffers Damien Riégel
2026-02-12 14:43 ` [PATCH v3 06/14] greybus: cpc: introduce CPC header structure Damien Riégel
2026-02-12 14:43 ` [PATCH v3 07/14] greybus: cpc: account for CPC header size in RX and TX path Damien Riégel
2026-02-12 14:43 ` [PATCH v3 08/14] greybus: cpc: add and validate sequence numbers Damien Riégel
2026-02-12 14:43 ` [PATCH v3 09/14] greybus: cpc: acknowledge all incoming messages Damien Riégel
2026-02-12 14:43 ` [PATCH v3 10/14] greybus: cpc: use holding queue instead of sending out immediately Damien Riégel
2026-02-13  6:44   ` kernel test robot
2026-02-12 14:43 ` [PATCH v3 11/14] greybus: cpc: honour remote's RX window Damien Riégel
2026-02-13 21:56   ` kernel test robot
2026-02-12 14:43 ` [PATCH v3 12/14] greybus: cpc: let host device drivers dequeue TX frames Damien Riégel
2026-02-12 14:43 ` [PATCH v3 13/14] greybus: cpc: add private data pointer in CPC Host Device Damien Riégel
2026-02-12 14:43 ` [PATCH v3 14/14] greybus: cpc: add CPC SDIO host driver Damien Riégel
2026-02-13  0:31   ` kernel test robot
2026-02-13  9:35   ` Jérôme Pouiller
2026-02-13 16:00     ` Damien Riégel
2026-02-19 14:38       ` Damien Riégel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®