1// RPMsg static endpoints
2
3digraph G {
4  rankdir="LR";
5
6  subgraph roles {
7    node [style="filled", fillcolor="lightblue"];
8    host [label="Host"];
9    remote [label="Remote"];
10  }
11
12  subgraph m_comment_nodes {
13    node [group=m_comment, shape="note", style="filled", fillcolor="yellow"];
14    rank="same";
15    m_remoteproc_init_comment [label="this is initialize rproc call"];
16    m_remoteproc_boot_comment [label="it will setup vdev before booting the remote"];
17    m_rpmsg_vdev_init_comment [label="\l* It will initialize vrings with the shared memory\l* As vdev doesn't support name service, it will not create name service endpoint;\l* it sets vdev status to DRVIER_READY, And will notify remote.\l"];
18    m_rpmsg_create_ep_comment [label="\lAs vdev doesn't supports name service,\lit will not send out name service.\l"];
19  }
20
21  subgraph m_flow_nodes {
22    node [shape="box"];
23    rank="same";
24    m_remoteproc_init [label="rproc = remoteproc_init(&remoteproc_ops, &arg);"];
25    m_remoteproc_load [label="calls remoteproc_load() to load application"];
26    m_remoteproc_boot [shape="box", label="ret=remoteproc_boot(&rproc)"];
27    m_remoteproc_get_vdev [label="vdev=remoteproc_create_virtio(rproc, rpmsg_vdev_id, VIRTIO_DEV_DRIVER, NULL);"];
28    m_rpmsg_shmpool_init[label="rpmsg_virtio_init_shm_pool(shpool, shbuf, shbuf_pool_size);"];
29    m_rpmsg_vdev_init [label="rpdev=rpmsg_init_vdev(rpvdev, vdev, ns_bind_cb, &shm_io, shpool);"];
30    m_rpmsg_create_ep [label="\lept=rpmsg_create_ept(ept, rdev, ept_name, ept_addr, dest_addr, \lendpoint_cb, ns_unbind_cb);\l"];
31    m_rpmsg_send [label="rpmsg_send(ept,data)"];
32    m_rpmsg_rx_cb [label="rpmsg_rx_callback()"];
33    m_ep_cb [label="endpoint_cb(ept, data, size, src_addr)"];
34    m_rpmsg_destroy_ep [label="rpmsg_destroy_endpoint(ept)"];
35
36    m_remoteproc_init -> m_remoteproc_load -> m_remoteproc_boot -> m_remoteproc_get_vdev ->
37    m_rpmsg_shmpool_init -> m_rpmsg_vdev_init -> m_rpmsg_create_ep -> m_rpmsg_send;
38    m_rpmsg_send -> m_rpmsg_rx_cb -> m_ep_cb ->
39    m_rpmsg_destroy_ep [dir="none", style="dashed"];
40  }
41
42  subgraph s_flow_nodes {
43    rank="same";
44    node [shape="box"];
45    s_remoteproc_init [label="rproc = remoteproc_init(&remoteproc_ops, &arg);"];
46
47    s_remoteproc_parse_rsc [label="ret = remoteproc_set_rsc_table(rproc, &rsc_table, rsc_size)"];
48    s_remoteproc_get_vdev [label="vdev=remoteproc_create_virtio(rproc, rpmsg_vdev_id, VIRTIO_DEV_DEVICE, rst_cb);"];
49    s_rpmsg_vdev_init [label="rpdev=rpmsg_init_vdev(rpvdev, vdev, ns_bind_cb, &shm_io, NULL);"];
50    s_rpmsg_create_ep [label="\lept=rpmsg_create_ept(ept, rdev, ept_name, ept_addr, dest_addr, \lendpoint_cb, ns_unbind_cb);\l"];
51    s_rpmsg_send [label="rpmsg_send(ept,data)"];
52    s_rpmsg_rx_cb [label="rpmsg_rx_callback()"];
53    s_ep_cb [label="endpoint_cb(ept, data, size, src_addr)"];
54    s_rpmsg_destroy_ep [label="rpmsg_destroy_endpoint(ept)"];
55
56    s_remoteproc_init -> s_remoteproc_parse_rsc -> s_remoteproc_get_vdev ->
57    s_rpmsg_vdev_init -> s_rpmsg_create_ep;
58    s_rpmsg_create_ep -> s_rpmsg_rx_cb ->
59    s_ep_cb -> s_rpmsg_send -> s_rpmsg_destroy_ep [dir="none", style="dash"];
60
61  }
62
63  subgraph s_comment_nodes {
64    node [group=s_comment, shape="note", style="filled", fillcolor="yellow"];
65    rank="same";
66    s_rpmsg_vdev_init_comment [label="\l* As vdev doesn't support name service, it will not create name service endpoint;\l* It will not return until the host set status to DRIVER READY\l"];
67    s_rpmsg_rx_cb_comment [label="\l* It will look for the endpoint which matches the destination address.\lIf no endpoint has found, it will drop the message.\l"];
68  }
69
70  host -> m_remoteproc_init [dir="none"];
71  remote -> s_remoteproc_init [dir="none"];
72  m_rpmsg_send -> s_rpmsg_rx_cb [label="RPMsg data"];
73  s_rpmsg_send -> m_rpmsg_rx_cb [label="RPMsg data"];
74
75  m_remoteproc_init_comment -> m_remoteproc_init [dir="none"];
76  m_remoteproc_boot_comment -> m_remoteproc_boot [dir="none"];
77  m_rpmsg_vdev_init_comment -> m_rpmsg_vdev_init [dir="none"];
78  m_rpmsg_create_ep_comment -> m_rpmsg_create_ep [dir="none"];
79
80  s_rpmsg_vdev_init -> s_rpmsg_vdev_init_comment [dir="none"];
81  s_rpmsg_rx_cb -> s_rpmsg_rx_cb_comment [dir="none"];
82
83  {rank=same; host; m_remoteproc_init}
84  {rank=same; remote; s_remoteproc_init}
85
86}
87
88