Received: by 2002:a05:6a10:413:0:0:0:0 with SMTP id 19csp987451pxp; Wed, 16 Mar 2022 23:35:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwc3zbeBHyFQksdEPzQ2Oa/B5xpTgj1H22NWsKyCRyBLp1/OSzYtwAZpSQzcnqIFdFtl2Dy X-Received: by 2002:a63:cc:0:b0:380:afc4:bb07 with SMTP id 195-20020a6300cc000000b00380afc4bb07mr2530106pga.341.1647498914780; Wed, 16 Mar 2022 23:35:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1647498914; cv=none; d=google.com; s=arc-20160816; b=o3R4IhyPYcZ7SpcxR62ccBBOuwE2tzwDreI6TEzYxiamYXOZBFDjDCgxQ1HtLG2nj+ DnexicN1kzi+HjOMpX8YkQb79HQgo94lXtt57Z4W3YOH+Msa5c9kUKxghV4Dm4wGVzi9 pSTjyb7u6AZXUHaNfe4//BQvdfglSkDTT/6PPYfPRz5m31BVWZonCRUvE0LLBnqCQ1FZ yOP455ekhoWmyuqeShtGJb9E2qfcrtyYvyXzmZCBEw1HHafpQzm42cTmObdJN5EVl3EK T547n6VEcNRpEihgQhRMALTcHPOZguDdQDgLSmrF5i2of5eY8nm1gDP7Ht2gCqkgOm6k 9irQ== 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=ZlA5IeXmSMx86+cRdjmEkS3QeW6FGP5hqgTF1FCmDGU=; b=k/S63PArPPblX2XUcCP4DHWhime7Dj/aEEvdxZ5BLRIF/2CD11/vEK2Tgr8l64oFng cqmFzv71zeqcE42JwZjDdAobLP7eOmNCyJnftMiJpTJE566D55kfT8Mi1zRP/aJrflkr cjDrD5GFyydSQRu9BCc37/AT3F9nZShJnb4JFJkKQs8PJr1s0C/oexq5rTkW0r7PMW76 bbwaJK+7Ar2Yx7hPV/n/GohNeHjeTmCwGtPoEEaSbMStGKl9JXQWPBn8uyiDXGMKWdGj 9vBKFr5oy8Gmu4pW2ZjPoiGdBlxy7e7ogsZsxWzwTav2aiWoeX/zgPuPGDhkSRuPbh5C SwuQ== 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:18 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 lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id m12-20020a056a00080c00b004f778a4e80csi4229904pfk.377.2022.03.16.23.35.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 16 Mar 2022 23:35:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 6B6B92B2068; Wed, 16 Mar 2022 22:21:08 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354046AbiCPXyL (ORCPT + 99 others); Wed, 16 Mar 2022 19:54:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50738 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1353569AbiCPXyD (ORCPT ); Wed, 16 Mar 2022 19:54:03 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id DC0A31BE8A; Wed, 16 Mar 2022 16:52:45 -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 A108F1476; Wed, 16 Mar 2022 16:52:45 -0700 (PDT) Received: from e123648.arm.com (unknown [10.57.19.225]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id BF9C83F766; Wed, 16 Mar 2022 16:52:42 -0700 (PDT) From: Lukasz Luba To: linux-kernel@vger.kernel.org Cc: lukasz.luba@arm.com, dietmar.eggemann@arm.com, Pierre.Gondois@arm.com, ionela.voinescu@arm.com, viresh.kumar@linaro.org, rafael@kernel.org, daniel.lezcano@linaro.org, linux-pm@vger.kernel.org, mka@chromium.org, nm@ti.com, sboyd@kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, cristian.marussi@arm.com, sudeep.holla@arm.com, matthias.bgg@gmail.com Subject: [[PATCH 7/8] thermal: cooling: Check Energy Model type in cpufreq_cooling and devfreq_cooling Date: Wed, 16 Mar 2022 23:52:10 +0000 Message-Id: <20220316235211.29370-8-lukasz.luba@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220316235211.29370-1-lukasz.luba@arm.com> References: <20220316235211.29370-1-lukasz.luba@arm.com> X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RDNS_NONE, SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no 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 can now be artificial, which means the power values are mathematically generated to leverage EAS while not expected to be on an uniform scale with other devices providing power information. If this EM type 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 than a Little CPU. To mitigate a misbehaviour of the thermal control algorithm, simply do not register the cooling device as IPA's power actor. Signed-off-by: Lukasz Luba --- drivers/thermal/cpufreq_cooling.c | 2 +- drivers/thermal/devfreq_cooling.c | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/thermal/cpufreq_cooling.c b/drivers/thermal/cpufreq_cooling.c index 0bfb8eebd126..b8151d95a806 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_is_artificial(em)) return false; policy = cpufreq_cdev->policy; diff --git a/drivers/thermal/devfreq_cooling.c b/drivers/thermal/devfreq_cooling.c index 4310cb342a9f..b04dcbbf721a 100644 --- a/drivers/thermal/devfreq_cooling.c +++ b/drivers/thermal/devfreq_cooling.c @@ -358,6 +358,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 +368,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 && !em_is_artificial(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 +381,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