Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp4951473iog; Wed, 22 Jun 2022 08:56:02 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vhStM6sFvBg+eOln3DnEgrrJ7lF9KyxVFU1hTM0p6UMCJDwMWYxZn/2a0iqkZmd2g/xV7y X-Received: by 2002:a05:6402:24a4:b0:434:e43e:2462 with SMTP id q36-20020a05640224a400b00434e43e2462mr4865339eda.312.1655913362311; Wed, 22 Jun 2022 08:56:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1655913362; cv=none; d=google.com; s=arc-20160816; b=VXze9asvn6N2deqkvukHsb1qaLpXZFMKjlWLJNo0zAUPV9VJG/P65EoejjnB6yI4/O krYIk3BseVkc2fPNLjcjy1K3cIZFm8NuEXAkQb13Erj3IYJZGiZd12NuteWWbeiK6ZT1 ON1Lvd/p+4X71pUkq2PecMfa3CVbJR4kHhsnbyJyzvTvtOw2RUagR6+S8WSi/zFcFOqT ECF4Y+ZSpsrRmB7PIEFWFK2LmMV0Yq7gM9K26pe4Ubpcw7qTeu/nUn9haH0VdoBCHFFH GtUjZmdh7W1uG68jjUlLjkbVcGlTzE/rY2JywEsDfdO/XZvJXEYV4/yA03YrGcqrx7qm 8w3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from; bh=lcdDLP5CFc9/c/iP4j9q7UH3Fd5aXWdcqE7c1fBuwWY=; b=QCb22H90yfee5o8VG2DzODVcyMK7HebAmFiCxJ/bMSAJ20nZfmud2v+y6GBCg2fImi 1pMbumJlyGFf0ls7x6A6TiaOqj+Q8QfyDApWWru/En2RwXeQ2PhiWUgCpUStKBVH+Edc nCXbsgzIj7jf59/XIFaCvxvssgu0mk23IyyTYvkRe/OBF4T41Wwpi8Sqak2T8Gh3G30k uOlu2sTb9O/o3O20U2/ePbyODm/42AjU50kgAs/p8gXdQQtGSoadzTDK7dAaXANd398z dlnyz3k16FkDF6OeqO8n+XiMbQSctsgx7jux4yo2qDo8WAJrrFb+RxYz+weBVKf8OxfW NmeA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j17-20020a05640211d100b00435a62d35b7si3702708edw.117.2022.06.22.08.55.35; Wed, 22 Jun 2022 08:56:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1358849AbiFVO7K (ORCPT + 99 others); Wed, 22 Jun 2022 10:59:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57246 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358859AbiFVO60 (ORCPT ); Wed, 22 Jun 2022 10:58:26 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id DA3F635263; Wed, 22 Jun 2022 07:58:23 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D25EC1477; Wed, 22 Jun 2022 07:58:23 -0700 (PDT) Received: from e123648.arm.com (unknown [10.57.38.162]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id E21DD3F792; Wed, 22 Jun 2022 07:58:20 -0700 (PDT) From: Lukasz Luba To: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Cc: daniel.lezcano@linaro.org, amitk@kernel.org, rui.zhang@intel.com, lukasz.luba@arm.com, viresh.kumar@linaro.org, rafael@kernel.org, dietmar.eggemann@arm.com, nm@ti.com, sboyd@kernel.org, sudeep.holla@arm.com, cristian.marussi@arm.com, matthias.bgg@gmail.com, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH 4/4] cpufreq: scmi: Support the power scale in micro-Watts in SCMI v3.1 Date: Wed, 22 Jun 2022 15:58:02 +0100 Message-Id: <20220622145802.13032-5-lukasz.luba@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220622145802.13032-1-lukasz.luba@arm.com> References: <20220622145802.13032-1-lukasz.luba@arm.com> X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The SCMI v3.1 adds support for power values in micro-Watts. They are not always in milli-Watts anymore (ignoring the bogo-Watts). Thus, the power must be converted conditionally before sending to Energy Model. Add the logic which handles the needed checks and conversions. Signed-off-by: Lukasz Luba --- drivers/cpufreq/scmi-cpufreq.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/cpufreq/scmi-cpufreq.c b/drivers/cpufreq/scmi-cpufreq.c index bfd35583d653..513a071845c2 100644 --- a/drivers/cpufreq/scmi-cpufreq.c +++ b/drivers/cpufreq/scmi-cpufreq.c @@ -100,7 +100,7 @@ static int __maybe_unused scmi_get_cpu_power(struct device *cpu_dev, unsigned long *power, unsigned long *KHz) { - bool power_scale_mw = perf_ops->power_scale_mw_get(ph); + enum scmi_power_scale power_scale = perf_ops->power_scale_get(ph); unsigned long Hz; int ret, domain; @@ -114,8 +114,8 @@ scmi_get_cpu_power(struct device *cpu_dev, unsigned long *power, if (ret) return ret; - /* Provide bigger resolution power to the Energy Model */ - if (power_scale_mw) + /* Convert the power to uW if it is mW (ignore bogoW) */ + if (power_scale == SCMI_POWER_MILLIWATTS) *power *= MICROWATT_PER_MILLIWATT; /* The EM framework specifies the frequency in KHz. */ @@ -255,8 +255,9 @@ static int scmi_cpufreq_exit(struct cpufreq_policy *policy) static void scmi_cpufreq_register_em(struct cpufreq_policy *policy) { struct em_data_callback em_cb = EM_DATA_CB(scmi_get_cpu_power); - bool power_scale_mw = perf_ops->power_scale_mw_get(ph); + enum scmi_power_scale power_scale = perf_ops->power_scale_get(ph); struct scmi_data *priv = policy->driver_data; + bool em_power_scale = false; /* * This callback will be called for each policy, but we don't need to @@ -268,9 +269,13 @@ static void scmi_cpufreq_register_em(struct cpufreq_policy *policy) if (!priv->nr_opp) return; + if (power_scale == SCMI_POWER_MILLIWATTS + || power_scale == SCMI_POWER_MICROWATTS) + em_power_scale = true; + em_dev_register_perf_domain(get_cpu_device(policy->cpu), priv->nr_opp, &em_cb, priv->opp_shared_cpus, - power_scale_mw); + em_power_scale); } static struct cpufreq_driver scmi_cpufreq_driver = { -- 2.17.1