From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752513AbcAFIZZ (ORCPT ); Wed, 6 Jan 2016 03:25:25 -0500 Received: from mail-am1on0059.outbound.protection.outlook.com ([157.56.112.59]:59737 "EHLO emea01-am1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752458AbcAFIZV (ORCPT ); Wed, 6 Jan 2016 03:25:21 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=hongxing.zhu@nxp.com; From: Richard Zhu To: , CC: Subject: [RFC 4/4] samples/rpmsg: add the imx pingpong rpmsg sample Date: Wed, 6 Jan 2016 16:06:44 +0800 Message-ID: <1452067604-10466-5-git-send-email-hongxing.zhu@nxp.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1452067604-10466-1-git-send-email-hongxing.zhu@nxp.com> References: <1452067604-10466-1-git-send-email-hongxing.zhu@nxp.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [123.151.195.53] X-ClientProxiedBy: SIXPR04CA0070.apcprd04.prod.outlook.com (10.141.119.28) To DBXPR04MB271.eurprd04.prod.outlook.com (10.141.10.147) X-Microsoft-Exchange-Diagnostics: 1;DBXPR04MB271;2:0q8iHbB574tW8CNKp2Jeq1oLs/+vNgfF5vG97rJYaily1CydmPjTRkm2DYIh4EPPyXZETX7IURWbdv0q7LZ/qxheFaq19v6HGAULkYEZZMsPKv0tiZ5tTq5dRyxbHoC4PIpiroj2TbI8h8Y/9rQVBw==;3:AUxNysh2TbsLJ7hihGjPQ/tSYIlswP/swMVnn/FlSYdb17uBu7j/mtfrB8h1suWqDxIoFtA8vEE/hv9P9WuJiWlqKVPngxJa71jrQWlLIkoUiLs1vLnlrDxaxzmShcHW;25:Wvqe75sroyfwQ6PDrdeZyMU1e7XzXlTb3efEY7k96aJMZYIdyLKUIpiRYA2qDNQVJBVZQr9yJPf2zEF0miwJK+tGP2Bfv2JWSlp/HtB+II6RnTgiVPQza2qovQ/zsMMG9PJLt3A/P+edEEWHXpVqgJuFR4vIfu7ZYtqI19TLTXSWtwpcy14w8/4YXmXuGiOxuG1bVG38iyd6MaNLwEKOLuQ46w1PRehJGsGTPULlP8/HMLkxc2pHY9d/ox360ULO8Lcap+m2FlJsYzWN3j7cLA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DBXPR04MB271; X-Microsoft-Exchange-Diagnostics: 1;DBXPR04MB271;20:3BGyIz6yBrJSiTnABC4gsoffkISSVkqYIQXv42lPwuDBc2CUVQLm6b7aEmU8bqUVTNI2e/iox/awd62Q6iPW1atSeLeHNxKjoSS0PDXwTzCoaPvH9jejVs0T8eGsCdYy24zSeHUBnbqJ+PULaleJ50b3IvV7EEHwU5121cSu9ZNjbODX2Z+B7sFbUlCR1COX+kI7Dk6Kfwsov7jOoCxG6tPsJCAW5qRVUNzuPkZ3XU/6wmlyg1CaeWGk7ATPjBKUZXrpwS9cUNdX79TfV0aCoW9q2FXn/xBRbGc9MvrWy4o0LouXZg1H8IzHJlYdwv5KGLIm2LIwf1NqfqkhshXigTtKpho5SNNwFLW1hcZf2MGgID1ivufzxY+cK7SvNDQnUt01NyrERYMtBCRR7rkOEAw2pvg/lmqaIl4OaGEV05zCsjEb+NRfT/2lLGnVx41N9PSnOsvijJGfKk+3PftD0NSb/1qxfJHZArxZ+nJKh70F74czlRjGQfhA1bt2oU3J X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(520078)(10201501046)(3002001);SRVR:DBXPR04MB271;BCL:0;PCL:0;RULEID:;SRVR:DBXPR04MB271; X-Microsoft-Exchange-Diagnostics: 1;DBXPR04MB271;4:QZlOrbtNbbnSlRJuTpQZ+8j9vSkbYoUG8U/3judSTWd88ou5dXio0ibpzTNTs3kGvZSKlU+u/rRVt7Uhmu9ceGFbGFk4scXdJNPnH9uJx3jbTnpVfAIfp8gjNe1Rv9LWWY7Peb/87EWf3umGlm7R93bVogdbcglk4BHQqU3GfDJp5Oqdpx95mltuInuv9C/zQJLJFL1d890tiwlg0QWsOAUZ27HKBbDaDLyUEiMyU6OAgsDJt5bzDi4r8YsGqNFLsVyTpJmSBpZNpSEdH0Kqd/Fp3MID48uyM/hnQcTWC9QhBhrzHX1BJrDrEoTMoLReifVY5ugXrra9LkUjFULUJOJQszzFtPoQmS+uRP1su2eaiCPtXTK40dokciom/pByabMXq0FTb/AdnFS0TxH93KafpOcsP7WjL3IKKRY6bKQM8VrusIzqES2ktTrHPI5GEicUOqB706GcOZqEV8mh1Q== X-Forefront-PRVS: 0813C68E65 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(189002)(199003)(5001770100001)(122386002)(106356001)(5004730100002)(40100003)(86362001)(2950100001)(5003940100001)(189998001)(4326007)(50226001)(33646002)(76176999)(5001960100002)(105586002)(81156007)(48376002)(575784001)(77096005)(92566002)(586003)(66066001)(42186005)(5008740100001)(87976001)(19580395003)(3846002)(6116002)(229853001)(19580405001)(97736004)(50986999)(50466002)(15975445007)(101416001)(1096002)(47776003)(36756003);DIR:OUT;SFP:1101;SCL:1;SRVR:DBXPR04MB271;H:shlinux2.ap.freescale.net;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DBXPR04MB271;23:oZ89dq1USkvsRVD9wBqTlT/mq4qzmYooczGYEHy24J?= =?us-ascii?Q?Db9TAiq2Xh+qfABq2pl14tKFzCH86CZ53c5Q6mH8UijvpNOYz/P6IILRIbxU?= =?us-ascii?Q?9i7gN631arOPPdUsPo4PmCn9AlkLEgAPzOjqdunPbppZbmvCPG0xeGrAL0eq?= =?us-ascii?Q?FMpPuzV59U0dE91ERUZhr38sPvjTnHXp7dxmzdyOf8YfNMuPtiDJdm1p4RRF?= =?us-ascii?Q?FTFhHco5SOWnfC95+b6lw/1e/IGx71qnQRdFveN3UenSH2+GTSdWvYfHy/we?= =?us-ascii?Q?vGQC6RgCJUHD7e2ypDgKuc52diojUpVCsWnO/BXhXkdNQt/Z8fyOsNCGUBJr?= =?us-ascii?Q?lO1KdioVZpy9uVLnq7/VLj731UmHLpmQZbGBk+tiOUIXZU5tqnIIBs+QSXBM?= =?us-ascii?Q?5fiRB59VxTLP+7rsksUKng11ZEAFtBnBXO4u92J5qmfM1eE40a9aR6c81RP5?= =?us-ascii?Q?5T0TAc/b5DzSRLaEcnxWsUHd6ysUrLLMaqn9HCJj57DnYiVbEkioNwOpK20q?= =?us-ascii?Q?hsQmGxW5+dXYNAvR/d547E4LCpSnZCva4UjnEPDqtRtsKuudcf1bV9/httTS?= =?us-ascii?Q?AcPeRlbcwusiwQSVk8hWc94KjllOG7Mr2V/ov6R2uTOOHy2EUz+AELedELDg?= =?us-ascii?Q?szKaV8gA4T3Icg4oA+Sx+6SYw2ljSZYef4G0Gfvfbs+H58iGRB8Zq55AzlqS?= =?us-ascii?Q?l32DPiSzrUWEGuDQReBWxLKaZ7M9kv7YvQFqOfmcp/3r2XkThNcuBooop+lr?= =?us-ascii?Q?I0PplaN3qlkF6xWTcDk5e0yYO65/8+6ZUsxvKeNRa9psIK2Twb6OVI5Ku3GS?= =?us-ascii?Q?rH8D7Rcq0rXOor0puFSaHTCA4sNbhl9Lli4fQW8hIiucfVFtfO28NYEoc9za?= =?us-ascii?Q?Vhm0rNhrxNPXlzl52TXSbZRST7PE0dlbddaT6htb3AZZ78d9zU16kXkkaKGt?= =?us-ascii?Q?N78i52TwdCcvmv16oERsBc3E4rUFYJj9B3SRz9K8j5zEcZ5N6n3WkgVStKpy?= =?us-ascii?Q?O3d52uDX7/FZgpbElCoERcGp1BT1LPUpg9H2UhA8I+06ymb8kh2IgmeujwEL?= =?us-ascii?Q?7Z/83XzpQdnWXrPWZmXPDCEflDWlLKbnaJBXPAgkjCNoZiWw=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;DBXPR04MB271;5:dKd4YlethWMEBC4WEN+kncgfwuFb+G3VZHjbSv+ZqHOeYX74NJte746wCYKnUxO1bY8yTySRUmZJrRP8Sgz4Sh7693b/EwiwmqFPIIwuYqYO7LO3rN7RwXPfkB8cl173KxdvEQbb4FPl18MDFHGTSg==;24:CNBpkgG+Bz+O8aAOFn54Ylnoe0ItGoTpnEwGYYZrfotIVL7fnwvYaWkPPCYU6jErg4XtpQ1Ncq0ijA7mj3Oal2fpsiK9XecIwXszGbhdi0w= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jan 2016 08:09:31.6700 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBXPR04MB271 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Richard Zhu Add one pingpong rpmsg sample, that demostrate the how to communicate with an AMP-configured remote processor over rpmsg bus. In this sample, A# core of imx AMP SOC would send out one unsigned int data "rpmsg_pingpong", the initialized value is "0", to the remote M# core when this driver is loaded. The "rpmsg_pingpong" would be plus one at M# core side, then sent back to A# core. A# would do the same operations, after receive the "rpmsg_pingpong" sent out by M# core, then send it back to M#. The demonstration would be stopped after 10000 times Signed-off-by: Richard Zhu --- samples/Kconfig | 8 +++ samples/rpmsg/Makefile | 1 + samples/rpmsg/imx_rpmsg_pingpong.c | 99 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 samples/rpmsg/imx_rpmsg_pingpong.c diff --git a/samples/Kconfig b/samples/Kconfig index d54f28c..49e0b62 100644 --- a/samples/Kconfig +++ b/samples/Kconfig @@ -63,6 +63,14 @@ config SAMPLE_RPMSG_CLIENT to communicate with an AMP-configured remote processor over the rpmsg bus. +config IMX_RPMSG_PINGPONG + tristate "Build imx rpmsg pingpong sample -- loadable modules only" + depends on RPMSG && m + help + Build an imx rpmsg pingpong sample driver, which demonstrates + the data transactions on the AMP-configured imx processor over + the rpmsg bus. + config SAMPLE_LIVEPATCH tristate "Build live patching sample -- loadable modules only" depends on LIVEPATCH && m diff --git a/samples/rpmsg/Makefile b/samples/rpmsg/Makefile index 2d4973c..c01daae 100644 --- a/samples/rpmsg/Makefile +++ b/samples/rpmsg/Makefile @@ -1 +1,2 @@ obj-$(CONFIG_SAMPLE_RPMSG_CLIENT) += rpmsg_client_sample.o +obj-$(CONFIG_IMX_RPMSG_PINGPONG) += imx_rpmsg_pingpong.o diff --git a/samples/rpmsg/imx_rpmsg_pingpong.c b/samples/rpmsg/imx_rpmsg_pingpong.c new file mode 100644 index 0000000..f46ebe1 --- /dev/null +++ b/samples/rpmsg/imx_rpmsg_pingpong.c @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2016 Freescale Semiconductor, Inc. + * + * derived from the omap-rpmsg implementation. + * Remote processor messaging transport - pingpong driver + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +#include +#include +#include +#include + +#define MSG_LIMIT 100000 +static unsigned int rpmsg_pingpong; +static int rx_count; + +static void rpmsg_pingpong_cb(struct rpmsg_channel *rpdev, void *data, int len, + void *priv, u32 src) +{ + int err; + + /* reply */ + rpmsg_pingpong = *(unsigned int *)data; + pr_info("get %d (src: 0x%x)\n", + rpmsg_pingpong, src); + rx_count++; + + /* pingpongs should not live forever */ + if (rx_count >= MSG_LIMIT) { + dev_info(&rpdev->dev, "goodbye!\n"); + return; + } + rpmsg_pingpong++; + err = rpmsg_sendto(rpdev, (void *)(&rpmsg_pingpong), 4, src); + + if (err) + dev_err(&rpdev->dev, "rpmsg_send failed: %d\n", err); +} + +static int rpmsg_pingpong_probe(struct rpmsg_channel *rpdev) +{ + int err; + + dev_info(&rpdev->dev, "new channel: 0x%x -> 0x%x!\n", + rpdev->src, rpdev->dst); + + rpmsg_pingpong = 0; + rx_count = 0; + err = rpmsg_sendto(rpdev, (void *)(&rpmsg_pingpong), 4, rpdev->dst); + if (err) { + dev_err(&rpdev->dev, "rpmsg_send failed: %d\n", err); + return err; + } + + return 0; +} + +static void rpmsg_pingpong_remove(struct rpmsg_channel *rpdev) +{ + dev_info(&rpdev->dev, "rpmsg pingpong driver is removed\n"); +} + +static struct rpmsg_device_id rpmsg_driver_pingpong_id_table[] = { + { .name = "rpmsg-openamp-demo-channel" }, + { }, +}; +MODULE_DEVICE_TABLE(rpmsg, rpmsg_driver_pingpong_id_table); + +static struct rpmsg_driver rpmsg_pingpong_driver = { + .drv.name = KBUILD_MODNAME, + .drv.owner = THIS_MODULE, + .id_table = rpmsg_driver_pingpong_id_table, + .probe = rpmsg_pingpong_probe, + .callback = rpmsg_pingpong_cb, + .remove = rpmsg_pingpong_remove, +}; + +static int __init init(void) +{ + return register_rpmsg_driver(&rpmsg_pingpong_driver); +} + +static void __exit fini(void) +{ + unregister_rpmsg_driver(&rpmsg_pingpong_driver); +} +module_init(init); +module_exit(fini); + +MODULE_AUTHOR("Freescale Semiconductor, Inc."); +MODULE_DESCRIPTION("iMX virtio remote processor messaging pingpong driver"); +MODULE_LICENSE("GPL v2"); -- 1.9.1