Received: by 2002:a25:23cc:0:0:0:0:0 with SMTP id j195csp504474ybj; Thu, 7 May 2020 00:37:58 -0700 (PDT) X-Google-Smtp-Source: APiQypIhyZxxR/kXkhzzV1qiat4h/fgs4lo/fC4G88YcpQjcH7FUEJo2HU7C2gKba6OBw8Cfu3cA X-Received: by 2002:a17:906:d8b4:: with SMTP id qc20mr470425ejb.253.1588837078298; Thu, 07 May 2020 00:37:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588837078; cv=none; d=google.com; s=arc-20160816; b=0mDBFzAbuovDM5zfLVZKkV+Cm6BIJHOfw0KmTbGuSdkY45ct493Ud3igIS+mGRBOXQ gtgBSPChi3Hzl0l+bgS4WjOouMap+g2x7QHcdgblUHrhEZZc4rV0oBTTxodiJ0uc4XK0 RelRFPhrcWESxTAHiO/vOouwzp70o4JQ125yTRlhTLZjNhhk9dbjev2tKY+U+ByfmYUE udfv4dXe7wr+tt5UHXGm/wHf4ozol2itjq31A60OyLY6kVgi+e63FBpBY84Y24BxAqzm z7x0u6tshOhDBxEEFtdR7ON92K8U7slaP/MeATHF4lDkwa/NO+9qapK6kuFY/9z/H+4E Fh4g== 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=aY+g2MpcC6CU7Xg3286ei1OqFzpUS1chQtN6ejgMx7k=; b=hAD/n8z1dd86ahdSNLbygYrj3hO5DlaY1pcSl0hQUEqpfd3oyvVIpnx55ekbJVzuy5 soqVVg9dguvYq8e689b05tQw8p54oNW72nkuSPVOov3nj2Quf/FKMtcNWUk/jaZk7jDs K5UQ4bvdNolGV74WI06rqJOTxfBt1gA9L3CBAlgFx6JOcGlFYHC26ZJHfMSqf8mCV14I NNJWsekGxk0KJFnUdnDAEnuXkPoAIRmrQWCxm5vYFRLTx6dQPx5aGQg+Xt6FSiZLt0yY JApFMyFJhcd4mVLrND7he4sGmGDVxTZH7rjtX5ZoACQbj4HxLgfm3qFPWwu/vzjjcDRg rdEA== 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 w26si2660270ejs.63.2020.05.07.00.37.35; Thu, 07 May 2020 00:37:58 -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 S1726445AbgEGHfs (ORCPT + 99 others); Thu, 7 May 2020 03:35:48 -0400 Received: from inva020.nxp.com ([92.121.34.13]:40454 "EHLO inva020.nxp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725939AbgEGHfr (ORCPT ); Thu, 7 May 2020 03:35:47 -0400 Received: from inva020.nxp.com (localhost [127.0.0.1]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id 44E7B1A0FDA; Thu, 7 May 2020 09:35:45 +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 38AE81A0F14; Thu, 7 May 2020 09:35:45 +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 E558B203C5; Thu, 7 May 2020 09:35:44 +0200 (CEST) From: Diana Craciun To: linux-kernel@vger.kernel.org Cc: laurentiu.tudor@nxp.com, stuyoder@gmail.com, leoyang.li@nxp.com, linux-arm-kernel@lists.infradead.org, gregkh@linuxfoundation.org, Diana Craciun Subject: [PATCH v2 05/12] bus/fsl-mc: Cache the DPRC API version Date: Thu, 7 May 2020 10:34:24 +0300 Message-Id: <20200507073431.2710-6-diana.craciun@oss.nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200507073431.2710-1-diana.craciun@oss.nxp.com> References: <20200507073431.2710-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..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