Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp3382356imw; Thu, 7 Jul 2022 00:20:48 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sHL62wrWx/TiepFZ19qEfxGwQwWdKJkoM6mIIZ9mjj9MOg/D5Zc5vVodo5nTglbBNSUqqR X-Received: by 2002:a17:902:d4ce:b0:16a:7696:9700 with SMTP id o14-20020a170902d4ce00b0016a76969700mr51402341plg.66.1657178448044; Thu, 07 Jul 2022 00:20:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657178448; cv=none; d=google.com; s=arc-20160816; b=Agf3z2MYVvI1hppOE3kVK0+ri0GDDnq2+gaZ7loj6VkHXEY177wsrQPHxv2cWzyf8f EzGAshSQdbd6PXtLF+X4VwS6ErOEcxKw6lQuBP1m9544jLY9YQ8eNlm2oeogwUGlWKTC +PxQVaS2gxVwuczNk3u9uHvGrSMX9kUmOcO+dQYoOrVgTRHta065o3DGtn7fOFn5eft5 yWcwPOWJyCAXoSsOSIwEORmZCmBpHBSZVGnAL8JxPcvu0QbC/zBqQGAYSM8ouYlaJ1pF X5hjduA5lUJLl7tbv4dvw5Mpz3HAVQU/okarv1HofehRayitWFiPJ95jjIJ8XN2UlhCr jvpA== 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=hMGLZhvi3u64CNa5S7oRuhuLpsi6+k4W4b/flivhxao=; b=lrTJv2mUuX3i80b1BTRB1S5ylClgaBB23x49wDIJ//aWqGAIOrQ02f5gxdwNxrA0tt +0uuzI9A8LYFADhnv2HhbixHtlIhX84PflZCzHrzq4uGzh3aqU45hfHdeaavtfFDrls/ T32qD0r029cZIP7BFRpnziMLkSFSPapKnDmosI9/U8Jte7qGTNSU6eCdMH3KZ/C3cxGB fwBIdeoj4A2/z90AJxsYOe3VLu91bh4/ENht9AA4VLvBbKokYNd8HOurc/7Mttzl/mpw c4+3kg7RJO53Y68Bu9RQtOq2n5BhWFTNGWjIIdP+LOM7D2Xw+VqLQGvbGYHhSivJbKYx Obcg== 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 x70-20020a638649000000b004126eec7f96si1685712pgd.34.2022.07.07.00.20.36; Thu, 07 Jul 2022 00:20:48 -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 S230005AbiGGHQY (ORCPT + 99 others); Thu, 7 Jul 2022 03:16:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38728 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234678AbiGGHQU (ORCPT ); Thu, 7 Jul 2022 03:16:20 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 619D62F675; Thu, 7 Jul 2022 00:16:19 -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 85EB2106F; Thu, 7 Jul 2022 00:16:19 -0700 (PDT) Received: from e123648.arm.com (unknown [10.57.11.194]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 503463F70D; Thu, 7 Jul 2022 00:16:16 -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 v2 4/4] cpufreq: scmi: Support the power scale in micro-Watts in SCMI v3.1 Date: Thu, 7 Jul 2022 08:15:55 +0100 Message-Id: <20220707071555.10085-5-lukasz.luba@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220707071555.10085-1-lukasz.luba@arm.com> References: <20220707071555.10085-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. Acked-by: Sudeep Holla 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