From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932183AbbJQQev (ORCPT ); Sat, 17 Oct 2015 12:34:51 -0400 Received: from mail-bn1bon0110.outbound.protection.outlook.com ([157.56.111.110]:63903 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752740AbbJQQd3 (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 02/12] staging: fsl-mc: fsl_mc_io object refactoring Date: Sat, 17 Oct 2015 11:18:14 -0500 Message-ID: <1445098704-11708-3-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;BN1AFFO11FD039;1:h+lWCoroJGB2i6ukNGtwMK/tdcAcw1pSh5CWr2XhQG7CozqphP4Aa6Rqb6C2bh+DspNITPEY6Rx7HiwxFUQKCO5ulclwuVTbdIXkA51FFtM5demXc200vR1KGZ5BTHLsZZwCVZsRHtq+d5EOi2svBc0XlRuCLZmpY/ifP7DNf1UApZ0+Pg72aYXp+u/Hu/qQbK71mYe9kXnKCArPJvph4//QAtVBKEtP96c7zBtxzmSgqhtauiXZGPPrdLMIOY04+mr2rxPk6m4YQe+d2wlDekr86Wh+0Gy4oRX3ycGdjPJnCvLK4frn3UhNfoKXqIzLnW0+47FPxCG0AIdX2ALkKFP3vuLI8mO2y4WSu/cdIkaehVtm/MlDUbV8HqiF+ARoLI1MR0l+xo3xFCosCE4hCQ== X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(50226001)(87936001)(36756003)(189998001)(5008740100001)(50466002)(81156007)(19580405001)(229853001)(86362001)(97736004)(104016004)(5007970100001)(46102003)(106466001)(5001960100002)(48376002)(6806005)(2950100001)(5003940100001)(85426001)(11100500001)(5001770100001)(64706001)(107886002)(47776003)(76176999)(105606002)(92566002)(77096005)(50986999)(2201001)(19580395003)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:SN1PR0301MB1648;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;SN1PR0301MB1648;2:GgrSGomzTef+4q5e/4lDvjCS11VWELGGN18NQraaXKJPCHUI1esLyOZfJYxh29TRvMnXbim8+2jHQuT9T2M6WOhpWHC95TqFuoZAuUaQB0mH4Sfz2TCQizjN16VGnSnGlcSvVaf4Out2KqggT08H6oLqtq8fewUIkbMQAC+7VqA=;3:ycTRIwBTghIlJLBPWZvBX1gFtyqvF6BNMFe8FLr9vZ6/1RmhVETJqEJJWWpoBSXCB4JfgqLwxAqdBbS4tv64fT3eQDcayYy0xiqNX925cFUBSbXQCDilakA5t8+iZYnf7Lq9uPtE7uExUTI+jcCEP90O0ILo2coRJvq97lQCSfi6gvK3H7UxabjG/CxVl+vIhm844BRh91tUMzMJ4gWnHR5uk+JP4Ora2zORASpvo/s=;25:5cA2Ujy3YeclkjjnDyJ9VuoGANHo/AlaHwGCeWmamZwoBxpvBRBVxBPotRAiJNzmoWhI5jc0Y6++kWFIjzg2slXv6ukkbRR9ni5QSB56jyaTK/vcngjtneFhoXa/ksuEmXuJM4xohUHIkLaY5b83mbR63sMXj3fGdmZrxwXq4HQvBNvFmCmBp09lVQKWxwwiVmzHKzvB81sp8e2Zk4WijL4hM1dACvGhGvwIJHL4Q/62P4O6QQZY1ZfGwePKQssYtHnUEgJnJuhp7YEaLfj+dw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN1PR0301MB1648; X-Microsoft-Exchange-Diagnostics: 1;SN1PR0301MB1648;20:qpeoT86E2a6xWLR75hJTKTfzeraLFPZHeL08FSVVHyImP4QeJpBiLmzXXT/oaUdbDeB8ZXcCq4VFo1nIwQPuBh9B3skFCQPa3pR8eUOxtN1bFZBuEfGgomqfeE+MORq06xS1ZWXuUBdeaG8H0AADFaD34FPl2bw5GZWp2nn6lrGwl3ZaejGjcdQj4RHWUK+/299sxQ1GZDzrm7FTjCvGDk2wn5cv5v7tFeOv0ID+K3t5FV+CObDIPlyTorLjiqPlcFdQnkiHdUygd1cg1KUr3Ckhb56+/rIKOsXq482MBCPr4wau6CyuUGNlbGGfA0jZGly+SjP03Se2yJRnzzialJE9+m9P/9Yrpg3KUzbwAOo=;4:IOLAJi5/DQWpZ4nxdKLHij4vN1y2tYF2vpHKlOw3FU7PEMeJ47kOC3LQNkXF8B142ytHvS3S5m8fie0Jj7N1E3BheupcXEwQfxwLgMBsg3swaTbZF++51tvViQFoOOhhJxQ83EE77k8X0BW1t9R5D9yNN5k7WOlK+jHLJ6OhyrX167tFdyqLwAEw2JCgxd4YR+4F022/OAVXVuXDn81TUZ8cZyVtnZ/wRGI15UFyKtCQQwTVJlCJyuqJaN6VoXvL4qmsbPjcGJSIUCYfxYnwfSxjdkxgev6apVyAgvpJY+ZujGmEbgK3WQZTpoPN/1Eevxipj2S955JczwfloCLwm/G9WlM9ZD+99oJ5PPp073w= 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:SN1PR0301MB1648;BCL:0;PCL:0;RULEID:;SRVR:SN1PR0301MB1648; X-Forefront-PRVS: 07326CFBC4 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN1PR0301MB1648;23:jgo7Pb47KfoyS5KxpjxNsmm0BE5R3nOUzUkt3sA?= =?us-ascii?Q?fojMN+hkHfXeh48I+DX1r9NxnLH34Gwilw61OCwyjqNh69DYrVCPLZcfM9bf?= =?us-ascii?Q?o3d+MyEwUcTHvKZPwNCQ13sBGyEHoRV6qQeg20AzzgudC9pw1E9sPbuFoqYq?= =?us-ascii?Q?kM8zbWkuXXpmCuw6P/yX4H/sLd7ehIKjFMKWvFxDhUotFChoIuhNjOv1cy5i?= =?us-ascii?Q?50iSWxXUU6EGovu3mkKF0p4yWNLZIgiz1gSTBFb0Vso6uLznaAKZ0Ph19XV6?= =?us-ascii?Q?pph6ERfdnmjkZBC8aSC9P/vZDekgZxkAANFOyjQL//3cqUdkfuV+OsyMw30K?= =?us-ascii?Q?S5rN0nDZufcx2/i3c3zH5q+icS5i/zcww1/ezRVOLz9DF+utgYOeUpJsNgzJ?= =?us-ascii?Q?AqzgNARhwZ+eZrspAPpMOp98L4p54rBgqomSfWwlUq5eb2B4HpT5uDVnQnHH?= =?us-ascii?Q?LSeUMA52kM41EoOmgWZ0ViM/01d0HmGckQMCaGKkM44zDNzzxo3/L1psCPyj?= =?us-ascii?Q?iu0l4QxT3h5XVeYHVXyeprLvo+nnVe+dg6R4rpt6CBW28blnolzupnVXwok1?= =?us-ascii?Q?xef+u8kgB5pOvJnphhcsmfD+K5XCIAkEPsuPCvtzyksj1sDcaO6N5BWLKfh7?= =?us-ascii?Q?aKhp01PtbU6MH7JGFH+MWBC84+rAMe3qdtfkS491C+DImTB4v5DOdnadFh3F?= =?us-ascii?Q?Zt+sixrEpWOcZv7/r9K4XNBh82UTQnNxItzPRhjTAzP2o37Gz1AauMmNlakV?= =?us-ascii?Q?mSwniTYdswQlFClDCq0xm8lU7e7ayPjAQvhkMwL6+eUKuAEg1vGVHK99iKGo?= =?us-ascii?Q?DMREDrpZNEiRI1wFyGhq2wXJQeTdLJtCvYF4VfCQ8BMMsJ6uyPmkFSF/NuVI?= =?us-ascii?Q?XdXajsDDF4L5l3v+016Bco+DlUTlEjzcHXl1JzPSq3+YvIcQiZ0apBBmElBl?= =?us-ascii?Q?dUmJBAQU59KuP7a5t2iQDNr1WAOR0gigwDbRrzcTihl1Bsx2Crp0HW9KSccV?= =?us-ascii?Q?/6t40xNsV8w9OH2IczyzzWLM9xFhBQQO50HfdTxkjYnE/ImgQcKNeP9Xexev?= =?us-ascii?Q?7bC421O2FkG2zKHlAYMaFpk/eDoOUAEDf1vyH54ZLrd/c1CMsclzM1Y01QId?= =?us-ascii?Q?ADqC4S5pilfg=3D?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR0301MB1648;5:0itMmOhR5QlOhMTz6StW40A8fB71h3cTV7WHGYBvn1+oZGwL0Ab8DDpXqYJJFtj2v9flFSwwb2kh5FgRljOAfqjiEdLLsGGzjqP2zP80/RtlFU47DjQSwAMAJIpKj0Em+FiUWyoTAM6K+GgZ+t4PZg==;24:R5CI8AXWVYwGVKPhi58uQkH+GfsqbcU8oMYkvLilkms6mtD/Z9WvUrHf3LAwJA0Z4xfhDoM5f6RjrpbPBJsfiK4UKA7PbXDyNFdK2Qc7pzg=;20:QIrNz7weDZDI+3/8OsWMsivPQIYcEA6zBX8jTbx5fczJyrH4jzdlpkYza3SEL7Aekgiw3FZn2BRz2ZdHBJhTnw== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Oct 2015 16:33:25.1571 (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: SN1PR0301MB1648 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Each fsl_mc_io object is associated with an fsl_mc_device object of type "dpmcp" representing the MC portal associated with the fsl_mc_io object. Before, we were representing this association with an fsl_mc_resource pointer. To enhance code clarity, it is more straight forward to use an fsl_mc_device pointer instead. So, this change replaces the 'resource' field in the fsl_mc_io object with 'dpmcp_dev'. Also, it changes parameter 'resource' of fsl_create_mc_io() to be an fsl_mc_device pointer instead. Signed-off-by: J. German Rivera --- CHANGE HISTORY Changes in v3: - Added missing signed-off-by Changes in v2: none drivers/staging/fsl-mc/bus/mc-allocator.c | 34 ++++++++++++++++++------------- drivers/staging/fsl-mc/bus/mc-sys.c | 16 +++++++++++---- drivers/staging/fsl-mc/include/mc-sys.h | 8 +++----- 3 files changed, 35 insertions(+), 23 deletions(-) diff --git a/drivers/staging/fsl-mc/bus/mc-allocator.c b/drivers/staging/fsl-mc/bus/mc-allocator.c index a4aa859..c3222c6 100644 --- a/drivers/staging/fsl-mc/bus/mc-allocator.c +++ b/drivers/staging/fsl-mc/bus/mc-allocator.c @@ -320,7 +320,7 @@ int __must_check fsl_mc_portal_allocate(struct fsl_mc_device *mc_dev, error = fsl_create_mc_io(&mc_bus_dev->dev, mc_portal_phys_addr, - mc_portal_size, resource, + mc_portal_size, dpmcp_dev, mc_io_flags, &mc_io); if (error < 0) goto error_cleanup_resource; @@ -342,12 +342,22 @@ EXPORT_SYMBOL_GPL(fsl_mc_portal_allocate); */ void fsl_mc_portal_free(struct fsl_mc_io *mc_io) { + struct fsl_mc_device *dpmcp_dev; struct fsl_mc_resource *resource; - resource = mc_io->resource; - if (WARN_ON(resource->type != FSL_MC_POOL_DPMCP)) + /* + * Every mc_io obtained by calling fsl_mc_portal_allocate() is supposed + * to have a DPMCP object associated with. + */ + dpmcp_dev = mc_io->dpmcp_dev; + if (WARN_ON(!dpmcp_dev)) + return; + + resource = dpmcp_dev->resource; + if (WARN_ON(!resource || resource->type != FSL_MC_POOL_DPMCP)) return; - if (WARN_ON(!resource->data)) + + if (WARN_ON(resource->data != dpmcp_dev)) return; fsl_destroy_mc_io(mc_io); @@ -364,30 +374,26 @@ int fsl_mc_portal_reset(struct fsl_mc_io *mc_io) { int error; u16 token; - struct fsl_mc_resource *resource = mc_io->resource; - struct fsl_mc_device *mc_dev = resource->data; + struct fsl_mc_device *dpmcp_dev = mc_io->dpmcp_dev; - if (WARN_ON(resource->type != FSL_MC_POOL_DPMCP)) - return -EINVAL; - - if (WARN_ON(!mc_dev)) + if (WARN_ON(!dpmcp_dev)) return -EINVAL; - error = dpmcp_open(mc_io, 0, mc_dev->obj_desc.id, &token); + error = dpmcp_open(mc_io, 0, dpmcp_dev->obj_desc.id, &token); if (error < 0) { - dev_err(&mc_dev->dev, "dpmcp_open() failed: %d\n", error); + dev_err(&dpmcp_dev->dev, "dpmcp_open() failed: %d\n", error); return error; } error = dpmcp_reset(mc_io, 0, token); if (error < 0) { - dev_err(&mc_dev->dev, "dpmcp_reset() failed: %d\n", error); + 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(&mc_dev->dev, "dpmcp_close() failed: %d\n", error); + dev_err(&dpmcp_dev->dev, "dpmcp_close() failed: %d\n", error); return error; } diff --git a/drivers/staging/fsl-mc/bus/mc-sys.c b/drivers/staging/fsl-mc/bus/mc-sys.c index b58b53f..e53acfa 100644 --- a/drivers/staging/fsl-mc/bus/mc-sys.c +++ b/drivers/staging/fsl-mc/bus/mc-sys.c @@ -34,10 +34,12 @@ #include "../include/mc-sys.h" #include "../include/mc-cmd.h" +#include "../include/mc.h" #include #include #include #include +#include "dpmcp.h" /** * Timeout in jiffies to wait for the completion of an MC command @@ -60,8 +62,8 @@ * @dev: device to be associated with the MC I/O object * @mc_portal_phys_addr: physical address of the MC portal to use * @mc_portal_size: size in bytes of the MC portal - * @resource: Pointer to MC bus object allocator resource associated - * with this MC I/O object or NULL if none. + * @dpmcp-dev: Pointer to the DPMCP object associated with this MC I/O + * object or NULL if none. * @flags: flags for the new MC I/O object * @new_mc_io: Area to return pointer to newly created MC I/O object * @@ -70,7 +72,7 @@ int __must_check fsl_create_mc_io(struct device *dev, phys_addr_t mc_portal_phys_addr, u32 mc_portal_size, - struct fsl_mc_resource *resource, + struct fsl_mc_device *dpmcp_dev, u32 flags, struct fsl_mc_io **new_mc_io) { struct fsl_mc_io *mc_io; @@ -85,7 +87,8 @@ 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->resource = resource; + 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, @@ -126,6 +129,11 @@ void fsl_destroy_mc_io(struct fsl_mc_io *mc_io) 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); diff --git a/drivers/staging/fsl-mc/include/mc-sys.h b/drivers/staging/fsl-mc/include/mc-sys.h index 939b7d3..bfbecaf 100644 --- a/drivers/staging/fsl-mc/include/mc-sys.h +++ b/drivers/staging/fsl-mc/include/mc-sys.h @@ -50,9 +50,7 @@ struct mc_command; * @portal_size: MC command portal size in bytes * @portal_phys_addr: MC command portal physical address * @portal_virt_addr: MC command portal virtual address - * @resource: generic resource associated with the MC portal if - * the MC portal came from a resource pool, or NULL if the MC portal - * is permanently bound to a device (e.g., a DPRC) + * @dpmcp_dev: pointer to the DPMCP device associated with the MC portal. */ struct fsl_mc_io { struct device *dev; @@ -60,13 +58,13 @@ struct fsl_mc_io { u32 portal_size; phys_addr_t portal_phys_addr; void __iomem *portal_virt_addr; - struct fsl_mc_resource *resource; + struct fsl_mc_device *dpmcp_dev; }; int __must_check fsl_create_mc_io(struct device *dev, phys_addr_t mc_portal_phys_addr, u32 mc_portal_size, - struct fsl_mc_resource *resource, + struct fsl_mc_device *dpmcp_dev, u32 flags, struct fsl_mc_io **new_mc_io); void fsl_destroy_mc_io(struct fsl_mc_io *mc_io); -- 2.3.3