From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753506AbbJMXTn (ORCPT ); Tue, 13 Oct 2015 19:19:43 -0400 Received: from mail-bl2on0117.outbound.protection.outlook.com ([65.55.169.117]:25293 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752255AbbJMXTh (ORCPT ); Tue, 13 Oct 2015 19:19:37 -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 03/12] staging: fsl-mc: dpmcp opening/closing refactoring Date: Tue, 13 Oct 2015 18:03:23 -0500 Message-ID: <1444777412-5401-4-git-send-email-German.Rivera@freescale.com> X-Mailer: git-send-email 2.3.3 In-Reply-To: <1444777412-5401-1-git-send-email-German.Rivera@freescale.com> References: <1444777412-5401-1-git-send-email-German.Rivera@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11FD007;1:7v+sn1T/l4jZNAyj5EBvJnAjQzjaDvqlPKtdXJQbHm+gRnAnmm07MuiUU9afX/hVEcFPwW+iT87ydc3Po/Tj6D6sEXaUekxHBiDxHJ/7ikPYWnnmk394Jt3NmVaMPVcLJbHdYSEd3ZUVl16KPglEhUGrb5hdRVdVkIxkbtKEGVGTkl3lpQHmT5W+puKgitOTxDrJX1rQ7iYm1mrSIgc6npLBC26/7gl3H1K+r300aHfA/i51NhzUhF4DLU11jt2jxAG0ituDNfFzlEtbGD+2dBuyGzFcn7hJByV53f4lHHH1Ggt6/71wZGsAL9LozlmVK5q6pBqV/YvvuOBCBgjz4wgy9EPzHJMOaAFmoUF5gtobV0KClSyyx9W0eRlW0oq3XMoGvhCB2bzEzSvGUXUY0Q== X-Forefront-Antispam-Report: CIP:192.88.158.2;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(107886002)(19580395003)(5007970100001)(97736004)(5001770100001)(6806005)(5003940100001)(5001920100001)(81156007)(105606002)(5001960100002)(2950100001)(189998001)(46102003)(11100500001)(87936001)(77096005)(64706001)(69596002)(50226001)(104016004)(76176999)(92566002)(36756003)(229853001)(5008740100001)(50986999)(106466001)(86362001)(48376002)(85426001)(2201001)(50466002)(47776003)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:BLUPR03MB504;H:az84smr01.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB504;2:v+VJAGbS9RkMfQnmjI7RteeeBfO5q1rvtPO2HHMjum2PbWNyJwMDVimXG9xD0jbX59gt+zLsXCg7DD01h/yOl6pXpZLZJSigs8imoiolQLMZw8dxDbz4thVnS85h2rr7ElUfNNaQkEK0vosR25GQPP+VFhstHkyTM0D3OMZ1Z5A=;3:WPs0AZPOIvUsqwa3S1oMmKYXSKHzy/C0gFF+19yWgOw6RvYsHy9787Hk1DZwGyoxFFwk5BlmhZRFoj/tjBpeghHPdXxY1WDPSFl8/qA8JFZqxEk92ZPb0Qi84hIGd6ZxZcSvYHkcYZEk2fx01TgnnWOVMxloqIueWo8thSwcvJBoppT4DMBAi0rTcz5bf5++kTTs1kn9hfMfZVuiLHODCT/P6xhlYQ/uyt4fI99b6rA=;25:V6NS+q4vZ4CWTSs11+Ymm6eLifpFlA4a4jetRJ823levBsQGv806ANYtM4uRGeI374TX3a90/yNvgq0Zfqrfs9DGXfslrB2C8u+oEB2o7YSk3CvxuWHYe90uyPvB7KyeNIEWSmyyYFt4wvWtWsGRYPQqpg+SfQaF8HYGoxrZgI2VIKWcDYhhp23AFJDZGhfqq+2JQMPMjG4vmIIPWSmeKUwozr0YdGw18CHDXznmKcN0LKPpVvwsJtyjxxJkC34C X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB504; X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB504;20:/oS7+kSn76OiuVfpPquYC4mryEB4TLgRPmkDrIsIaLooC0cxvSINbT9q4FxlEThGl5SvUhD2JkukTxnoqMgjykSJzKh1ARZRnT/ntOevIMJNOBePtE/U7x3jHhwmQO9FVSVVhCMyo+F8fuXNl1RzVjDvwkqk99V+W8twT+twvN7EdGkimTkmTJkwHeZx3SBqHCPRLtvqWHeQ58hypYRN6bkv2aikWVqYXmn8xLu31yY1ZqrE3GvRKeQcF0/NozqWGl2EU4s0xe1V0IzVGrFumC+aO/rhn9XyL0amJPLTQGjdQjqhY6J98TSOSta30wWT/8IEtprPI0KIg6ngbkMcH+LMPm/UvzeC6XcCCvhFGHE=;4:sO+AKWUxl2ddlOoJQ0olbRjMSExK2hopSm87zG+AFLLRoTd8i1n1cgGB3qZeoFw+ZbAL40n++idB7VecijOR0hHqeLb5NlBYbNovpWv8+iWKOlg2wzRmP56TpaGvXLp+kc2kfG+tAwM9XeBtTAa2+kU209ie6s2MHOwgEXG5IeGMZbX+YiVKgftFIwX9sl1J/cyQ7WqkfEsOIrV8NZy5CcVdoCKkyXMeuTcnI/M/NUINiW9siqC3qedqvIS3j1ijovObzcDSG9beSVa2nYrb7XPx3P7Ju36CRNZicongnFs7lyxqtvsUpGN6IL0nb3NogHKtgYNDGcnbl/bnQWh3iw6QK8RzSRK04UPpsun4Rao= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(520078)(3002001);SRVR:BLUPR03MB504;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB504; X-Forefront-PRVS: 07283408BE X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR03MB504;23:5oBMUwAtqx01nN9x7TFCORGncqNDkwr+5rioAcLZRV?= =?us-ascii?Q?ld058URNpWVWsUIm82Iy7Of3BZLnVXK6fbXSTwDulEpX21FK2CL6vDruigoG?= =?us-ascii?Q?hAV1zIKLjty4HN/dix/poDs9XJt6mlrjk3R8SdQSVHSJrzq9DIaVDMjccJhP?= =?us-ascii?Q?90VksEpD2iY8fvwbYnTfb5EvumNwuPcvcrkv0pO0uDcONe04uQDPiE1L6DFU?= =?us-ascii?Q?30dQif78TraF0e3z1JQX7s67MOS95d5fk4VdX4OMvClJiLjgVoHxx6BDoN0c?= =?us-ascii?Q?/Ata7FmXlTzHT53o2mcn2wIqmS0BFQRny6K51IAQAwaOrtoue4tWmSegSI2p?= =?us-ascii?Q?ov71fzhU/xHJhkMVYS6kwG0B/MZSdZ8mtbXj8sY1O3iVIojCjUS0W1G7O9E5?= =?us-ascii?Q?Kf19fjcUtJX0DOMyy0SpOnzwa8dVr1vDXShyHOzOiixFHJkJpXbOROd2u4Tw?= =?us-ascii?Q?D1Ld8zqZn8i3gMbsJYbU1RJMWTt8fvAt/cL+g2rJc0Ej2BXi/HntbiY3LSbl?= =?us-ascii?Q?8f1/M8IbihO8gj3QjyKJYpLzwJyQAQVoAxDEqoMg3yUG/mntFKyBtshmBxlk?= =?us-ascii?Q?vD+Zb3kVzNQojNHcT23WlfoNlCx5fJAQ9SUprXxeS/1LT7QzDFU+e71m/4gE?= =?us-ascii?Q?K66BG+srJCZqUe0WJOAEr3JRD8fM2ZPwuDqCR5v8MVNDpwVMVWOx6CXNs6NE?= =?us-ascii?Q?THYUvfMqCTwRdlznoa3jQZFcTck4D190Y4NXIYuu0vMZnvtw392ta9hPg2pt?= =?us-ascii?Q?LUI9vKoQm3aiO052r32rYsy4PkRHY2D4zux6oskOfh4K3kEVFs+6iZsYLaC6?= =?us-ascii?Q?aKDS9XxhHkoZCDTbY70vf2rBdEKPM/xhtJURwCC/d99DR/BnAdOEsAgCJOk+?= =?us-ascii?Q?bTZFuntcGP+VS/nOwXTSSiZ/xVcBmkra/+oyieJpA0HicGu7FOfEqgXDVLT8?= =?us-ascii?Q?W0DO8aqmLVbipI6wF25XHKul4rKfRTMNju8QbTdZrP4Y9D5oUdGJ9SKkyjUa?= =?us-ascii?Q?1xvXLszNkG7oD7yEKeJbfiAvNkehvGwE0bksi7R0YCEO/tJ9ductaQCu7Smv?= =?us-ascii?Q?JPsZwlXXybBOPDdNMhjyymahh5D7lVqv0maxcXECEqhRuad05iCVWHlbrfuw?= =?us-ascii?Q?/Zlw8V909zKzBhfR9oj80xkQX5xtEC?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB504;5:YXo3nqUBiKYT6+pUOze2A16toMpcZR/oP5n56RLupqT2IYmvfCv3RCPDRpHWzwEaZT7H0ifuOv2HhF1B5WdXVQmQcOAZ8xEi8/Wq+iYN4sofU8TSFbgwHXNM8Nr1tYvX/MWalmENXm8DAkFespafug==;24:L894OU5TkQrjh9KfLU5Ecm9CxnKgWzlqwEpHwIpnQm6fS37G+vmPCPE2xmgSHmjamBxAptVWMiCJbA0B+NriJXU3tCmRjvAb+dcflvU03Mo=;20:TVaBv8y3XgH959rgNK6KjLsK2rLRTLChWxDMssq0ZhYmd4OqVZOhoFlSs7+BaiertPdLlxhkXFqs5WIM/kiOSg== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2015 23:18:28.5213 (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: BLUPR03MB504 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Before, we were opening and closing a mc_io's dpmcp object in fsl_mc_portal_reset(), since that was the only function that was calling dpmcp MC operations. However, it is better for maintainability to open the dpmcp object when it gets associated with an mc_io object, and close it when this association is terminated. This way, we are free to call dpmcp operations on a mc_io's dpmcp object at any time, without having to check if the dpmcp object is opened or not. Consequently, the creation/teardown of the association between an mc_io object and a dpmcp is no encapsulated in two functions: fsl_mc_io_set_dpmcp()/fsl_mc_io_unset_dpmcp(). Besides, setting the corresponding pointers for the association, these functions open and close the dpmcp object respectively. --- drivers/staging/fsl-mc/bus/mc-allocator.c | 15 +------ drivers/staging/fsl-mc/bus/mc-sys.c | 67 +++++++++++++++++++++++++++++++ drivers/staging/fsl-mc/include/mc-sys.h | 5 +++ 3 files changed, 73 insertions(+), 14 deletions(-) diff --git a/drivers/staging/fsl-mc/bus/mc-allocator.c b/drivers/staging/fsl-mc/bus/mc-allocator.c index c3222c6..33f5de4 100644 --- a/drivers/staging/fsl-mc/bus/mc-allocator.c +++ b/drivers/staging/fsl-mc/bus/mc-allocator.c @@ -373,30 +373,17 @@ EXPORT_SYMBOL_GPL(fsl_mc_portal_free); int fsl_mc_portal_reset(struct fsl_mc_io *mc_io) { int error; - u16 token; struct fsl_mc_device *dpmcp_dev = mc_io->dpmcp_dev; if (WARN_ON(!dpmcp_dev)) return -EINVAL; - error = dpmcp_open(mc_io, 0, dpmcp_dev->obj_desc.id, &token); - if (error < 0) { - dev_err(&dpmcp_dev->dev, "dpmcp_open() failed: %d\n", error); - return error; - } - - error = dpmcp_reset(mc_io, 0, token); + error = dpmcp_reset(mc_io, 0, dpmcp_dev->mc_handle); if (error < 0) { dev_err(&dpmcp_dev->dev, "dpmcp_reset() failed: %d\n", error); return error; } - error = dpmcp_close(mc_io, 0, token); - if (error < 0) { - dev_err(&dpmcp_dev->dev, "dpmcp_close() failed: %d\n", error); - return error; - } - return 0; } EXPORT_SYMBOL_GPL(fsl_mc_portal_reset); diff --git a/drivers/staging/fsl-mc/bus/mc-sys.c b/drivers/staging/fsl-mc/bus/mc-sys.c index e53acfa..a581d29 100644 --- a/drivers/staging/fsl-mc/bus/mc-sys.c +++ b/drivers/staging/fsl-mc/bus/mc-sys.c @@ -75,6 +75,7 @@ int __must_check fsl_create_mc_io(struct device *dev, struct fsl_mc_device *dpmcp_dev, u32 flags, struct fsl_mc_io **new_mc_io) { + int error; struct fsl_mc_io *mc_io; void __iomem *mc_portal_virt_addr; struct resource *res; @@ -111,8 +112,18 @@ int __must_check fsl_create_mc_io(struct device *dev, } mc_io->portal_virt_addr = mc_portal_virt_addr; + if (dpmcp_dev) { + error = fsl_mc_io_set_dpmcp(mc_io, dpmcp_dev); + if (error < 0) + goto error_destroy_mc_io; + } + *new_mc_io = mc_io; return 0; + +error_destroy_mc_io: + fsl_destroy_mc_io(mc_io); + return error; } EXPORT_SYMBOL_GPL(fsl_create_mc_io); @@ -123,6 +134,11 @@ EXPORT_SYMBOL_GPL(fsl_create_mc_io); */ void fsl_destroy_mc_io(struct fsl_mc_io *mc_io) { + struct fsl_mc_device *dpmcp_dev = mc_io->dpmcp_dev; + + if (dpmcp_dev) + fsl_mc_io_unset_dpmcp(mc_io); + devm_iounmap(mc_io->dev, mc_io->portal_virt_addr); devm_release_mem_region(mc_io->dev, mc_io->portal_phys_addr, @@ -138,6 +154,57 @@ void fsl_destroy_mc_io(struct fsl_mc_io *mc_io) } EXPORT_SYMBOL_GPL(fsl_destroy_mc_io); +int fsl_mc_io_set_dpmcp(struct fsl_mc_io *mc_io, + struct fsl_mc_device *dpmcp_dev) +{ + int error; + + if (WARN_ON(!dpmcp_dev)) + return -EINVAL; + + if (WARN_ON(mc_io->dpmcp_dev)) + return -EINVAL; + + if (WARN_ON(dpmcp_dev->mc_io)) + return -EINVAL; + + error = dpmcp_open(mc_io, + 0, + dpmcp_dev->obj_desc.id, + &dpmcp_dev->mc_handle); + if (error < 0) + return error; + + mc_io->dpmcp_dev = dpmcp_dev; + dpmcp_dev->mc_io = mc_io; + return 0; +} +EXPORT_SYMBOL_GPL(fsl_mc_io_set_dpmcp); + +void fsl_mc_io_unset_dpmcp(struct fsl_mc_io *mc_io) +{ + int error; + struct fsl_mc_device *dpmcp_dev = mc_io->dpmcp_dev; + + if (WARN_ON(!dpmcp_dev)) + return; + + if (WARN_ON(dpmcp_dev->mc_io != mc_io)) + return; + + error = dpmcp_close(mc_io, + 0, + dpmcp_dev->mc_handle); + if (error < 0) { + dev_err(&dpmcp_dev->dev, "dpmcp_close() failed: %d\n", + error); + } + + mc_io->dpmcp_dev = NULL; + dpmcp_dev->mc_io = NULL; +} +EXPORT_SYMBOL_GPL(fsl_mc_io_unset_dpmcp); + static int mc_status_to_error(enum mc_cmd_status status) { static const int mc_status_to_error_map[] = { diff --git a/drivers/staging/fsl-mc/include/mc-sys.h b/drivers/staging/fsl-mc/include/mc-sys.h index bfbecaf..d4fb602 100644 --- a/drivers/staging/fsl-mc/include/mc-sys.h +++ b/drivers/staging/fsl-mc/include/mc-sys.h @@ -69,6 +69,11 @@ int __must_check fsl_create_mc_io(struct device *dev, void fsl_destroy_mc_io(struct fsl_mc_io *mc_io); +int fsl_mc_io_set_dpmcp(struct fsl_mc_io *mc_io, + struct fsl_mc_device *dpmcp_dev); + +void fsl_mc_io_unset_dpmcp(struct fsl_mc_io *mc_io); + int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd); #endif /* _FSL_MC_SYS_H */ -- 2.3.3