From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932159AbbJQQeo (ORCPT ); Sat, 17 Oct 2015 12:34:44 -0400 Received: from mail-bn1bon0137.outbound.protection.outlook.com ([157.56.111.137]:13376 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752939AbbJQQd3 (ORCPT ); Sat, 17 Oct 2015 12:33:29 -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 v3 03/12] staging: fsl-mc: dpmcp opening/closing refactoring Date: Sat, 17 Oct 2015 11:18:15 -0500 Message-ID: <1445098704-11708-4-git-send-email-German.Rivera@freescale.com> X-Mailer: git-send-email 2.3.3 In-Reply-To: <1445098704-11708-1-git-send-email-German.Rivera@freescale.com> References: <1445098704-11708-1-git-send-email-German.Rivera@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11OLC009;1:tBluclurgHFxFXf+bie47RpM2wT8AFyVCmKontO81aFvrJarOckC/nUWAwNq/zSU0eElHyzI31rDZi8qnTULxT2c027AdhPFRkARuqEIQfhOvW8fwaWgI3+iab1bEsFgKbZzaVrLYJ3J+Jvu9q6V39tDkIlj/EPmH9QHy4vPQVLWusar88MamKF912lDlEOJvyajaPrUIsJ80ZdUrDC/9C63yNhwwHI+fy39m9wIGJGQ/GpzgIkCVLKfwR9CTmEq6mOVVOZV/K+C/5cnA31mZ1B6Dr8JU8Co83wLg6TM66NEAfsXtrTVvN6QAl2NxAyvky2YaqK2b79/oFTPRJqJ45dB/ath9ta85bKaNvycVHZifQXpVTt/CZLR+NNohRJst94KEAh8YChzShGV10+GEQ== X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(19580395003)(87936001)(19580405001)(2201001)(105606002)(46102003)(86362001)(5008740100001)(106466001)(85426001)(229853001)(50986999)(47776003)(77096005)(50226001)(76176999)(48376002)(5003940100001)(64706001)(189998001)(5001960100002)(81156007)(11100500001)(107886002)(5001770100001)(97736004)(36756003)(50466002)(104016004)(6806005)(92566002)(5007970100001)(2950100001)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:DM2PR0301MB1312;H:tx30smr01.am.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;DM2PR0301MB1312;2:fRH3bXPJ7PQPkxuvWVOAdoH21jqOwLPmRYRElR0vfEN/PwHrOF9tc4NrDSZiimjD/SNRHwY6mmB+qZFgON+J0VrChSmbsbk3pyviA94Z0Dj8U0rxHtVelm9QnHRjgp48JBc/QYDdDf5cUQ42gnzjXyOWr818AoUlnfwOH4+3zPs=;3:tJ5BDPI/vfLz1v9i9iWvQbpGpLB+CQa93QIvj7YBgcym+MeqMRrwSJScgbcJFNydpZ/lt+2QGGM7iGVx/bsRZpooMYJeIhBE16P9Cl0bTrU5ki7RAmg2M/QVFB6UXTHTJQEYJCuYHtz8ZpgbJvjFtQK++nQ8aOoJ6UQ4j+RjFVeoxqPDKmqpgizJd7Bgpq0ffPJXe9K10b39rKoADcaRYicQeGT61E189LJ/p7J02MU=;25:ctly7FO2Teq1zoHpsNJVIfIfifuKRDMHKEWjXztuv5APx03MiuRne6wnvlPLwih/J0iRNb52i1tyTfr5OUsop8VK0057CEvfhOgt9Sx6l4gM3LiSnVPxa7pkKWaB4x1kRytSIviQrC9u6qIpeHvB+3YSk/W6gzZK0FXD94pd34HhU5gZ0NSX9EacEVyZrM1L8memuVH9L8kouvNLnFXNylORfm9wOdnoahGrKQAX7FTcq/zOewNf9y/ZlAAJvRCa X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DM2PR0301MB1312; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB1312;20:Q5Yaxx35/6uMQNLV3PMA5I6e76QZLycXmKnlNOVoIHmD6GHpUU7e1Gy1Qsilrdd7FsMDRcllIB+gVosnH06vYzrhDcK+a7CoaHdFxSzxIw3dF8SDajoGeU2fA2qshUIRn5pguPa97f+ZGA2dy72+nkuOFb9H15EgVuUCagLNJxUu5+OLIYU5LJPxTCa9LdimPr7aFruXQjqNfmjJbER7GoFnk5ifcllDDBPXa3tDV5DifbG5KJzpk+CqZHZYRDFXkjxi9eD2WS+3g4dyqcZk7XN5hoKpePo7NFDOUtmZsjtt6/621jwKQ3b/DLQKG4xpAai0GkqVinK7/8ZpADQIJKOhbvT1gXgCSwfRObbr6RQ=;4:825KSJAR87OJIgWFA2MwLtfNX1B8vD31ivsQLdOj47y9d9NggUJEkfh68BK5PDx+2H4G9MzYwaGTsxHdYQAQA3yPAvugl2hlGfgMmxcfzYo8YD3J+MpeFbdr5exI80/oTe8IlL/qk2uxzAu2teaK6PwDMyaq5MB+wcCSe0gu1zqRnIYPbVIDMSusNymHLO8QKkJK7odX+jc5wi2mD47akr0u3Qkz1oHx2DvXF5QhXPwXAL+4G9VO/iLW3ry4529iqMLqDilivgclvFycLFn0tjzycrZoruGuxz7hRXDVqbzCK3jxX2+amleqxHPHfUC6ChnmiKCkrdgwWvcfuJki8fH5wBS1Y9zLaCclKcjHdvk= 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:DM2PR0301MB1312;BCL:0;PCL:0;RULEID:;SRVR:DM2PR0301MB1312; X-Forefront-PRVS: 07326CFBC4 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM2PR0301MB1312;23:8wNQmaQR6/xq/T/Ksqa+HN95kiz6XliA7hwSKfo?= =?us-ascii?Q?O/4M8y4MT/Mb3gPu8I5haoTINIVQGWP1JJ7TocgBOLbLY9603JK2T4/hhdfp?= =?us-ascii?Q?znbQ/jOWDfahajWlc6liToHUlHK6wZkiPAzjMZPexWrpSZLU8eP+pPuECEl1?= =?us-ascii?Q?8HPa5sOFQT7CZIM+5S5EwY3PVTTeGw3DBBkEBI2XRaxUaDqSUtBSfDlyM86t?= =?us-ascii?Q?vuBWjKytygFXkACjWOQ+UMn0DzzlOwy2p9Ry7/pkw5hroa7Rq/yybp56cDd7?= =?us-ascii?Q?mZCvJaaEVP0F4mscJRcYnQfdl2SyUB7PM6/Rk6XJUoDuBnS1djITi/wy44Ae?= =?us-ascii?Q?KjMCc8qiyGFeDFWtp9t86K872auiNMBaj7AY/QZkBR3oTC9XfHajfUeOc+Gf?= =?us-ascii?Q?HKh6KZDENfEl4YDSUH5ThPHPlj0tz6O/wQ6eEmDBQGWAjr3E2ITIRwdorQOz?= =?us-ascii?Q?iSr9cnl2YFRBBxvsVhOOcQfZEh421HqeWyUp5OIF1HZViHbB3EEyhRGmpG8h?= =?us-ascii?Q?f5QVekrF9rkOdmof2+bwFixnkaAFknfHUJEDDostQaCq8MDRRi32zRA7Z3sa?= =?us-ascii?Q?CiYN7cy7h4OM9bL3ftD9kWv6CByGHQm81tRpjtYNk0gqmP+G2mtUdhoP+BLc?= =?us-ascii?Q?BR6vg7AFByt1BN+2OGTdFqEDueueu1bk1Ak8sZuHtJgZZ7D18+54XHq3mNG6?= =?us-ascii?Q?Pk2GCqqrZVI91agLGfwEWWOEyyzlAlvYl9O+2Eflyt8PVMMVNCnAYRciuD93?= =?us-ascii?Q?zo0qp0aEq+K6qfTeShUMaSzC48PHzLs4yVnnfgzqJ3ig9wKlnroSdWPMnbfU?= =?us-ascii?Q?8Aa6MPB7kLvoY79sFrbLG/OhDta2EZPkWi3k0YRt510XgRx6flmtvx5rJPzM?= =?us-ascii?Q?WfZmNaC4i7Y54MevprN7O43aoGgTFwEwh0RLsIXsjTH9xyqHqrmLtEP79tIU?= =?us-ascii?Q?PcripHipz9TzmTP1tZyop3mouFHKEN+XtyZDoVQtjsaN/hyuny7oEoSlJICd?= =?us-ascii?Q?G4bMwQZhyzHjfHAxObJsb/r747keVai3dFLDUtFSNFshuGUDm0mx580ajrm0?= =?us-ascii?Q?dbxgzguf6itpUDlC5Lq0+V9d4/APe+lhqY9QRUKrHTfR/mM+p5xRZ/XA6ap/?= =?us-ascii?Q?hGWq6SWDyw0c=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM2PR0301MB1312;5:MQBjRu3wUa0Gqm/S0x453spN0mglXwU+ZbhlTmSaO27/RBz9d4Ws673bRnojnj/6uQhO0WOlIZnMIk9HfeSm8MNw4u3VStoQ6UuqtFpbnpzPRrv9X6FVoG46kapqukZ4DxhjqFzHsKX3XHNjDuskBQ==;24:jTcHz4eG0PAIfZNObYM02vHCwrOIx83PHFJEY2raoUiTgRqWASeBdy/TNhzF2bjBsQPdZRj7SFYY9qUolYWv3GcWiVQ2KhfCBY69289da8I=;20:bAlu385DLVAsTfGgW71MtemEkC5E8xCGo1xs+tvxeiU7XrCBohV8l0fTt/Z0aYzmpZl3qZoaaqv2un4qEyKp1A== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2015 16:33:25.3441 (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: DM2PR0301MB1312 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. Signed-off-by: J. German Rivera --- CHANGE HISTORY Changes in v3: - Added missing signed-off-by 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