Received: by 2002:a05:6a10:413:0:0:0:0 with SMTP id 19csp2277716pxp; Mon, 21 Mar 2022 15:41:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzE8vnvLP/Xrlcsci72sJsNzEBbL5Z5+JaflrmMcg5J5kjuQ7uLf3mDsJsBrfszqS8ugLK5 X-Received: by 2002:a62:f203:0:b0:4f6:f330:7e56 with SMTP id m3-20020a62f203000000b004f6f3307e56mr26235562pfh.49.1647902469953; Mon, 21 Mar 2022 15:41:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1647902469; cv=none; d=google.com; s=arc-20160816; b=SjCFpMgqaA2z5F2J1xkkMchl+BEsxZiTe/3EZSITCm9jUDRjMUkhTsTBf27mT63Jrn ZdFYC1RX3Nu8hcX0YaAKStdv0A/o6iED8PXnHKfPvz/34fF3ayNPjFUzDYzkXMZVxd8M dNfsGgJaMO3jDP0QUeU5bp4O4cf7jZB/svx8NkDu/OwuoTh6dohtkjhck4dz6TXQc2OU eDmxGk8kszgDVz+Vfrtf2WVrgao1hfqG4do8e+/TWlVDyZqAaHF5CqXg9FrfpNLOe3TH 1+PsaLwIGewFKJpjzoxR2aQiLMQsOJSC42iaInsQ0lwAvU/SxZEO3C+L3WENvWJ44DNI etdQ== 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=Q9o8xwxdFWTQOI2QNV8UEQvH/PQdMv+/Ytt9etiBmvDmzMxfTF6GsNUiGh6JU41/u0 2t1uD0ScLoC6yLKaMymtbaPQaldNEEPhqlRVbec4xBqsMY9ATDlzgucgyW2O4oeFzc6+ mDajYIl1A9nEyxJUe2uwy+kFBp6dv8XquLg4pKtDPW7xqMKun/xJbJ3UkgF0ha1Q5BH2 5tQ0FLGynVJVLFBHNV6jjXScHAvzJWlDFErE/7D0rPW4FB4QHRGnay+t7cjz9ucWLw28 IW4gDNLw+o0+y4o/LojnAALPoOxtp8rWFQorcpAMNqfltZxC919+E20Ue9s+Dgj+uR5D ePYA== ARC-Authentication-Results: i=1; mx.google.com; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 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. [23.128.96.19]) by mx.google.com with ESMTPS id s12-20020a056a0008cc00b004fa3a8e0040si9497263pfu.247.2022.03.21.15.41.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Mar 2022 15:41:09 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 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 A22A43D81BC; Mon, 21 Mar 2022 14:51:55 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346166AbiCUJ7v (ORCPT + 99 others); Mon, 21 Mar 2022 05:59:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46556 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346161AbiCUJ7h (ORCPT ); Mon, 21 Mar 2022 05:59:37 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 9097732EE0; Mon, 21 Mar 2022 02:58:09 -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 3F8DD1042; Mon, 21 Mar 2022 02:58:09 -0700 (PDT) Received: from e123648.arm.com (unknown [10.57.22.222]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 5F1A93F766; Mon, 21 Mar 2022 02:58:06 -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: [RESEND][PATCH 7/8] thermal: cooling: Check Energy Model type in cpufreq_cooling and devfreq_cooling Date: Mon, 21 Mar 2022 09:57:28 +0000 Message-Id: <20220321095729.20655-8-lukasz.luba@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20220321095729.20655-1-lukasz.luba@arm.com> References: <20220321095729.20655-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