Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp3515146pxa; Wed, 26 Aug 2020 02:28:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzn2zKJcaPqhFsHHaHcgk0m9935OoKMiu+476MZ7497FCDLVlbOdFiIn++FTfxaMIvq7khh X-Received: by 2002:a17:906:4ac6:: with SMTP id u6mr10638427ejt.539.1598434084827; Wed, 26 Aug 2020 02:28:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1598434084; cv=none; d=google.com; s=arc-20160816; b=aju5Tl/uwvXh0+6LHnH4LH8xn6qqUYLkulR6uKFKAClMd5hziuf4YHeQHr5rH6IvER tB979oxfayuX7Y7JnVomImUQLQzX5WKRwTfLBhvwVi71Hv87iYJMljLs8ud3USg2Cegl 9Q9CUzxMd4AwTHI7kDW64fsZBQWyolvbT3caOZQOAXy/T7poQpVdJffXZIorno2hZftC kO3UVsqmN4tHQtMi9NCYzb8yujDN+OHza4mmOtm9NuE0Kpt3rM7NziVho4/U09Cp1vOT VF+nTCB39a6+mMD8+hfhhovlzHhiYlwRk0HbHAaV2FPjqCIn0yhEEWHJXicq1/1dmAUb a/Uw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=j0GqnkylE9NgE1uUIG9CQ8G4dt+CZDn4j84V9+tes1c=; b=rAHu4JU3zQUyXsfLLVVSkPntXGgkTcSkUXeNxPABl1OnIKRnR8c0o/fYlS7jt7M1cm byzvegRtoN5BMnFZDvQO6iy7/Ge4j7Z2fAnJ/v3EgJcz9pVA5AX0uM9SvivLFGN8oKUZ J0eteZ3H0B7mUuENr+wBYASXKJn6z9ghUxoCmYFT41Jq6LV7yXYzjxvb4vLY5O7NFj7r suEOqcY8yxJv+hyiEB7pZAB2Ntx1c9KMHloIQlZNWX7isM5qPOVfAhG1DIw5kOYG6db0 dRvh03SwaJnCKCfAEWa3rZNxowHA40Ht3n94BSgwgywFejibjvRLGDCTx7SXqvhAYFoQ 7wsA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s8si1036372edt.374.2020.08.26.02.27.42; Wed, 26 Aug 2020 02:28:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728067AbgHZJ0T (ORCPT + 99 others); Wed, 26 Aug 2020 05:26:19 -0400 Received: from inva021.nxp.com ([92.121.34.21]:43370 "EHLO inva021.nxp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727997AbgHZJ0F (ORCPT ); Wed, 26 Aug 2020 05:26:05 -0400 Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 4911B2007B4; Wed, 26 Aug 2020 11:26:04 +0200 (CEST) Received: from inva024.eu-rdc02.nxp.com (inva024.eu-rdc02.nxp.com [134.27.226.22]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 3CDAF2007C2; Wed, 26 Aug 2020 11:26:04 +0200 (CEST) Received: from fsr-ub1864-111.ea.freescale.net (fsr-ub1864-111.ea.freescale.net [10.171.82.141]) by inva024.eu-rdc02.nxp.com (Postfix) with ESMTP id DC2BA202CA; Wed, 26 Aug 2020 11:26:03 +0200 (CEST) From: Diana Craciun To: linux-kernel@vger.kernel.org, laurentiu.tudor@nxp.com Cc: stuyoder@gmail.com, leoyang.li@nxp.com, gregkh@linuxfoundation.org, linux-arm-kernel@lists.infradead.org, bharatb.linux@gmail.com, Diana Craciun Subject: [PATCH v4 05/13] bus/fsl-mc: Cache the DPRC API version Date: Wed, 26 Aug 2020 12:25:19 +0300 Message-Id: <20200826092527.4992-6-diana.craciun@oss.nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200826092527.4992-1-diana.craciun@oss.nxp.com> References: <20200826092527.4992-1-diana.craciun@oss.nxp.com> X-Virus-Scanned: ClamAV using ClamSMTP Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There are already firmware API commands that have multiple versions. For each multiple version command, another command to retrieve the API version is issued. This may introduce an important overhead. The version does not change while the system is running, so the DPRC API version can be safely cached. Signed-off-by: Diana Craciun --- drivers/bus/fsl-mc/dprc.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/drivers/bus/fsl-mc/dprc.c b/drivers/bus/fsl-mc/dprc.c index 602f030d84eb..e76f2c76f4c8 100644 --- a/drivers/bus/fsl-mc/dprc.c +++ b/drivers/bus/fsl-mc/dprc.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) /* * Copyright 2013-2016 Freescale Semiconductor Inc. + * Copyright 2020 NXP * */ #include @@ -8,6 +9,13 @@ #include "fsl-mc-private.h" +/* + * cache the DPRC version to reduce the number of commands + * towards the mc firmware + */ +static u16 dprc_major_ver; +static u16 dprc_minor_ver; + /** * dprc_open() - Open DPRC object for use * @mc_io: Pointer to MC portal's I/O object @@ -443,15 +451,19 @@ int dprc_get_obj_region(struct fsl_mc_io *mc_io, struct fsl_mc_command cmd = { 0 }; struct dprc_cmd_get_obj_region *cmd_params; struct dprc_rsp_get_obj_region *rsp_params; - u16 major_ver, minor_ver; int err; - /* prepare command */ - err = dprc_get_api_version(mc_io, 0, - &major_ver, - &minor_ver); - if (err) - return err; + /* + * If the DPRC object version was not yet cached, cache it now. + * Otherwise use the already cached value. + */ + if (!dprc_major_ver && !dprc_minor_ver) { + err = dprc_get_api_version(mc_io, 0, + &dprc_major_ver, + &dprc_minor_ver); + if (err) + return err; + } /** * MC API version 6.3 introduced a new field to the region @@ -459,7 +471,7 @@ int dprc_get_obj_region(struct fsl_mc_io *mc_io, * address is set to zero to indicate it needs to be obtained elsewhere * (typically the device tree). */ - if (major_ver > 6 || (major_ver == 6 && minor_ver >= 3)) + if (dprc_major_ver > 6 || (dprc_major_ver == 6 && dprc_minor_ver >= 3)) cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG_V2, cmd_flags, token); @@ -483,7 +495,7 @@ int dprc_get_obj_region(struct fsl_mc_io *mc_io, rsp_params = (struct dprc_rsp_get_obj_region *)cmd.params; region_desc->base_offset = le64_to_cpu(rsp_params->base_offset); region_desc->size = le32_to_cpu(rsp_params->size); - if (major_ver > 6 || (major_ver == 6 && minor_ver >= 3)) + if (dprc_major_ver > 6 || (dprc_major_ver == 6 && dprc_minor_ver >= 3)) region_desc->base_address = le64_to_cpu(rsp_params->base_addr); else region_desc->base_address = 0; -- 2.17.1