From patchwork Wed Jan 25 14:52:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 48181 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp322612wrn; Wed, 25 Jan 2023 07:07:25 -0800 (PST) X-Google-Smtp-Source: AMrXdXvNXM9ckB3e7sIWT2aKUMLpRAooGkR9dZe09zUl6v4xd3SmK2j/gOzPF0hCBT1HBsgq6e42 X-Received: by 2002:a05:6402:b:b0:496:f517:d30d with SMTP id d11-20020a056402000b00b00496f517d30dmr34563156edu.38.1674659245517; Wed, 25 Jan 2023 07:07:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674659245; cv=none; d=google.com; s=arc-20160816; b=uLujO/lUcnfX1hita+Ymjuz7/9OW1h9GbrN98UQTZyE3xTYzknuAMPjWNykC6HcRkm SCLkv7xKMrpUnAZD6aIZnb2dT8HeBB/vbkmyZZ4wpjwTquX7sPCgXRSkgmCjz/nzNFfV q11Z53Otn6bUDLcx3d5ngZtkySS0WKPC0dLFJEBcqx2scd5Y4WjRjQEqTP3hKPNuL0qt B2OIvrDMFsB1zp7DYqx2URsfX8sIZku88kZP0klaE2uWuPMthnIa84syfwpYJ8P/WXF7 Iz9vlwHYQtxbOV3vO1+glIaBUuuVJGzAedbYosnn6LKPDyox/lY2FsXWuGrcPRkQys2g ig2A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=yqTpcxiknLDGrGLEYy2o/X3Xy/+s2p8i+R3if8KU+d0=; b=tR5jOLFvNGsH22snMyl5bYM8a+NxrOSEvtEpc1V8u4HS1Ec4MB0OAOvXe45540rUnY LCbIFm+zeJP3ejj3CBAEPTOnGzLDPp/1oGYje7UYMmFxzsRy0av2s9PHxZKbvnbp208v umWhK7U+Hx1q30I3JfcU0SJ4moeBLNIzNm0ixD8lEMzzH+noH2l1LhcP59XAL31FwS5W IfjKeg44FXTd5tFs0IYv/vXHqXupQuf7jPv9VgHGNXtOrVAw0SMpv7R24/tSMFeoixsi gDhzkWnaj6D+lQyPTJnmfvPhQQ53bU7wU/QF6qI7ouqnHpiaSpQ/+6OblsLZxntFdWoG IZeg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m19-20020a056402511300b004a0a76731c5si4510691edd.203.2023.01.25.07.06.46; Wed, 25 Jan 2023 07:07:25 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235516AbjAYOz7 (ORCPT + 99 others); Wed, 25 Jan 2023 09:55:59 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55754 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235892AbjAYOzq (ORCPT ); Wed, 25 Jan 2023 09:55:46 -0500 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 820F34ED0; Wed, 25 Jan 2023 06:55:41 -0800 (PST) Received: from localhost (127.0.0.1) (HELO v370.home.net.pl) by /usr/run/smtp (/usr/run/postfix/private/idea_relay_lmtp) via UNIX with SMTP (IdeaSmtpServer 5.1.0) id b6f9cb71624b5631; Wed, 25 Jan 2023 15:55:39 +0100 Received: from kreacher.localnet (unknown [213.134.163.149]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by v370.home.net.pl (Postfix) with ESMTPSA id 195B72201948; Wed, 25 Jan 2023 15:55:39 +0100 (CET) From: "Rafael J. Wysocki" To: Linux PM Cc: LKML , Linux ACPI , Zhang Rui , Srinivas Pandruvada , Daniel Lezcano Subject: [PATCH v1 1/3] thermal: intel: int340x: Rework updating trip points Date: Wed, 25 Jan 2023 15:52:25 +0100 Message-ID: <4481198.LvFx2qVVIh@kreacher> In-Reply-To: <5665899.DvuYhMxLoT@kreacher> References: <5665899.DvuYhMxLoT@kreacher> MIME-Version: 1.0 X-CLIENT-IP: 213.134.163.149 X-CLIENT-HOSTNAME: 213.134.163.149 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgedvhedruddvvddgjeduucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecujffqoffgrffnpdggtffipffknecuuegrihhlohhuthemucduhedtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufffkfgjfhgggfgtsehtufertddttdejnecuhfhrohhmpedftfgrfhgrvghlucflrdcuhgihshhotghkihdfuceorhhjfiesrhhjfiihshhotghkihdrnhgvtheqnecuggftrfgrthhtvghrnhepvdffueeitdfgvddtudegueejtdffteetgeefkeffvdeftddttdeuhfegfedvjefhnecukfhppedvudefrddufeegrdduieefrddugeelnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepvddufedrudefgedrudeifedrudegledphhgvlhhopehkrhgvrggthhgvrhdrlhhotggrlhhnvghtpdhmrghilhhfrhhomhepfdftrghfrggvlhculfdrucghhihsohgtkhhifdcuoehrjhifsehrjhifhihsohgtkhhirdhnvghtqedpnhgspghrtghpthhtohepiedprhgtphhtthhopehlihhnuhigqdhpmhesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopehlihhnuhigqdhkvghrnhgvlhesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopehlihhnuhigqdgrtghpihesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopehruhhirdiihhgrnhhgsehinhhtvghlrdgtohhmpdhrtghpthht ohepshhrihhnihhvrghsrdhprghnughruhhvrggurgeslhhinhhugidrihhnthgvlhdrtghomhdprhgtphhtthhopegurghnihgvlhdrlhgviigtrghnoheslhhinhgrrhhordhorhhg X-DCC--Metrics: v370.home.net.pl 1024; Body=6 Fuz1=6 Fuz2=6 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756007493000574037?= X-GMAIL-MSGID: =?utf-8?q?1756007493000574037?= From: Rafael J. Wysocki It is generally invalid to change the trip point indices after they have been exposed via sysfs. Moreover, the thermal objects in the ACPI namespace cannot go away and appear on the fly. In practice, the only thing that can happen when the INT3403_PERF_TRIP_POINT_CHANGED notification is sent by the platform firmware is a change of the return values of those thermal objects. For this reason, add a special function for updating the trip point temperatures after re-evaluating the respective ACPI thermal objects and change int3403_notify() to invoke it instead of int340x_thermal_read_trips() that would change the trip point indices on errors. Also remove the locking from the latter, because it is only called before registering the thermal zone and it cannot race with the zone's callbacks. Signed-off-by: Rafael J. Wysocki --- drivers/thermal/intel/int340x_thermal/int3403_thermal.c | 2 drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c | 51 +++++++++-- drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h | 2 3 files changed, 47 insertions(+), 8 deletions(-) Index: linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c =================================================================== --- linux-pm.orig/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c +++ linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c @@ -168,13 +168,11 @@ static int int340x_thermal_get_trip_conf return 0; } -int int340x_thermal_read_trips(struct int34x_thermal_zone *int34x_zone) +static int int340x_thermal_read_trips(struct int34x_thermal_zone *int34x_zone) { int trip_cnt = int34x_zone->aux_trip_nr; int i; - mutex_lock(&int34x_zone->trip_mutex); - int34x_zone->crt_trip_id = -1; if (!int340x_thermal_get_trip_config(int34x_zone->adev->handle, "_CRT", &int34x_zone->crt_temp)) @@ -202,11 +200,8 @@ int int340x_thermal_read_trips(struct in int34x_zone->act_trips[i].valid = true; } - mutex_unlock(&int34x_zone->trip_mutex); - return trip_cnt; } -EXPORT_SYMBOL_GPL(int340x_thermal_read_trips); static struct thermal_zone_params int340x_thermal_params = { .governor_name = "user_space", @@ -309,6 +304,50 @@ void int340x_thermal_zone_remove(struct } EXPORT_SYMBOL_GPL(int340x_thermal_zone_remove); +void int340x_thermal_update_trips(struct int34x_thermal_zone *int34x_zone) +{ + acpi_handle zone_handle = int34x_zone->adev->handle; + int i, err; + + mutex_lock(&int34x_zone->trip_mutex); + + if (int34x_zone->crt_trip_id > 0) { + err = int340x_thermal_get_trip_config(zone_handle, "_CRT", + &int34x_zone->crt_temp); + if (err) + int34x_zone->crt_temp = THERMAL_TEMP_INVALID; + } + + if (int34x_zone->hot_trip_id > 0) { + err = int340x_thermal_get_trip_config(zone_handle, "_HOT", + &int34x_zone->hot_temp); + if (err) + int34x_zone->hot_temp = THERMAL_TEMP_INVALID; + } + + if (int34x_zone->psv_trip_id > 0) { + err = int340x_thermal_get_trip_config(zone_handle, "_PSV", + &int34x_zone->psv_temp); + if (err) + int34x_zone->psv_temp = THERMAL_TEMP_INVALID; + } + + for (i = 0; i < INT340X_THERMAL_MAX_ACT_TRIP_COUNT; i++) { + char name[5] = { '_', 'A', 'C', '0' + i, '\0' }; + + if (!int34x_zone->act_trips[i].valid) + break; + + err = int340x_thermal_get_trip_config(zone_handle, name, + &int34x_zone->act_trips[i].temp); + if (err) + int34x_zone->act_trips[i].temp = THERMAL_TEMP_INVALID; + } + + mutex_unlock(&int34x_zone->trip_mutex); +} +EXPORT_SYMBOL_GPL(int340x_thermal_update_trips); + MODULE_AUTHOR("Aaron Lu "); MODULE_AUTHOR("Srinivas Pandruvada "); MODULE_DESCRIPTION("Intel INT340x common thermal zone handler"); Index: linux-pm/drivers/thermal/intel/int340x_thermal/int3403_thermal.c =================================================================== --- linux-pm.orig/drivers/thermal/intel/int340x_thermal/int3403_thermal.c +++ linux-pm/drivers/thermal/intel/int340x_thermal/int3403_thermal.c @@ -69,7 +69,7 @@ static void int3403_notify(acpi_handle h THERMAL_TRIP_VIOLATED); break; case INT3403_PERF_TRIP_POINT_CHANGED: - int340x_thermal_read_trips(obj->int340x_zone); + int340x_thermal_update_trips(obj->int340x_zone); int340x_thermal_zone_device_update(obj->int340x_zone, THERMAL_TRIP_CHANGED); break; Index: linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h =================================================================== --- linux-pm.orig/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h +++ linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h @@ -38,7 +38,7 @@ struct int34x_thermal_zone { struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *, int (*get_temp) (struct thermal_zone_device *, int *)); void int340x_thermal_zone_remove(struct int34x_thermal_zone *); -int int340x_thermal_read_trips(struct int34x_thermal_zone *int34x_zone); +void int340x_thermal_update_trips(struct int34x_thermal_zone *int34x_zone); static inline void int340x_thermal_zone_set_priv_data( struct int34x_thermal_zone *tzone, void *priv_data) From patchwork Wed Jan 25 14:54:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 48180 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp322079wrn; Wed, 25 Jan 2023 07:06:33 -0800 (PST) X-Google-Smtp-Source: AMrXdXvjE75aKO7ZAoTd2FWULST5wppOXdQ2t5zEddht/APYcYHAHH2AO/OtYS9J2ElOhqAm0DMG X-Received: by 2002:a17:906:c9c2:b0:86e:a8d8:19b7 with SMTP id hk2-20020a170906c9c200b0086ea8d819b7mr33156246ejb.71.1674659192913; Wed, 25 Jan 2023 07:06:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674659192; cv=none; d=google.com; s=arc-20160816; b=NKUllCoIZFTTMF2FSaZBwREQgcNZzza/25Ls2luDyDitoajkxt/OIvnK7rflFXeG1+ jc6R2a6CDTOM7qsg8TQR4kwIjePx+S02qC8O0c6qm6OJhn0WFj5goE7eQzmNRxy0MWj/ aZLA4CDniSVwzbe+qLycOwGZsCZ+H4LRI3+LZDsX3kDB4PNR2oTNUqUulsHrsl/z8AUe wlnVTz7HS+6P+dc6V1LRuLh4RxBXdzaRxZ/rElcmma3B9qfuIdh+6eerBFPD/Wf/r4TA 0HAKpmb/NklU53NgyZmc0y6mmJtu95ZQOu0azu2c5Kh/uQjt2Q0WnesdyIbvEqt2DsPp F7Pg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=iJnynHEoLsy/DTsaSzexHSkNfRqtbHLjMfRQv4ONSi4=; b=vkzLZ9Iqc2zrcBySEv/Trxk8A21yvaKfX6VDJDDrM2mwzRNZke/XTvNDeHNzfKuNqu Rh7yZE13nR+1Ecs6albzYKeXbdhOdxzxMCZEs4g+UQchWOyfbx3Ny7RlG7oR9+PtGlZ4 th0Xg0RssMk4Z9V4n+qOvg5Xr88MzImb05Jb5suq63fbozu3MxHm9uOkEaYkJIw+o7+Y 6ke/6SJ/9yUXkvDEOm3/NWf+1Id87/e4kXTQvQItUW7NW1lW1K39iNsDvJFP1uGtevhr raasqr7pu2yfTz5PypcE5+ja+Z840tF3rnIs7exxTWqvT1rUsyXU4zdiSNzMG0Wi7weX CRkA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id gh13-20020a1709073c0d00b007826cb6f57csi5975671ejc.407.2023.01.25.07.06.06; Wed, 25 Jan 2023 07:06:32 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235918AbjAYOzr (ORCPT + 99 others); Wed, 25 Jan 2023 09:55:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55750 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235335AbjAYOzp (ORCPT ); Wed, 25 Jan 2023 09:55:45 -0500 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E4DA74EC6; Wed, 25 Jan 2023 06:55:39 -0800 (PST) Received: from localhost (127.0.0.1) (HELO v370.home.net.pl) by /usr/run/smtp (/usr/run/postfix/private/idea_relay_lmtp) via UNIX with SMTP (IdeaSmtpServer 5.1.0) id 7fbb2e3704d35487; Wed, 25 Jan 2023 15:55:38 +0100 Received: from kreacher.localnet (unknown [213.134.163.149]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by v370.home.net.pl (Postfix) with ESMTPSA id 994952201948; Wed, 25 Jan 2023 15:55:37 +0100 (CET) From: "Rafael J. Wysocki" To: Linux PM Cc: LKML , Linux ACPI , Zhang Rui , Srinivas Pandruvada , Daniel Lezcano Subject: [PATCH v1 2/3] thermal: intel: int340x: Use zone lock for synchronization Date: Wed, 25 Jan 2023 15:54:03 +0100 Message-ID: <4798426.GXAFRqVoOG@kreacher> In-Reply-To: <5665899.DvuYhMxLoT@kreacher> References: <5665899.DvuYhMxLoT@kreacher> MIME-Version: 1.0 X-CLIENT-IP: 213.134.163.149 X-CLIENT-HOSTNAME: 213.134.163.149 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgedvhedruddvvddgjedtucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecujffqoffgrffnpdggtffipffknecuuegrihhlohhuthemucduhedtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufffkfgjfhgggfgtsehtufertddttdejnecuhfhrohhmpedftfgrfhgrvghlucflrdcuhgihshhotghkihdfuceorhhjfiesrhhjfiihshhotghkihdrnhgvtheqnecuggftrfgrthhtvghrnhepvdffueeitdfgvddtudegueejtdffteetgeefkeffvdeftddttdeuhfegfedvjefhnecukfhppedvudefrddufeegrdduieefrddugeelnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepvddufedrudefgedrudeifedrudegledphhgvlhhopehkrhgvrggthhgvrhdrlhhotggrlhhnvghtpdhmrghilhhfrhhomhepfdftrghfrggvlhculfdrucghhihsohgtkhhifdcuoehrjhifsehrjhifhihsohgtkhhirdhnvghtqedpnhgspghrtghpthhtohepiedprhgtphhtthhopehlihhnuhigqdhpmhesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopehlihhnuhigqdhkvghrnhgvlhesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopehlihhnuhigqdgrtghpihesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopehruhhirdiihhgrnhhgsehinhhtvghlrdgtohhmpdhrtghpthht ohepshhrihhnihhvrghsrdhprghnughruhhvrggurgeslhhinhhugidrihhnthgvlhdrtghomhdprhgtphhtthhopegurghnihgvlhdrlhgviigtrghnoheslhhinhgrrhhordhorhhg X-DCC--Metrics: v370.home.net.pl 1024; Body=6 Fuz1=6 Fuz2=6 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756007438216867692?= X-GMAIL-MSGID: =?utf-8?q?1756007438216867692?= From: Rafael J. Wysocki Because the ->get_trip_temp() and ->get_trip_type() thermal zone callbacks are only invoked from __thermal_zone_get_trip() which is always called by the thermal core under the zone lock, it is sufficient for int340x_thermal_update_trips() to acquire the zone lock for mutual exclusion with those callbacks. Accordingly, modify int340x_thermal_update_trips() to use the zone lock instead of the internal trip_mutex and drop the latter which is not necessary any more. Signed-off-by: Rafael J. Wysocki --- drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c | 28 +++-------- drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h | 1 2 files changed, 8 insertions(+), 21 deletions(-) Index: linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c =================================================================== --- linux-pm.orig/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c +++ linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c @@ -41,9 +41,7 @@ static int int340x_thermal_get_trip_temp int trip, int *temp) { struct int34x_thermal_zone *d = zone->devdata; - int i, ret = 0; - - mutex_lock(&d->trip_mutex); + int i; if (trip < d->aux_trip_nr) *temp = d->aux_trips[trip]; @@ -62,12 +60,10 @@ static int int340x_thermal_get_trip_temp } } if (i == INT340X_THERMAL_MAX_ACT_TRIP_COUNT) - ret = -EINVAL; + return -EINVAL; } - mutex_unlock(&d->trip_mutex); - - return ret; + return 0; } static int int340x_thermal_get_trip_type(struct thermal_zone_device *zone, @@ -75,9 +71,7 @@ static int int340x_thermal_get_trip_type enum thermal_trip_type *type) { struct int34x_thermal_zone *d = zone->devdata; - int i, ret = 0; - - mutex_lock(&d->trip_mutex); + int i; if (trip < d->aux_trip_nr) *type = THERMAL_TRIP_PASSIVE; @@ -96,12 +90,10 @@ static int int340x_thermal_get_trip_type } } if (i == INT340X_THERMAL_MAX_ACT_TRIP_COUNT) - ret = -EINVAL; + return -EINVAL; } - mutex_unlock(&d->trip_mutex); - - return ret; + return 0; } static int int340x_thermal_set_trip_temp(struct thermal_zone_device *zone, @@ -222,8 +214,6 @@ struct int34x_thermal_zone *int340x_ther if (!int34x_thermal_zone) return ERR_PTR(-ENOMEM); - mutex_init(&int34x_thermal_zone->trip_mutex); - int34x_thermal_zone->adev = adev; int34x_thermal_zone->ops = kmemdup(&int340x_thermal_zone_ops, @@ -286,7 +276,6 @@ err_thermal_zone: err_trip_alloc: kfree(int34x_thermal_zone->ops); err_ops_alloc: - mutex_destroy(&int34x_thermal_zone->trip_mutex); kfree(int34x_thermal_zone); return ERR_PTR(ret); } @@ -299,7 +288,6 @@ void int340x_thermal_zone_remove(struct acpi_lpat_free_conversion_table(int34x_thermal_zone->lpat_table); kfree(int34x_thermal_zone->aux_trips); kfree(int34x_thermal_zone->ops); - mutex_destroy(&int34x_thermal_zone->trip_mutex); kfree(int34x_thermal_zone); } EXPORT_SYMBOL_GPL(int340x_thermal_zone_remove); @@ -309,7 +297,7 @@ void int340x_thermal_update_trips(struct acpi_handle zone_handle = int34x_zone->adev->handle; int i, err; - mutex_lock(&int34x_zone->trip_mutex); + mutex_lock(&int34x_zone->zone->lock); if (int34x_zone->crt_trip_id > 0) { err = int340x_thermal_get_trip_config(zone_handle, "_CRT", @@ -344,7 +332,7 @@ void int340x_thermal_update_trips(struct int34x_zone->act_trips[i].temp = THERMAL_TEMP_INVALID; } - mutex_unlock(&int34x_zone->trip_mutex); + mutex_unlock(&int34x_zone->zone->lock); } EXPORT_SYMBOL_GPL(int340x_thermal_update_trips); Index: linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h =================================================================== --- linux-pm.orig/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h +++ linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h @@ -32,7 +32,6 @@ struct int34x_thermal_zone { struct thermal_zone_device_ops *ops; void *priv_data; struct acpi_lpat_conversion_table *lpat_table; - struct mutex trip_mutex; }; struct int34x_thermal_zone *int340x_thermal_zone_add(struct acpi_device *, From patchwork Wed Jan 25 14:55:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Rafael J. Wysocki" X-Patchwork-Id: 48182 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp323471wrn; Wed, 25 Jan 2023 07:08:50 -0800 (PST) X-Google-Smtp-Source: AK7set9nfSqxrt5iTiAf4QLTV3nAjFChUsmTyBVVcyaabQVQFkG9R/Tyun9a6KdgAeGcrYftJr4A X-Received: by 2002:a05:6402:4d1:b0:4a0:a7d8:500e with SMTP id n17-20020a05640204d100b004a0a7d8500emr3753080edw.20.1674659329970; Wed, 25 Jan 2023 07:08:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674659329; cv=none; d=google.com; s=arc-20160816; b=Ka1ohb9TdrCfd8AuN5AFYHCCvn88OuxhKyF3CzMh9FtazcAyhrRBkM+KWMbdbz5lbq 5TTgosMcSLjL2pmLP1F5WsoX2GDqrDttcdOM79zYZVHqpZVDaYRgFnnRpsqf54tzt21I irfvtqq3xnK+A9x7IvI0SXBLB9AMsMM6/dLH95ilp78qfIbegIC5A2ffg09zvGVLnkyK geiJyAl8jVZlalgaUdMwGkIfWrPVZ2yZyN2Mb2rxDFKlXpbYRKy/krWNlNERL87af/HO soir0xugJYDcOfNaVtmOikVwesEH5FbJebvucyEh1/114vpOHjTR2KIna+oVlj253qFs FEnQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=XX84KejF1SuOJdGRu10NB0+zAHsHL8xb5mh57zkrjMM=; b=0KYnWu4X1v3z6Z8FPmWyemcCT0ZWtHHWCmdj0cWGF1+z1+M7o5VAdjPRjtOJq/Obg8 j5Jda/y8dvp5BozgR1g1TbV+ZBmBXBYd67ytjO5EeEz69hosa6gTSb7t+QfSUq/yj+7k ea65qd7saNsBZ4/HSzMgFWn7IU41SOWqKg1N1oef7iU178YbduSgUfq18AzdXab1SYQX +bHtlvrGW9xJsh2n85/VG8Gwh9i60fYDKMCpgIv/CKDOunkfdRnUU+C8KSO3XVGoJZ0y dlJ+1ZumWNAf7KXs9h64A7cA8j7DSkKzEzRHbLHEABrp8enwp/V88G+QwPSgZsT5zDt8 oYow== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p23-20020a056402501700b0049e2b367106si7127465eda.500.2023.01.25.07.08.24; Wed, 25 Jan 2023 07:08:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235935AbjAYOzu (ORCPT + 99 others); Wed, 25 Jan 2023 09:55:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55748 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234833AbjAYOzp (ORCPT ); Wed, 25 Jan 2023 09:55:45 -0500 Received: from cloudserver094114.home.pl (cloudserver094114.home.pl [79.96.170.134]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 455C330FE; Wed, 25 Jan 2023 06:55:39 -0800 (PST) Received: from localhost (127.0.0.1) (HELO v370.home.net.pl) by /usr/run/smtp (/usr/run/postfix/private/idea_relay_lmtp) via UNIX with SMTP (IdeaSmtpServer 5.1.0) id a6cd8a2a436afc72; Wed, 25 Jan 2023 15:55:37 +0100 Received: from kreacher.localnet (unknown [213.134.163.149]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by v370.home.net.pl (Postfix) with ESMTPSA id D6B362201948; Wed, 25 Jan 2023 15:55:35 +0100 (CET) From: "Rafael J. Wysocki" To: Linux PM Cc: LKML , Linux ACPI , Zhang Rui , Srinivas Pandruvada , Daniel Lezcano Subject: [PATCH v1 3/3] thermal: intel: int340x: Use generic trip points table Date: Wed, 25 Jan 2023 15:55:24 +0100 Message-ID: <2155221.irdbgypaU6@kreacher> In-Reply-To: <5665899.DvuYhMxLoT@kreacher> References: <5665899.DvuYhMxLoT@kreacher> MIME-Version: 1.0 X-CLIENT-IP: 213.134.163.149 X-CLIENT-HOSTNAME: 213.134.163.149 X-VADE-SPAMSTATE: clean X-VADE-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgedvhedruddvvddgjedtucetufdoteggodetrfdotffvucfrrhhofhhilhgvmecujffqoffgrffnpdggtffipffknecuuegrihhlohhuthemucduhedtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpefhvfevufffkfgjfhgggfgtsehtufertddttdejnecuhfhrohhmpedftfgrfhgrvghlucflrdcuhgihshhotghkihdfuceorhhjfiesrhhjfiihshhotghkihdrnhgvtheqnecuggftrfgrthhtvghrnhepvdffueeitdfgvddtudegueejtdffteetgeefkeffvdeftddttdeuhfegfedvjefhnecukfhppedvudefrddufeegrdduieefrddugeelnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepvddufedrudefgedrudeifedrudegledphhgvlhhopehkrhgvrggthhgvrhdrlhhotggrlhhnvghtpdhmrghilhhfrhhomhepfdftrghfrggvlhculfdrucghhihsohgtkhhifdcuoehrjhifsehrjhifhihsohgtkhhirdhnvghtqedpnhgspghrtghpthhtohepiedprhgtphhtthhopehlihhnuhigqdhpmhesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopehlihhnuhigqdhkvghrnhgvlhesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopehlihhnuhigqdgrtghpihesvhhgvghrrdhkvghrnhgvlhdrohhrghdprhgtphhtthhopehruhhirdiihhgrnhhgsehinhhtvghlrdgtohhmpdhrtghpthht ohepshhrihhnihhvrghsrdhprghnughruhhvrggurgeslhhinhhugidrihhnthgvlhdrtghomhdprhgtphhtthhopegurghnihgvlhdrlhgviigtrghnoheslhhinhgrrhhordhorhhg X-DCC--Metrics: v370.home.net.pl 1024; Body=6 Fuz1=6 Fuz2=6 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS autolearn=ham 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756007515350751964?= X-GMAIL-MSGID: =?utf-8?q?1756007581243943043?= From: Rafael J. Wysocki Modify int340x_thermal_zone_add() to register the thermal zone along with a trip points table, which allows the trip-related zone callbacks to be dropped, because they are not needed any more. In order to consolidate the code, use ACPI trip library functions to populate generic trip points in int340x_thermal_read_trips() and to update them in int340x_thermal_update_trips(). Signed-off-by: Daniel Lezcano Co-developed-by: Daniel Lezcano Signed-off-by: Rafael J. Wysocki --- drivers/thermal/intel/int340x_thermal/Kconfig | 1 drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c | 265 +++-------- drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h | 10 3 files changed, 90 insertions(+), 186 deletions(-) Index: linux-pm/drivers/thermal/intel/int340x_thermal/Kconfig =================================================================== --- linux-pm.orig/drivers/thermal/intel/int340x_thermal/Kconfig +++ linux-pm/drivers/thermal/intel/int340x_thermal/Kconfig @@ -9,6 +9,7 @@ config INT340X_THERMAL select THERMAL_GOV_USER_SPACE select ACPI_THERMAL_REL select ACPI_FAN + select THERMAL_ACPI select INTEL_SOC_DTS_IOSF_CORE select INTEL_TCC select PROC_THERMAL_MMIO_RAPL if POWERCAP Index: linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c =================================================================== --- linux-pm.orig/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c +++ linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.c @@ -37,65 +37,6 @@ static int int340x_thermal_get_zone_temp return 0; } -static int int340x_thermal_get_trip_temp(struct thermal_zone_device *zone, - int trip, int *temp) -{ - struct int34x_thermal_zone *d = zone->devdata; - int i; - - if (trip < d->aux_trip_nr) - *temp = d->aux_trips[trip]; - else if (trip == d->crt_trip_id) - *temp = d->crt_temp; - else if (trip == d->psv_trip_id) - *temp = d->psv_temp; - else if (trip == d->hot_trip_id) - *temp = d->hot_temp; - else { - for (i = 0; i < INT340X_THERMAL_MAX_ACT_TRIP_COUNT; i++) { - if (d->act_trips[i].valid && - d->act_trips[i].id == trip) { - *temp = d->act_trips[i].temp; - break; - } - } - if (i == INT340X_THERMAL_MAX_ACT_TRIP_COUNT) - return -EINVAL; - } - - return 0; -} - -static int int340x_thermal_get_trip_type(struct thermal_zone_device *zone, - int trip, - enum thermal_trip_type *type) -{ - struct int34x_thermal_zone *d = zone->devdata; - int i; - - if (trip < d->aux_trip_nr) - *type = THERMAL_TRIP_PASSIVE; - else if (trip == d->crt_trip_id) - *type = THERMAL_TRIP_CRITICAL; - else if (trip == d->hot_trip_id) - *type = THERMAL_TRIP_HOT; - else if (trip == d->psv_trip_id) - *type = THERMAL_TRIP_PASSIVE; - else { - for (i = 0; i < INT340X_THERMAL_MAX_ACT_TRIP_COUNT; i++) { - if (d->act_trips[i].valid && - d->act_trips[i].id == trip) { - *type = THERMAL_TRIP_ACTIVE; - break; - } - } - if (i == INT340X_THERMAL_MAX_ACT_TRIP_COUNT) - return -EINVAL; - } - - return 0; -} - static int int340x_thermal_set_trip_temp(struct thermal_zone_device *zone, int trip, int temp) { @@ -109,25 +50,6 @@ static int int340x_thermal_set_trip_temp if (ACPI_FAILURE(status)) return -EIO; - d->aux_trips[trip] = temp; - - return 0; -} - - -static int int340x_thermal_get_trip_hyst(struct thermal_zone_device *zone, - int trip, int *temp) -{ - struct int34x_thermal_zone *d = zone->devdata; - acpi_status status; - unsigned long long hyst; - - status = acpi_evaluate_integer(d->adev->handle, "GTSH", NULL, &hyst); - if (ACPI_FAILURE(status)) - *temp = 0; - else - *temp = hyst * 100; - return 0; } @@ -138,58 +60,35 @@ static void int340x_thermal_critical(str static struct thermal_zone_device_ops int340x_thermal_zone_ops = { .get_temp = int340x_thermal_get_zone_temp, - .get_trip_temp = int340x_thermal_get_trip_temp, - .get_trip_type = int340x_thermal_get_trip_type, .set_trip_temp = int340x_thermal_set_trip_temp, - .get_trip_hyst = int340x_thermal_get_trip_hyst, .critical = int340x_thermal_critical, }; -static int int340x_thermal_get_trip_config(acpi_handle handle, char *name, - int *temp) -{ - unsigned long long r; - acpi_status status; - - status = acpi_evaluate_integer(handle, name, NULL, &r); - if (ACPI_FAILURE(status)) - return -EIO; - - *temp = deci_kelvin_to_millicelsius(r); - - return 0; -} - -static int int340x_thermal_read_trips(struct int34x_thermal_zone *int34x_zone) -{ - int trip_cnt = int34x_zone->aux_trip_nr; - int i; - - int34x_zone->crt_trip_id = -1; - if (!int340x_thermal_get_trip_config(int34x_zone->adev->handle, "_CRT", - &int34x_zone->crt_temp)) - int34x_zone->crt_trip_id = trip_cnt++; - - int34x_zone->hot_trip_id = -1; - if (!int340x_thermal_get_trip_config(int34x_zone->adev->handle, "_HOT", - &int34x_zone->hot_temp)) - int34x_zone->hot_trip_id = trip_cnt++; - - int34x_zone->psv_trip_id = -1; - if (!int340x_thermal_get_trip_config(int34x_zone->adev->handle, "_PSV", - &int34x_zone->psv_temp)) - int34x_zone->psv_trip_id = trip_cnt++; +static int int340x_thermal_read_trips(struct acpi_device *zone_adev, + struct thermal_trip *zone_trips, + int trip_cnt) +{ + int i, ret; + + ret = thermal_acpi_trip_critical(zone_adev, &zone_trips[trip_cnt]); + if (!ret) + trip_cnt++; + + ret = thermal_acpi_trip_hot(zone_adev, &zone_trips[trip_cnt]); + if (!ret) + trip_cnt++; + + ret = thermal_acpi_trip_passive(zone_adev, &zone_trips[trip_cnt]); + if (!ret) + trip_cnt++; for (i = 0; i < INT340X_THERMAL_MAX_ACT_TRIP_COUNT; i++) { - char name[5] = { '_', 'A', 'C', '0' + i, '\0' }; - if (int340x_thermal_get_trip_config(int34x_zone->adev->handle, - name, - &int34x_zone->act_trips[i].temp)) + ret = thermal_acpi_trip_active(zone_adev, i, &zone_trips[trip_cnt]); + if (ret) break; - int34x_zone->act_trips[i].id = trip_cnt++; - int34x_zone->act_trips[i].valid = true; + trip_cnt++; } return trip_cnt; @@ -204,10 +103,12 @@ struct int34x_thermal_zone *int340x_ther int (*get_temp) (struct thermal_zone_device *, int *)) { struct int34x_thermal_zone *int34x_thermal_zone; - acpi_status status; - unsigned long long trip_cnt; + struct thermal_trip *zone_trips; + unsigned long long trip_cnt = 0; + unsigned long long hyst; int trip_mask = 0; - int ret; + acpi_status status; + int i, ret; int34x_thermal_zone = kzalloc(sizeof(*int34x_thermal_zone), GFP_KERNEL); @@ -227,33 +128,42 @@ struct int34x_thermal_zone *int340x_ther int34x_thermal_zone->ops->get_temp = get_temp; status = acpi_evaluate_integer(adev->handle, "PATC", NULL, &trip_cnt); - if (ACPI_FAILURE(status)) - trip_cnt = 0; - else { - int i; - - int34x_thermal_zone->aux_trips = - kcalloc(trip_cnt, - sizeof(*int34x_thermal_zone->aux_trips), - GFP_KERNEL); - if (!int34x_thermal_zone->aux_trips) { - ret = -ENOMEM; - goto err_trip_alloc; - } - trip_mask = BIT(trip_cnt) - 1; + if (!ACPI_FAILURE(status)) { int34x_thermal_zone->aux_trip_nr = trip_cnt; - for (i = 0; i < trip_cnt; ++i) - int34x_thermal_zone->aux_trips[i] = THERMAL_TEMP_INVALID; + trip_mask = BIT(trip_cnt) - 1; + } + + zone_trips = kzalloc(sizeof(*zone_trips) * (trip_cnt + INT340X_THERMAL_MAX_TRIP_COUNT), + GFP_KERNEL); + if (!zone_trips) { + ret = -ENOMEM; + goto err_trips_alloc; + } + + for (i = 0; i < trip_cnt; i++) { + zone_trips[i].type = THERMAL_TRIP_PASSIVE; + zone_trips[i].temperature = THERMAL_TEMP_INVALID; } - trip_cnt = int340x_thermal_read_trips(int34x_thermal_zone); + trip_cnt = int340x_thermal_read_trips(adev, zone_trips, trip_cnt); + + status = acpi_evaluate_integer(adev->handle, "GTSH", NULL, &hyst); + if (ACPI_SUCCESS(status)) + hyst *= 100; + else + hyst = 0; + + for (i = 0; i < trip_cnt; ++i) + zone_trips[i].hysteresis = hyst; + + int34x_thermal_zone->trips = zone_trips; int34x_thermal_zone->lpat_table = acpi_lpat_get_conversion_table( adev->handle); - int34x_thermal_zone->zone = thermal_zone_device_register( + int34x_thermal_zone->zone = thermal_zone_device_register_with_trips( acpi_device_bid(adev), - trip_cnt, + zone_trips, trip_cnt, trip_mask, int34x_thermal_zone, int34x_thermal_zone->ops, &int340x_thermal_params, @@ -271,9 +181,9 @@ struct int34x_thermal_zone *int340x_ther err_enable: thermal_zone_device_unregister(int34x_thermal_zone->zone); err_thermal_zone: + kfree(int34x_thermal_zone->trips); acpi_lpat_free_conversion_table(int34x_thermal_zone->lpat_table); - kfree(int34x_thermal_zone->aux_trips); -err_trip_alloc: +err_trips_alloc: kfree(int34x_thermal_zone->ops); err_ops_alloc: kfree(int34x_thermal_zone); @@ -286,7 +196,7 @@ void int340x_thermal_zone_remove(struct { thermal_zone_device_unregister(int34x_thermal_zone->zone); acpi_lpat_free_conversion_table(int34x_thermal_zone->lpat_table); - kfree(int34x_thermal_zone->aux_trips); + kfree(int34x_thermal_zone->trips); kfree(int34x_thermal_zone->ops); kfree(int34x_thermal_zone); } @@ -294,42 +204,41 @@ EXPORT_SYMBOL_GPL(int340x_thermal_zone_r void int340x_thermal_update_trips(struct int34x_thermal_zone *int34x_zone) { - acpi_handle zone_handle = int34x_zone->adev->handle; - int i, err; + struct acpi_device *zone_adev = int34x_zone->adev; + struct thermal_trip *zone_trips = int34x_zone->trips; + int trip_cnt = int34x_zone->zone->num_trips; + int act_trip_nr = 0; + int i; mutex_lock(&int34x_zone->zone->lock); - if (int34x_zone->crt_trip_id > 0) { - err = int340x_thermal_get_trip_config(zone_handle, "_CRT", - &int34x_zone->crt_temp); - if (err) - int34x_zone->crt_temp = THERMAL_TEMP_INVALID; - } - - if (int34x_zone->hot_trip_id > 0) { - err = int340x_thermal_get_trip_config(zone_handle, "_HOT", - &int34x_zone->hot_temp); - if (err) - int34x_zone->hot_temp = THERMAL_TEMP_INVALID; - } - - if (int34x_zone->psv_trip_id > 0) { - err = int340x_thermal_get_trip_config(zone_handle, "_PSV", - &int34x_zone->psv_temp); - if (err) - int34x_zone->psv_temp = THERMAL_TEMP_INVALID; - } - - for (i = 0; i < INT340X_THERMAL_MAX_ACT_TRIP_COUNT; i++) { - char name[5] = { '_', 'A', 'C', '0' + i, '\0' }; - - if (!int34x_zone->act_trips[i].valid) + for (i = int34x_zone->aux_trip_nr; i < trip_cnt; i++) { + struct thermal_trip trip; + int err; + + switch (zone_trips[i].type) { + case THERMAL_TRIP_CRITICAL: + err = thermal_acpi_trip_critical(zone_adev, &trip); break; - - err = int340x_thermal_get_trip_config(zone_handle, name, - &int34x_zone->act_trips[i].temp); - if (err) - int34x_zone->act_trips[i].temp = THERMAL_TEMP_INVALID; + case THERMAL_TRIP_HOT: + err = thermal_acpi_trip_hot(zone_adev, &trip); + break; + case THERMAL_TRIP_PASSIVE: + err = thermal_acpi_trip_passive(zone_adev, &trip); + break; + case THERMAL_TRIP_ACTIVE: + err = thermal_acpi_trip_active(zone_adev, act_trip_nr++, + &trip); + break; + default: + err = -ENODEV; + } + if (err) { + zone_trips[i].temperature = THERMAL_TEMP_INVALID; + continue; + } + + zone_trips[i].temperature = trip.temperature; } mutex_unlock(&int34x_zone->zone->lock); Index: linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h =================================================================== --- linux-pm.orig/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h +++ linux-pm/drivers/thermal/intel/int340x_thermal/int340x_thermal_zone.h @@ -10,6 +10,7 @@ #include #define INT340X_THERMAL_MAX_ACT_TRIP_COUNT 10 +#define INT340X_THERMAL_MAX_TRIP_COUNT INT340X_THERMAL_MAX_ACT_TRIP_COUNT + 3 struct active_trip { int temp; @@ -19,15 +20,8 @@ struct active_trip { struct int34x_thermal_zone { struct acpi_device *adev; - struct active_trip act_trips[INT340X_THERMAL_MAX_ACT_TRIP_COUNT]; - unsigned long *aux_trips; + struct thermal_trip *trips; int aux_trip_nr; - int psv_temp; - int psv_trip_id; - int crt_temp; - int crt_trip_id; - int hot_temp; - int hot_trip_id; struct thermal_zone_device *zone; struct thermal_zone_device_ops *ops; void *priv_data;