Ahoy-- On 12/1/20 2:35 PM, mgross@xxxxxxxxxxxxxxx wrote: > From: Seamus Kelly <seamus.kelly@xxxxxxxxx> > > Add xLink driver, which interfaces the xLink Core driver with the Keem > Bay VPU IPC driver, thus enabling xLink to control and communicate with > the VPU IP present on the Intel Keem Bay SoC. > > Specifically the driver enables xLink Core to: > > * Boot / Reset the VPU IP > * Register to VPU IP event notifications (device connected, device > disconnected, WDT event) > * Query the status of the VPU IP (OFF, BUSY, READY, ERROR, RECOVERY) > * Exchange data with the VPU IP, using the Keem Bay IPC mechanism > - Including the ability to send 'volatile' data (i.e., small amount of > data, up to 128-bytes that was not allocated in the CPU/VPU shared > memory region) > > Cc: linux-doc@xxxxxxxxxxxxxxx > Reviewed-by: Mark Gross <mgross@xxxxxxxxxxxxxxx> > Signed-off-by: Seamus Kelly <seamus.kelly@xxxxxxxxx> > Signed-off-by: Ryan Carnaghi <ryan.r.carnaghi@xxxxxxxxx> > --- > Documentation/vpu/index.rst | 1 + > Documentation/vpu/xlink-ipc.rst | 50 ++ > MAINTAINERS | 6 + > drivers/misc/Kconfig | 1 + > drivers/misc/Makefile | 1 + > drivers/misc/xlink-ipc/Kconfig | 7 + > drivers/misc/xlink-ipc/Makefile | 4 + > drivers/misc/xlink-ipc/xlink-ipc.c | 879 +++++++++++++++++++++++++++++ > include/linux/xlink-ipc.h | 48 ++ > 9 files changed, 997 insertions(+) > create mode 100644 Documentation/vpu/xlink-ipc.rst > create mode 100644 drivers/misc/xlink-ipc/Kconfig > create mode 100644 drivers/misc/xlink-ipc/Makefile > create mode 100644 drivers/misc/xlink-ipc/xlink-ipc.c > create mode 100644 include/linux/xlink-ipc.h > diff --git a/Documentation/vpu/xlink-ipc.rst b/Documentation/vpu/xlink-ipc.rst > new file mode 100644 > index 000000000000..af583579e70d > --- /dev/null > +++ b/Documentation/vpu/xlink-ipc.rst > @@ -0,0 +1,50 @@ > +.. SPDX-License-Identifier: GPL-2.0-only > + > +Kernel driver: xLink IPC driver > +================================= > +Supported chips: > + > +* | Intel Edge.AI Computer Vision platforms: Keem Bay > + | Suffix: Bay > + | Datasheet: (not yet publicly available) > + > +------------ > +Introduction > +------------ > + > +The xLink IPC driver interfaces the xLink Core driver with the Keem Bay VPU IPC > +driver, thus enabling xLink to control and communicate with the VPU IP present > +on the Intel Keem Bay SoC. > + > +Specifically the driver enables xLink Core to: > + > +* Boot / Reset the VPU IP > +* Register to VPU IP event notifications (device connected, device disconnected, > + WDT event) > +* Query the status of the VPU IP (OFF, BUSY, READY, ERROR, RECOVERY) > +* Exchange data with the VPU IP, using the Keem Bay IPC mechanism > + > + * Including the ability to send 'volatile' data (i.e., small amount of data, > + up to 128-bytes that was not allocated in the CPU/VPU shared memory region) > + > +Sending / Receiving 'volatile' data > +----------------------------------- > + > +Data to be exchanged with Keem Bay IPC needs to be allocated in the portion of > +DDR shared between the CPU and VPU. > + > +This can be impractical for small amount of data that user code can allocate amounts > +on the stack. > + > +To reduce the burden on user code, xLink Core provides special send / receive > +functions to send up to 128 bytes of 'volatile data', i.e., data that is not > +allocated in the shared memory and that might also disappear after the xLink > +API is called (e.g., because allocated on the stack). > + > +The xLink IPC driver implements support for transferring such 'volatile data' > +to the VPU using Keem Bay IPC. To this end, the driver reserved some memory in better: reserves > +the shared memory region. > + > +When volatile data is to be sent, xLink IPC allocates a buffer from the > +reserved memory region and copies the volatile data to the buffer. The buffer > +is then transferred to the VPU using Keem Bay IPC. > diff --git a/drivers/misc/xlink-ipc/Kconfig b/drivers/misc/xlink-ipc/Kconfig > new file mode 100644 > index 000000000000..6aa2592fe9a3 > --- /dev/null > +++ b/drivers/misc/xlink-ipc/Kconfig > @@ -0,0 +1,7 @@ > +config XLINK_IPC > + tristate "Support for XLINK IPC" > + depends on KEEMBAY_VPU_IPC > + help > + XLINK IPC enables the communication/control IPC Sub-System. > + > + Select M if you have an Intel SoC with a Vision Processing Unit (VPU) End that sentence with a '.', please. -- ~Randy