firmware: imx: Add DSP IPC protocol interface
authorDaniel Baluta <daniel.baluta@nxp.com>
Thu, 1 Aug 2019 09:56:36 +0000 (12:56 +0300)
committerShawn Guo <shawnguo@kernel.org>
Mon, 12 Aug 2019 13:19:25 +0000 (15:19 +0200)
commitffbf23d50353915dc2622a3b7b4ddc678165f92d
tree7659b89235051a65d0df50eec8d165e07baa017f
parent73feb4d0f8f14c5102bd46ce2255ff55d3d52db7
firmware: imx: Add DSP IPC protocol interface

Some of i.MX8 processors (e.g i.MX8QM, i.MX8QXP) contain
the Tensilica HiFi4 DSP for advanced pre- and post-audio
processing.

The communication between Host CPU and DSP firmware is
taking place using a shared memory area for message passing
and a dedicated Messaging Unit for notifications.

DSP IPC protocol offers a doorbell interface using
imx-mailbox API.

We use 4 MU channels (2 x TXDB, 2 x RXDB) to implement a
request-reply protocol.

Connection 0 (txdb0, rxdb0):
        - Host writes messasge to shared memory [SHMEM]
- Host sends a request [MU]
- DSP handles request [SHMEM]
- DSP sends reply [MU]

Connection 1 (txdb1, rxdb1):
- DSP writes a message to shared memory [SHMEM]
- DSP sends a request [MU]
- Host handles request [SHMEM]
- Host sends reply [MU]

The protocol interface will be used by a Host client to
communicate with the DSP. First client will be the i.MX8
part from Sound Open Firmware infrastructure.

The protocol offers the following interface:

On Tx:
   - imx_dsp_ring_doorbell, will be called to notify the DSP
   that it needs to handle a request.

On Rx:
   - clients need to provide two callbacks:
.handle_reply
.handle_request
  - the callbacks will be used by the protocol on
    notification arrival from DSP.

Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
Reviewed-by: Oleksij Rempel <o.rempel@pengutronix.de>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
drivers/firmware/imx/Kconfig
drivers/firmware/imx/Makefile
drivers/firmware/imx/imx-dsp.c [new file with mode: 0644]
include/linux/firmware/imx/dsp.h [new file with mode: 0644]