From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752219AbbJQUtI (ORCPT ); Sat, 17 Oct 2015 16:49:08 -0400 Received: from mail-bn1bon0145.outbound.protection.outlook.com ([157.56.111.145]:13760 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751666AbbJQUs0 (ORCPT ); Sat, 17 Oct 2015 16:48:26 -0400 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none;freescale.mail.onmicrosoft.com; dmarc=none action=none header.from=freescale.com; From: "J. German Rivera" To: , , , CC: , , , , , , , , , , , , "J. German Rivera" Subject: [PATCH v2 3/4] staging: fsl-mc:Added support for atomic portals Date: Sat, 17 Oct 2015 15:33:14 -0500 Message-ID: <1445113995-12021-4-git-send-email-German.Rivera@freescale.com> X-Mailer: git-send-email 2.3.3 In-Reply-To: <1445113995-12021-1-git-send-email-German.Rivera@freescale.com> References: <1445113995-12021-1-git-send-email-German.Rivera@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11OLC001;1:kT8T1nD0fAUFhs9TFfuQ4ziYhrxiJZxjhYKFrrzDv4zU5yYlU5w92sWD048wyhMoNJO9TuZo3DuOGsLWlt0fBNE2TFWlLeOOyYCPyoN1CPKSQDjhNzm5OJDIAnzvB2DmbXzIwTXB2uaHfy4C+4lABaaasyqqIMk4x2Nwf++TCRWsHqiYkL9275qL6KDw5XDJxTwQsNhvW/4cUOCOTrhcyQyBzlYhf/rgDzfCiRulTegRvVAG6eqyy+UwCjEfW5LI0i65H11BlS9EHM2SZU+pBdUmozEfI4m96mGqXRq1iiogIRdLtAbHEFzlO8t++4hYRIPOT+IsGjsFLprEtV6Gw/Cp2xOFracScYtjMabcQEKAmK5B977gsDQXeakEe0JZF9AY3R6b+aB+ROJCuR5OZQ== X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(50986999)(76176999)(36756003)(5001960100002)(107886002)(48376002)(46102003)(5008740100001)(19580395003)(19580405001)(5003940100001)(81156007)(5001770100001)(97736004)(86362001)(50226001)(92566002)(2201001)(106466001)(77096005)(87936001)(6806005)(2950100001)(104016004)(189998001)(5007970100001)(64706001)(47776003)(50466002)(229853001)(105606002)(85426001)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:BLUPR03MB503;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB503;2:cJiFTEic9XvHLLWhWodYOb30ZSPUkkwt+u3ZuBYKGw6Vu4zaHD5ZdI3jD7VjbKX/+mqm0A/bCB1yAl84YbUj1fYuUXAdjNEgvyNEvHzTTCXjunVE6Xqp45xWrD3zaz88Z2rFaeZN9XjKQO0CQzj2IjeT1CVLTnPDyhU3fgsqCuk=;3:oFQhHronvlA2vfnv522i2fjnsIkU7mhq/o7WwtmAS42Jzg6Xnk70K2xPZkAV6GWB1/f6fyGnhF8ai6Avxz1CUBphxX/N5E53kHSzv+0LiXERiklXLNXoUM+u8Eussr93hnJUueIbBnRSVQ4zIXCt1JvG6k+RutlHSPipvF0O3ZrnTvC/z4qy603iKMJLaPdUvM6Rk44QQubPLfU3ezqkeoXEn2cb7T0kC4nfmSvuCFs=;25:JUzMMZMlG7P/BmIImsJuTXY4M+M5X/vTt+asnSVBaazVDhUo9z4wkkPvmeci24gGHnWn4tK2nICdNQ72+sfk7DXNCrXbr77uFAK1DacGLyOB2rGYgeL8TN/rUCTuBCfJ0NCq0UhN80IyDRvEBSFtmpMR7dR6rCOK0uN5UJy3CK9plKifzcJNkyBQpXn6Dhvy+kUkvcroLbCWaDgeDVZwq+XeswTvk0SIj+JesWxOpe2RENgNHYzDbAAydwyy0NxphHSPPN1bWAMRSBgvRBv7nw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB503; X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB503;20:sWagxGi+PuzEkOPn42QJ2YOvbPLdd7XydOefgcH5rSZh80INH94YpaWPkzCByxbnqx+2vkwj/wWA6GrFx/LgDR6xrNYEuc07TReL4qqOhyAxb9Qs2qjhbcFshyiDW6o8PNObpwZ0teCUx7xCxNWRPaZW2dBQ2wDEqpONsrJ+64ja0yyhRdxuPd4OoOoXLiqLS2M/uk95dKd3axAJbh/Vd07Ho4PxJnKei80h/lr5WaPip9VqXV97TXv9mLYq373mdj34AfaApJYhJ9MrJyvbpVyLdRcUVFJwQfAqW8x/OUmnwQhtRDNJqx1DJ4pEY3d0tI0eKZ3GClPPV/d43OX19lKQahf5OAot8jjBrF9mp6M=;4:cv5v6fdpgBPjSaEkMNjvylcR9RnIaJIsYa0qf4+mq5HsPplXtycAojRZ2XIz6eqTVVljbM7t4hZ8OCscTRA86NWY12Uyv0bD2dAfL7gsREh70eEz8d/y8ldO76fqvDuWqZ+jNvnAKSg2c3v2QvRs6KzMBpDb2D2gDkBTLpTsxMrIQMvTFgVje8wM3y/crc84vLFiC8X5s2b3U0tvquod7qPMwXRM3ioG7nI1CnCO3UyBKvblvUOVjVM7eSNEZoVDeebZSPjoPd58E/WSQS2Ll/+6bhkq8gjP4kW4EFFfo9hn81PRqjgcdhoUgKUmuuN1q/QNCy/3QY3RmVkX41NZHctPkrtFzisKQ1Ssf6YtKrM= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(520078)(5005006)(8121501046)(3002001);SRVR:BLUPR03MB503;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB503; X-Forefront-PRVS: 07326CFBC4 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR03MB503;23:PAkPlWJmD6sssbe6JjJcDPNVQmZkIwNsGxrTTDN7ng?= =?us-ascii?Q?AWni6pSYshxVbnmJ9W0PLw0y9V1/6lg2ccMOjKWOzPVLrpu71XD4wxThBTGL?= =?us-ascii?Q?x1iCb30f+2YyNSJaclKzwewiydRh5q6eW6TQkl7YN3hTrm1p74PvCeV3Fa3H?= =?us-ascii?Q?ZixDA8TCnMLISDT3N5d6DF76YLmSk/Mpvsrh14iN4nNFHMLi883ljOG14sGX?= =?us-ascii?Q?DpvD6NnVeELBAldlVphlY7XtBONzIERhiIXXiOg+U9xmZySWLZzqK6hZX2Ar?= =?us-ascii?Q?2+j3el/cZGNLlU6dtEgF0/G43kGnCYGBGqESjnkvDwGqfLPYh+Os10c6XsNm?= =?us-ascii?Q?Ry5ISZq6UpB7/3YcHy2oI3/Ubu/fv49YRrtNQvQM91D0XdX3rNecNPgJbbM7?= =?us-ascii?Q?IK4crEPD3WYYW0LNlM2zqwa08PsuAdRC4YyoU+2/2qxWl8cm4IwtKs+r70/r?= =?us-ascii?Q?8aMdf3cInZAqn/D61ee2Jun6FiU4DjgZkrYxvutZXu6sYnq/NYJ76dxHutVa?= =?us-ascii?Q?NumEP3e5qmWHtoq8dUPTFLv4/R+viU76dnDP6pKscgnA5VImW6Z/a7uWO6C4?= =?us-ascii?Q?TTAEH0stUH/sonPmVUCjtXzs/ORoQyDRNy4m2JFk5ztOx/Bk6oyOhAQoDirL?= =?us-ascii?Q?3aMmZDGBL3W1pQKVsdCASPCy1vRVWXh7TB9oiBqLXlsFxPemiJjzUh/B1xw9?= =?us-ascii?Q?rLyTQWP8OH664L/t8hjFoTnU6KqfzJUBqMvO5bk9AEiBtlsCRNH6E8XaFTdg?= =?us-ascii?Q?hoNSZj/SUZ3tLn4Z+jYaxkUIRrcDspv16n6JZY74d/QJJOYTstJ8StGxOOQ5?= =?us-ascii?Q?Sh1pz8OT4/efvc0vR1fRDMZF5DwS/Ix8IailUO0nD0QCUCcMv75gyThVBJ4n?= =?us-ascii?Q?bJRCK5hd76LV+c0sp31AHojUln4NKQwwZYmIEDtwI0WwUb4O7as49lO9gx6A?= =?us-ascii?Q?1OafW1nGK8Fc2hK7VVjLNqXU5AO9cyDjhIocrM/UHInbydyZ+/Q4enjFwkzv?= =?us-ascii?Q?3inyXAqn/u2qzQh2vjXoO9vNDeysYa+V6hKx0wjxCYeEWAqMrsbj/fYa87Vb?= =?us-ascii?Q?Y2H6QGa7GMZdxrcHLYLGOMF+A8vLFedQllQjjUaTZsDo+8lA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB503;5:QpdQIF/Tm5rIFzC/5qJAqnsR6Z4xdzR3erg6dRFyjUdRojKVjAna2w3n8FwMlpEvTSMR+BwxzTw0O0q6g1HJ//edaKcHem+ohwKWzEgN8I0RkSY2YGiq2SYGZTsLeeW9ZJc9+tl14z+d9VzgvtOwWA==;24:t8ed1yQWdWlr8L8DJ9UG7q+NaXldfWCKzFso+ult9Zt6QYhXxd+ydb4aryt4bx+o3YdFQgmRXCKFs0u0JuQUyeJgrLd6yA0sk0vR8Hpswa0=;20:XRbV/6o9MRZqXXiHRKNBw3THgucAPzlXiBQz0vmdMu4jqURmc1N2er5B0NUAAiKKmXTRT2NT13Z8jkSpxMBf+g== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2015 20:48:20.8723 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d;Ip=[192.88.168.50];Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR03MB503 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Refactored mc_send_command() to support two flavors of polling: - preemptible (for non-atomic portals), which was already supported. It calls usleep_range() between polling iterations. - non-preemptible (for atomic portals), which is needed when mc_send_command() is called with interrupts disabled. It calls udelay() between polling iterations. Signed-off-by: J. German Rivera --- Changes in v2: none drivers/staging/fsl-mc/bus/mc-sys.c | 53 +++++++++++++++++++++++++++++++-- drivers/staging/fsl-mc/include/mc-sys.h | 5 ++++ 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/drivers/staging/fsl-mc/bus/mc-sys.c b/drivers/staging/fsl-mc/bus/mc-sys.c index c4f5bdd..6eeb9fa 100644 --- a/drivers/staging/fsl-mc/bus/mc-sys.c +++ b/drivers/staging/fsl-mc/bus/mc-sys.c @@ -339,20 +339,63 @@ static int mc_polling_wait_preemptible(struct fsl_mc_io *mc_io, } /** + * Waits for the completion of an MC command doing atomic polling. + * udelay() is called between polling iterations. + * + * @mc_io: MC I/O object to be used + * @cmd: command buffer to receive MC response + * @mc_status: MC command completion status + */ +static int mc_polling_wait_atomic(struct fsl_mc_io *mc_io, + struct mc_command *cmd, + enum mc_cmd_status *mc_status) +{ + enum mc_cmd_status status; + unsigned long timeout_usecs = MC_CMD_COMPLETION_TIMEOUT_MS * 1000; + + BUILD_BUG_ON((MC_CMD_COMPLETION_TIMEOUT_MS * 1000) % + MC_CMD_COMPLETION_POLLING_MAX_SLEEP_USECS != 0); + + for (;;) { + status = mc_read_response(mc_io->portal_virt_addr, cmd); + if (status != MC_CMD_STATUS_READY) + break; + + udelay(MC_CMD_COMPLETION_POLLING_MAX_SLEEP_USECS); + timeout_usecs -= MC_CMD_COMPLETION_POLLING_MAX_SLEEP_USECS; + if (timeout_usecs == 0) { + pr_debug("MC command timed out (portal: %#llx, obj handle: %#x, command: %#x)\n", + mc_io->portal_phys_addr, + (unsigned int) + MC_CMD_HDR_READ_TOKEN(cmd->header), + (unsigned int) + MC_CMD_HDR_READ_CMDID(cmd->header)); + + return -ETIMEDOUT; + } + } + + *mc_status = status; + return 0; +} + +/** * Sends a command to the MC device using the given MC I/O object * * @mc_io: MC I/O object to be used * @cmd: command to be sent * * Returns '0' on Success; Error code otherwise. - * - * NOTE: This function cannot be invoked from from atomic contexts. */ int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd) { int error; enum mc_cmd_status status; + if (WARN_ON(in_irq() && + !(mc_io->flags & FSL_MC_IO_ATOMIC_CONTEXT_PORTAL))) + return -EINVAL; + /* * Send command to the MC hardware: */ @@ -361,7 +404,11 @@ int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd) /* * Wait for response from the MC hardware: */ - error = mc_polling_wait_preemptible(mc_io, cmd, &status); + if (!(mc_io->flags & FSL_MC_IO_ATOMIC_CONTEXT_PORTAL)) + error = mc_polling_wait_preemptible(mc_io, cmd, &status); + else + error = mc_polling_wait_atomic(mc_io, cmd, &status); + if (error < 0) return error; diff --git a/drivers/staging/fsl-mc/include/mc-sys.h b/drivers/staging/fsl-mc/include/mc-sys.h index 7d44d8c..15e19af 100644 --- a/drivers/staging/fsl-mc/include/mc-sys.h +++ b/drivers/staging/fsl-mc/include/mc-sys.h @@ -40,6 +40,11 @@ #include #include +/** + * Bit masks for a MC I/O object (struct fsl_mc_io) flags + */ +#define FSL_MC_IO_ATOMIC_CONTEXT_PORTAL 0x0001 + struct fsl_mc_resource; struct mc_command; -- 2.3.3