From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED, USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 39E22C433DF for ; Tue, 7 Jul 2020 03:08:07 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0806320663 for ; Tue, 7 Jul 2020 03:08:07 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="uJaMyt9+"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="LkwLLfSi" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0806320663 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Date:To:From: Subject:Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=lk/3YN/mB6oRYvfcp58IR9qat0xsMs2dABpa+5Uet7s=; b=uJaMyt9+YB62lAPsU26dYcNCL yWpIBC0Br5w/FoIO/eGfenPeDq0LRLLq5L4FdKjhHgcuJ3w/kNRi55O8UqEzKxmgtCMpmfRJhRmIN DXJmKyc603w9ndAlerVnoxwzWrF0Kcdzm8NFh6bxireH/NeJYpFfToqXsNSdPZE35PQ//TBXcDZoV utJTtik/0iFDDdtbmZv/BoLMyBf4SVzKsfs5zzAIcRSaZBXDUafBfzxL/gYf5gnNYVS3ZqWvNCRpq Z0RAPHf4GfB0vFvjgB8HFFX02WLu/3o0ANTD2xgtK8WOSrQ8NHQHZZWkdO/3ywTA1VHyOiaw0PgqH UrA/7APdA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jsdxc-0003SA-Ln; Tue, 07 Jul 2020 03:07:56 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jsdxY-0003RH-3J; Tue, 07 Jul 2020 03:07:53 +0000 X-UUID: eb1850ec95904eb09336345ed42228ed-20200706 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=T+ZuskSCtDAA8wvmKSdUy+6kIp3oOV+tNxuPtAN8RIA=; b=LkwLLfSif7S916Snxc0RHUvNY3tZB1YmzBpmcdLZnU0ScfDngkYuOWMxUEZBT/q2SbNzfXbDw8VJYqzo04rqkheH4/Eao9xUTVn8aG8ydIx1dRRsSRRFlgFFQFbAprNvNPlrP7294gxLTa9fYGCakv32lx2HlPOi9O9bEqm/2ls=; X-UUID: eb1850ec95904eb09336345ed42228ed-20200706 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 951755377; Mon, 06 Jul 2020 19:07:37 -0800 Received: from MTKMBS07N2.mediatek.inc (172.21.101.141) by MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 6 Jul 2020 20:07:31 -0700 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 7 Jul 2020 11:07:30 +0800 Received: from [172.21.84.99] (172.21.84.99) by MTKCAS06.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Tue, 7 Jul 2020 11:07:25 +0800 Message-ID: <1594091245.20216.3.camel@mtksdccf07> Subject: Re: [v4, 6/7] thermal: mediatek: add another get_temp ops for thermal sensors From: Michael Kao To: Daniel Lezcano Date: Tue, 7 Jul 2020 11:07:25 +0800 In-Reply-To: References: <20200323121537.22697-1-michael.kao@mediatek.com> <20200323121537.22697-7-michael.kao@mediatek.com> X-Mailer: Evolution 3.2.3-0ubuntu6 MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200706_230752_293217_FF702571 X-CRM114-Status: GOOD ( 26.58 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , devicetree@vger.kernel.org, srv_heupstream@mediatek.com, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Eduardo Valentin , Rob Herring , linux-mediatek@lists.infradead.org, hsinyi@chromium.org, Matthias Brugger , Zhang Rui , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org On Fri, 2020-05-22 at 17:32 +0200, Daniel Lezcano wrote: > On 23/03/2020 13:15, Michael Kao wrote: > > Provide thermal zone to read thermal sensor > > in the SoC. We can read all the thermal sensors > > value in the SoC by the node /sys/class/thermal/ > > > > In mtk_thermal_bank_temperature, return -EAGAIN instead of -EACCESS > > on the first read of sensor that often are bogus values. > > This can avoid following warning on boot: > > > > thermal thermal_zone6: failed to read out thermal zone (-13) > > What the source problem of the sensor returning bogus values? > The thermal controller will depend on the AUXADC module to read raw data from sensor. Sometimes it will report wrong value because the AUXADC not ready or other issue. The thermal driver should add the judgement to prevent wrong temperature value to cause system immediately shut down. > > > Signed-off-by: Michael Kao > > Signed-off-by: Hsin-Yi Wang > > --- > > drivers/thermal/mtk_thermal.c | 74 +++++++++++++++++++++++++++++++---- > > 1 file changed, 67 insertions(+), 7 deletions(-) > > > > diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c > > index 6b7ef1993d7e..9eaca432920e 100644 > > --- a/drivers/thermal/mtk_thermal.c > > +++ b/drivers/thermal/mtk_thermal.c > > @@ -225,6 +225,11 @@ enum { > > > > struct mtk_thermal; > > > > +struct mtk_thermal_zone { > > + struct mtk_thermal *mt; > > + int id; > > +}; > > + > > struct thermal_bank_cfg { > > unsigned int num_sensors; > > const int *sensors; > > @@ -607,7 +612,7 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank) > > * not immediately shut down. > > */ > > if (temp > 200000) > > - temp = 0; > > + temp = -EAGAIN; > > > > if (temp > max) > > max = temp; > > @@ -618,7 +623,8 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank) > > > > static int mtk_read_temp(void *data, int *temperature) > > { > > - struct mtk_thermal *mt = data; > > + struct mtk_thermal_zone *tz = data; > > + struct mtk_thermal *mt = tz->mt; > > int i; > > int tempmax = INT_MIN; > > > > @@ -637,10 +643,44 @@ static int mtk_read_temp(void *data, int *temperature) > > return 0; > > } > > > > +static int mtk_read_sensor_temp(void *data, int *temperature) > > +{ > > + struct mtk_thermal_zone *tz = data; > > + struct mtk_thermal *mt = tz->mt; > > + const struct mtk_thermal_data *conf = mt->conf; > > + int id = tz->id - 1; > > + int temp = INT_MIN; > > + u32 raw; > > + > > + if (id < 0) > > + return -EACCES; > > + > > + raw = readl(mt->thermal_base + conf->msr[id]); > > + > > + temp = raw_to_mcelsius(mt, id, raw); > > + > > + /* > > + * The first read of a sensor often contains very high bogus > > + * temperature value. Filter these out so that the system does > > + * not immediately shut down. > > + */ > > + > > + if (temp > 200000) > > + return -EAGAIN; > > + > > + *temperature = temp; > > + > > + return 0; > > +} > > + > > static const struct thermal_zone_of_device_ops mtk_thermal_ops = { > > .get_temp = mtk_read_temp, > > }; > > > > +static const struct thermal_zone_of_device_ops mtk_thermal_sensor_ops = { > > + .get_temp = mtk_read_sensor_temp, > > +}; > > + > > static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num, > > u32 apmixed_phys_base, u32 auxadc_phys_base, > > int ctrl_id) > > @@ -873,6 +913,7 @@ static int mtk_thermal_probe(struct platform_device *pdev) > > struct resource *res; > > u64 auxadc_phys_base, apmixed_phys_base; > > struct thermal_zone_device *tzdev; > > + struct mtk_thermal_zone *tz; > > > > mt = devm_kzalloc(&pdev->dev, sizeof(*mt), GFP_KERNEL); > > if (!mt) > > @@ -954,11 +995,30 @@ static int mtk_thermal_probe(struct platform_device *pdev) > > > > platform_set_drvdata(pdev, mt); > > > > - tzdev = devm_thermal_zone_of_sensor_register(&pdev->dev, 0, mt, > > - &mtk_thermal_ops); > > - if (IS_ERR(tzdev)) { > > - ret = PTR_ERR(tzdev); > > - goto err_disable_clk_peri_therm; > > + for (i = 0; i < mt->conf->num_sensors + 1; i++) { > > + tz = kmalloc(sizeof(*tz), GFP_KERNEL); > > + if (!tz) > > + return -ENOMEM; > > + > > + tz->mt = mt; > > + tz->id = i; > > + > > + tzdev = devm_thermal_zone_of_sensor_register(&pdev->dev, i, > > + tz, (i == 0) ? > > + &mtk_thermal_ops : &mtk_thermal_sensor_ops); > > + > > + if (IS_ERR(tzdev)) { > > + if (PTR_ERR(tzdev) == -ENODEV) { > > + dev_warn(&pdev->dev, > > + "sensor %d not registered in thermal zone in dt\n", > > + i); > > + continue; > > + } > > + if (PTR_ERR(tzdev) == -EACCES) { > > + ret = PTR_ERR(tzdev); > > + goto err_disable_clk_peri_therm; > > + } > > + } > > } > > > > return 0; > > > > _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED, USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6C032C433E0 for ; Tue, 7 Jul 2020 03:07:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4648A206E2 for ; Tue, 7 Jul 2020 03:07:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="LkwLLfSi" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727107AbgGGDHl (ORCPT ); Mon, 6 Jul 2020 23:07:41 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:17982 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726434AbgGGDHk (ORCPT ); Mon, 6 Jul 2020 23:07:40 -0400 X-UUID: f822552349a74e6e92034b424d467864-20200707 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=T+ZuskSCtDAA8wvmKSdUy+6kIp3oOV+tNxuPtAN8RIA=; b=LkwLLfSif7S916Snxc0RHUvNY3tZB1YmzBpmcdLZnU0ScfDngkYuOWMxUEZBT/q2SbNzfXbDw8VJYqzo04rqkheH4/Eao9xUTVn8aG8ydIx1dRRsSRRFlgFFQFbAprNvNPlrP7294gxLTa9fYGCakv32lx2HlPOi9O9bEqm/2ls=; X-UUID: f822552349a74e6e92034b424d467864-20200707 Received: from mtkcas10.mediatek.inc [(172.21.101.39)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1077106017; Tue, 07 Jul 2020 11:07:33 +0800 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 7 Jul 2020 11:07:30 +0800 Received: from [172.21.84.99] (172.21.84.99) by MTKCAS06.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Tue, 7 Jul 2020 11:07:25 +0800 Message-ID: <1594091245.20216.3.camel@mtksdccf07> Subject: Re: [v4, 6/7] thermal: mediatek: add another get_temp ops for thermal sensors From: Michael Kao To: Daniel Lezcano CC: Matthias Brugger , Zhang Rui , Eduardo Valentin , Rob Herring , Mark Rutland , , , , , , , Date: Tue, 7 Jul 2020 11:07:25 +0800 In-Reply-To: References: <20200323121537.22697-1-michael.kao@mediatek.com> <20200323121537.22697-7-michael.kao@mediatek.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.2.3-0ubuntu6 MIME-Version: 1.0 X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org T24gRnJpLCAyMDIwLTA1LTIyIGF0IDE3OjMyICswMjAwLCBEYW5pZWwgTGV6Y2FubyB3cm90ZToN Cj4gT24gMjMvMDMvMjAyMCAxMzoxNSwgTWljaGFlbCBLYW8gd3JvdGU6DQo+ID4gUHJvdmlkZSB0 aGVybWFsIHpvbmUgdG8gcmVhZCB0aGVybWFsIHNlbnNvcg0KPiA+IGluIHRoZSBTb0MuIFdlIGNh biByZWFkIGFsbCB0aGUgdGhlcm1hbCBzZW5zb3JzDQo+ID4gdmFsdWUgaW4gdGhlIFNvQyBieSB0 aGUgbm9kZSAvc3lzL2NsYXNzL3RoZXJtYWwvDQo+ID4gDQo+ID4gSW4gbXRrX3RoZXJtYWxfYmFu a190ZW1wZXJhdHVyZSwgcmV0dXJuIC1FQUdBSU4gaW5zdGVhZCBvZiAtRUFDQ0VTUw0KPiA+IG9u IHRoZSBmaXJzdCByZWFkIG9mIHNlbnNvciB0aGF0IG9mdGVuIGFyZSBib2d1cyB2YWx1ZXMuDQo+ ID4gVGhpcyBjYW4gYXZvaWQgZm9sbG93aW5nIHdhcm5pbmcgb24gYm9vdDoNCj4gPiANCj4gPiAg IHRoZXJtYWwgdGhlcm1hbF96b25lNjogZmFpbGVkIHRvIHJlYWQgb3V0IHRoZXJtYWwgem9uZSAo LTEzKQ0KPiANCj4gV2hhdCB0aGUgc291cmNlIHByb2JsZW0gb2YgdGhlIHNlbnNvciByZXR1cm5p bmcgYm9ndXMgdmFsdWVzPw0KDQo+IFRoZSB0aGVybWFsIGNvbnRyb2xsZXIgd2lsbCBkZXBlbmQg b24gdGhlIEFVWEFEQyBtb2R1bGUgdG8gcmVhZCByYXcgZGF0YSBmcm9tIHNlbnNvci4NClNvbWV0 aW1lcyBpdCB3aWxsIHJlcG9ydCB3cm9uZyB2YWx1ZSBiZWNhdXNlIHRoZSBBVVhBREMgbm90IHJl YWR5IG9yDQpvdGhlciBpc3N1ZS4NClRoZSB0aGVybWFsIGRyaXZlciBzaG91bGQgYWRkIHRoZSBq dWRnZW1lbnQgdG8gcHJldmVudCB3cm9uZyB0ZW1wZXJhdHVyZQ0KdmFsdWUgdG8gY2F1c2UNCnN5 c3RlbSBpbW1lZGlhdGVseSBzaHV0IGRvd24uDQo+IA0KPiA+IFNpZ25lZC1vZmYtYnk6IE1pY2hh ZWwgS2FvIDxtaWNoYWVsLmthb0BtZWRpYXRlay5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogSHNp bi1ZaSBXYW5nIDxoc2lueWlAY2hyb21pdW0ub3JnPg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL3Ro ZXJtYWwvbXRrX3RoZXJtYWwuYyB8IDc0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst LS0tDQo+ID4gIDEgZmlsZSBjaGFuZ2VkLCA2NyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygt KQ0KPiA+IA0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3RoZXJtYWwvbXRrX3RoZXJtYWwuYyBi L2RyaXZlcnMvdGhlcm1hbC9tdGtfdGhlcm1hbC5jDQo+ID4gaW5kZXggNmI3ZWYxOTkzZDdlLi45 ZWFjYTQzMjkyMGUgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy90aGVybWFsL210a190aGVybWFs LmMNCj4gPiArKysgYi9kcml2ZXJzL3RoZXJtYWwvbXRrX3RoZXJtYWwuYw0KPiA+IEBAIC0yMjUs NiArMjI1LDExIEBAIGVudW0gew0KPiA+ICANCj4gPiAgc3RydWN0IG10a190aGVybWFsOw0KPiA+ ICANCj4gPiArc3RydWN0IG10a190aGVybWFsX3pvbmUgew0KPiA+ICsJc3RydWN0IG10a190aGVy bWFsICptdDsNCj4gPiArCWludCBpZDsNCj4gPiArfTsNCj4gPiArDQo+ID4gIHN0cnVjdCB0aGVy bWFsX2JhbmtfY2ZnIHsNCj4gPiAgCXVuc2lnbmVkIGludCBudW1fc2Vuc29yczsNCj4gPiAgCWNv bnN0IGludCAqc2Vuc29yczsNCj4gPiBAQCAtNjA3LDcgKzYxMiw3IEBAIHN0YXRpYyBpbnQgbXRr X3RoZXJtYWxfYmFua190ZW1wZXJhdHVyZShzdHJ1Y3QgbXRrX3RoZXJtYWxfYmFuayAqYmFuaykN Cj4gPiAgCQkgKiBub3QgaW1tZWRpYXRlbHkgc2h1dCBkb3duLg0KPiA+ICAJCSAqLw0KPiA+ICAJ CWlmICh0ZW1wID4gMjAwMDAwKQ0KPiA+IC0JCQl0ZW1wID0gMDsNCj4gPiArCQkJdGVtcCA9IC1F QUdBSU47DQo+ID4gIA0KPiA+ICAJCWlmICh0ZW1wID4gbWF4KQ0KPiA+ICAJCQltYXggPSB0ZW1w Ow0KPiA+IEBAIC02MTgsNyArNjIzLDggQEAgc3RhdGljIGludCBtdGtfdGhlcm1hbF9iYW5rX3Rl bXBlcmF0dXJlKHN0cnVjdCBtdGtfdGhlcm1hbF9iYW5rICpiYW5rKQ0KPiA+ICANCj4gPiAgc3Rh dGljIGludCBtdGtfcmVhZF90ZW1wKHZvaWQgKmRhdGEsIGludCAqdGVtcGVyYXR1cmUpDQo+ID4g IHsNCj4gPiAtCXN0cnVjdCBtdGtfdGhlcm1hbCAqbXQgPSBkYXRhOw0KPiA+ICsJc3RydWN0IG10 a190aGVybWFsX3pvbmUgKnR6ID0gZGF0YTsNCj4gPiArCXN0cnVjdCBtdGtfdGhlcm1hbCAqbXQg PSB0ei0+bXQ7DQo+ID4gIAlpbnQgaTsNCj4gPiAgCWludCB0ZW1wbWF4ID0gSU5UX01JTjsNCj4g PiAgDQo+ID4gQEAgLTYzNywxMCArNjQzLDQ0IEBAIHN0YXRpYyBpbnQgbXRrX3JlYWRfdGVtcCh2 b2lkICpkYXRhLCBpbnQgKnRlbXBlcmF0dXJlKQ0KPiA+ICAJcmV0dXJuIDA7DQo+ID4gIH0NCj4g PiAgDQo+ID4gK3N0YXRpYyBpbnQgbXRrX3JlYWRfc2Vuc29yX3RlbXAodm9pZCAqZGF0YSwgaW50 ICp0ZW1wZXJhdHVyZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IG10a190aGVybWFsX3pvbmUgKnR6 ID0gZGF0YTsNCj4gPiArCXN0cnVjdCBtdGtfdGhlcm1hbCAqbXQgPSB0ei0+bXQ7DQo+ID4gKwlj b25zdCBzdHJ1Y3QgbXRrX3RoZXJtYWxfZGF0YSAqY29uZiA9IG10LT5jb25mOw0KPiA+ICsJaW50 IGlkID0gdHotPmlkIC0gMTsNCj4gPiArCWludCB0ZW1wID0gSU5UX01JTjsNCj4gPiArCXUzMiBy YXc7DQo+ID4gKw0KPiA+ICsJaWYgKGlkIDwgMCkNCj4gPiArCQlyZXR1cm4gIC1FQUNDRVM7DQo+ ID4gKw0KPiA+ICsJcmF3ID0gcmVhZGwobXQtPnRoZXJtYWxfYmFzZSArIGNvbmYtPm1zcltpZF0p Ow0KPiA+ICsNCj4gPiArCXRlbXAgPSByYXdfdG9fbWNlbHNpdXMobXQsIGlkLCByYXcpOw0KPiA+ ICsNCj4gPiArCS8qDQo+ID4gKwkgKiBUaGUgZmlyc3QgcmVhZCBvZiBhIHNlbnNvciBvZnRlbiBj b250YWlucyB2ZXJ5IGhpZ2ggYm9ndXMNCj4gPiArCSAqIHRlbXBlcmF0dXJlIHZhbHVlLiBGaWx0 ZXIgdGhlc2Ugb3V0IHNvIHRoYXQgdGhlIHN5c3RlbSBkb2VzDQo+ID4gKwkgKiBub3QgaW1tZWRp YXRlbHkgc2h1dCBkb3duLg0KPiA+ICsJICovDQo+ID4gKw0KPiA+ICsJaWYgKHRlbXAgPiAyMDAw MDApDQo+ID4gKwkJcmV0dXJuICAtRUFHQUlOOw0KPiA+ICsNCj4gPiArCSp0ZW1wZXJhdHVyZSA9 IHRlbXA7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gIHN0YXRp YyBjb25zdCBzdHJ1Y3QgdGhlcm1hbF96b25lX29mX2RldmljZV9vcHMgbXRrX3RoZXJtYWxfb3Bz ID0gew0KPiA+ICAJLmdldF90ZW1wID0gbXRrX3JlYWRfdGVtcCwNCj4gPiAgfTsNCj4gPiAgDQo+ ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGhlcm1hbF96b25lX29mX2RldmljZV9vcHMgbXRrX3Ro ZXJtYWxfc2Vuc29yX29wcyA9IHsNCj4gPiArCS5nZXRfdGVtcCA9IG10a19yZWFkX3NlbnNvcl90 ZW1wLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAgc3RhdGljIHZvaWQgbXRrX3RoZXJtYWxfaW5pdF9i YW5rKHN0cnVjdCBtdGtfdGhlcm1hbCAqbXQsIGludCBudW0sDQo+ID4gIAkJCQkgIHUzMiBhcG1p eGVkX3BoeXNfYmFzZSwgdTMyIGF1eGFkY19waHlzX2Jhc2UsDQo+ID4gIAkJCQkgIGludCBjdHJs X2lkKQ0KPiA+IEBAIC04NzMsNiArOTEzLDcgQEAgc3RhdGljIGludCBtdGtfdGhlcm1hbF9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICAJc3RydWN0IHJlc291cmNlICpy ZXM7DQo+ID4gIAl1NjQgYXV4YWRjX3BoeXNfYmFzZSwgYXBtaXhlZF9waHlzX2Jhc2U7DQo+ID4g IAlzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHpkZXY7DQo+ID4gKwlzdHJ1Y3QgbXRrX3Ro ZXJtYWxfem9uZSAqdHo7DQo+ID4gIA0KPiA+ICAJbXQgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRl diwgc2l6ZW9mKCptdCksIEdGUF9LRVJORUwpOw0KPiA+ICAJaWYgKCFtdCkNCj4gPiBAQCAtOTU0 LDExICs5OTUsMzAgQEAgc3RhdGljIGludCBtdGtfdGhlcm1hbF9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQ0KPiA+ICANCj4gPiAgCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYs IG10KTsNCj4gPiAgDQo+ID4gLQl0emRldiA9IGRldm1fdGhlcm1hbF96b25lX29mX3NlbnNvcl9y ZWdpc3RlcigmcGRldi0+ZGV2LCAwLCBtdCwNCj4gPiAtCQkJCQkJICAgICAmbXRrX3RoZXJtYWxf b3BzKTsNCj4gPiAtCWlmIChJU19FUlIodHpkZXYpKSB7DQo+ID4gLQkJcmV0ID0gUFRSX0VSUih0 emRldik7DQo+ID4gLQkJZ290byBlcnJfZGlzYWJsZV9jbGtfcGVyaV90aGVybTsNCj4gPiArCWZv ciAoaSA9IDA7IGkgPCBtdC0+Y29uZi0+bnVtX3NlbnNvcnMgKyAxOyBpKyspIHsNCj4gPiArCQl0 eiA9IGttYWxsb2Moc2l6ZW9mKCp0eiksIEdGUF9LRVJORUwpOw0KPiA+ICsJCWlmICghdHopDQo+ ID4gKwkJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCQl0ei0+bXQgPSBtdDsNCj4gPiAr CQl0ei0+aWQgPSBpOw0KPiA+ICsNCj4gPiArCQl0emRldiA9IGRldm1fdGhlcm1hbF96b25lX29m X3NlbnNvcl9yZWdpc3RlcigmcGRldi0+ZGV2LCBpLA0KPiA+ICsJCQkJCQkJICAgICB0eiwgKGkg PT0gMCkgPw0KPiA+ICsJCQkJJm10a190aGVybWFsX29wcyA6ICZtdGtfdGhlcm1hbF9zZW5zb3Jf b3BzKTsNCj4gPiArDQo+ID4gKwkJaWYgKElTX0VSUih0emRldikpIHsNCj4gPiArCQkJaWYgKFBU Ul9FUlIodHpkZXYpID09IC1FTk9ERVYpIHsNCj4gPiArCQkJCWRldl93YXJuKCZwZGV2LT5kZXYs DQo+ID4gKwkJCQkJICJzZW5zb3IgJWQgbm90IHJlZ2lzdGVyZWQgaW4gdGhlcm1hbCB6b25lIGlu IGR0XG4iLA0KPiA+ICsJCQkJCSBpKTsNCj4gPiArCQkJCWNvbnRpbnVlOw0KPiA+ICsJCQl9DQo+ ID4gKwkJCWlmIChQVFJfRVJSKHR6ZGV2KSA9PSAtRUFDQ0VTKSB7DQo+ID4gKwkJCQlyZXQgPSBQ VFJfRVJSKHR6ZGV2KTsNCj4gPiArCQkJCWdvdG8gZXJyX2Rpc2FibGVfY2xrX3BlcmlfdGhlcm07 DQo+ID4gKwkJCX0NCj4gPiArCQl9DQo+ID4gIAl9DQo+ID4gIA0KPiA+ICAJcmV0dXJuIDA7DQo+ ID4gDQo+IA0KPiANCg0K From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED, USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C434AC433DF for ; Tue, 7 Jul 2020 03:09:25 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 915C720663 for ; Tue, 7 Jul 2020 03:09:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Dqzx0+8w"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="LkwLLfSi" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 915C720663 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Date:To:From: Subject:Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=gupCP074jzDoU02wJ1deF44+6tJqF8CrbglZOx/wpNk=; b=Dqzx0+8wSGETau5MvVHpnLfkr eFpK0M0QPB/2BeW5qYDlVK2TdD/Em41By9Q0E/gcSlpAPBCe8iH4qt6cT1uOXIDmaXNvoTsui2pPB iCmVk8N3gW5uQ5L/vMKXCndQ72u4qASLAFz4hvcNpr1n8ZFFVgeGoUOjLwzPL6AqsVGf6Dy9pBNh/ 8M/X7qSTY9RBmwcR0jn0/mGWUxep9uHZOq8lnybYT3PzmXlunfqT+sjt/3+zzKxVrYQVqQwLkgJYx Z6LqWnPm5MBaPrYtzbAbCxDiFw6EC1MdDhCWaDAM/PpFuIA8QO7Y7AmlL5O4mKTIeu4Qek8R38gNh h4qo1EyLA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jsdxb-0003Rx-CR; Tue, 07 Jul 2020 03:07:55 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jsdxY-0003RH-3J; Tue, 07 Jul 2020 03:07:53 +0000 X-UUID: eb1850ec95904eb09336345ed42228ed-20200706 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=T+ZuskSCtDAA8wvmKSdUy+6kIp3oOV+tNxuPtAN8RIA=; b=LkwLLfSif7S916Snxc0RHUvNY3tZB1YmzBpmcdLZnU0ScfDngkYuOWMxUEZBT/q2SbNzfXbDw8VJYqzo04rqkheH4/Eao9xUTVn8aG8ydIx1dRRsSRRFlgFFQFbAprNvNPlrP7294gxLTa9fYGCakv32lx2HlPOi9O9bEqm/2ls=; X-UUID: eb1850ec95904eb09336345ed42228ed-20200706 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 951755377; Mon, 06 Jul 2020 19:07:37 -0800 Received: from MTKMBS07N2.mediatek.inc (172.21.101.141) by MTKMBS62N1.mediatek.inc (172.29.193.41) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 6 Jul 2020 20:07:31 -0700 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs07n2.mediatek.inc (172.21.101.141) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 7 Jul 2020 11:07:30 +0800 Received: from [172.21.84.99] (172.21.84.99) by MTKCAS06.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Tue, 7 Jul 2020 11:07:25 +0800 Message-ID: <1594091245.20216.3.camel@mtksdccf07> Subject: Re: [v4, 6/7] thermal: mediatek: add another get_temp ops for thermal sensors From: Michael Kao To: Daniel Lezcano Date: Tue, 7 Jul 2020 11:07:25 +0800 In-Reply-To: References: <20200323121537.22697-1-michael.kao@mediatek.com> <20200323121537.22697-7-michael.kao@mediatek.com> X-Mailer: Evolution 3.2.3-0ubuntu6 MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200706_230752_293217_FF702571 X-CRM114-Status: GOOD ( 26.58 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , devicetree@vger.kernel.org, srv_heupstream@mediatek.com, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Eduardo Valentin , Rob Herring , linux-mediatek@lists.infradead.org, hsinyi@chromium.org, Matthias Brugger , Zhang Rui , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Fri, 2020-05-22 at 17:32 +0200, Daniel Lezcano wrote: > On 23/03/2020 13:15, Michael Kao wrote: > > Provide thermal zone to read thermal sensor > > in the SoC. We can read all the thermal sensors > > value in the SoC by the node /sys/class/thermal/ > > > > In mtk_thermal_bank_temperature, return -EAGAIN instead of -EACCESS > > on the first read of sensor that often are bogus values. > > This can avoid following warning on boot: > > > > thermal thermal_zone6: failed to read out thermal zone (-13) > > What the source problem of the sensor returning bogus values? > The thermal controller will depend on the AUXADC module to read raw data from sensor. Sometimes it will report wrong value because the AUXADC not ready or other issue. The thermal driver should add the judgement to prevent wrong temperature value to cause system immediately shut down. > > > Signed-off-by: Michael Kao > > Signed-off-by: Hsin-Yi Wang > > --- > > drivers/thermal/mtk_thermal.c | 74 +++++++++++++++++++++++++++++++---- > > 1 file changed, 67 insertions(+), 7 deletions(-) > > > > diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c > > index 6b7ef1993d7e..9eaca432920e 100644 > > --- a/drivers/thermal/mtk_thermal.c > > +++ b/drivers/thermal/mtk_thermal.c > > @@ -225,6 +225,11 @@ enum { > > > > struct mtk_thermal; > > > > +struct mtk_thermal_zone { > > + struct mtk_thermal *mt; > > + int id; > > +}; > > + > > struct thermal_bank_cfg { > > unsigned int num_sensors; > > const int *sensors; > > @@ -607,7 +612,7 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank) > > * not immediately shut down. > > */ > > if (temp > 200000) > > - temp = 0; > > + temp = -EAGAIN; > > > > if (temp > max) > > max = temp; > > @@ -618,7 +623,8 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank) > > > > static int mtk_read_temp(void *data, int *temperature) > > { > > - struct mtk_thermal *mt = data; > > + struct mtk_thermal_zone *tz = data; > > + struct mtk_thermal *mt = tz->mt; > > int i; > > int tempmax = INT_MIN; > > > > @@ -637,10 +643,44 @@ static int mtk_read_temp(void *data, int *temperature) > > return 0; > > } > > > > +static int mtk_read_sensor_temp(void *data, int *temperature) > > +{ > > + struct mtk_thermal_zone *tz = data; > > + struct mtk_thermal *mt = tz->mt; > > + const struct mtk_thermal_data *conf = mt->conf; > > + int id = tz->id - 1; > > + int temp = INT_MIN; > > + u32 raw; > > + > > + if (id < 0) > > + return -EACCES; > > + > > + raw = readl(mt->thermal_base + conf->msr[id]); > > + > > + temp = raw_to_mcelsius(mt, id, raw); > > + > > + /* > > + * The first read of a sensor often contains very high bogus > > + * temperature value. Filter these out so that the system does > > + * not immediately shut down. > > + */ > > + > > + if (temp > 200000) > > + return -EAGAIN; > > + > > + *temperature = temp; > > + > > + return 0; > > +} > > + > > static const struct thermal_zone_of_device_ops mtk_thermal_ops = { > > .get_temp = mtk_read_temp, > > }; > > > > +static const struct thermal_zone_of_device_ops mtk_thermal_sensor_ops = { > > + .get_temp = mtk_read_sensor_temp, > > +}; > > + > > static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num, > > u32 apmixed_phys_base, u32 auxadc_phys_base, > > int ctrl_id) > > @@ -873,6 +913,7 @@ static int mtk_thermal_probe(struct platform_device *pdev) > > struct resource *res; > > u64 auxadc_phys_base, apmixed_phys_base; > > struct thermal_zone_device *tzdev; > > + struct mtk_thermal_zone *tz; > > > > mt = devm_kzalloc(&pdev->dev, sizeof(*mt), GFP_KERNEL); > > if (!mt) > > @@ -954,11 +995,30 @@ static int mtk_thermal_probe(struct platform_device *pdev) > > > > platform_set_drvdata(pdev, mt); > > > > - tzdev = devm_thermal_zone_of_sensor_register(&pdev->dev, 0, mt, > > - &mtk_thermal_ops); > > - if (IS_ERR(tzdev)) { > > - ret = PTR_ERR(tzdev); > > - goto err_disable_clk_peri_therm; > > + for (i = 0; i < mt->conf->num_sensors + 1; i++) { > > + tz = kmalloc(sizeof(*tz), GFP_KERNEL); > > + if (!tz) > > + return -ENOMEM; > > + > > + tz->mt = mt; > > + tz->id = i; > > + > > + tzdev = devm_thermal_zone_of_sensor_register(&pdev->dev, i, > > + tz, (i == 0) ? > > + &mtk_thermal_ops : &mtk_thermal_sensor_ops); > > + > > + if (IS_ERR(tzdev)) { > > + if (PTR_ERR(tzdev) == -ENODEV) { > > + dev_warn(&pdev->dev, > > + "sensor %d not registered in thermal zone in dt\n", > > + i); > > + continue; > > + } > > + if (PTR_ERR(tzdev) == -EACCES) { > > + ret = PTR_ERR(tzdev); > > + goto err_disable_clk_peri_therm; > > + } > > + } > > } > > > > return 0; > > > > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel