From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751820AbbJQUs1 (ORCPT ); Sat, 17 Oct 2015 16:48:27 -0400 Received: from mail-bn1bon0137.outbound.protection.outlook.com ([157.56.111.137]:36275 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751638AbbJQUsY (ORCPT ); Sat, 17 Oct 2015 16:48:24 -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 2/4] staging: fsl-mc: refactored mc_send_command() Date: Sat, 17 Oct 2015 15:33:13 -0500 Message-ID: <1445113995-12021-3-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;BN1BFFO11FD008;1:L9P6DBlAeP3cRf9rguEaiPzA+t5dAEwdqu89xyWO7x0ZEAQ9bZ+CGPAxQV9RYNk5b2NyQyieldOP4R6nxM9RFHKLi13ZWV6bQeTBndrHs4ZiRyPIRPmtzWNLYMK+kdGUjfKAW8yQrgoi3BwqYN9zYZTJ1dV4YiODY90EPS/S4nkOe5LTzFjew1DzrzIBK5rekQlUDEoudZfnKs08o0Sye6V0Isw+hTMma8OS/10pSRhLQhLit7mMgkKBuUxinsPg3WxENpa/l33iF+sRb+xwnkNY1Gocb4+KeC+Ow0LjopzIORqyU3WggYWmF6IbpOpzXsZWjFAOZ9ZSlvf3GigeZrBkrQQ4pmYF+OeSDqR/WIUQZpBFesZZk+rI8i2KdIb+Rj+rIJ51PE5YHhwRqpTwgg== X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(50466002)(2201001)(105606002)(86362001)(189998001)(50986999)(107886002)(5001770100001)(97736004)(5003940100001)(81156007)(87936001)(77096005)(106466001)(19580395003)(46102003)(85426001)(19580405001)(2950100001)(36756003)(50226001)(104016004)(48376002)(5007970100001)(92566002)(5001960100002)(5001920100001)(229853001)(76176999)(6806005)(47776003)(64706001)(5008740100001)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:BL2PR03MB499;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;BL2PR03MB499;2:BPgi1iyOW9mlz7LmSgO7n67PekXQfYItGVl1jGBtaWImcwzL547iV+uVvNleSpI5wCynylF1Y98GY1f1CmkKXvH6wh/9tSbU2JO1k3yYvOcduDLGK3ficN2YZ+XDWOfvcoo+94LRl/snZTQ4K+XqPKmSw/XE65oVeGeYLc9xn04=;3:uDJnfaLueTNBySJL9gHQa1E7hjqlJ8cBrTHy/Tus8JT23RxOmWT76XB3MHDWd2AHl4zjJVv660bs3Og5zk5SCfLdITrRZNoAZE784miFTikRxI0Lr5ycrUYg8+/Qj1fSzmZ1J5DDNM7SwCB0SZUxQARPVw7WEuZJ2r0ITjrpgajmdzgvnFrQzAZVDCqKgeC4LrwiDetHxU7rbu6g8G7uT561pNS5agT22DNUFih8zHU=;25:h3wze9USaG/XPqlxZ3aHPPfM1AHYEM8ZDm/y6K1BSmmyl+QiiDdgWMx+UJd01bZQrrrrhv5yo6WQTXrQZCmqbnCvAYmQjIDAcL8UqIW0w6WnL+UmW+ctev5n/Q0udl52RFMPov6cVCtbnslyCm/KghI9B3x1ZSkOUNsSkj7FfiTWPVIpK/h1nM3cPOkPO27tvhJUQfBm0IOt+e245liKtJNwpE0Sl/h0wi9MDBLuoPWyBoQvKlOwmsKTqZ5Sxq7oLdnTHbyYI/zmm7c+sw5gXg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BL2PR03MB499; X-Microsoft-Exchange-Diagnostics: 1;BL2PR03MB499;20:CR0Nlq5+bOm8Pfco3r54tZUlz1AAr6HjLCJf54eORogcH9yrhp7MJqmk5XetSsd4y+myVEfaMdEtVsvQO+XwfkBgkcUfl/9Zzb8M5Z0SO/VFa3xK+/1h1tChvZfOwC6RfLZeDYhpqyTsDDh2cI/NCw9K+jfMbVan39Bf1xt+TuDj0ZniiMSqES+uEYH8qEDb+CM0hVCmNTV1/pJl9bUAlvCWTg/qzcdt6ZMYfjCHT2lfSEdk80BOJrkCgUNvNmWkt0VLWwJWsv+NAgn0yu0SAJwl/WUqShudbZlv2qCqLxZ7fPsftknP+s15Qh4WRk9qXj2/Ot5veg/qkdBaEUOTP8lNkYnOKPFCZgcBs6tTL2M=;4:uZ76eu7LNAV1e8LJzIaHcRSYo671eYjm6sVF02uPtogQf4qPGGgP99IZfvHcYL5cRuEFzG0cHB+pJXUl2LaADZXaWH6hpgBWLTf1n43T/x+YWGYJzCV+/y0k+f9c9H0wdWYb/X+L77TcwpPS4wc1Phdzk1+tG1b9FF6ugvUHhwQdjN9gbhlknLmR4C+DCKX3xoQyS1BJERSNfHdvZc8rGaNjGoch6EFtvH7L+SR1vlWxNz+qAAxMiKu8p6ZTxB26RA8nJ1HNWAJq3oYMWAVHuFRTgcyO2R3FPXbm/gSdgBh4/SclUsfPt1NDHAN3Z308uP3c5VMM/NzpiIKCGLBYKfRemCOxpOC5U/meFHZmefM= 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:BL2PR03MB499;BCL:0;PCL:0;RULEID:;SRVR:BL2PR03MB499; X-Forefront-PRVS: 07326CFBC4 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BL2PR03MB499;23:wq8w6ParFzDkYaUdKUmcYWh2XdeXHb7hmFVc6nWHB3?= =?us-ascii?Q?Zp7xiEVXZhWpzLDvF1il3UHQiZqb4Xr6c/1SbiktXd6YnsPjktJGYMjYChCm?= =?us-ascii?Q?qRRNWUhzBulla4+7HuGKe/ItTeSsdYN4nevyKqnrfUC+hPAFQDtaVOOhXbaV?= =?us-ascii?Q?fZE2xWFzacU8X713zwvGFaZR/8/gGa0x7JaeYO52p198fadOcGcS0YcD2rFz?= =?us-ascii?Q?6M8c0uCRLQMD36/pzxawWSKTeMvr9XtufCTyohog8sHSTL3OKoGx/+MTZxaB?= =?us-ascii?Q?aRl2jNRBI/nn5Rbe+KMylJ4ls/O9TYw0c3cixY6xAF0xXqePGiDC/SeZgpUD?= =?us-ascii?Q?9FGSXkJDNOtYLAq52sruNhtHNnBuWFwfQ/iKwKi7MLhE66bMx8QWJqFdPdyk?= =?us-ascii?Q?2SSh/eAMicDFEZTQjdpWEqMLAWmof1vH1rjFVbK04J0uSME1CEEVUpTvwfPs?= =?us-ascii?Q?uS4kWaHmGRaAn4pQMeBDeVtxGKFpj6vyCTkCeA0/yJ3GM1vFXwNlqgMqv7mV?= =?us-ascii?Q?weuL/P2ppMzQ1+5FGorhb5PbrESUsyX1MAURtaK+Vg0BUvq2Z7WFqYeQbdrT?= =?us-ascii?Q?OrXmdxxEYfMTg0BBv4bQGA0rkUvJj9gJ2OZno5/wSpz9bvzl4jOdais+BDy9?= =?us-ascii?Q?tNmAkkAW0JFktA4htjqijRerrsZSjDkEQqmB/Yptq3opWBXprM9OEJn0DBib?= =?us-ascii?Q?omvjZoF6x29K8fcOk0FCwLdBjCxTAxf+340jqEKXb6WvjyNqO7HhgpEm5Ct0?= =?us-ascii?Q?3OFc1h9rf9Jn3cq7dfhhbj/c0jrl8A4EMzYMe6ZjxohSdyZt/ZlecfOZuFEF?= =?us-ascii?Q?rV9pjAVMC5fFHe54uWS0jBSirSJIHftjRRckCQlnQG5rt494z3csx/AYyRgp?= =?us-ascii?Q?tpkTbbipI7T8QurCL7CPLkYL7vmUj1Jh+BhI4hSifRvRwrztuHIb28Q4mCrJ?= =?us-ascii?Q?KGRyIZ8diOyw4wOMnnV1VbSjEh/DsQQNgQBFWM3374VvSZOoAJMnjza6+URf?= =?us-ascii?Q?SMRgrjSprWkndotZvr9kEWBKTVRDuKM9yMP8OJ5UY9RAu5kg6jmv4POm8sCG?= =?us-ascii?Q?GTvhhIcVloH9GrfbeLhyCVsu8yCfhf5qWlGJvA8932Snd9zb1intpCg+4WJK?= =?us-ascii?Q?mn9IRWrT4=3D?= X-Microsoft-Exchange-Diagnostics: 1;BL2PR03MB499;5:4XCWIX76QwnsCRJIuNyqjUuWf/yJZWUJs7aW7hi0ATcSD0eAjUEf5XrWgpOzv1/XT5g7YroME1Jskh0nN2zHFSOoGjT3JFfBG0t3Xgrpy6Q2DjDYvaQW4oRQUbLUJ70XsooDGYutbcdLYVsLXqOcqw==;24:7qLRxKwAaeFzdvZbJ/2Nq3ILCuF2WWiwR+o+whqpzjXC71YGE+A0Rui8j4jnqX9F48lcSzq9Xgm/4wb1bLQObsGLVCQFHmmNsCSyW5jsEfs=;20:g+exPejc1sPM8X1ls/4Ketl6YB3+1KmrFH7sTBd7/ykZgnsSDEGZhbH9PnVwcSH7JefnCEt+PJ70qVjkU7QtSA== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2015 20:48:20.8238 (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: BL2PR03MB499 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Moved wait logic in mc_send_command() to its own function Signed-off-by: J. German Rivera --- Changes in v2: - Added missing Signed-off-by entry drivers/staging/fsl-mc/bus/mc-sys.c | 50 ++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/drivers/staging/fsl-mc/bus/mc-sys.c b/drivers/staging/fsl-mc/bus/mc-sys.c index 2c5f109..c4f5bdd 100644 --- a/drivers/staging/fsl-mc/bus/mc-sys.c +++ b/drivers/staging/fsl-mc/bus/mc-sys.c @@ -292,27 +292,22 @@ static inline enum mc_cmd_status mc_read_response(struct mc_command __iomem * } /** - * Sends an command to the MC device using the given MC I/O object + * Waits for the completion of an MC command doing preemptible polling. + * uslepp_range() is called between polling iterations. * * @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. + * @cmd: command buffer to receive MC response + * @mc_status: MC command completion status */ -int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd) +static int mc_polling_wait_preemptible(struct fsl_mc_io *mc_io, + struct mc_command *cmd, + enum mc_cmd_status *mc_status) { enum mc_cmd_status status; unsigned long jiffies_until_timeout = jiffies + msecs_to_jiffies(MC_CMD_COMPLETION_TIMEOUT_MS); /* - * Send command to the MC hardware: - */ - mc_write_command(mc_io->portal_virt_addr, cmd); - - /* * Wait for response from the MC hardware: */ for (;;) { @@ -339,6 +334,37 @@ int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd) } } + *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; + + /* + * Send command to the MC hardware: + */ + mc_write_command(mc_io->portal_virt_addr, cmd); + + /* + * Wait for response from the MC hardware: + */ + error = mc_polling_wait_preemptible(mc_io, cmd, &status); + if (error < 0) + return error; + if (status != MC_CMD_STATUS_OK) { pr_debug("MC command failed: portal: %#llx, obj handle: %#x, command: %#x, status: %s (%#x)\n", mc_io->portal_phys_addr, -- 2.3.3