Message ID | 20230725140650.951581-6-tanmay.shah@amd.com |
---|---|
State | RFC |
Delegated to: | Tom Rini |
Headers | show |
Series | Add RPMsg framework | expand |
Hi Tanmay, On Tue, 25 Jul 2023 at 08:08, Tanmay Shah <tanmay.shah@amd.com> wrote: > > Add driver to demonstrate use of rpmsg framework. > > Signed-off-by: Tanmay Shah <tanmay.shah@amd.com> > --- > drivers/rpmsg/Kconfig | 8 ++++ > drivers/rpmsg/Makefile | 3 ++ > drivers/rpmsg/rpmsg_sample_client.c | 63 +++++++++++++++++++++++++++++ > 3 files changed, 74 insertions(+) > create mode 100644 drivers/rpmsg/rpmsg_sample_client.c Reviewed-by: Simon Glass <sjg@chromium.org> > > diff --git a/drivers/rpmsg/Kconfig b/drivers/rpmsg/Kconfig > index 4efb8dfcd7..808cd16275 100644 > --- a/drivers/rpmsg/Kconfig > +++ b/drivers/rpmsg/Kconfig > @@ -28,4 +28,12 @@ config RPMSG_SANDBOX > Say 'y' here to add sandbox driver for RPMsg framework used > for dummy communication with remote processor on sandbox platform > > +config RPMSG_SAMPLE_CLIENT > + bool "Sample RPMsg client driver" > + depends on DM > + select RPMSG > + help > + Say 'y' here to enable driver that demonstrate use of RPMsg framework. enable a driver demonstrates > + This driver uses RPMsg APIs to communicate with remote processor. > + > endmenu > diff --git a/drivers/rpmsg/Makefile b/drivers/rpmsg/Makefile > index 21611725ea..53af0f7ea6 100644 > --- a/drivers/rpmsg/Makefile > +++ b/drivers/rpmsg/Makefile > @@ -6,5 +6,8 @@ obj-$(CONFIG_RPMSG) += rpmsg-uclass.o > > obj-$(CONFIG_RPMSG_SANDBOX) += sandbox_test_rpmsg.o > > +# Sample driver demonstrate how to use rpmsg framework > +obj-$(CONFIG_RPMSG_SAMPLE_CLIENT) += rpmsg_sample_client.o > + > # virtio driver for rpmsg > obj-$(CONFIG_VIRTIO_RPMSG_BUS) += virtio_rpmsg_bus.o > diff --git a/drivers/rpmsg/rpmsg_sample_client.c b/drivers/rpmsg/rpmsg_sample_client.c > new file mode 100644 > index 0000000000..ae591dbdde > --- /dev/null > +++ b/drivers/rpmsg/rpmsg_sample_client.c > @@ -0,0 +1,63 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Copyright (C) 2011 Texas Instruments, Inc. > + * Copyright (C) 2011 Google, Inc. > + * Copyright (C) 2023, Advanced Micro Devices, Inc. > + * > + * Sample client that shows use of rpmsg APIs > + */ > + > +#include <common.h> > +#include <dm.h> > +#include <errno.h> > +#include <log.h> > +#include <malloc.h> > +#include <rpmsg.h> > +#include <dm/device-internal.h> > +#include <dm/uclass.h> > +#include <dm/uclass-internal.h> Do you need those three? > +#include <linux/delay.h> > + > +static int rpmsg_rx_callback(void *buf, int msg_len, u32 msgs_received) > +{ > + printf("APU: rx: %s\n", (char *)buf); > + > + return 0; > +} > + > +static int rpmsg_sample_client_probe(struct udevice *udev) > +{ > + char data[80] = {0}; > + int i; > + > + /* Initialize rpmsg for core 0 */ > + rpmsg_init(0); > + > + /* wait for RPU to initialize vdev */ > + mdelay(20); > + > + /* assume rpmsg init is already done */ > + for (i = 1; i < 5; i++) { > + sprintf(data, "rpmsg buf %d", i); > + printf("APU: tx: %s\n", data); > + rpmsg_send(0, data, strlen(data)); > + > + /* 20ms delay before receiving the data */ > + mdelay(20); > + > + rpmsg_recv(0, rpmsg_rx_callback); > + printf("\n"); > + } > + return 0; > +} > + > +U_BOOT_DRIVER(rpmsg_sample_client) = { > + .name = "rpmsg-sample-client", > + .id = UCLASS_MISC, > + .probe = rpmsg_sample_client_probe, > + .flags = DM_FLAG_PRE_RELOC, > +}; > + > +U_BOOT_DRVINFO(rpmsg_sample_client) = { > + .name = "rpmsg-sample-client", > +}; > -- > 2.25.1 > REgards, SImon
diff --git a/drivers/rpmsg/Kconfig b/drivers/rpmsg/Kconfig index 4efb8dfcd7..808cd16275 100644 --- a/drivers/rpmsg/Kconfig +++ b/drivers/rpmsg/Kconfig @@ -28,4 +28,12 @@ config RPMSG_SANDBOX Say 'y' here to add sandbox driver for RPMsg framework used for dummy communication with remote processor on sandbox platform +config RPMSG_SAMPLE_CLIENT + bool "Sample RPMsg client driver" + depends on DM + select RPMSG + help + Say 'y' here to enable driver that demonstrate use of RPMsg framework. + This driver uses RPMsg APIs to communicate with remote processor. + endmenu diff --git a/drivers/rpmsg/Makefile b/drivers/rpmsg/Makefile index 21611725ea..53af0f7ea6 100644 --- a/drivers/rpmsg/Makefile +++ b/drivers/rpmsg/Makefile @@ -6,5 +6,8 @@ obj-$(CONFIG_RPMSG) += rpmsg-uclass.o obj-$(CONFIG_RPMSG_SANDBOX) += sandbox_test_rpmsg.o +# Sample driver demonstrate how to use rpmsg framework +obj-$(CONFIG_RPMSG_SAMPLE_CLIENT) += rpmsg_sample_client.o + # virtio driver for rpmsg obj-$(CONFIG_VIRTIO_RPMSG_BUS) += virtio_rpmsg_bus.o diff --git a/drivers/rpmsg/rpmsg_sample_client.c b/drivers/rpmsg/rpmsg_sample_client.c new file mode 100644 index 0000000000..ae591dbdde --- /dev/null +++ b/drivers/rpmsg/rpmsg_sample_client.c @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2011 Texas Instruments, Inc. + * Copyright (C) 2011 Google, Inc. + * Copyright (C) 2023, Advanced Micro Devices, Inc. + * + * Sample client that shows use of rpmsg APIs + */ + +#include <common.h> +#include <dm.h> +#include <errno.h> +#include <log.h> +#include <malloc.h> +#include <rpmsg.h> +#include <dm/device-internal.h> +#include <dm/uclass.h> +#include <dm/uclass-internal.h> +#include <linux/delay.h> + +static int rpmsg_rx_callback(void *buf, int msg_len, u32 msgs_received) +{ + printf("APU: rx: %s\n", (char *)buf); + + return 0; +} + +static int rpmsg_sample_client_probe(struct udevice *udev) +{ + char data[80] = {0}; + int i; + + /* Initialize rpmsg for core 0 */ + rpmsg_init(0); + + /* wait for RPU to initialize vdev */ + mdelay(20); + + /* assume rpmsg init is already done */ + for (i = 1; i < 5; i++) { + sprintf(data, "rpmsg buf %d", i); + printf("APU: tx: %s\n", data); + rpmsg_send(0, data, strlen(data)); + + /* 20ms delay before receiving the data */ + mdelay(20); + + rpmsg_recv(0, rpmsg_rx_callback); + printf("\n"); + } + return 0; +} + +U_BOOT_DRIVER(rpmsg_sample_client) = { + .name = "rpmsg-sample-client", + .id = UCLASS_MISC, + .probe = rpmsg_sample_client_probe, + .flags = DM_FLAG_PRE_RELOC, +}; + +U_BOOT_DRVINFO(rpmsg_sample_client) = { + .name = "rpmsg-sample-client", +};
Add driver to demonstrate use of rpmsg framework. Signed-off-by: Tanmay Shah <tanmay.shah@amd.com> --- drivers/rpmsg/Kconfig | 8 ++++ drivers/rpmsg/Makefile | 3 ++ drivers/rpmsg/rpmsg_sample_client.c | 63 +++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 drivers/rpmsg/rpmsg_sample_client.c