From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754676AbbJNUNw (ORCPT ); Wed, 14 Oct 2015 16:13:52 -0400 Received: from mail-bn1bon0139.outbound.protection.outlook.com ([157.56.111.139]:41573 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753930AbbJNUGv (ORCPT ); Wed, 14 Oct 2015 16:06:51 -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 v2 03/12] staging: fsl-mc: dpmcp opening/closing refactoring Date: Wed, 14 Oct 2015 14:51:42 -0500 Message-ID: <1444852311-673-4-git-send-email-German.Rivera@freescale.com> X-Mailer: git-send-email 2.3.3 In-Reply-To: <1444852311-673-1-git-send-email-German.Rivera@freescale.com> References: <1444852311-673-1-git-send-email-German.Rivera@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11FD016;1:rE1jVquW3NEOxcbjaeC5fbR905V5QBQHWIH7BKfIwmqgASAuwpvrcLjr/2aib9X5wWdCWTWp9LObbC8SEqsjPng5kd+/VPdDCzBsmLUtOkAoIujEUaVz5r3uRpG3N9pfUJFJWkMqSJMzZ9a9rFGneBEfrj3bcj4V8hwSKrTxz/l5kdOEJuW+xixIAkZjnzydvTHFlCUFaVqyej+e2eXdBXDiwZYKMFCSuvqPg0OEY2VEihOznjcZMbj8T4mCXGT31SabZXfmjURRutRlgE73U0uYrO7poao3ZhKHYToKAoKjLc9o0oqDMt1jA3Sj9ivGhxxF51Rji7fwAqEf2I8TRWNr2sp1YIeTJh5vllbYUJ03E8attv1IngLZr7/eTPmrDPqMLLtm53tRFHlYnQibGA== X-Forefront-Antispam-Report: CIP:192.88.158.2;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(189998001)(2201001)(2950100001)(87936001)(85426001)(86362001)(69596002)(19580395003)(77096005)(81156007)(105606002)(97736004)(5001770100001)(106466001)(50986999)(50226001)(76176999)(64706001)(47776003)(5001960100002)(107886002)(46102003)(48376002)(229853001)(50466002)(6806005)(5008740100001)(5003940100001)(36756003)(5007970100001)(104016004)(92566002)(11100500001)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:DM2PR03MB510;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;DM2PR03MB510;2:1ybPrrbjgJ5rdbUlN5Qm2gVWH7rxQVBtf4PQz1K1IwbZkeZ10h6ZhwRYugnQMx1lEAM0agK8A+8IGLaPklaVaqJQT75hw3xSGzImsvpymAQ2A6ldsiSOy2ud5DQb/6142XmE6RJnJ/b99qZ3ulGfiYvWaE8Wz0oHgIlY7IClpac=;3:rzHm84oD1EsrWRo0iF2gPTGVl99uuofoFPx/W/2nOu/QFlK1bXnhLmcIMinKpUULt3nENNyxBfAG3PSwJLj9Z3JusYFhJ587lFTg7oyi6RV6G7F2sXxW/JXMl9jd5nORBEhd1TA6B7/Q5z+NMlb3tDcmF4UduhGM25NVxBkHDq5V9rh+wOlfX6CvwnoANZtmMQZwYw/1WKu9fzvVHpmbOUeTUumxZDgUJKK5VS76wMU=;25:jI9kWQBednA/BNC3ZwVAVCf41ieUxxx4NR6YCySm4pSy3PwHaOoBeuKqkRMUOYXv80eoHSg96RF3t14TYoa5WnqBzXG2e5UnzQTSSDhpOJdaPLWzt4quudmhVWMbmrWOGGdGVj8pPkhfXWLWdrPWa0YT7U1JdJlsq/af7do6t5JtTF/7Xt0jAUK+55fBwMmq8R/ClRutSGis90L7026N+iiXEssKWVg0fO75p5nP1K39tFWDrMAqdjwln+4KIamg X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM2PR03MB510; X-Microsoft-Exchange-Diagnostics: 1;DM2PR03MB510;20:Kl5njWNhwmFiJx5oNhgFTvuLOcuieRv3GsKUVUwvVcD0u/QfTtxPQU+sKO+MdAHmwQefrw7iI5iC8TPWzr7gPdFaSqLy6+HawDZ9rMPTsFGyt0WAV7oS41oSYFobCwOcGiFer134NBea0bY1Le6iooJOS6AVdux6sI8R6zsDMth7rEqn2MbfWQiBek2vQtauTzsfhBxChk5OeEXMZd860X2ZfHcMXkJH8RUzLBdRMdBGpJEINGsOTrt98xYuFSd8ac4R4kf/mg0OKxqT474WbfTpAb3x68KTouXOB5kV/pYdy87xgmIvzYNtDZ/rlPDfYt/pyV7fWLVYd0Pp6sleBfR+WV3GIOf5u+prS/+5ACI=;4:WdYfjsthx+tNIOrU7WcrwJmb1aLaPiPMkY6UQXpEJBeUhpNPb4BWCrX6uR9NRhfLbJExebRvaCo6JPnaA34kiiZJDm70csSt+S8fXQtJQcd4ShThf+YRtHeBl9ieaJqxqTfcJc1FwH8NAutF53krJp7tfUyOLAyZkurchNMDXY/WHcsqvEA4E8TifQQk3/P6rDlJs/47l5Q4pp6/lfwHDoewD+o7KQqqCo0+pLqNRADNMVDubaP4Vj4dV0p7wJAF/NGn2yDh4rPqkTrlrGnbu22p56QbzGTZQDkl7G/S8XJun+t47sMtmVrpvfb8Mm3CIbb7V/jUc8DTVrQy+LyissRB9dwafCb1jQOA4e860d8= 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:DM2PR03MB510;BCL:0;PCL:0;RULEID:;SRVR:DM2PR03MB510; X-Forefront-PRVS: 0729050452 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM2PR03MB510;23:b9EQ0saFc2OvuxKs3SvaTgHjOD9koGcZGcAn1Xbr13?= =?us-ascii?Q?v7+mTegHtOz2UfmgyTmy4ymvHu2CvNdswpX0TcQaOU2rav8/j2iVAEiABGAn?= =?us-ascii?Q?E09lwpeqQBbX9p+KXZFYAu/KBs4E1XGVvaSrm61aqFkjZFgOADLhr5MLPhb+?= =?us-ascii?Q?VBLjoXVKtmGC1Er2C92ZTO8nFk8qH0uq7Y9Si+GSgbXUrU31dKHF+QmD4pYw?= =?us-ascii?Q?rBnxLDHrXE7Nla1wkCgntqimMxcTuECCKAStggFX8QwksMqP9tNWkvziGV1P?= =?us-ascii?Q?uuEEfgpF49vtEpYQK50MwdX7iWMnTqE0I8He7Gezv7/04l7Y+ji4wqqNw5nE?= =?us-ascii?Q?SWbeKAZWVP9AtFfdGf8UtTFyil8fN2Z8mdNQH5Niu7CK2YlJc7qkhLA/FA5i?= =?us-ascii?Q?/TAivub3nPm12CenqONoZ/h0LTyKjXJ6pynmxe8qJ2utC9Hj45Tq0lr5hQXu?= =?us-ascii?Q?OnnsVr9jC7KneZeWrDY7F95DBd2hpN4WE40AhCzLfTl63Mi220IYdo52RhaB?= =?us-ascii?Q?M2uKU7h/2Iev80tr5kTtsOyGXM5D4T+HMrwODpuJqkjIB4UffhPYPaP/LIOB?= =?us-ascii?Q?zK/hETLb7n6vXiE9t5D/4pAKEIxWJIDnZoBKYfYgqgp/jjCFKqWQYzfnBEBo?= =?us-ascii?Q?5bcHuu2MUsYnQpC77ZffcDOmAyWVeeok6dJVe/SSKfNoQxgNkh2cx2KSf6Qz?= =?us-ascii?Q?GTQBb2F30fDiOJt7S9pzCHSMq6DoiN9TzUyPiTRoxr122ThBUiLpHCMV9tL5?= =?us-ascii?Q?N52b93vYgL6kgj6+WnNA189PcAxleVMAWmOLp/dhUe/xDmiEcLaKyCRLiZD6?= =?us-ascii?Q?u7RK3bYl0C2QVJ0j30TtJ1XOoz9m0O7VXai5F3zXJCQ/Eqf3IbnXeI9uczoY?= =?us-ascii?Q?y/5xZ2Gvvv42jDrk8uSMtAa39M7s3MH6sx4k7pKnOgOPwO0PHZH7+Sex++i9?= =?us-ascii?Q?aBljDrFX1k3KMJqljyqjZmHmvGm14nOSVCD2OsBjq1/dw7vIVjLmwfe9Gs/5?= =?us-ascii?Q?oyUF7WquZtc2QXe/H9BjtDJj2+zzKRAxZG44Rwzzl5YXnBRTllgNX8VKrl1D?= =?us-ascii?Q?KUDXsoMwxg/PwJxGJzV4/iPhjSbsiR9c6xB8304OYT+qrRN7huLYDQgRopEI?= =?us-ascii?Q?oJkT60Qpg=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM2PR03MB510;5:YEBJ6/1hwqi6Xm/nNsPBfZMk8GjacuGZZGgMX0vpc0v1I9adffBrvVlYWtFS0puajUtwFfhhedzNloZqfZKEy3LQG/Tqfdz5Us0o+PQbXLPzgYZvP0Kl69yq/+XQSMyafQFNJw+e1BtQbodDiljE9A==;24:tP6rkcI+LZtq74YySuwnwVVM+YMvxtkq1rZbl+NXbsermZljBMZCX8y4CKOqPLFNhXjSPuFdhF8pKv7ogH2DlI9uDjlX9DDNWu1SPB0hjnM=;20:2XsX0oxlMGqXEXdwDvcN2nahIxeKQgWYPHDU42rsvXWAFRZAThSHrLJ1HCsLaYzWk+Xq7o5jhZvWnJ17a3LaFA== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Oct 2015 20:06:47.1123 (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: DM2PR03MB510 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 now 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. --- CHANGE HISTORY Changes in v2: - Removed leftover code that needed to be removed as part of the refactoring done in this patch drivers/staging/fsl-mc/bus/mc-allocator.c | 15 +------ drivers/staging/fsl-mc/bus/mc-sys.c | 74 ++++++++++++++++++++++++++++--- drivers/staging/fsl-mc/include/mc-sys.h | 5 +++ 3 files changed, 73 insertions(+), 21 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..07848a0 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; @@ -87,8 +88,6 @@ int __must_check fsl_create_mc_io(struct device *dev, mc_io->flags = flags; mc_io->portal_phys_addr = mc_portal_phys_addr; mc_io->portal_size = mc_portal_size; - mc_io->dpmcp_dev = dpmcp_dev; - dpmcp_dev->mc_io = mc_io; res = devm_request_mem_region(dev, mc_portal_phys_addr, mc_portal_size, @@ -111,8 +110,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,21 +132,72 @@ 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, mc_io->portal_size); mc_io->portal_virt_addr = NULL; - if (mc_io->dpmcp_dev) { - WARN_ON(mc_io->dpmcp_dev->mc_io != mc_io); - mc_io->dpmcp_dev->mc_io = NULL; - } - devm_kfree(mc_io->dev, 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