From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752135AbbJMXdg (ORCPT ); Tue, 13 Oct 2015 19:33:36 -0400 Received: from mail-bn1on0112.outbound.protection.outlook.com ([157.56.110.112]:57670 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751049AbbJMXdf (ORCPT ); Tue, 13 Oct 2015 19:33:35 -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 02/12] staging: fsl-mc: fsl_mc_io object refactoring Date: Tue, 13 Oct 2015 18:03:22 -0500 Message-ID: <1444777412-5401-3-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;BY2FFO11FD039;1:AZ2RCkSDWSe6wDP+D63KfEpld1VO99harFwgUHryupC0yAb+g+2lfhLhdEFzBvomFouy2qV+iiU4RwIvgjNox+wCp+EC8WmBSuL+TSKDaC9Lp7sh69zeUGk0X/VwNAQBVTnYzitvgzS1klA3Sts0N0Y5IEqZaXgETEXLNdbXPS+i0SDA8eSVxDpBERRXZsEstn7TfQy3PXKKW0ZxwhhGLdUCQRaiBiM06TnUDtzyUxNl4uwtNBrKRImY36VKqfXkfuwGpowOGS3rAReFnEnp3YC8OpqnXNYgJZthL+oXPs4hcxwQQotKyR3q5aoQEMvpTIvCFuIXnlTuVUqzebOY01Q4AgeGglXXdh/fLEjUubomHUHMEQwxvY0nCSxxxqfjsytEtv8kbbCJp1OyGWf76A== 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)(50466002)(5001770100001)(50986999)(81156007)(11100500001)(6806005)(5001960100002)(19580395003)(2201001)(104016004)(5003940100001)(92566002)(189998001)(76176999)(107886002)(48376002)(5007970100001)(77096005)(97736004)(46102003)(86362001)(47776003)(87936001)(85426001)(2950100001)(50226001)(106466001)(69596002)(105606002)(64706001)(36756003)(229853001)(5008740100001)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:BLUPR03MB502;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;BLUPR03MB502;2:aKhZdiGPiKRHs7MqWTYV5+wvI2V3HPE2W0Sdejguh5DauCcaOuZuy8jFND+aKwFKwESNLMdsDy+3d4IO0tubIgu5dFJR3GTkGwSXrAF5aSbirgFnKMenNMMvFAOTQHUa8sCMNvU16wMAgTYvNAcDQ9uXhzb3+8A1y9IL2+EzC24=;3:+s3GKG+IZ5WNhBMu6XjEjB9rBsqTGihfUsK57YySsDThslj8bjuahIBdAXd58tKbxzEqlkPCO84imjOQH34L4QBCi1AP7XG/m/0L8Wm+5E6WVcXjE0Dh0QrvFFs1Evw68Xq7pRJ34GMN6FdS1IcXoVQJuI6S7LhLcw06w1jLn6pOTOnYjnGftIBOtbVNzpHTEf9SJ5XTiReUN1/59LAqgG5rr9wfY9Q1KIsT7jVeZkI=;25:taG5gbEN6xv3X3q9kIo3fcdW31pFmaoxzFSdGeCDxYKXO78of+l5QCvjaClM5KBWV+teh8clH9XcRI9Vx2cD2CVlb7ynKrvh5tBBFL0lkX6eVCQEwlrzi/Od6OW2evMGWhUByfS65v8XhVONnk5DDH6fenbrPIfNQFkae1UJE86pR24lv/+BllXkcwvXOgrRADkkV7QfxbYCySFVGjmoKGKVVHFhpR7ZoTDxYkOVY5WAYRVaVKSf/TmRBJVmM1/hrRRrL/ZVRYgjv5xaWYbrLQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB502; X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB502;20:N5SYRxs9k7i042J8J9jmiTM4vUnugebuz1fz9UKz3rin2EOXDX5aEQVVsvrMMdMMhSvBZ+d0MZeu7GuQXZAN2HjHLwTS6TMwgAyI3kSUBUi9ivbAtzRICtAwoFARMDG2SNdqrxsKrBmpEY1LorVJaj/c/aGZLuL3bEw2uAjYE9DF7ATwLBxA+dr/+731b6mNu9GwCkq/DwlE9qmXW3QPN97tTMVRAwPErVdnJmxyoUObzL6P9fuI7lmjyz/4cXhPgcTq7Ukqv/X6Pef2ZJgDDZby4WlmD+2W2T9HcoEeaHNftG/SNV1JNgd1U3HCiKQ0kcLYiTkpuJsOjoocq5u+RF+Tjr2VGli61FeP4Bwa+4Q=;4:RCKL6lR6gdddGLgge8yoRhBP1B15/orv7x3LbZ5IMFGkBfSK0AtxZc4OhbzdVNDInFKIxxpEGveRn84E5uORbjs5U7F+KNK/XAnJdqDLIYpSBsobHsbRbnnldx8OvRCaEkS+BpC0bcWmSST06eoQqHvpOxXHwCNRVkw1sOnw7bf8lcmQgXKGyhpJUOgw6O0eIMwR/i3F2xnKSRhmSoAN0Wrx1Z0WQtSQ5R2WG3Wmt14CTX2TY27y8B1nJDQYcsTrDGrtTAzKgNIsJJ9kX83dcV6nrggSwVmD7zS9rRvCrSVT6W/J72BbZkM+ZRm8RCkyGHtaGI7K/OrWsNzm6q5CA0ZAz6sf+ocuvquu9PhAqe4= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(8121501046)(520078)(3002001);SRVR:BLUPR03MB502;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB502; X-Forefront-PRVS: 07283408BE X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR03MB502;23:jDEBFwjrlbj97vYddf5FXj+TwG+7mj4inCqdSQk7G7?= =?us-ascii?Q?WoD+vNsO4uW9KP+veGTIWY6DrFN/B5T/mbwE5BDliQs8gRcdFVqVd605vJbD?= =?us-ascii?Q?+6R7kFiSekaVXUqxNyi1heb0OAJ7lMFLt6wQRtanfdiEwS71nxQPuPTs5Kpb?= =?us-ascii?Q?zq58e9nK5B18fpV4agACpHDKfezvMJ2x1LwD2y4ulJj3GiM97Wnbi+0PIWdQ?= =?us-ascii?Q?C5LIut2USETsVjGyNs32KicpOV5g+WEeM3P+8MUJdBUWXSIW1/yPDvVV3R4D?= =?us-ascii?Q?OeGcTCb5zWhjdGrPqyP5VDuDosMJKZZtMmJru0ohfzSVwUqFij99tsnoVwtc?= =?us-ascii?Q?nUP19yNWc5KJ2R5iLG5oRyxgLgS8rhNOOIG7MkmCDr7bjvmP73ibxExGhLyi?= =?us-ascii?Q?8WOoKXW9Tu93tQejjyftlSKcBRPvxJLIXznpu2EuAxR8sATuhE1P/uIjcZ5u?= =?us-ascii?Q?F/AS/W2iHssi0pdjooxmCO2f0JJ4eGnfDShPzW47SyfKoIn92vXjLkAVRv8T?= =?us-ascii?Q?xBiHHwUcT4lKqMbCdfUoXAmzV1k/Z3aoFlR+iNv8JjssLwiofisUPbfo5wJ7?= =?us-ascii?Q?TnCgsm87mAWv3wBACRYnM4sZvNddBBKNJWwRDWJFhQgn3/YfLKNX99K5N51J?= =?us-ascii?Q?whftnDXPT9Byu86t+INYyJ7zB9IG6xcaGiUCMP2+wmGe+c1xmagoz6RL3xQg?= =?us-ascii?Q?qUZT4S9WCJmh5pLH1Q4pj+QXzzXuNPOMByVEq++iuskckfABBcqDk10UHsi1?= =?us-ascii?Q?xtBQnhISOZvSvSw7lHFNOXFTtjed3ya8Hl/dRnyalQMEuDrTagd3jzUUTxB2?= =?us-ascii?Q?ZXp2hrCrndtGrSzfmgQCnVo0bsqZNPI4NRuRilEUkMGtTPjZd/40eVDY0801?= =?us-ascii?Q?Sv+hO9Mc+7iSY4qu9xLCnak3j/hn9SUwU9EP29j32lxpIfRkR3uDrVIMXuv4?= =?us-ascii?Q?1nsENIaJo7vic8mTRPh0NF1bFH9vSMu3CKsLhWCI9WJRGdsQgkvn0zc3sJvD?= =?us-ascii?Q?w4ZVmTyzLficVgtJ1schq6hyTLi1Z85oXz1BbrLLQ7OJFNMK3WRlaSUCrArS?= =?us-ascii?Q?sMOurvk32DiXFe3pew3ZDWEDBcq0PTPkhjfrp4YAeXDlVCsHFdYlgnrpARRW?= =?us-ascii?Q?/xQ3vcmiU=3D?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR03MB502;5:/XEDwwMpgrsTbdHSbOGSWut8VplCdU5iPqa0JjD0bTWzH0XJmO0SAZaMzp9aT3JMKHGDX/dPiyS1ItRxbR2oYaCHxP3WB5fntL+RN8+8DhIx8qxYtuy6cYiEQ5hoQETfCswaWson/KQYxZQOAjs98Q==;24:P1XOygHXAtYf9hd7p6oO/husa+v93mOVM/HF+Xt0Tlfo8M4msp3F3Xqo7HfRvi3gC9CpqINhQWL1k+kKiLsvMYAd0PrMpZZU8ssIoKE213o=;20:UpbSX3UGToJDGKxcPv0mFJ1pXX8D/VUvDPx+mcRQCFW2vI0TySwwyb7Q0Yf9FngiWFCXoSHrHvEVKMH7xIUcqQ== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2015 23:18:27.7057 (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: BLUPR03MB502 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. --- 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