Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp5489770imu; Tue, 29 Jan 2019 21:23:25 -0800 (PST) X-Google-Smtp-Source: ALg8bN75RQH4NjIq5idSyGShWQtany76vMooV+W5PsBaHSZ7Ukv9THSpZf7xyWjTlRkGmCqlN2Qw X-Received: by 2002:a63:cb4a:: with SMTP id m10mr25285896pgi.105.1548825805296; Tue, 29 Jan 2019 21:23:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548825805; cv=none; d=google.com; s=arc-20160816; b=QdqW2dFk3VAA+VcYuMf9Nm6FTe3sLPjQ02hQzvMiqghUI6oe53NK+vN+3bReP3HTJK +EUVLFW9XJCBcet/V0eyCEE2uktJvBwSGZIJSVa8RiVWruHzfTN8Lu3BHyrl0sovrWVy VY+xDJ9kv6rVhWP9oDX/TOgTfSgF6VSu5Zb4o+YFoK13C9kZemuXCwnce6zNU2WswfAl sIeeREO/GlEH+Ldo3JCc8Do1WeYEanwFsu3Jv3rOKlkRKi3bXFF8z74aGZkRIgdmQ4GL EKedSX0qDxtgaeF9gG4B+xMdWOHt9Asf3X+1YdVMvm15DNee+RB+R37ZIQBoi+5kmBS8 EUFA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=KYtdcEevpvsnz88eyRbC1DhXZ6geGX3oBRAEz2mkjYw=; b=gKWQBqR/3ryMgIM3o0S2U+bRHJCd9gy+Dgc8MEWtGKRjCi63Bllx2bRvDRNlWvdcxx nBRkns211mmeQv32+vCgJ5uCTrGd87oEjBUSvV20+SHwk20D50667IXfXkDzQ3Ym3zOM WsYDY/liBx2SDZirQ7HxNP7k+WRKMLki3lvFILlmFbXz11lgNZ8gRDF0bKviS2Ywnsrx bS1rqsHynFmvud/UzBR/8PYwDJOwre94IGH+smf0mT2OdoI9TEuMlfiw/1UamgXcl0ng cX0X9S4QrThdMUXCsgKjfOcqJpK9+MZwdbNls8MDWy11b4Px6QlegSVMqPXXBW5oXQXo oZJg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=R7FnZhOV; 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 i20si519466pgh.187.2019.01.29.21.23.09; Tue, 29 Jan 2019 21:23:25 -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=R7FnZhOV; 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 S1725844AbfA3FXC (ORCPT + 99 others); Wed, 30 Jan 2019 00:23:02 -0500 Received: from mail-wm1-f66.google.com ([209.85.128.66]:51439 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725806AbfA3FXB (ORCPT ); Wed, 30 Jan 2019 00:23:01 -0500 Received: by mail-wm1-f66.google.com with SMTP id b11so20254860wmj.1 for ; Tue, 29 Jan 2019 21:23:00 -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:in-reply-to:references; bh=KYtdcEevpvsnz88eyRbC1DhXZ6geGX3oBRAEz2mkjYw=; b=R7FnZhOVZwEEd353wxUYyscVFniL5IleRoug3w/Qw/A0MwHJxGcXxM6+jMiYk+C8we 6ldcORE0fEtyeiAbkJU3+IgydQg2chw29bTSbUzGtqWC1N9EelBy6A1quIY9Ysyprv3n i7hQYE+kQTQLnA9iNGidqcF6zggweUkJtaaCI= 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:in-reply-to :references; bh=KYtdcEevpvsnz88eyRbC1DhXZ6geGX3oBRAEz2mkjYw=; b=I55HqAuXV04BtAQkFDW07RghMxOMwMTiPEBrpMbfe32JVHHvtEkUR3GAYcwRzVxqNl GzyHpS/7ZT4yYqi5EzQBD8lDKVLaVC+OqU9yOwdy2FgZRByvYrCWVbDWOxgM1XWw0MnT 3b9Pr9nTQRgygF0TaHXc3wEa1VHffTHNxKRunpVrMR/ihXZvN+oCAPP21rhRU8ILTPCQ lNq4OnYVZ8qIxHkxNV2QDLAJJ6+dyZRIHcpgD+4GW6ZKeGNjbkshCG/GFp2DT7S0rry1 +7prLVnLCEn2qML3bTRrxaIQLSCSqNzvDAK69gVKqiEI0l6OUsU+kJfIxxdX8XgHl3Yj r9fQ== X-Gm-Message-State: AJcUukc8iUG3kuOrEBi8TayXx6GpdFYWVOPc3w7Njcjjq3rRGQbTlRYn 3+coiZuqwrtye0wOzBMTcmE9jRhKzSo= X-Received: by 2002:a1c:d082:: with SMTP id h124mr22282008wmg.21.1548825779050; Tue, 29 Jan 2019 21:22:59 -0800 (PST) Received: from localhost ([49.248.191.175]) by smtp.gmail.com with ESMTPSA id t18sm855135wmd.40.2019.01.29.21.22.56 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 29 Jan 2019 21:22:58 -0800 (PST) From: Amit Kucheria To: linux-kernel@vger.kernel.org Cc: "Rafael J. Wysocki" , Viresh Kumar , Sudeep Holla , linux-pm@vger.kernel.org Subject: [PATCH] cpufreq: Auto-register the driver as a thermal cooling device if asked Date: Wed, 30 Jan 2019 10:52:01 +0530 Message-Id: X-Mailer: git-send-email 2.17.1 In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org All cpufreq drivers do similar things to register as a cooling device. Provide a cpufreq driver flag so drivers can just ask the cpufreq core to register the cooling device on their behalf. This allows us to get rid of duplicated code in the drivers. In order to allow this, we add a struct thermal_cooling_device pointer to struct cpufreq_policy so that drivers don't need to store it in a private data structure. Suggested-by: Stephen Boyd Suggested-by: Viresh Kumar Signed-off-by: Amit Kucheria Reviewed-by: Matthias Kaehlcke Tested-by: Matthias Kaehlcke Acked-by: Viresh Kumar --- drivers/cpufreq/cpufreq.c | 11 +++++++++++ include/linux/cpufreq.h | 9 +++++++++ 2 files changed, 20 insertions(+) diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index a8fa684f5f90..cae730264bc0 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -19,6 +19,7 @@ #include #include +#include #include #include #include @@ -1316,6 +1317,10 @@ static int cpufreq_online(unsigned int cpu) if (cpufreq_driver->ready) cpufreq_driver->ready(policy); + if (IS_ENABLED(CONFIG_CPU_THERMAL) && + cpufreq_driver->flags & CPUFREQ_IS_COOLING_DEV) + policy->cdev = of_cpufreq_cooling_register(policy); + pr_debug("initialization complete\n"); return 0; @@ -1403,6 +1408,12 @@ static int cpufreq_offline(unsigned int cpu) goto unlock; } + if (IS_ENABLED(CONFIG_CPU_THERMAL) && + cpufreq_driver->flags & CPUFREQ_IS_COOLING_DEV) { + cpufreq_cooling_unregister(policy->cdev); + policy->cdev = NULL; + } + if (cpufreq_driver->stop_cpu) cpufreq_driver->stop_cpu(policy); diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index bd7fbd6a4478..6078eb07a7e4 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h @@ -151,6 +151,9 @@ struct cpufreq_policy { /* For cpufreq driver's internal use */ void *driver_data; + + /* Pointer to the cooling device if used for thermal mitigation */ + struct thermal_cooling_device *cdev; }; /* Only for ACPI */ @@ -386,6 +389,12 @@ struct cpufreq_driver { */ #define CPUFREQ_NO_AUTO_DYNAMIC_SWITCHING BIT(6) +/* + * Set by drivers that want the core to automatically register the cpufreq + * driver as a thermal cooling device. + */ +#define CPUFREQ_IS_COOLING_DEV BIT(7) + int cpufreq_register_driver(struct cpufreq_driver *driver_data); int cpufreq_unregister_driver(struct cpufreq_driver *driver_data); -- 2.17.1