arm-trusted-firmware/plat
Varun Wadekar 26e2b93a85 Tegra: bpmp_ipc: IPC driver to communicate with BPMP firmware
This patch adds the driver to communicate with the BPMP firmware on Tegra
SoCs, starting Tegra186. BPMP firmware is responsible for clock enable/
disable requests, module resets among other things.

MRQ is short for Message ReQuest. This is the general purpose, multi channel
messaging protocol that is widely used to communicate with BPMP. This is further
divided into a common high level protocol and a peer-specific low level protocol.
The higher level protocol specifies the peer identification, channel definition
and allocation, message structure, message semantics and message dispatch process
whereas the lower level protocol defines actual message transfer implementation
details. Currently, BPMP supports two lower level protocols - Token Mail Operations
(TMO), IVC Mail Operations (IMO).

This driver implements the IMO protocol. IMO is implemented using the IVC (Inter-VM
Communication) protocol which is a lockless, shared memory messaging queue management
protocol.

The IVC peer is expected to perform the following as part of establishing a connection
with BPMP.

1. Initialize the channels with tegra_ivc_init() or its equivalent.
2. Reset the channel with tegra_ivc_channel_reset. The peer should also ensure that
   BPMP is notified via the doorbell.
3. Poll until the channel connection is established [tegra_ivc_channel_notified() return
   0]. Interrupt BPMP with doorbell each time after tegra_ivc_channel_notified() return
   non zero.

The IPC driver currently supports reseting the GPCDMAand XUSB_PADCTL hardware blocks. In
future, more hardware blocks would be supported.

Change-Id: I52a4bd3a853de6c4fa410904b6614ff1c63df364
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
2019-01-23 10:32:12 -08:00
..
allwinner Sanitise includes across codebase 2019-01-04 10:43:17 +00:00
arm SPM: Rename SPM_DEPRECATED flag to SPM_MM 2019-01-22 09:20:59 +00:00
common Sanitise includes across codebase 2019-01-04 10:43:17 +00:00
hisilicon Move BL1 and BL2 private defines to bl_common.h 2019-01-15 13:52:32 +00:00
imx warp7: Enable Trusted Board Boot for WaRP7 2019-01-18 16:10:55 +00:00
layerscape Move BL1 and BL2 private defines to bl_common.h 2019-01-15 13:52:32 +00:00
marvell Move BL1 and BL2 private defines to bl_common.h 2019-01-15 13:52:32 +00:00
mediatek Sanitise includes across codebase 2019-01-04 10:43:17 +00:00
meson/gxbb Sanitise includes across codebase 2019-01-04 10:43:17 +00:00
nvidia/tegra Tegra: bpmp_ipc: IPC driver to communicate with BPMP firmware 2019-01-23 10:32:12 -08:00
qemu Move BL1 and BL2 private defines to bl_common.h 2019-01-15 13:52:32 +00:00
renesas/rcar rcar_gen3: plat: update renesas version to 2.0.0 2019-01-08 14:08:44 +01:00
rockchip Sanitise includes across codebase 2019-01-04 10:43:17 +00:00
rpi3 rpi3: fix RPI3_PRELOADED_DTB_BASE usage 2019-01-17 00:15:56 +02:00
socionext SPM: Rename SPM_DEPRECATED flag to SPM_MM 2019-01-22 09:20:59 +00:00
st/stm32mp1 stm32mp1: set ETZPC controlled peripherals and GPIOZ as non-secure 2019-01-18 15:45:08 +01:00
ti/k3 Merge pull request #1772 from glneo/clear-proxy-queue 2019-01-22 15:03:01 +00:00
xilinx xilinx: Move IPI functions to common file 2019-01-09 12:38:00 -08:00