Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp2817921ybc; Wed, 20 Nov 2019 21:53:13 -0800 (PST) X-Google-Smtp-Source: APXvYqyaWj/BIj/WRT6ab0nWv5/c80iIjj32omr7LOOqltLPMf03zZLIO7FHKqClWII1ZsfehIUz X-Received: by 2002:a17:906:194a:: with SMTP id b10mr11353632eje.123.1574315593709; Wed, 20 Nov 2019 21:53:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574315593; cv=none; d=google.com; s=arc-20160816; b=OxgLrudSxxsXFMt+eUsUs5bFQZWp0DmROGSKGLoPH9b062zjmity000iB4ifsNgF3Q q43wLdYFPN0SCJ6lJQCieszVnJCwuUCtVzcvDZrYuG2c6vPBDcc2o1AGDhQXu6dkP4FP jV2YC7stewSD/dIfO91Y9v91G2BcOTFko3voc6e2nxQxyvlkzghgcbzGeJ7NIlmoiddc qGxVX6M8tZuIrDFItOUul0+3kqBp5jkYotHBTrZBUdpSErNREh6Uwd/Ec+4MUOCZlBaC G901CS8Dkd6rSs64PLMN9lF5W4AAHQ4ZtHqIGHAIfYRXWwOQsx7wwn4NkbWfLYzM1TsA qDDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=JGGvAMwItuoHstBCxzBFlnEPhYOMIX4l46IdZuoC2/M=; b=XyNFcjpizvJM6iD2JNL35W9xi3qlfy17aLBZF84LHf5ooKIGeMR62gpm+38fMZXD2F 8O850j9V5Bztd+/j/x2Yly5i5sgFrFMaLGiN/Qm0FnyrPXa1wXstrBkdFheiWRuSDzxl CdYdF+A53u1iMP7j+dQID5TyaftSoRPgkzcnD/xBH1wx+DwgaPHcjJcY1VXSwRgXjcyK ZdWnX3nm7b/cJguaWhyGTUz79n08gnY+SM28p9bNo1+ylQsVcWrjDcnI7ggN7Lb5Z6aS jcSY2aq33rTVsU2fzjVlnMmw4S/1TC2lhL974UO7N5IONbMTQ9pTNc4myIv6pQIv23Xd jUVQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Fz4Sk5GV; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n15si1023381ejj.68.2019.11.20.21.52.50; Wed, 20 Nov 2019 21:53:13 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=Fz4Sk5GV; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726563AbfKUFvB (ORCPT + 99 others); Thu, 21 Nov 2019 00:51:01 -0500 Received: from mail-pg1-f179.google.com ([209.85.215.179]:41002 "EHLO mail-pg1-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726532AbfKUFvB (ORCPT ); Thu, 21 Nov 2019 00:51:01 -0500 Received: by mail-pg1-f179.google.com with SMTP id 207so1016910pge.8 for ; Wed, 20 Nov 2019 21:51:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=JGGvAMwItuoHstBCxzBFlnEPhYOMIX4l46IdZuoC2/M=; b=Fz4Sk5GVK5yzfp85dWuOdBmN3v4o/SZkgqWLkcznYBuZpncK+kvROD0g0pgFqHoejx QTgjMdMSw6sDhTqB43CpULkdQ/gbixX2e5c1HXIHA+13SaNRpAHQ1S2kKrp03cZ+XnG5 c97YKLJLOb+t5ibkgqI+zT/ov9ayGp3ddwsm8OruJUm3go7L9jMT8S1mCteS9TZTqjV5 Dh6jS/sRlwhKHUkRGAdAktDsvXDkr3nyA7Y+5TBAf1yKF1KatCZpL4UK5iQ8EE1zKdOx yYUsRmGaFKPQzGfM7hFtoLkH+VxE2+QMW0sl8cinnMKtc4QixHbgnjOQOADrxDAj+Qhc iH2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=JGGvAMwItuoHstBCxzBFlnEPhYOMIX4l46IdZuoC2/M=; b=h2sDQgSqHIPxyxoNcOMVYkmKICQ3Kmfdma+XqMy70Jr4F0HYBpIHYIGXMRe2lYwXPj UWwXbR7A1E9LAwPBCoavbeOcGncihRxpyRgBqn2YBPavGww/rvyQln8BwlYGtXHfGty/ JZl6U550TFMxaZoJUlTzyp+add7PRU+VDqPYPxDzqOd+HrcfFPMEu38eH6JXxGgIb+RN W0KCyNGenVbfMSPnV15tTM14Ar+Fbzd2v1BiP1PBBPAA7QQcrjEIMFoBrrAx2mjRDNGX sfkn0PLDq4A42oqizc/5Drfk9DBPHu8J1HpQKlMNJLP9APq790k6efcXxth82hf39Pxv zFzA== X-Gm-Message-State: APjAAAVPKJl2u7Vsm/VYHrugrFvt4kRktZZGS0Cpk30qApdUD7iJ7T7s YYrodP/s+u6eJCJoQ64AO3xw0G98Q0aP6g== X-Received: by 2002:a63:c60f:: with SMTP id w15mr7481209pgg.33.1574315460190; Wed, 20 Nov 2019 21:51:00 -0800 (PST) Received: from localhost ([14.96.100.229]) by smtp.gmail.com with ESMTPSA id x2sm1443211pfn.167.2019.11.20.21.50.59 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 20 Nov 2019 21:50:59 -0800 (PST) From: Amit Kucheria To: linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, bjorn.andersson@linaro.org, swboyd@chromium.org, j-keerthy@ti.com, thara.gopinath@linaro.org, Zhang Rui , Eduardo Valentin , Daniel Lezcano , Amit Kucheria Cc: Ram Chandrasekar , Lina Iyer , linux-pm@vger.kernel.org Subject: [PATCH] drivers: thermal: step_wise: add support for hysteresis Date: Thu, 21 Nov 2019 11:20:56 +0530 Message-Id: <8e812065f4a76325097c5f9c17f3386736d8c1d4.1574315190.git.amit.kucheria@linaro.org> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ram Chandrasekar Currently, step wise governor increases the mitigation when the temperature goes above a threshold and decreases the mitigation when the temperature goes below the threshold. If there is a case where the temperature is wavering around the threshold, the mitigation will be applied and removed every iteration, which is not very efficient. The use of hysteresis temperature could avoid this ping-pong of mitigation by relaxing the mitigation to happen only when the temperature goes below this lower hysteresis value. Signed-off-by: Ram Chandrasekar Signed-off-by: Lina Iyer [Rebased patch from downstream] Signed-off-by: Amit Kucheria --- drivers/thermal/step_wise.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/drivers/thermal/step_wise.c b/drivers/thermal/step_wise.c index 6e051cbd824ff..2c8a34a7cf959 100644 --- a/drivers/thermal/step_wise.c +++ b/drivers/thermal/step_wise.c @@ -24,7 +24,7 @@ * for this trip point * d. if the trend is THERMAL_TREND_DROP_FULL, use lower limit * for this trip point - * If the temperature is lower than a trip point, + * If the temperature is lower than a hysteresis temperature, * a. if the trend is THERMAL_TREND_RAISING, do nothing * b. if the trend is THERMAL_TREND_DROPPING, use lower cooling * state for this trip point, if the cooling state already @@ -115,30 +115,31 @@ static void update_passive_instance(struct thermal_zone_device *tz, static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip) { - int trip_temp; + int trip_temp, hyst_temp; enum thermal_trip_type trip_type; enum thermal_trend trend; struct thermal_instance *instance; - bool throttle = false; + bool throttle; int old_target; if (trip == THERMAL_TRIPS_NONE) { - trip_temp = tz->forced_passive; + hyst_temp = trip_temp = tz->forced_passive; trip_type = THERMAL_TRIPS_NONE; } else { tz->ops->get_trip_temp(tz, trip, &trip_temp); + hyst_temp = trip_temp; + if (tz->ops->get_trip_hyst) { + tz->ops->get_trip_hyst(tz, trip, &hyst_temp); + hyst_temp = trip_temp - hyst_temp; + } tz->ops->get_trip_type(tz, trip, &trip_type); } trend = get_tz_trend(tz, trip); - if (tz->temperature >= trip_temp) { - throttle = true; - trace_thermal_zone_trip(tz, trip, trip_type); - } - - dev_dbg(&tz->device, "Trip%d[type=%d,temp=%d]:trend=%d,throttle=%d\n", - trip, trip_type, trip_temp, trend, throttle); + dev_dbg(&tz->device, + "Trip%d[type=%d,temp=%d,hyst=%d]:trend=%d,throttle=%d\n", + trip, trip_type, trip_temp, hyst_temp, trend, throttle); mutex_lock(&tz->lock); @@ -147,6 +148,18 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip) continue; old_target = instance->target; + throttle = false; + /* + * Lower the mitigation only if the temperature + * goes below the hysteresis temperature. + */ + if (tz->temperature >= trip_temp || + (tz->temperature >= hyst_temp && + old_target != THERMAL_NO_TARGET)) { + throttle = true; + trace_thermal_zone_trip(tz, trip, trip_type); + } + instance->target = get_target_state(instance, trend, throttle); dev_dbg(&instance->cdev->device, "old_target=%d, target=%d\n", old_target, (int)instance->target); -- 2.17.1