Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp500866pxb; Mon, 7 Feb 2022 17:05:24 -0800 (PST) X-Google-Smtp-Source: ABdhPJyak8aS5mexQ1bssteCRrhxHfJLddHyjgKPw3ejWoqyFL1iXwGrCbeibpilqM5zozaYHRS/ X-Received: by 2002:a17:907:9808:: with SMTP id ji8mr1809647ejc.12.1644282324084; Mon, 07 Feb 2022 17:05:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644282324; cv=none; d=google.com; s=arc-20160816; b=ndFMaAcmkY41Z9vQ5oguYwLEGCXnd1O01RsfXFVNe40F4IjcPq58fmyEMGRsaGoUo2 KQdgpYMjiGydzkRBQxZplqyzSsDfGKW5eqROWC/j8/TxtmGeyKgeMmX8BiFSg38CFf1v HV2sE/WXH22F3CvVtQmm6PeHN6oUxUI1LSL0zvIxSu9Ns2bKmoa4/RTiTcH7Jb5B5HtA C7cklSo3vWv9s7RfBL/abu6RreFqCSgkI4okDc+idFXBcb6RQ/C8bUIYdGOGSPtTI+hX ZgPwMwE0gNpdYvxMppBB1Od0sw3jASZ2iwf2j9DHw2g9sSkO1kTGG7zSg7loA0Pn/4SE iPRw== 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=bHMAyIBgNHJDCjhHH5eQ0oOKyeeV4mA9DxgRiznjcfE=; b=EZOHqIJ2m7Hw9RRCcTVrquOmeaA6ohH3tbZ2c3EAf9HeNIwXCCz1cYrUk58osma/4G GgRshY/pUcYeAkqbkDxyKqUVDuzJSTRd/HA+9ABQYmpWm7xN9ZT7fbPN0GHzBGuYfFkq Cx1jNgx8q7cgfG8LRDbcSsNErMG/woezYorWzuqcdkmXGPcFVtDG088mlmuiYpA+9rja etIOoeMl9PMCCElIQ1LuowtB6027mGqYo/GoDXvwyVwi7HJAAEqTp03b6iLTRR+bstCd djlX67oGVt+J6/FQCrHm2XDCLGNW2tqksndnqnf1mmsvrHxRrKkCLU4mCYpgRso9g5cK GM5Q== 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 eb6si9929995edb.411.2022.02.07.17.04.59; Mon, 07 Feb 2022 17:05:24 -0800 (PST) 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 S233904AbiBGHm7 (ORCPT + 99 others); Mon, 7 Feb 2022 02:42:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36434 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244576AbiBGHie (ORCPT ); Mon, 7 Feb 2022 02:38:34 -0500 X-Greylist: delayed 466 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Sun, 06 Feb 2022 23:38:33 PST Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 6EAF3C043181; Sun, 6 Feb 2022 23:38:33 -0800 (PST) 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 AC46911D4; Sun, 6 Feb 2022 23:30:49 -0800 (PST) Received: from e123648.arm.com (unknown [10.57.15.201]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 9BDAA3F73B; Sun, 6 Feb 2022 23:30:47 -0800 (PST) From: Lukasz Luba To: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Cc: amit.kachhap@gmail.com, daniel.lezcano@linaro.org, viresh.kumar@linaro.org, rafael@kernel.org, amitk@kernel.org, rui.zhang@intel.com, dietmar.eggemann@arm.com, lukasz.luba@arm.com, Pierre.Gondois@arm.com Subject: [PATCH 1/2] thermal: cooling: Check Energy Model type in cpufreq_cooling and devfreq_cooling Date: Mon, 7 Feb 2022 07:30:35 +0000 Message-Id: <20220207073036.14901-2-lukasz.luba@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220207073036.14901-1-lukasz.luba@arm.com> References: <20220207073036.14901-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_PASS,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 Energy Model supports power values either in Watts or in some abstract scale. When the 2nd option is in use, the thermal governor IPA should not be allowed to operate, since the relation between cooling devices is not properly defined. Thus, it might be possible that big GPU has lower power values in abstract scale than a Little CPU. To mitigate a misbehaviour of the thermal control algorithm, simply not register a cooling device capable of working with IPA. Signed-off-by: Lukasz Luba --- drivers/thermal/cpufreq_cooling.c | 2 +- drivers/thermal/devfreq_cooling.c | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/thermal/cpufreq_cooling.c b/drivers/thermal/cpufreq_cooling.c index 43b1ae8a7789..f831ed40b333 100644 --- a/drivers/thermal/cpufreq_cooling.c +++ b/drivers/thermal/cpufreq_cooling.c @@ -328,7 +328,7 @@ static inline bool em_is_sane(struct cpufreq_cooling_device *cpufreq_cdev, struct cpufreq_policy *policy; unsigned int nr_levels; - if (!em) + if (!em || !(em->flags & EM_PERF_DOMAIN_MILLIWATTS)) return false; policy = cpufreq_cdev->policy; diff --git a/drivers/thermal/devfreq_cooling.c b/drivers/thermal/devfreq_cooling.c index 4310cb342a9f..7e8bd1368cab 100644 --- a/drivers/thermal/devfreq_cooling.c +++ b/drivers/thermal/devfreq_cooling.c @@ -336,6 +336,14 @@ static int devfreq_cooling_gen_tables(struct devfreq_cooling_device *dfc, return 0; } +static inline bool em_is_sane(struct em_perf_domain *em) +{ + if (!em || !(em->flags & EM_PERF_DOMAIN_MILLIWATTS)) + return false; + else + return true; +} + /** * of_devfreq_cooling_register_power() - Register devfreq cooling device, * with OF and power information. @@ -358,6 +366,7 @@ of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df, struct thermal_cooling_device *cdev; struct device *dev = df->dev.parent; struct devfreq_cooling_device *dfc; + struct em_perf_domain *em; char *name; int err, num_opps; @@ -367,8 +376,9 @@ of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df, dfc->devfreq = df; - dfc->em_pd = em_pd_get(dev); - if (dfc->em_pd) { + em = em_pd_get(dev); + if (em_is_sane(em)) { + dfc->em_pd = em; devfreq_cooling_ops.get_requested_power = devfreq_cooling_get_requested_power; devfreq_cooling_ops.state2power = devfreq_cooling_state2power; @@ -379,7 +389,7 @@ of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df, num_opps = em_pd_nr_perf_states(dfc->em_pd); } else { /* Backward compatibility for drivers which do not use IPA */ - dev_dbg(dev, "missing EM for cooling device\n"); + dev_dbg(dev, "missing proper EM for cooling device\n"); num_opps = dev_pm_opp_get_opp_count(dev); -- 2.17.1