Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp128233ybt; Mon, 6 Jul 2020 05:47:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy0S9gPvspZ/1Z79MnRUXgIN2rCiJY1m4AB6tXZNVQD0/Ui0oMP55/CRdbHz5ncbbBkXeN8 X-Received: by 2002:a17:906:4086:: with SMTP id u6mr46074616ejj.9.1594039621736; Mon, 06 Jul 2020 05:47:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594039621; cv=none; d=google.com; s=arc-20160816; b=lLqOgxEV/PHjtWSPnbZwzFJZdMRNOikoi3cyQnkg1dRdryhN2t06uKOBdgiL6JXQgr q7Kv+K7HhpKBchoh4tud/PngPToG1pw2/vUe5PYgqTA27sQ0Seog87UA76ZBQryrCkvm 48761wRQEmsLhD0xsdvHClH9tz9vL4iU0/9nYZqxzk8SqhkzmOuljoU8rwxm34H3bAuT AgMPI9r1v3r0YjQSbYF74k9o/XobtxqMUc4kb0fJvhoE8W4nDF5zoSpv28AniRGhilNx obrZqo7e8ke01DKQqmbVXOi7+1XbBkm3y0+3jcMhVawK8D/yBmY92SV6B53zK3Nd3Yh1 Ex9w== 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=RijEEZgfgFYoc+T8VT3i4KIXOqF1wVm1/yIGMK885SU=; b=TeEZbwE/Z8IckTftwEgtgNsjbIgzq2tFY4xCrRomEHbyZlTqIG7nhkYIZz80+0V+zl Unc9pAENuLMuuO97Om8fztR8pPniqsw0Um5gOQzCGzxBH4N/fi1fMlRQMrAasRVmCPfO B8AJPa9YUM/6BTV+WzMpaPlHaRaZd+hLAogGoawAGkHIs8Dnz+lHCjYO1vf1YiFhPh0b 9yn5gcGjhk0Rc1JtGxrA5WHgJZb5GloDXs1mvTBdRh/AfoPF3Mc5dmtxFjQLRnSiUzmQ UvveUdcw5k4z9TDgyyReG+RL03UGAHx6idrxSDag3mROqDXDYz8ra3dC3owdfs4VcLWV +eGA== 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 bu27si12785546edb.542.2020.07.06.05.46.38; Mon, 06 Jul 2020 05:47:01 -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 S1729184AbgGFMnK (ORCPT + 99 others); Mon, 6 Jul 2020 08:43:10 -0400 Received: from inva020.nxp.com ([92.121.34.13]:42708 "EHLO inva020.nxp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729136AbgGFMnI (ORCPT ); Mon, 6 Jul 2020 08:43:08 -0400 Received: from inva020.nxp.com (localhost [127.0.0.1]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id EE8AB1A06A0; Mon, 6 Jul 2020 14:43:06 +0200 (CEST) Received: from inva024.eu-rdc02.nxp.com (inva024.eu-rdc02.nxp.com [134.27.226.22]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id E22631A0650; Mon, 6 Jul 2020 14:43:06 +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 8CA95203C3; Mon, 6 Jul 2020 14:43:06 +0200 (CEST) From: Diana Craciun To: linux-kernel@vger.kernel.org, laurentiu.tudor@nxp.com, gregkh@linuxfoundation.org Cc: stuyoder@gmail.com, leoyang.li@nxp.com, linux-arm-kernel@lists.infradead.org, bharatb.linux@gmail.com, Diana Craciun Subject: [PATCH v3 05/13] bus/fsl-mc: Cache the DPRC API version Date: Mon, 6 Jul 2020 15:42:35 +0300 Message-Id: <20200706124243.10697-6-diana.craciun@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200706124243.10697-1-diana.craciun@nxp.com> References: <20200706124243.10697-1-diana.craciun@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 From: Diana Craciun 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..01bf41743efc 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