From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751417AbbJDHKt (ORCPT ); Sun, 4 Oct 2015 03:10:49 -0400 Received: from mail-bn1bon0132.outbound.protection.outlook.com ([157.56.111.132]:42320 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751199AbbJDHKr (ORCPT ); Sun, 4 Oct 2015 03:10:47 -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: To: , , , CC: , , , , , , , , , , , Itai Katz Subject: [PATCH 3/5] staging: fsl-mc: add function to return pointer to root dprc Date: Sun, 4 Oct 2015 10:09:52 +0300 Message-ID: <1443942594-7189-4-git-send-email-itai.katz@freescale.com> X-Mailer: git-send-email 1.7.7.4 In-Reply-To: <1443942594-7189-1-git-send-email-itai.katz@freescale.com> References: <1443942594-7189-1-git-send-email-itai.katz@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11FD006;1:rjB9GcX8ltSY4PzTDcWEy7210+zKdoUHowA/QjvMyrDjJEDJ/Gp3rHQpEN1ILOk1zzKjLDp2Cv7a9xvnmGqZGAHCUctcOtwyy8zq/L1kBuN8lV4UUXtRT8mQX+Y/MI+rgvven7uHhcVnj+okamYoafOEYgZhoUnED/EPyqB1WDpcMvC5HveLsB1p4FVisvSivZi6NMgsTYTkFHjTkbHmRq0NYC62FN8S/ujHqcQEIwI0w6RR3y7aYaS6nQpMOFTiY9qkE2h8RTXhoSbZ1/XW13sJo96L7CnMT5mgWKjEjGmlMbXTP1eJQwTJ5ajjKDPViMOD89YQ4anIA2A13yd5YfO9qPnhfaWu5OPhSbpSXzfpfAEfBrtEBhp1RuRPONT23TPU7SKBpo11ncl9Qggweg== 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)(6806005)(76176999)(62966003)(77156002)(36756003)(11100500001)(5001860100001)(81156007)(4001540100001)(97736004)(5008740100001)(107886002)(5001960100002)(5001830100001)(50466002)(5001770100001)(5003940100001)(104016004)(46102003)(33646002)(86362001)(189998001)(47776003)(85426001)(86152002)(2201001)(64706001)(68736005)(229853001)(106466001)(5007970100001)(50226001)(48376002)(105606002)(69596002)(19580405001)(19580395003)(87936001)(92566002)(50986999)(2950100001)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:BN3PR03MB1446;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;BN3PR03MB1446;2:Kr/Rjuz4iZ3gBsMwxGPnocKGi+/W7uoBPhu1icOdas3juHdp+d7sqVuNiqhGg+ETp5kApKnF7P7sjtXAXisKQPFruNP7+H9fXE5+r+SYQAhNGmqGoEp3sRVqdsiRmWhXdZTXa7Ywp6pH9IJ5+bJeyAVlg+Ecbi0GxBSJkGNhp44=;3:hfOqG2q0szmF0gBOnk2gJByN22uqdUbdSWwfowS8UansUd7fev1eM3hOWSHbdKbVVRvGFBzqKmo7x7jvuwo776RCQwnQNL11bgTfHAJdoPZv+Yd+R6LnkYHCSg2JYceROnGfT+UsiujmjE/2uZl6G73l9W0SJwvKAIWfdpERlSp9FirMBUJLuE/F39sS3W0Gy2Hdgbe2IMnD7daokuwFhHUF3aEYKGhzjD2TZJyLGHg=;25:LURYbbBi19hX61AJkN8vTj31RQti59y+YTEeVOUp0kP/WftYCPsswvLwdw4KtT9AzrAnu5CaV7BU1ORfxvU/lvazHBkqS+DuCKEU/EEOqIwQ2Nq/PmlTylSHeh3bzcsSnLM+5vy3FuDRw23rfFLqA4TeG3dmUm5Y5xrWGPzqv9+yTvxoPg8JD5usYXDfJLHgXCRg8pfgPF95h7caY/OC3GZ6YcNsAfw69yYYV2AentXJBWXwswG7B3S+t+KA49q0 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN3PR03MB1446; X-Microsoft-Exchange-Diagnostics: 1;BN3PR03MB1446;20:YaNBCzH/2KMV5/qOww1w5nbseN3vL5E+qTxefW4aK6tPd9YMbHrtwwBdSWrLG9WIxDzyI3qgjAOLAEjIbZV6qrE/TzgngqrmTrasaE24j7DORLu8Yaes1MkiXOFdotsV4ZIso3+jJ4aKL0VoR3/rdMMc4fnAjX5fy27jsVAEov7ANHTCXvx7LY7Fqnsi3ixg04747zpFC2521CmmtAqOYo48pmvtUegg3SxXCNwJq2ioxvzrq577S6TfTJpGtSzaznlkWbKhJUuT4PwQJd97Ht8NcN8Mzij1cbgdENFlpmf1ChSV21RAJBQpo/YL6v4DMauvDGeS2VD6UuGCSCBHvx3H3KQRhkq0EBWGqv2VCOw=;4:CcdiR/vMcbelz25EtaHB3djRxSzfjMSdbGbx8LCi1CW9x67nmN2EPCZ9+3OAWSqb1yHqyal8I9A4o8CuG9ghjoV+ACtbypWLFfvzA4WO1Tj7oN3qvmbc2Q9+0Al4kz0KQXntn0uUIV6aO5Q+qJgoRRhx/ZxXhqATN3o7iI/J888GgLgRvkmvse87HXQkuTJ19HwEgC/zPon58leHpjG9jAkytDI0WwkSiqG6K39aJNqQzCpRxivfv8jqk7NdUBBGhd3h/q+lYpC1d9PD5fOhoMr8errpf4XkNRh6PU6IgwbicFff2VZCiJk8k/iZX+wLaYNEplfmKPflEgKtVQmCB+rcjq+UDauZdLIxboDNkCM= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(520078)(8121501046)(3002001);SRVR:BN3PR03MB1446;BCL:0;PCL:0;RULEID:;SRVR:BN3PR03MB1446; X-Forefront-PRVS: 0719EC6A9A X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN3PR03MB1446;23:PLNRpHm/8xvxRVFwlVijOWOVcErqbiJPQ3grKEC+H?= =?us-ascii?Q?RRpkB3eXHN7jc+Gkfg07NXTywlBve4NVEalpECKJAN028eNWydD5jP9bWVeD?= =?us-ascii?Q?5G9P7eUzbFXTdedaRLfc14i5hWMbo1YaKMwnZK/1RMxq0GoX2ib/RFzzhbHO?= =?us-ascii?Q?6Dd76KLU3xW7YKQrkc81YMOWB39QCk2mUp4W71SVUbUtBXeCzHbj5R5Jqw1Y?= =?us-ascii?Q?V5n3ZuJG4JcsjOGo/jzViIcUfRpOP6JpFO4uXpupinLIWhTud4nskeAeTsSN?= =?us-ascii?Q?W85QTUeFXTRK/pMlvLdYW2aaG9pteIll4dqzRY4ApOucQnqAUoLOd3SmSzNK?= =?us-ascii?Q?H04VSERRR3uJxqygPHHU2bjGTfVeNUmTYFietctUt0pJqiQoHlm7RJy4HR85?= =?us-ascii?Q?MFLdlCq9E9QdWh37eLViIPn2vbOKcdLgiahIbHPOqShlnYBB+toDf8QR7rC3?= =?us-ascii?Q?To61UNHEP2JfU90lHob7JW4CI0kgPE6ubpXw7wlZyLfqTwuvC9MwvPedtklt?= =?us-ascii?Q?UVX4fX4+XmstNw3kkPp+Za8n9Ns3wDGOulkRPBkzEHqm48OUtel9XheKRQF+?= =?us-ascii?Q?A1yjX9X2IF+NN7JGYGaIP9CaSVcGcq1EwjSHzm6TtVpIgDY7pBwxCbtFMVmE?= =?us-ascii?Q?FsLWSRDlNvi8sHVUJzRa6N0c7edEyNXsPQq/uB5yJLCJV8MD3LqS92DTKSrL?= =?us-ascii?Q?GIK2UgMum2mL/m7o7gERO5Cw7KaOw06FnGUziOVZmP34/oSqGkMbtxvidBcn?= =?us-ascii?Q?jLfVguB5CjE+LRuLkT5Ikc/HrPDDMQI+r4wWMYgOokCtnBOqpkvokTKfgBsd?= =?us-ascii?Q?MRobAzItY9WAVw6N0cZ7NFOe/BIdbh983OlHMUnf8/a6x5z8AqnqbHDMXS2d?= =?us-ascii?Q?Xfe9wDqCkg+1Vd2hfBjWxjhQV7UhgnsgnlMY9cXNZ1yTdJKauiWqbO1ukJsr?= =?us-ascii?Q?Q5gFhHRy/b0egMO6gsrugRgvVfjKhe/xGJ7sgQv7vcOe0cpIOUk7/OqsxUZj?= =?us-ascii?Q?JXWC4ILbRhG8yD9O05HWvRGOKFvkYyORVoLT2N3q16NxALxH8k89bjb+c4Cg?= =?us-ascii?Q?PrlKGTxPpzyWbWF2vHed3kVWrSGLmq2TsBTFzb4oaO09BgOcOeP0HHGjCUlZ?= =?us-ascii?Q?aGIqLQrIOGZ9Ijr8vWW+psv77Tq3EdE3wSLxaJifQSfZ4OsBJLlFtxpzPx2E?= =?us-ascii?Q?UmHQfLCAfMXqaceqiXr4fJUgII5Or98dX8AtHrpMUUO6ihfi5vj3R2iKhkQe?= =?us-ascii?Q?q5cn3XOhI7gTF9fI7alEnOz6xRouUQOBpxA5kNM+27B+JmZPTDr3FohvZnOk?= =?us-ascii?Q?Nz/bH1Gc9MXGzlX5QdSFawP8L+xsYLd1s5HtdPkh6Dj?= X-Microsoft-Exchange-Diagnostics: 1;BN3PR03MB1446;5:WhQcMJwFXp2/cWkPomek62qG5ahh9AndRB51zGXC/OclJ7ANZWEvplc7r4QOQjQ9Afsq4E7bEQQojcoVhvcUaScSa+JkhT805NlNTayLc+CaoDN7emHuauJ5NlIknN1owhULKxNvBTYur1/d2aMNJg==;24:tBcUWxo86mt/eDXG0KJ14QoUGy/x96IDv35/v8SNT8onstlkUAQkeay3O03LnSHQP/sJHAbI/IbOnGnBjPFc13hNZCmzdVRtT/jpkHyl44o=;20:EkULn6SOlu6gV7TCBzoopEqUCc/TKvYb6OuPI2XhLMzbxfXe4Qj4/fm4m4ReoUrINNA4h6CjBsquciIS+Gh70w== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Oct 2015 07:10:44.4529 (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: BN3PR03MB1446 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Itai Katz To support multiple root dprcs, instead of relying on the dev_root field of the bus type struct, instead create a function to traverse to the root dprc and return a pointer to the device struct Signed-off-by: Itai Katz --- drivers/staging/fsl-mc/bus/mc-bus.c | 38 +++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/drivers/staging/fsl-mc/bus/mc-bus.c b/drivers/staging/fsl-mc/bus/mc-bus.c index 6a6c5a6..37f51f3 100644 --- a/drivers/staging/fsl-mc/bus/mc-bus.c +++ b/drivers/staging/fsl-mc/bus/mc-bus.c @@ -218,11 +218,34 @@ bool fsl_mc_bus_exists(void) EXPORT_SYMBOL_GPL(fsl_mc_bus_exists); /** +* fsl_mc_get_root_dprc - function to traverse to the root dprc +*/ +static void fsl_mc_get_root_dprc(struct device *dev, + struct device **root_dprc_dev) +{ + if (WARN_ON(!dev)) { + *root_dprc_dev = NULL; + } else if (WARN_ON(dev->bus != &fsl_mc_bus_type)) { + *root_dprc_dev = NULL; + } else { + *root_dprc_dev = dev; + while ((*root_dprc_dev)->parent->bus == &fsl_mc_bus_type) + *root_dprc_dev = (*root_dprc_dev)->parent; + } +} + +/** * fsl_mc_is_root_dprc - function to check if a given device is a root dprc */ static bool fsl_mc_is_root_dprc(struct device *dev) { - return dev == fsl_mc_bus_type.dev_root; + struct device *root_dprc_dev; + + fsl_mc_get_root_dprc(dev, &root_dprc_dev); + if (!root_dprc_dev) + return false; + else + return dev == root_dprc_dev; } static int get_dprc_icid(struct fsl_mc_io *mc_io, @@ -253,11 +276,18 @@ common_cleanup: return error; } -static int translate_mc_addr(enum dprc_region_type mc_region_type, +static int translate_mc_addr(struct fsl_mc_device *mc_dev, + enum dprc_region_type mc_region_type, u64 mc_offset, phys_addr_t *phys_addr) { int i; - struct fsl_mc *mc = dev_get_drvdata(fsl_mc_bus_type.dev_root->parent); + struct device *root_dprc_dev; + struct fsl_mc *mc; + + fsl_mc_get_root_dprc(&mc_dev->dev, &root_dprc_dev); + if (WARN_ON(!root_dprc_dev)) + return -EINVAL; + mc = dev_get_drvdata(root_dprc_dev->parent); if (mc->num_translation_ranges == 0) { /* @@ -328,7 +358,7 @@ static int fsl_mc_device_get_mmio_regions(struct fsl_mc_device *mc_dev, } WARN_ON(region_desc.size == 0); - error = translate_mc_addr(mc_region_type, + error = translate_mc_addr(mc_dev, mc_region_type, region_desc.base_offset, ®ions[i].start); if (error < 0) { -- 1.7.9.5