From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754607AbbJNU1h (ORCPT ); Wed, 14 Oct 2015 16:27:37 -0400 Received: from mail-bl2on0115.outbound.protection.outlook.com ([65.55.169.115]:30304 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753480AbbJNU0p (ORCPT ); Wed, 14 Oct 2015 16:26:45 -0400 Authentication-Results: spf=fail (sender IP is 192.88.158.2) 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 2/4] staging: fsl-mc: refactored mc_send_command() Date: Wed, 14 Oct 2015 15:11:43 -0500 Message-ID: <1444853505-1369-3-git-send-email-German.Rivera@freescale.com> X-Mailer: git-send-email 2.3.3 In-Reply-To: <1444853505-1369-1-git-send-email-German.Rivera@freescale.com> References: <1444853505-1369-1-git-send-email-German.Rivera@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11FD039;1:KE/AwvcEpVLRJFydiA2Vxz5LfOSh4d1ZbyDp4vQCeHL32jgzDgsO0cqB9kZUnAoh0syTxam26H2cNX/OuLKotdyMGrpu/p1m46RtKdWqwABOQfap0uDaQlPs496BI/UvdFlSZmpVizmkfR43PrhoXOvedzcKhM2NVnzn4NYerFep5+VyAOOKOJCGmc309dG1rfZGNnzDinHQ+msxmubr9acirtsays1JiXGWqQt1ybrna1UIXf36WwYlhaItq2yIzHAMyAvfgZ7zSGXF4Yy0fFYaBEk3TFYKViixTIOs77r7dbLm3Gqfe+WQ/KS39l03i0L1gzDCOWsDN42+V4w7vTz0qVcRcYVJO4eobbWFZuK55vGSfagj6X4/sixNXwFsdIAD9yrYsx3iJqbLyoGGKw== X-Forefront-Antispam-Report: CIP:192.88.158.2;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(5007970100001)(11100500001)(2201001)(86362001)(5001960100002)(107886002)(5003940100001)(47776003)(48376002)(50466002)(5008740100001)(64706001)(36756003)(92566002)(104016004)(6806005)(87936001)(189998001)(46102003)(97736004)(50226001)(5001770100001)(105606002)(2950100001)(85426001)(77096005)(106466001)(81156007)(69596002)(229853001)(76176999)(50986999)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:BLUPR0301MB1634;H:az84smr01.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;BLUPR0301MB1634;2:Mkmp3qIz18EoQ0NEKlFGz2k9wB8FyZDayfAseaBQR+wjsfROXul8c0I7W/FDhAHEXRjPYw3jqV/W2eY6yqgQ1bKtG/FPBDIKl6vxiHratVVdpD4w0FHuYqioe8YH2igcqxIV2s/EsrfkvnEV/fB7ghXuU5QoAO9eu8/BwIg1fSI=;3:+4+Q7K7KipalVHehMq83mMBha4z7X0F+KUDcAQF/0pZudb+t53/dtjAcTq0yqvu+SB59iyO7f8YQhXVCIYnweurSWhVCg2TdXquIKy2NhoUKA2M+gKV1CeRIVFewoIS3JkGDr8uSO10C9X15rjN7vpT7VCsEy6Qh9j/dRVkkhstTMCpRyp+oOfN6PVA6pgUUOUjpugGPet2FpWOyT9tILIOizuy2coje/EyQD+shLF0=;25:LKhjLzSQhbC3NGkV9++UWb64PcUKA62qBHZhc9udxgxEbtJalkkaeVL0UX/DZycWx8fAq4mLhzQZZDC/LgJPqnReA3XpYXbyYtjMeWspREtLDUnBaxoW3U4fOwE2p93xA49amsnR9+zIx4aAdGXvy/TUquNd3WnXq/Sr7R11bGpmBJWl+kL2FTWUfsJiaUo52S1vWN3saeOUO2RQ8DvFQ23K6V4kEpVhczdFmnEKKQ3eX7k8tgDY2a6jvaBEN1XLwVryBztaIPgLsPIf3CVL/Q== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR0301MB1634; X-Microsoft-Exchange-Diagnostics: 1;BLUPR0301MB1634;20:WQytxtCExwgTye/lS5znQovsN5QWzMftOHmsrW0Vqn9Vz8ZOIuNqmCVEGqjwLqkwezTB9zZMb7mcgjk2QWX1Zm6CAC5w+d9u0xWbo4jM9MmjUMH6LnAikJNhTlCnsNUpRIT8C3U4IMO0iVfg4g1u4EMqVxehUmcB05h7ce3m8k+zwZAI60K4jNNcit6SDwBthyWsWpeQxtUNbq03f7WBrTldwZugizIlGF1CLVV8CpWgz6OnKu95RjpB/4RygbwMFBUfk4w+q35J0I1ZulAG12FO2e2AJnkh4U38GCjN6Y4ASAABLUASmopZYCeSVy8wucbHMy61WjjI8F9a+I/guvVAdIzMaYnYAQaqo7RwA/4=;4:XW925RWD7B3kCvs8yQhv0uwEZBdg//eitPApHLP75W5KObkTbxJGaazPw+eUv8+WwXWczsw+tQus/wnygz7V5htknVklFtEwvmRg3RDyOoWwytv9T6rlN4sxbym9bzAVdfKZ13i8ByXonDImUsg6IlpI+4gwcigJkAH7psKs87Pf/XRl6y2Ncst4tJInbO7s6ywKVHl1/CWm/yoeYPh77xdHEGswvTaFcv7sHCF8UtWVh6vCRLEv3rEDoBquUCtH6lJS+X2NGYCFitra5lXPmScojkZAKySzvLFQDZM6oPVoq/B2fOoZ6RsyFuY6YIo7U7xB97RtzCahXirmXhdbxzao/3yTW2vESwYYF4gYQdI= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(520078)(5005006)(3002001);SRVR:BLUPR0301MB1634;BCL:0;PCL:0;RULEID:;SRVR:BLUPR0301MB1634; X-Forefront-PRVS: 0729050452 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR0301MB1634;23:FaF2sffIv0tLRHzBVuiZWWRBaIPpqGC7TPsSNTw?= =?us-ascii?Q?Zg4MybVM8fbGlZaVmbqCQ00Ejt03Q4nvHCxfdIE1bmC3PLYB4/ZbcDHvtvph?= =?us-ascii?Q?puGjGWjpqQpTWV7BKOZFIroMcOAtiBAqvtz4M16k5JMEGEKO1n0B7Kwzph7R?= =?us-ascii?Q?h1eJV0VFHu1ETEcnzDPRHIW2SLS/4cld1oJkWTo7+E4z5L9MZ8ngpy9d6XVO?= =?us-ascii?Q?xISH/T+yP+YJUNyliW1G/h1zWLPGl9PHRNdDkYS2VIrNmEynXmsZn0SiZM/C?= =?us-ascii?Q?hIG004JspXKbkSlsohWDCiwL2EmZG4euVmzTzxpSuldQKRu9zFs6y+knNvoC?= =?us-ascii?Q?QNRORflHNx9xBHRPJ7jteYY/fo3BA09ByKnWVDrfOSdpFsiSlI1Il99BdQ52?= =?us-ascii?Q?TzpShqWcbyNsEif28t2mng4jgqpF0DJ8+JV5ivOgDafBTt/Ie9Kg7Xovyz5l?= =?us-ascii?Q?ZZOU2RYs3MbmSMOhxDNxsCSDU3Hf5PbsX4wJ5KS+Ybz2J9Mu/Tt9rj5FZ9i9?= =?us-ascii?Q?yP/jb1uxGiiF3FWBkH2hLLLnyXjdmde5lugypE2/TjoYsTc16n4Ap9SzU6Ea?= =?us-ascii?Q?q05tDhda+ar7h9yIrhOqJzse9hRf1/DLcGrTQi2H41OdaPl08dLYVHvD/g8o?= =?us-ascii?Q?AH2tympF1om52WpXAsa/oai19C3fu+/bD33SxCZgCYPLLMqxWowfOs2/WdfP?= =?us-ascii?Q?8AaXHoXjm3LVvL54wnwPamnSQRrV/1VFOtULkDyAWrYb1oFxICVYSiFfuXxD?= =?us-ascii?Q?5N7hfkpK/vrdnzK5leyVeFhD0mkulGTlCR3lRxuDB3JuGY7VeigZawNT36uO?= =?us-ascii?Q?4ye5tn8RIUL1o8cCDlrDUOHDrG2fxPUogHvABlzmsqv9O+Kj/hD/b6Gx6MDP?= =?us-ascii?Q?qS2MZ5grcqFQ3quOHxtKjlJotwkp/TTQyEL1sNlPlQzgKIddKcyJtof+Te5O?= =?us-ascii?Q?T7whOt1kP+3L1AF46GTtIo3dzloSfiKkS3ndOLc/XvRY5LOjWXuyzeXVtrfV?= =?us-ascii?Q?PUiyxORexPWLBqj+Yo2hpX4TsTPUTo3IGtcdb45DFpi1kXn//DC/aBCZU54+?= =?us-ascii?Q?AhAScyCHjYXvbjk9gA8efhPExsedZDyH+1UysRDbRoYUOnkFk1A=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR0301MB1634;5:2LHUDBKea6G/GRsp9eqLqkkM9Zw6DBLJyO0cUlf+UCxdSWcMCnirz9MCCA0P/zyZ2TXCgq3JyqvbzD5B6q89yQwEre33mwRQGlvUA/eT0v2rr/Ut5m01NBIeghvzNuO1q2zOihbZm7arCmCAEAGyfQ==;24:H3fxl0F6RNoQwt9ErPrYf9khKJJJy3dEBjahgZZm5kyZgSWIZ//IKsZBUMT3s8VNK+h1nmvBUaQS0J2pqxpLa1DpOf3J9QBJGNJhpF3U4Ks=;20:w1xZRNdI/+E3msiVEj+5VcXKLiMh8XxZNRqip3V23VKgVZ8A2qCurG47P1e7ylr5apmA3m6ug1Z+Gmb5vfce1Q== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Oct 2015 20:26:41.6522 (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.158.2];Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR0301MB1634 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 --- 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