From patchwork Wed May 25 03:27:24 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Caesar Wang X-Patchwork-Id: 9134607 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id B9E396075E for ; Wed, 25 May 2016 03:27:54 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id ABC5E28195 for ; Wed, 25 May 2016 03:27:54 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A02B12822B; Wed, 25 May 2016 03:27:54 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,FREEMAIL_FROM,RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 04A2A28195 for ; Wed, 25 May 2016 03:27:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752168AbcEYD1g (ORCPT ); Tue, 24 May 2016 23:27:36 -0400 Received: from mail-pa0-f68.google.com ([209.85.220.68]:35891 "EHLO mail-pa0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751969AbcEYD1f (ORCPT ); Tue, 24 May 2016 23:27:35 -0400 Received: by mail-pa0-f68.google.com with SMTP id fg1so3824389pad.3; Tue, 24 May 2016 20:27:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-transfer-encoding; bh=u4d4iTgkZaPFcVyaH/UvDIKcKqnMoKRk5zCjApRhifk=; b=h7jKnfHjHhzgrFtGgdnmllGYjcnDRKhbdG5Nlz+8q3Qxg31FXt63GKzcvpmP0P0hS7 9BWmFUp3ugXUG8hngA8wGHzva/y7GQ9run3wsbFbxmxfB8zOb+g2/YBH8Obx7JVTlaim +1qnRYZKpJ2m1Inn/8vtY81Ar0YXfdx2u+dsZhsRRVEMxZgSuWbSb6xue2R4Cx8pgXyY EPdcSyNd7kDmUsb8pH2pVvR8CCNVl+r4tNSunHqCD1m2UoRY8GCDmtmhGsAxhZa5i0Ds CJUtvAv/uelcq//7CHpHlrnch+0Kz60XzOMVl/od4saXrRBuWZ19+cEVVv/SjDk0GMaq H7bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to :cc:subject:references:in-reply-to:content-transfer-encoding; bh=u4d4iTgkZaPFcVyaH/UvDIKcKqnMoKRk5zCjApRhifk=; b=F93yk023YIs5yoF4N4TCikdKeh2lkOmEnqEszipGR6lKFaXrfGmpubkQBf6qSjMV0c wwknx6156vdISwFvC2YjqZbvca1js8gXriPuBy5FZ0Xg2ykAZRhzzZTt2dRoYXO103hY /OJjZqe9a8/uW+CnLa8bVdOdLHK2gtp1eqtd7vDPfhhrQ6h1DaThFX53it4jHexduj4F giXxSxlHWPJUgLjmV/rvRl38lCFGL6r8WOYsXjDQlMu50Dzi2zUsTHqIXXZTE7WLMBIJ pGz6yOm800v3CzVrUr6wjjMFRDGkyktDQs1XZJ927fWHM/YJFeU7zrFAwHBpkNpORVoU UnnQ== X-Gm-Message-State: ALyK8tL19CYbZEZ8xoIy4LiMud9FS5yL1yIx+tGbsKdetTQrvJUTXwmgbeHpUcXFBhRKVg== X-Received: by 10.66.237.35 with SMTP id uz3mr2284929pac.145.1464146854463; Tue, 24 May 2016 20:27:34 -0700 (PDT) Received: from [172.16.22.195] ([103.29.142.67]) by smtp.gmail.com with ESMTPSA id qm10sm8415847pac.33.2016.05.24.20.27.28 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 24 May 2016 20:27:33 -0700 (PDT) Message-ID: <57451B9C.7070705@gmail.com> Date: Wed, 25 May 2016 11:27:24 +0800 From: Caesar Wang User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: Javi Merino CC: Caesar Wang , huangtao@rock-chips.com, Jonathan Corbet , Ni Wade , Durgadoss R , Heiko Stuebner , linux-pm@vger.kernel.org, Sascha Hauer , dmitry.torokhov@gmail.com, linux-doc@vger.kernel.org, dianders@chromium.org, linux-kernel@vger.kernel.org, edubezval@gmail.com, linux-rockchip@lists.infradead.org, Laxman Dewangan , smbarber@google.com, Leo Yan , cf@rock-chips.com, briannorris@google.com, Zhang Rui , Andy Champ Subject: Re: [PATCH v2 1/5] thermal: Add support for hardware-tracked trip points References: <1462268013-14992-1-git-send-email-wxt@rock-chips.com> <1462268013-14992-2-git-send-email-wxt@rock-chips.com> <20160524125741.GA8979@e104805> In-Reply-To: <20160524125741.GA8979@e104805> Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Hi Javi, Thanks your reviewing. On 2016年05月24日 20:57, Javi Merino wrote: > On Tue, May 03, 2016 at 05:33:29PM +0800, Caesar Wang wrote: >> From: Sascha Hauer >> >> This adds support for hardware-tracked trip points to the device tree >> thermal sensor framework. >> >> The framework supports an arbitrary number of trip points. Whenever >> the current temperature is updated, the trip points immediately >> below and above the current temperature are found. A .set_trips >> callback is then called with the temperatures. If there is no trip >> point above or below the current temperature, the passed trip >> temperature will be -INT_MAX or INT_MAX respectively. In this callback, >> the driver should program the hardware such that it is notified >> when either of these trip points are triggered. When a trip point >> is triggered, the driver should call `thermal_zone_device_update' >> for the respective thermal zone. This will cause the trip points >> to be updated again. >> >> If .set_trips is not implemented, the framework behaves as before. >> >> This patch is based on an earlier version from Mikko Perttunen >> >> >> Signed-off-by: Sascha Hauer >> Signed-off-by: Caesar Wang >> Cc: Zhang Rui >> Cc: Eduardo Valentin >> Cc: linux-pm@vger.kernel.org >> >> --- >> >> Changes in v2: >> - update the sysfs-api.txt for set_trips >> >> Documentation/thermal/sysfs-api.txt | 7 +++++ >> drivers/thermal/thermal_core.c | 52 +++++++++++++++++++++++++++++++++++++ >> include/linux/thermal.h | 3 +++ >> 3 files changed, 62 insertions(+) >> + /* >> + * Set a temperature window. When this window is left the driver >> + * must inform the thermal core via thermal_zone_device_update. >> + */ >> + ret = tz->ops->set_trips(tz, low, high); >> + if (ret) >> + dev_err(&tz->device, "Failed to set trips: %d\n", ret); > This function can be called at the same time from multiple places so > it should be reentrant. I think you should call mutex_lock(tz->lock) > before "if (tz->prev_low_trip == low && ..." and unlock it here. Sound reasonable, fixes it in next version. >> +} >> + >> static void update_temperature(struct thermal_zone_device *tz) >> { >> int temp, ret; >> @@ -569,6 +614,8 @@ void thermal_zone_device_update(struct thermal_zone_device *tz) >> >> update_temperature(tz); >> >> + thermal_zone_set_trips(tz); >> + >> for (count = 0; count < tz->trips; count++) >> handle_thermal_trip(tz, count); >> } >> @@ -754,6 +801,9 @@ trip_point_hyst_store(struct device *dev, struct device_attribute *attr, >> */ >> ret = tz->ops->set_trip_hyst(tz, trip, temperature); >> >> + if (!ret) >> + thermal_zone_set_trips(tz); >> + > You should add a similar call to thermal_zone_set_trips() in trip_point_temp_store() No, this patch has been done. if you see the linux next kernel. 72f3ada UPSTREAM: thermal: trip_point_temp_store() calls thermal_zone_device_update() So the "thermal_zone_set_trips(tz)" have been set in thermal_zone_device_update. >> return ret ? ret : count; >> } >> >> @@ -1843,6 +1893,8 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type, >> tz->trips = trips; >> tz->passive_delay = passive_delay; >> tz->polling_delay = polling_delay; >> + tz->prev_low_trip = INT_MAX; >> + tz->prev_high_trip = -INT_MAX; >> /* A new thermal zone needs to be updated anyway. */ >> atomic_set(&tz->need_update, 1); >> >> diff --git a/include/linux/thermal.h b/include/linux/thermal.h >> index e45abe7..e258359 100644 >> --- a/include/linux/thermal.h >> +++ b/include/linux/thermal.h >> @@ -98,6 +98,7 @@ struct thermal_zone_device_ops { >> int (*unbind) (struct thermal_zone_device *, >> struct thermal_cooling_device *); >> int (*get_temp) (struct thermal_zone_device *, int *); >> + int (*set_trips) (struct thermal_zone_device *, int, int); >> int (*get_mode) (struct thermal_zone_device *, >> enum thermal_device_mode *); >> int (*set_mode) (struct thermal_zone_device *, >> @@ -199,6 +200,8 @@ struct thermal_zone_device { >> int last_temperature; >> int emul_temperature; >> int passive; >> + int prev_low_trip; >> + int prev_high_trip; > Please document these fields in the kerneldoc comment before struct > thermal_zone_device. Okay, done. Thanks! - Caesar >> unsigned int forced_passive; >> atomic_t need_update; >> struct thermal_zone_device_ops *ops; > Cheers, > Javi > > _______________________________________________ > Linux-rockchip mailing list > Linux-rockchip@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-rockchip --- To unsubscribe from this list: send the line "unsubscribe linux-pm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c @@ -733,8 +733,12 @@ trip_point_temp_store(struct device *dev, struct device_attribute *attr, return -EINVAL; ret = tz->ops->set_trip_temp(tz, trip, temperature); + if (ret) + return ret; - return ret ? ret : count; + thermal_zone_device_update(tz); + + return count; }