IVC (app/ivc-echo-task.c)
=========================

Inter VM Communication (IVC) provides interface to communicate between chip processors through a shared-memory channel. It uses Hardware Synchronization Primitives (HSP)
for interprocessor synchronization through doorbell mechanism. The assertion of the doorbell signal indicates that
the destination processor requires attention, typically because the source processor posted a message in memory.

This application demonstrates the communication between CCPLEX and AON through a data_channel created by AON Echo driver
where the data is sent from CCPLEX to AON and it's echoed back from AON to CCPLEX.

# AGX Orin and Orin Nano
1. The current IVC channel are described in the device tree repository. You must run source_sync.sh to get the dtsi file.
After running source_sync.sh, the file is located at
AGX Orin:  Linux_for_Tegra/source/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-p3737-0000+p3701-xxxx-nv-common.dtsi
Orin Nano: Linux_for_Tegra/source/hardware/nvidia/t23x/nv-public/nv-platform/tegra234-p3768-0000+p3767-xxxx-nv-common.dtsi

2. To add/remove or enable/disable the channels in linux kernel, you must update the
device tree entries in the above dtsi file. The following code shows how to enable the IVC echo channel:
```
        bus@0 {
+               aon_echo {
+                       status = "okay";
+               };
+

```

3. Compile the device tree and copy the dtb file to Linux_for_Tegra/dtb/ directory.
4. Rebuild the device tree and reflash the board by referencing the instructions in the **Building the Kernel** section of the Linux Developer Guide.
5. Build the SPE application, and copy the output to `${L4T}/bootloader/spe_t234.bin`.

# How to test
From the Linux kernel side, the `/sys/devices/platform/bus@0/bus@0:aon_echo/data_channel`
node is used to communicate with AON after enabling echo channel as mentioned above.
Messages sent to AON through this channel are echoed back to CCPLEX.
```
ubuntu@jetson:~$ sudo su -c 'echo tegra > /sys/devices/platform/bus@0/bus@0:aon_echo/data_channel'
ubuntu@jetson:~$ cat /sys/devices/platform/bus@0/bus@0:aon_echo/data_channel
tegra
ubuntu@jetson:~$
```

# Sources
The echo channel ivc code in the current firmware resides at:

    rt-aux-cpu-demo-fsp/app/ivc-echo-task.c
    rt-aux-cpu-demo-fsp/drivers/ivc-channels.c

And the channel descriptions are at:

    rt-aux-cpu-demo-fsp/platform/ivc-channel-ids.c
    rt-aux-cpu-demo-fsp/soc/t23x/include/ivc-config.h
