From patchwork Wed Jan 30 05:22:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Kucheria X-Patchwork-Id: 157023 Delivered-To: patch@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp5512664jaa; Tue, 29 Jan 2019 21:23:02 -0800 (PST) X-Google-Smtp-Source: ALg8bN6STby3Hg0V5qskoyr1siIsvWx7+RCyLwuY3CuZJShIfQtVggMJrw998pqkmUOk9AlHifFI X-Received: by 2002:a62:1c0a:: with SMTP id c10mr29018097pfc.213.1548825782635; Tue, 29 Jan 2019 21:23:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548825782; cv=none; d=google.com; s=arc-20160816; b=BXUzwQ1OG+akTP94wfoc1oX+RZSyzoIYuUXuAp6TrAz2IpcRW553OI35z/VYO+WC0S 2UWVEpzuM4afhvQwIv9jJDBgRJFYZqadUzX8DOXfMRrxXF/eBJxvcF3onpepXzlPWZ0y 4CgqhkruWE4r8kGBtr6WJ9PjwXIQdXlnd041y4kyc3H7qgN31fyjgV3YoTCfDaPqLv4w viIYRZ+1k+SKmY4IbIW0JYuwmBH3sGVQiujMdnWC86urB7qRkTgrCIMPuznnlgKirehE 2YAUuSZMFiWmK/Ey9wQV2MIcpTIPulL5ktmvvCUSqOaMx5loZCYw5agGnffFVosznuP5 vSFg== 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=VXhmHWxPMY8/tJcY+0XG9p5rQRZRa6ODAqXK1hbRnl66iQb8ckjh8lCphbhLeb+cz/ 9eKD+PJ363TNj8gk02K0Ev2fD6fzcTZTFc8YhLzgWUjbPnr+2N1EsqVJWbmzBFLVVIlN ZwL6UnvWQN1MLFHuLffl9VyjI0ZO9gyHbMRbazS3SiWO18MYWUdbHB7myuHHgHOaIX1x aXzLw8BHcDSXguoFMGwQqMJA9fOHniGQEjKpGzd8IWM5cawTGun/haL2Afj6fhD3vCAM /H9teSm5Io1C94x84TDPKEhJKMrnkTc6WN5NbPcEW2C6KAAuGqVzMKKTPZWur70pshYf Bd9Q== 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-pm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-pm-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 j5si539872pfg.254.2019.01.29.21.23.02; Tue, 29 Jan 2019 21:23:02 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-pm-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-pm-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-pm-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 S1725819AbfA3FXB (ORCPT + 11 others); Wed, 30 Jan 2019 00:23:01 -0500 Received: from mail-wm1-f68.google.com ([209.85.128.68]:54172 "EHLO mail-wm1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725372AbfA3FXB (ORCPT ); Wed, 30 Jan 2019 00:23:01 -0500 Received: by mail-wm1-f68.google.com with SMTP id d15so20241172wmb.3 for ; Tue, 29 Jan 2019 21:22:59 -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=T8V/MMHnqql/Q2tG+D0ZXmjRoybUdcSlp5XopNpXPqPwsFX1HKhmA+v63+nHxArgfj MnixkMqsQ9WaqDMEt84F+LDpvY9WuaSGDiVwN78RRD/rAQJ8LJbkH4lCRsqFR8oMnXzT nj4C+cAxZcA5C2jO5SfAoMNVH6VmuonyaPpxU/JS4mDiBSdfwNJah/Lkwz0kNF2+OjC7 YwlIEjV+anjPOK7OI1OFzJirvJ5IH4YGuq0ghGHLk31tW+CCs+vsGOWqdxAKatYAmB2+ Lr1FrlDIdEhvoq/ANCg1zdFMTkMwbLU6c78bS2NgzCAuqTm5ROS6MlkWsxWEfsQr1Esp A9sQ== X-Gm-Message-State: AJcUukdujrL/zUMt+DRG/jBBwjo2OrAiMbI7ZBUadPpMNU8JaguED41U hmlLZAm1ZNJnLFxg2yRBpis8gQ== 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-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@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(+) -- 2.17.1 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);