From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754095AbbJNUGx (ORCPT ); Wed, 14 Oct 2015 16:06:53 -0400 Received: from mail-bl2on0107.outbound.protection.outlook.com ([65.55.169.107]:14992 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753614AbbJNUGt (ORCPT ); Wed, 14 Oct 2015 16:06:49 -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 02/12] staging: fsl-mc: fsl_mc_io object refactoring Date: Wed, 14 Oct 2015 14:51:41 -0500 Message-ID: <1444852311-673-3-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;BY2FFO11FD031;1:WUaxaUBaKwtj1YEGLzSpFxhxpCIX1BqiEdbeEFER82hvLyEyzQwfMR61pUAxilqhW6WZCpnecSDtbTn4wpS4/ZzjAtqXbNV4O/wA06KuRDpvYUzVSWgNg3v7PlC0hE9t1n/70Go7BE8reA1tmbFaA7arFmZoc/5ik/doQCYjMSWAW9ZnosC4LBXG20USev36jhZqvuVSvvg9yRreai3Kj9DQJTmaeA7rPRsZ8OxubHXqELLZcoua/kdr9/4VZmMp0hfnIAXjdMnsqgzynvMkOd8vKC718BeKAy/Fq7WNm/SBShN6oZIiQid9nxAfhDN1UgB9MVYsgDJ7ulZG10roIViNYOzxGFSdNRLrxj9HbRTRE/KvuT+l8nKOxzZ4DJMoWrMmGLNFmurSKIAZu4U5iQ== 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)(5001770100001)(64706001)(5003940100001)(48376002)(47776003)(36756003)(46102003)(50466002)(106466001)(229853001)(69596002)(2201001)(105606002)(87936001)(76176999)(81156007)(5001960100002)(19580395003)(86362001)(107886002)(189998001)(85426001)(11100500001)(92566002)(5008740100001)(50226001)(97736004)(104016004)(2950100001)(77096005)(6806005)(5007970100001)(50986999)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:BLUPR0301MB1636;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;BLUPR0301MB1636;2:2liEQjglqlQtADPM2zgEGeoQmNfugV/DYqaAyH8jgc4Kh6SpT8CyWODZEBadon1dPkwt4KLibApO/9GxV/j0vmRcpBFQW19adoUfRBNMlwInum8DPxT0u6nEtvHHcOtT9GWsUbOqkSllhZOrGz/selPV6HtqEWEzBfoBAne8hSg=;3:U7bsXbqe1CgGYbcpfWsjmF0ZAM+Icb7vpb+80a4Hl4BMKie1Xk+xiJdorCrZBkky8cXNVZS9Lh3uazf4xOBgrLO4m3PJISMIOCQ81n9hnsqMOazm6TjpKNZzdgpFBEVkBMx3oNe1KKQG6/ePstRQO5T2NbR2DsT8fR0aZjIRoRVV1NI7+HFF8BvMJETUbyCbVtyxzraVr9Z2XXqz/5TRkB8a+d2Wu2cElBQy47KszRQ=;25:aA3KHJJCSUttDICO70DJDXWJ6gQ/o07P0+A/O8e9GIeuggyhb04AXsEvkfSMDdEIgU87bXdPIWzsk3ZeqsYLjBYJIiIEZdIE/xQjrdPk47ytgMVzNmsppSQhIdZkAbo7qKejDTuioZLejgug3oUB8EvHQHA1HxFDRLF05TIalY/9e8gFalwuXHiHxwjLOGs7GgNNNkEN1v835LsRt9e+SnG5BzR03q1okCzFAdPlnpaqWCfRHlge3+DeEMphkGtEvIg6KA8EWLs/P3ZSkKEC+w== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR0301MB1636; X-Microsoft-Exchange-Diagnostics: 1;BLUPR0301MB1636;20:5N/BOcIValehLZYI9v5nCqMpxu+uxEgTdDwx61nL5DLOYyB7Qv2wfcZvy79CxOuV+1QFFQWFkk6Vxo+ZmyXFfguPC4dxOAs+sFeouNbUpce9p77sX2Bhk6kDtZGaNmhF5CvQMnZlog4Egd7mfEVNVEfKTIj/rUvMMTtVk15e8mJaidMJVNun3/Bd3ojPPcTi7KM0Z7h6hTNccsqp82iy4Fsl8lXKviXIgE7qrghdwsS37jkGvB/dBDZfIx4EHurApz/xXSLbyYhrX8dKEf2+6w9c+7wfcGqYNIB0FzaJNZu/3K/xwnxtzpqGouroZn2wyvSvRubEdCKoYJMrEoDOGtP/mBKg7IAKVBpV9SDjq4k=;4:Qph/ISo3r++/utz9vMS4ztfQ4V7/09FI2oHdw/FGGQpxzTJixSwMYfFh2eQNVQmJfR0w8JnWmR10mt5hxI/z93ycisNAKFrRx0BgJ3F2F18YAsf8Fprx9k9ZpX/y1lT1rFuZj0P/O1/vWOUZLiXBfgmIZqfic7j0WUwkCG+4AOnOtZUvakLffT1JHHHV8Y+w/FBwFv4ZpqMYDvKDrMirdn/JrOuFAlinLEijAFZEk/tBlZwy+oepgB4UzWVe8mDw8JE0vtCdocSsqXnF1bKLvdsupJFFFsYuy5FAiELzPba7WldnUtzAD9tibMflgahfcjGvy2uqHUcRlPevY12lAV6h6rihCAsSzowMv2tXIPo= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(520078)(5005006)(8121501046)(3002001);SRVR:BLUPR0301MB1636;BCL:0;PCL:0;RULEID:;SRVR:BLUPR0301MB1636; X-Forefront-PRVS: 0729050452 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR0301MB1636;23:g0TGmgCNpnzxCOKxMainZiVK5a857gCsOK9rd3u?= =?us-ascii?Q?PPtlNzBIx5VOmN/m1Je6nlXsQ76oD7ptY58LFh+ViuInNAkcq17miiej+eBi?= =?us-ascii?Q?ItMCZNufVEZsBvVVLzfD6zAEUoyIQykC7Ogai1SUJyFsIuLVJWL5Hdyop6W7?= =?us-ascii?Q?TstpgSPggeJQTwnfgwGw/izEnVGmF2XVnIthvlrORF3sEhk47U4xvuWb9kmI?= =?us-ascii?Q?P8RFBiRwoe8SdQoKwlKC03W/8kdLyASimmrGaIuwp2/u6U/a9v7RpUTJ6PjD?= =?us-ascii?Q?uQ7V29mm1syXfqlNgOH30EI6WaPlmK9OsKh4LlTf0oJnpRA21bHFo0UNH9VF?= =?us-ascii?Q?eSH4TtU2p4iFu1fb9d7UBecc/ybu+jqeqf0+Vg4VqMAAsqbD7P+0X/f2zq2c?= =?us-ascii?Q?ytjhyWsclHTc4/T5RMAGfBOMueht+xQ3z5RVlJKhBPDnb1eLKeHFWItk1/et?= =?us-ascii?Q?JRldprXGDU/dVVBWMrJKJ1t9rpQBZLZgLOVoZHICi+8vPQgksG+LDhMpCLHf?= =?us-ascii?Q?EVqsqLjXXJAG+wUZSHjUQCP6bAlwseP5JDJZM0dwR/BYeqxSXtwVgDI/0V6i?= =?us-ascii?Q?mnuMyu88YMsHVFgqXPI9GcIqBWTrjq3lU5v/wheiFzKg6qS4Pb2Fq/QBJMoC?= =?us-ascii?Q?IpMBPCw6xs1NcZC0+FF4y3y29Me6xLWThdt1gGjesJvSVbc7v8pYH5iK0m92?= =?us-ascii?Q?hGZ4XGMxQ2+5/vPbZFM94fPLzVvkipx1VkPADDbUwyPhMZHOQqjASqvuWrtP?= =?us-ascii?Q?S8FC/u+fQWgT1z5aGR1iTTN2jQdUOg1cT4eOFYsukh/3f/gjzBvwBw7lLUH1?= =?us-ascii?Q?f1eLi8tvwzx+bmL9swFxwt4yhyJM5NdBxQmEiEEY0dUUoirFnpCiB/tOvVGF?= =?us-ascii?Q?kzKo0PKOBLqczbR6sIO0DTdr/il2oRJ6Wsx5keEZzOdpAZzmIl+G3ERiPOo1?= =?us-ascii?Q?EWWGJePqLygW3wzapDctFymZ8i7kDOCieZyhVBog74Bwtn9vEnogQpnT/Mj4?= =?us-ascii?Q?8ihhbvFurPTvvSO/D+y/NC1jjpZiv4jz7JK3r32ZDwAMu8EUI/s4zH5Iyl3P?= =?us-ascii?Q?tWyCX4ZTyx5sVhs8du/eQEDINE8yUX8U7I148ZJDAUbSQQ0z6TmiDF1MaHtZ?= =?us-ascii?Q?Uvlv+6yHwJ/o=3D?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR0301MB1636;5:JT64q7l4BQVYI12Tr+3mEvNsj7eR29HEpKctc9qM5GiyBCe97ZGBqQgA5j1HGOrCAwT+v3bxRiF85t0QwagrT282zxVsM2qrJ3w572YWqTJbY6m9toCjAR2e4qFHU8osTV447dFdlS/nwLzwNIXi/g==;24:wr6dA52+WMvU1yHpt8MSbL3lS4p/B5JTqff+amwiVbXBypgjO9LDKMWFTjVPpNbkoqStBNr6bY191eqfppPT8fqoJaAnRqfXyDtoE+anY78=;20:/3xuHF052MrxqQ4ALmLXzXLWcR3dEnWD+OQtDdWIvqMdVP3mv/Fz4YPeEsjJH1sSlq45oUylpw671Q/Y9aZv7w== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Oct 2015 20:06:46.4616 (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: BLUPR0301MB1636 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. --- CHANGE HISTORY 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