From patchwork Thu Jan 5 08:22:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Alice Guo (OSS)" X-Patchwork-Id: 13090365 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6C24FC3DA7A for ; Thu, 5 Jan 2023 19:29:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=aebXAk6jm35pay+ZRy5a8eGopp66gE7eIuNrxevBvdI=; b=XzrAPQjJYI5yCm v7477aSKHQ4hq9CqrCVa5Xv45TQnrE0yjdg4LopPJe9cLmN6bu9R5ipIRp7gJA5KzhMRKzr0zeThy cJEAN0E2FGMlB7FNwwTXasMhXy3TF0UKTafoIdZbInh8+93DrC4tFls9uthjk7QQk9q/yyduQMVGL vOwQAMyICCTD6g6Zvu0hCOuy3k62lJoZ5lhemejHZCC8K5LBNDoWg5CtYyjLM6VciRNYSuBKGG5G+ bZJaRzhYJAy5v9SCvxQJXHYRzmefZ7pbC25qSGU62yG61xPcKPTnvSGSjDJg82AQhdMrH28hcQSBd QPP1nfXlWZvYMsu2Gf2Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pDVue-00E7Qu-8A; Thu, 05 Jan 2023 19:28:28 +0000 Received: from mail-vi1eur05on2083.outbound.protection.outlook.com ([40.107.21.83] helo=EUR05-VI1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pDLYQ-008agE-Ln for linux-arm-kernel@lists.infradead.org; Thu, 05 Jan 2023 08:24:53 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cEX674ADpaIICADKxAO17lPo0RF4N03f9o0YW1niojCDj08OjaNCf3Z0rJa9sGoK7H25awxuQ9c7ZUX+vmZhHr2txGwZP8f6xjxZtylEt3ecdL0KEF3oegKrdlAvHNYHU0hwq95CZga7BxeBuSccz2VVoHqWUwGw4KgwFEklyRTgCIdEz8nEP0GC8KuPrgU1ONThn3B8YfmoSczsvk8pHLPW+JG15BY6XR1r2BOUa/r3IohsOVfuHRkCsO4jlkeBjfqm3I42Hqrwcy7twmW+eG1azIu7NQmb+rGVm7TJNE31HRt866jIba4J6w16CpdHJks+WPZ8JieI2ckkE6xrBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=vpQASw28zsvT4u8rGArOefZkKgG7vvLOEkQF0Gr/TgY=; b=NNVY9lxxh8lYmYMRTvpS2q+7D3MohK7amDpgdGSDk7VD2Quy6VoSsZj306d0REERJXrdJLCj28ZJMbP9lvo0NxCoUwoJbYnZB7ixCY+IcaeU3Nf3VkQ90wMrf8LWNiYkRrTphYSl12pncp4vXM/7ho03qi6Hh5eqT+Wv5SooAh2xnFdO1It9xaTrmUv9YLbXyaOPkEHY+26+VG78jFLhkl5ZvkjbHjxPQL91861Aq6+UtC7c2Bry+LNbWZNkxCv+09xrbBkqAn2eC1IrVD/zJLCriAcu5DZ0WSkcBSnZrvwJ8oJsZRuA7qwm2xf9RVmOh4dbinw+GN5DKSgfqEO2SA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vpQASw28zsvT4u8rGArOefZkKgG7vvLOEkQF0Gr/TgY=; b=RwbJ23WhdJR8H8Bmy8+9uBACShGLXdx/etM6JUqJlzlKRXrVXm2x4LAPqLEXR6RLmKUGtvwGjWZwbJrKLbO8bJfOs4/22Bxika566TSzdl3KJpVEhuZVOmROP8eEoWlJ1nKcErIa/r1tKKq1SIJK1FChP2BofsvC5u5Qjsab7A4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AM6PR04MB6053.eurprd04.prod.outlook.com (2603:10a6:20b:b9::10) by AS8PR04MB8771.eurprd04.prod.outlook.com (2603:10a6:20b:42c::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5944.19; Thu, 5 Jan 2023 08:24:45 +0000 Received: from AM6PR04MB6053.eurprd04.prod.outlook.com ([fe80::f75a:918f:6b4c:4a00]) by AM6PR04MB6053.eurprd04.prod.outlook.com ([fe80::f75a:918f:6b4c:4a00%4]) with mapi id 15.20.5944.019; Thu, 5 Jan 2023 08:24:45 +0000 From: "Alice Guo (OSS)" To: rafael@kernel.org, daniel.lezcano@linaro.org, amitk@kernel.org, rui.zhang@intel.com, aisheng.dong@nxp.com, shawnguo@kernel.org, leoyang.li@nxp.com Cc: linux-arm-kernel@lists.infradead.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 1/2] thermal: Add generic device cooling support Date: Thu, 5 Jan 2023 16:22:33 +0800 Message-Id: <20230105082234.16962-2-alice.guo@oss.nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230105082234.16962-1-alice.guo@oss.nxp.com> References: <20230105082234.16962-1-alice.guo@oss.nxp.com> X-ClientProxiedBy: SG2P153CA0031.APCP153.PROD.OUTLOOK.COM (2603:1096:4:c7::18) To AM6PR04MB6053.eurprd04.prod.outlook.com (2603:10a6:20b:b9::10) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6PR04MB6053:EE_|AS8PR04MB8771:EE_ X-MS-Office365-Filtering-Correlation-Id: 6379a957-5603-49a8-6ffc-08daeef64d67 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: smYXcyiakQUOmfCKr48kmNby9Y4q/lHAjRUw0bcX0cus7EDyPWDW7z9/g3PUdWHj+IgpiMSSpIycwJr5DwCcipFcTgZY02cnOp7HUuEMLiLhdQqXF8K/4WIhbocrrhisXgdoEnSnMvd2fHqlPuONpcLJFcK+QpRdyg473lwF4pV1ichWM8cZQxFRtRVfB0EeYKVnL/eqZrDbxmpsSw2sUiLQtzx6bVetJrd2LU+f1p6K1lUXlctyOQwleZd1jEURYQOOQ7ZY1t1AxMWXMXQufeD6eYtAAfKNRVJoEXVSRwMgKyD8vGSoPVhOxjICYyKqTShtPOMruoFY70cXexYWR7PTJB4QRLDIofW63oDxWbi19ZnqVbNvVRrY/hc/JCpmx9zN1h4WKKPr+Nvmr+7B8/T/Dkm+SnHeLyvhnMOdviVh9MHLTK9PmTN7gW5EXY4CKdQ5mP2+Fm4LQSUJklnmyIwC23Rm6D0ayXUcPH5XxjFA0eSB/b4aT88KYmTZmuKRPM9NOXBAPqVgrobfhFkRWoZZb1pppuKlK0MueVOjgxd7K46MJyga2KPCfe5KrX10zkRcGidpZbinb+BSyptQ/L3R4P7OMGBo3vKltk3z/ubQy4PNsbWi8059WaHJTQ5FVkuKSwIIWdqiOTYJHPpgY2sIlUNUu5S7i+n550SLi7AwUlpDotwzaDCBo6DXfgA/5/wDISS5fbKZLtHcDL9xdyZAtFly9brRamm9yA8MJz4nfNNF5jwReuLrFPj2Qw36 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB6053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(366004)(39860400002)(396003)(346002)(376002)(451199015)(5660300002)(4326008)(41300700001)(316002)(8676002)(66946007)(66556008)(66476007)(8936002)(2906002)(6666004)(6506007)(52116002)(478600001)(6486002)(6512007)(186003)(26005)(86362001)(83380400001)(1076003)(2616005)(38350700002)(38100700002)(41533002)(2004002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: zQZLEHyv3Wv2gP6x+6XzRFHwq92rcWaqymEuGgmi8Wl3X9VAixLL+GgqxRNGNSKFBLcSq0Q/qvK+7dQa9ss29vMAbkLXlmSaSR8wsjzRutJZW0gx/Ig5tzEwE+FOEQxU1guTMo8r4Q5wOq55JgRY0hcVI0Ay5Ry7ZS4WBSPx+V0jAwvP6jxjAzoWAMU7j1GwcmxQTxT/BUp4yBK+plSGUp/ruzefGeppubMFiOQ3z0RwJxsSMhUTz6s38ghwm3Hh9AbbpfQa6IlbtJkCN8w3dbbf1Moa3MpU44jyLg5bINyE7r7OYErPFPvE18CZAGcfeOFhWyG8iWR2UXZKJaVwfWCIuLM8qpMA93+585VPOtYlqx9wwjbZXorWbXQJFcPWZ2SmfhBY6U3P+4sSaHeLIkO73liF4auC6ne1gtFdLiojL6cZsJDKFbqUqn7slctIZG2KbegWKyARrr+5G1I5DiCk2CRC7PcVJ7J8GObj9tTTbIEHNbN+U+hgZoDSngQD160IZ9RBkq5bQKVE0rEr/dHyEIr98ljTEcKXFwj7OxqiMDWSTV20Yh09EyrMyeK2K2njOht77CDAFWSeUHMba2Iuj3hiiDcSOih/NsTDyLYLvBVjaIKtk3VeDDeBabDzok0NKlvjMiBt4u4ijC+mrQEgR30o1XSGgrIyNXyT/BokanNBOrWyokBab/q6tI+fM64Ehf71scjtpUVDSpoeq0NHHE8aRVDmCDtGcWsP72HUWMzfvVPOrk/BokKd4bRWxGJjsL1oAHMl1vRyf6HZiNyWx/lzCbmuh1mESGWkf/lyDrNVBFfUlXzkMdIzAhdkWraBuQ00hVpk3Xf1yBvWPtrMRWpugxyhBxq9OTjLVwKzuLTDP3Fm3vviviD7TE1ua4AmrSEH6PNk8YJhgFzVBYJAbpfO5J38D8i73zHdSsvy7067ORkf+aJfdP4z8nqycqvJfgDnOjh44S1h2ykqC0msP0mwar6PLqGNXQ4cjQBeIO0J1b5SMkOiMM8gHRJlQBAakVgNnmhvM6BQWl8fp11pXOX5dsin8KpyjnOVVIbJ5ELMhz8a1ymYa0RWfwu1R3ek8T/D3L2mSQ3rd7IlYGrkRfgp+HxlEwLa5uFGrReJ2xGoMJ95DQTLMUw+MxMTCnUMj4mBK9YCfw1Q7RCXRdu3y7VnSEgzLGqAAGyB+tgKtwOr7QUeOU48z5xbb7BpUo7zGhZtQtiYC8nJRBTAUeh2BOI/vdfclKsFWSoBwotSE9w0MysAG1h8ND0vFeO3sA5bbw9mQU01Wx5SI4y1WXpwnhppFWukIMBZhvWODuHPPgHijJ8thR2R3mrcfxF18LGGccxy8uDAvpp8kzyfhOA2LOXpv+HIS1uu4lCZQtl9jY7pytooM0bazpuuTthhFMckhRIEXkM2eplWre57T3qgJfCtYWwby/rAXemKebfbZCLRMuJYUSSthx9i2WlQFkV/IGjMOLdkHkTtHAgRVqiQH3+8TvZe/M7vMy9tHmVY7U/BePf477zafZlyfSMB1Ar6jfQmKFM+wWlMQkXqM86ITS6UMg0cjZ0KEi4fxTI4ji15QKVQxwO1rr++P2JE X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6379a957-5603-49a8-6ffc-08daeef64d67 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB6053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jan 2023 08:24:45.6367 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 4U4dYvTCGlAq8Huj8BtmxHmmODSayyWTimNRmHlFPgc1+7K7RZPs4s0pG8VfHuv3xvLKDFukDKsoebQXS0uMbw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB8771 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230105_002450_975202_13E631A0 X-CRM114-Status: GOOD ( 21.55 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Anson Huang To compatible with previous implementation, add generic device cooling support, each thermal zone will register a cooling device, and when temperature exceed passive trip, the device cooling driver will send out a system wide notification, each device supporting cooling will need to register device cooling and takes action when passive trip is exceeded; Signed-off-by: Anson Huang Signed-off-by: Dong Aisheng Signed-off-by: Alice Guo --- drivers/thermal/Kconfig | 7 ++ drivers/thermal/Makefile | 1 + drivers/thermal/device_cooling.c | 154 +++++++++++++++++++++++++++++++ include/linux/device_cooling.h | 46 +++++++++ 4 files changed, 208 insertions(+) create mode 100644 drivers/thermal/device_cooling.c create mode 100644 include/linux/device_cooling.h diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig index e052dae614eb..2625903b56f5 100644 --- a/drivers/thermal/Kconfig +++ b/drivers/thermal/Kconfig @@ -284,6 +284,13 @@ config K3_THERMAL This includes temperature reading functionality. +config DEVICE_THERMAL + tristate "generic device cooling support" + help + Support for device cooling. + It supports notification of crossing passive trip for devices, + devices need to do their own actions to cool down the SOC. + config MAX77620_THERMAL tristate "Temperature sensor driver for Maxim MAX77620 PMIC" depends on MFD_MAX77620 diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile index 2506c6c8ca83..77c4b2e525a4 100644 --- a/drivers/thermal/Makefile +++ b/drivers/thermal/Makefile @@ -46,6 +46,7 @@ obj-$(CONFIG_ARMADA_THERMAL) += armada_thermal.o obj-$(CONFIG_IMX_THERMAL) += imx_thermal.o obj-$(CONFIG_IMX_SC_THERMAL) += imx_sc_thermal.o obj-$(CONFIG_IMX8MM_THERMAL) += imx8mm_thermal.o +obj-$(CONFIG_DEVICE_THERMAL) += device_cooling.o obj-$(CONFIG_MAX77620_THERMAL) += max77620_thermal.o obj-$(CONFIG_QORIQ_THERMAL) += qoriq_thermal.o obj-$(CONFIG_DA9062_THERMAL) += da9062-thermal.o diff --git a/drivers/thermal/device_cooling.c b/drivers/thermal/device_cooling.c new file mode 100644 index 000000000000..6bd668ee545e --- /dev/null +++ b/drivers/thermal/device_cooling.c @@ -0,0 +1,154 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2013-2015 Freescale Semiconductor, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Copyright 2023 NXP + */ + +#include +#include +#include +#include + +struct devfreq_cooling_device { + int id; + struct thermal_cooling_device *cool_dev; + unsigned int devfreq_state; +}; + +static DEFINE_IDR(devfreq_idr); +static DEFINE_MUTEX(devfreq_cooling_lock); + +#define MAX_STATE 1 + +static BLOCKING_NOTIFIER_HEAD(devfreq_cooling_chain_head); + +int register_devfreq_cooling_notifier(struct notifier_block *nb) +{ + return blocking_notifier_chain_register( + &devfreq_cooling_chain_head, nb); +} +EXPORT_SYMBOL_GPL(register_devfreq_cooling_notifier); + +int unregister_devfreq_cooling_notifier(struct notifier_block *nb) +{ + return blocking_notifier_chain_unregister( + &devfreq_cooling_chain_head, nb); +} +EXPORT_SYMBOL_GPL(unregister_devfreq_cooling_notifier); + +static int devfreq_cooling_notifier_call_chain(unsigned long val) +{ + return (blocking_notifier_call_chain( + &devfreq_cooling_chain_head, val, NULL) + == NOTIFY_BAD) ? -EINVAL : 0; +} + +static int devfreq_set_cur_state(struct thermal_cooling_device *cdev, + unsigned long state) +{ + struct devfreq_cooling_device *devfreq_device = cdev->devdata; + int ret; + + ret = devfreq_cooling_notifier_call_chain(state); + if (ret) + return -EINVAL; + + devfreq_device->devfreq_state = state; + + return 0; +} + +static int devfreq_get_max_state(struct thermal_cooling_device *cdev, + unsigned long *state) +{ + *state = MAX_STATE; + + return 0; +} + +static int devfreq_get_cur_state(struct thermal_cooling_device *cdev, + unsigned long *state) +{ + struct devfreq_cooling_device *devfreq_device = cdev->devdata; + + *state = devfreq_device->devfreq_state; + + return 0; +} + +static const struct thermal_cooling_device_ops devfreq_cooling_ops = { + .get_max_state = devfreq_get_max_state, + .get_cur_state = devfreq_get_cur_state, + .set_cur_state = devfreq_set_cur_state, +}; + +static int get_idr(struct idr *idr, int *id) +{ + int ret; + + mutex_lock(&devfreq_cooling_lock); + ret = idr_alloc(idr, NULL, 0, 0, GFP_KERNEL); + mutex_unlock(&devfreq_cooling_lock); + if (unlikely(ret < 0)) + return ret; + *id = ret; + + return 0; +} + +static void release_idr(struct idr *idr, int id) +{ + mutex_lock(&devfreq_cooling_lock); + idr_remove(idr, id); + mutex_unlock(&devfreq_cooling_lock); +} + +struct thermal_cooling_device *devfreq_cooling_register(void) +{ + struct thermal_cooling_device *cool_dev; + struct devfreq_cooling_device *devfreq_dev = NULL; + char dev_name[THERMAL_NAME_LENGTH]; + int ret = 0; + + devfreq_dev = kzalloc(sizeof(struct devfreq_cooling_device), + GFP_KERNEL); + if (!devfreq_dev) + return ERR_PTR(-ENOMEM); + + ret = get_idr(&devfreq_idr, &devfreq_dev->id); + if (ret) { + kfree(devfreq_dev); + return ERR_PTR(-EINVAL); + } + + snprintf(dev_name, sizeof(dev_name), "thermal-devfreq-%d", + devfreq_dev->id); + + cool_dev = thermal_cooling_device_register(dev_name, devfreq_dev, + &devfreq_cooling_ops); + if (!cool_dev) { + release_idr(&devfreq_idr, devfreq_dev->id); + kfree(devfreq_dev); + return ERR_PTR(-EINVAL); + } + devfreq_dev->cool_dev = cool_dev; + devfreq_dev->devfreq_state = 0; + + return cool_dev; +} +EXPORT_SYMBOL_GPL(devfreq_cooling_register); + +void devfreq_cooling_unregister(struct thermal_cooling_device *cdev) +{ + struct devfreq_cooling_device *devfreq_dev = cdev->devdata; + + thermal_cooling_device_unregister(devfreq_dev->cool_dev); + release_idr(&devfreq_idr, devfreq_dev->id); + kfree(devfreq_dev); +} +EXPORT_SYMBOL_GPL(devfreq_cooling_unregister); diff --git a/include/linux/device_cooling.h b/include/linux/device_cooling.h new file mode 100644 index 000000000000..83b709e7c893 --- /dev/null +++ b/include/linux/device_cooling.h @@ -0,0 +1,46 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2013-2015 Freescale Semiconductor, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Copyright 2023 NXP + */ + +#ifndef __DEVICE_THERMAL_H__ +#define __DEVICE_THERMAL_H__ + +#include + +#ifdef CONFIG_DEVICE_THERMAL +int register_devfreq_cooling_notifier(struct notifier_block *nb); +int unregister_devfreq_cooling_notifier(struct notifier_block *nb); +struct thermal_cooling_device *devfreq_cooling_register(void); +void devfreq_cooling_unregister(struct thermal_cooling_device *cdev); +#else +static inline +int register_devfreq_cooling_notifier(struct notifier_block *nb) +{ + return 0; +} + +static inline +int unregister_devfreq_cooling_notifier(struct notifier_block *nb) +{ + return 0; +} + +static inline +struct thermal_cooling_device *devfreq_cooling_register(void) +{ + return ERR_PTR(-EINVAL); +} + +static inline +void devfreq_cooling_unregister(struct thermal_cooling_device *cdev) +{ +} +#endif +#endif /* __DEVICE_THERMAL_H__ */ From patchwork Thu Jan 5 08:22:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Alice Guo (OSS)" X-Patchwork-Id: 13090366 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BDF3FC4708E for ; Thu, 5 Jan 2023 19:30:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=JIKSjqtdqsrFr6CP+Yoe4tIsEikoF3ex+BBnzjsGXbQ=; b=IJbMtRZQOI10zd 4XVixJ8w5h82Ni6/TbPc4Bsf7LGkgxyn16iXQTdodu3C2BpkU6dzAm6CV0pid1vApipf7hWMMEUD/ hVPmjpTv+W7VWDN+JeaWQ3qZpZfuQTvnDNP07bzDgRTQ0LdxrFHEe0tGdSH9G7sn/qxvhbvhoXxYP oqmJq+36kgkyY/Ay5ltFoH29ji6USuWZxRyUa1hRLd97/3KcsScI9ddU2cxAjk/iAULJpzEPuwsS3 ntGuya+hBJfyAtcsGDVgsVgHB+5WuRU77AorVpUyczSIAZUXAnvIlrOfYbeydx9wtvl1O4eILqg5h p2YrAL75mdElBREPAj+g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pDVvO-00E7kM-4q; Thu, 05 Jan 2023 19:29:14 +0000 Received: from mail-vi1eur05on2061.outbound.protection.outlook.com ([40.107.21.61] helo=EUR05-VI1-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pDLYV-008ara-Cs for linux-arm-kernel@lists.infradead.org; Thu, 05 Jan 2023 08:24:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=E1NiXRNPyGgiDAe7XkLB0hQz1M2PzEr0Ecb46fnVuDhMPhw/4t3FatZLpWiAZgY3zcvpwyx4QyZhTQi0dKdcnZdiuRQA7BisVQADHeKaC4XV+cW1DW9rqQRfr/YZbpCvObZmuD0GD876BejBvMCwFtvHOFk7KIW74mk0ACCpwjdG7IQAr8uQHlP0ZckK/0qw/L7vtgzMrV4o4XcqKV62UpppehecCVMJIj6w3gm1E5fGwftwBJz3+YpcHEr1ey0IWkhFUxorG7GT68Q04FN69krqHrkQZSn7wKxXgzdDhYMkFNrA4ffBuqY6xjXU5+UgL8Ty3A3JMq0FbhTxXoLTxQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=0cmjDbM9CwyqBncNx8qogTYlUutQNsN6a5GlZMHDs2U=; b=YoeGG9+kQUpi9ect23lirVXJjbhDRJfRyKfgWQOwAlzHpMOJz9M8iBYVggtyEjL7Prssc9+yl0pgUFhFx+638jKCFS7ibsGwnRsOK1diLHgw77/Di6r8ku3GhCFKGeqjNNdR5NjtfeGUOOAkk8AIuRntd9L/OWgrEOZMuWdGMQapYhD2pk1ub6nZYsTvuXX46y6hf8hfjBQJaj4CV49gixZ22FUP8iUhsjJm24tyQJ/o9oVhQ0NtwB6G18QfZ3kWNWint3o10py1WQq8PM0P5+k6AKE7qXwnYDhj3+Wbv11RnJ3Uu3Qjh6jxYXDyW9cxoL911ZVqq3pS8rPmILP/Hw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector2-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0cmjDbM9CwyqBncNx8qogTYlUutQNsN6a5GlZMHDs2U=; b=cD68RAZyizo2lwPPGd1puYoi7X8v4ydVKRlWMEsIIlf7le1Fi9rSwYTeLbcUuf5d+dDdFwAIR0GpPRe4x8o/GNerZdnOZsXJ7vEnOJIxhfVQO09SdCYB2S5qlYs3riU7QG+63pgt6cGELw4v5cgt6A2Jo1PDKF2+lMOVnS9J0wE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AM6PR04MB6053.eurprd04.prod.outlook.com (2603:10a6:20b:b9::10) by AS8PR04MB8771.eurprd04.prod.outlook.com (2603:10a6:20b:42c::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5944.19; Thu, 5 Jan 2023 08:24:51 +0000 Received: from AM6PR04MB6053.eurprd04.prod.outlook.com ([fe80::f75a:918f:6b4c:4a00]) by AM6PR04MB6053.eurprd04.prod.outlook.com ([fe80::f75a:918f:6b4c:4a00%4]) with mapi id 15.20.5944.019; Thu, 5 Jan 2023 08:24:51 +0000 From: "Alice Guo (OSS)" To: rafael@kernel.org, daniel.lezcano@linaro.org, amitk@kernel.org, rui.zhang@intel.com, aisheng.dong@nxp.com, shawnguo@kernel.org, leoyang.li@nxp.com Cc: linux-arm-kernel@lists.infradead.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 2/2] thermal: qoriq: Add device cooling support Date: Thu, 5 Jan 2023 16:22:34 +0800 Message-Id: <20230105082234.16962-3-alice.guo@oss.nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230105082234.16962-1-alice.guo@oss.nxp.com> References: <20230105082234.16962-1-alice.guo@oss.nxp.com> X-ClientProxiedBy: SG2P153CA0031.APCP153.PROD.OUTLOOK.COM (2603:1096:4:c7::18) To AM6PR04MB6053.eurprd04.prod.outlook.com (2603:10a6:20b:b9::10) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM6PR04MB6053:EE_|AS8PR04MB8771:EE_ X-MS-Office365-Filtering-Correlation-Id: 36f91bc9-655f-4200-fc03-08daeef650cf X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QVkFMDI7kRxDmSOYlpuUKmPXtOX30mcpQs/SpVqA+dUaYRHocqC9VIEy8jbHqhMuCeS6mTZHDymQ1S1nufrmUPWzon6l0eSfCqow/RVSLP7mZMXy79zk0xGq0zRyn1uEBPFgzq6NSEy3Vq9Vjki3PQCiW5BWmFj2rez6RLVIecMq7MF/OpXhWDOvhovOUvEbBVHCp2lCriM3KPmnWpFQgPniKUN/f8hPy7Y/gpMaRR/9BItI7GQr8l9g87pe0l5JbGGlIyRxhSepFmyVT0sbLt00tDNsraFQZHsTz2oEslkcXOaArk62j3Jhe2xH/qUq01X+JlbxxnvB/4WX+19P+d2aTrB/wkr0h7NKHszKLjnSHdNldi3V/PaBquTHqa5aRzsLspKr0oqhL4ukOWAcHf3Bm77Dwff9OCXxSlARupbuq73YX9HW2r8oXCqI0f+KVs83mnVx82lxGop5Qq/N/idR73AcMhTBGizE5TpvAgdlGBYLktVmZZuH82t5Gu1iIrB2hJhc8meI7zms4oXbH4VHWQojCOcsn9x02wHOqOTEhxgRvbB9cfgVWlyvyRIXpr2N6SYPZ/f08uc+MrdovSrPtev0Ay9YeUzxJRf3W7lV46OHunpXXBfFLwWiKlQ/ISyTTQnyvENLGidzXyC2WEFCJlYfRrD4RPfZGmGko+La7CQhkXxBmuk13j2nSGrBbP3nlb73HRyECezz4fGqpA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB6053.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(136003)(366004)(39860400002)(396003)(346002)(376002)(451199015)(5660300002)(4326008)(41300700001)(316002)(8676002)(66946007)(66556008)(66476007)(8936002)(2906002)(6666004)(6506007)(52116002)(478600001)(6486002)(6512007)(186003)(26005)(86362001)(83380400001)(1076003)(2616005)(38350700002)(38100700002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: uAab30O5oZCFbyCQN29ycvPFCCQnpz5yesK12WwNMtxgTMaFexAN+ynvIn9jak5w8MAHjG+YURn0f/bib4UqsVx6Tauwodj22BslOIobVJbrFZOOJEOFuHkSVyOx2dCwuTkOUZKm+HzqPsIi3g7732xBN7f9id6a4dzGFBFHf8Hjb05zNwBndwdZbK+coGyBPaY9QWHWF4EZ5e6LL8Y3ZI7OfTcJ4EdwqPr576zsLZgFvo34BGguUtKldrrkbAQzBaAH88z1GXQHHXyC1XlIjwMvh9GCe96BJZ6PWdxYG/d8AxxbtbNJcJXGOmfXOCZ/Z7F+V955hvFcXScw8+IxVjptBtZ2Gevj8zb35w1/VPXd2S2jIdfm+vasTu/Aa2qj93ZwKhAFLzgKtvKQ95ScuDvs0JIYQuZQgKEnb9F+yQDNkMhyRgJiiVUFF5UmbKTI+dd+eOBlOyV9Cg35h4Pdx3Rx5BWB+Bdgh1rt2B8Hd8hlbA3wgDpeqYrrYlQ2902Ar7VwTBxdE2Z7Zwt2rU8BmM+U4PJWCai4rlPlu6tqBw9geDj2gz38GdQoXlwkkzJYiD0twVu8sqJHI2VbURFm0WC8HWJKZzsPMdZnUEz1h0tMUuAneAAg4740jdUtqKiH63euKRvqqU3MsPCKxDyvTLdAhz6OKGth6N4q966QMyJpzhgGdIvvzhonlvhvoLzo3sSRGPJxTQ+9HE5sPhD2mz5pwa7BUmczAIvRjDGxM5JURlAuTKYgeApk74jJRQeu2GwgHD4Ip5Pzx6ttJckmc8JeRs7laHYCAkdXJxXx3MuaG9Dy20m1t23kRGmXUvahX690eqaWvG2gFLOPX57o0hSD3NaTypvnO42spjhfeixoNHGUWjWAuohsgXF+qdPorZymoUBS4qeIYiiHYBhcy7s2z4HsBXF4xxvZBu/AvhTrC7FTZd1mGviSRXUNRygkau5a57eIGqQmtgNvTR3kZjyK/OI1OJ5HdbAAFbZbfV4g1PFsQHsV54mxi8QYZTzTHXPJi442IUibGkWW3/tmUuZVEKbgZ3zFnJO4nwzM9ixTodsV2tqJF+jLk5TtyHJsOzDWqQyjnYuFjW1HNUJ2cypVIcfD+lw4QoJS52FM4d0jNTdFUWYJJB17bxVaurYjrS4ZZTNcP4NqO3yt9r4tGXQjSFCM1E+acR5dbvr4t7Wt7m7X+oQVPM2PSl2tQlz8lQt2WAuUwg0TwT3Rs3jteCu/4imwcC2weqyx6VdAg00H/Z9OpYgKn55pgUP7yw1qMGifPXhRo8JCPgNjDDxzAYZGzv+5rGpEDy3DRyutuFfoC/HwrUA5NZ0kgTd7FsbDbGpuUpOQS6gAEfwQbtkkBeBFe5voTBqw12g6hwdhqLIujzc4mWF4NMqm+srvM5NUe+8A0IaQu6yGdyb66Qt4YAqnnsz2tZWTw/qqoeVZ2jt28NUynCOswgHaxPzyZ0TkSJrMN5r2prtbWLapIeWceNDW1Gj2/YF7oFTIYKaTx8BbMZDTOwnH256r2gaI/oPfMv1Wd7Ybz8usF16yrvUWYBUh62aG8KUUr3EyopaHhE3o5ECDBKEPyp6nUQSm/Ov/ X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 36f91bc9-655f-4200-fc03-08daeef650cf X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB6053.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jan 2023 08:24:51.3238 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wXA2qqWWIb8CODQcNIp34p8kd4rsjX7/be4uqPlPYjY2vHGNTrJUIzyUXplRmP0FFg7Ko8cbQa6j9JLlSvufbg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB8771 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230105_002455_657977_A2EA642C X-CRM114-Status: GOOD ( 16.84 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Anson Huang Register device cooling for first thermal zone manually, when temperature exceeds passive trip, system wide cooling notification will be triggered. Signed-off-by: Anson Huang Signed-off-by: Alice Guo Reviewed-by: Jacky Bai --- drivers/thermal/qoriq_thermal.c | 83 ++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/drivers/thermal/qoriq_thermal.c b/drivers/thermal/qoriq_thermal.c index d111e218f362..3c21b2d184eb 100644 --- a/drivers/thermal/qoriq_thermal.c +++ b/drivers/thermal/qoriq_thermal.c @@ -3,6 +3,7 @@ // Copyright 2016 Freescale Semiconductor, Inc. #include +#include #include #include #include @@ -27,6 +28,7 @@ #define TMSARA_V2 0xe #define TMU_VER1 0x1 #define TMU_VER2 0x2 +#define TMU_TEMP_PASSIVE_COOL_DELTA 10000 #define REGS_TMR 0x000 /* Mode Register */ #define TMR_DISABLE 0x0 @@ -68,6 +70,10 @@ */ struct qoriq_sensor { int id; + struct thermal_zone_device *tzd; + int temp_passive; + int temp_critical; + struct thermal_cooling_device *cdev; }; struct qoriq_tmu_data { @@ -77,6 +83,12 @@ struct qoriq_tmu_data { struct qoriq_sensor sensor[SITES_MAX]; }; +enum tmu_trip { + TMU_TRIP_PASSIVE, + TMU_TRIP_CRITICAL, + TMU_TRIP_NUM, +}; + static struct qoriq_tmu_data *qoriq_sensor_to_data(struct qoriq_sensor *s) { return container_of(s, struct qoriq_tmu_data, sensor[s->id]); @@ -122,14 +134,53 @@ static int tmu_get_temp(struct thermal_zone_device *tz, int *temp) return 0; } +static int tmu_get_trend(struct thermal_zone_device *tz, int trip, + enum thermal_trend *trend) + +{ + struct qoriq_sensor *qsensor = tz->devdata; + int trip_temp; + + if (!qsensor->tzd) + return 0; + + trip_temp = (trip == TMU_TRIP_PASSIVE) ? qsensor->temp_passive : + qsensor->temp_critical; + + if (qsensor->tzd->temperature >= + (trip_temp - TMU_TEMP_PASSIVE_COOL_DELTA)) + *trend = THERMAL_TREND_RAISING; + else + *trend = THERMAL_TREND_DROPPING; + + return 0; +} + +static int tmu_set_trip_temp(struct thermal_zone_device *tz, int trip, + int temp) +{ + struct qoriq_sensor *qsensor = tz->devdata; + + if (trip == TMU_TRIP_CRITICAL) + qsensor->temp_critical = temp; + + if (trip == TMU_TRIP_PASSIVE) + qsensor->temp_passive = temp; + + return 0; +} + static const struct thermal_zone_device_ops tmu_tz_ops = { .get_temp = tmu_get_temp, + .get_trend = tmu_get_trend, + .set_trip_temp = tmu_set_trip_temp, }; static int qoriq_tmu_register_tmu_zone(struct device *dev, struct qoriq_tmu_data *qdata) { int id; + const struct thermal_trip *trip; if (qdata->ver == TMU_VER1) { regmap_write(qdata->regmap, REGS_TMR, @@ -158,10 +209,40 @@ static int qoriq_tmu_register_tmu_zone(struct device *dev, return ret; } + sensor->tzd = tzd; + if (devm_thermal_add_hwmon_sysfs(tzd)) dev_warn(dev, "Failed to add hwmon sysfs attributes\n"); - + /* first thermal zone takes care of system-wide device cooling */ + if (id == 0) { + sensor->cdev = devfreq_cooling_register(); + if (IS_ERR(sensor->cdev)) { + ret = PTR_ERR(sensor->cdev); + pr_err("failed to register devfreq cooling device: %d\n", + ret); + return ret; + } + + ret = thermal_zone_bind_cooling_device(sensor->tzd, + TMU_TRIP_PASSIVE, + sensor->cdev, + THERMAL_NO_LIMIT, + THERMAL_NO_LIMIT, + THERMAL_WEIGHT_DEFAULT); + if (ret) { + pr_err("binding zone %s with cdev %s failed:%d\n", + sensor->tzd->type, + sensor->cdev->type, + ret); + devfreq_cooling_unregister(sensor->cdev); + return ret; + } + + trip = of_thermal_get_trip_points(sensor->tzd); + sensor->temp_passive = trip[0].temperature; + sensor->temp_critical = trip[1].temperature; + } } return 0;