From mboxrd@z Thu Jan 1 00:00:00 1970 From: Caesar Wang Subject: Re: [PATCH 1/4] thermal: Add support for hardware-tracked trip points Date: Tue, 3 May 2016 14:19:10 +0800 Message-ID: <572842DE.7080301@gmail.com> References: <1461553367-24744-1-git-send-email-wxt@rock-chips.com> <1461553367-24744-2-git-send-email-wxt@rock-chips.com> <20160427214843.GA6438@localhost.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20160427214843.GA6438-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+glpar-linux-rockchip=m.gmane.org-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org To: Eduardo Valentin Cc: huangtao-TNX95d0MmH7DzftRWevZcw@public.gmane.org, Heiko Stuebner , linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Sascha Hauer , dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, dianders-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, eddie.cai-TNX95d0MmH7DzftRWevZcw@public.gmane.org, smbarber-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, briannorris-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org, Zhang Rui , Caesar Wang List-Id: linux-pm@vger.kernel.org CgrlnKggMjAxNuW5tDA05pyIMjjml6UgMDU6NDgsIEVkdWFyZG8gVmFsZW50aW4g5YaZ6YGTOgo+ IEEgY291cGxlIG9mIGNvbW1lbnRzIGFzIGZvbGxvd3MsCj4KPiBPbiBNb24sIEFwciAyNSwgMjAx NiBhdCAxMTowMjo0NEFNICswODAwLCBDYWVzYXIgV2FuZyB3cm90ZToKPj4gRnJvbTogU2FzY2hh IEhhdWVyIDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPgo+Pgo+PiBUaGlzIGFkZHMgc3VwcG9ydCBm b3IgaGFyZHdhcmUtdHJhY2tlZCB0cmlwIHBvaW50cyB0byB0aGUgZGV2aWNlIHRyZWUKPj4gdGhl cm1hbCBzZW5zb3IgZnJhbWV3b3JrLgo+Pgo+PiBUaGUgZnJhbWV3b3JrIHN1cHBvcnRzIGFuIGFy Yml0cmFyeSBudW1iZXIgb2YgdHJpcCBwb2ludHMuIFdoZW5ldmVyCj4+IHRoZSBjdXJyZW50IHRl bXBlcmF0dXJlIGlzIHVwZGF0ZWQsIHRoZSB0cmlwIHBvaW50cyBpbW1lZGlhdGVseQo+PiBiZWxv dyBhbmQgYWJvdmUgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgYXJlIGZvdW5kLiBBIC5zZXRfdHJp cHMKPj4gY2FsbGJhY2sgaXMgdGhlbiBjYWxsZWQgd2l0aCB0aGUgdGVtcGVyYXR1cmVzLiBJZiB0 aGVyZSBpcyBubyB0cmlwCj4+IHBvaW50IGFib3ZlIG9yIGJlbG93IHRoZSBjdXJyZW50IHRlbXBl cmF0dXJlLCB0aGUgcGFzc2VkIHRyaXAKPj4gdGVtcGVyYXR1cmUgd2lsbCBiZSAtSU5UX01BWCBv ciBJTlRfTUFYIHJlc3BlY3RpdmVseS4gSW4gdGhpcyBjYWxsYmFjaywKPj4gdGhlIGRyaXZlciBz aG91bGQgcHJvZ3JhbSB0aGUgaGFyZHdhcmUgc3VjaCB0aGF0IGl0IGlzIG5vdGlmaWVkCj4+IHdo ZW4gZWl0aGVyIG9mIHRoZXNlIHRyaXAgcG9pbnRzIGFyZSB0cmlnZ2VyZWQuIFdoZW4gYSB0cmlw IHBvaW50Cj4+IGlzIHRyaWdnZXJlZCwgdGhlIGRyaXZlciBzaG91bGQgY2FsbCBgdGhlcm1hbF96 b25lX2RldmljZV91cGRhdGUnCj4+IGZvciB0aGUgcmVzcGVjdGl2ZSB0aGVybWFsIHpvbmUuIFRo aXMgd2lsbCBjYXVzZSB0aGUgdHJpcCBwb2ludHMKPj4gdG8gYmUgdXBkYXRlZCBhZ2Fpbi4KPj4K Pj4gSWYgLnNldF90cmlwcyBpcyBub3QgaW1wbGVtZW50ZWQsIHRoZSBmcmFtZXdvcmsgYmVoYXZl cyBhcyBiZWZvcmUuCj4+Cj4+IFRoaXMgcGF0Y2ggaXMgYmFzZWQgb24gYW4gZWFybGllciB2ZXJz aW9uIGZyb20gTWlra28gUGVydHR1bmVuCj4+IDxtaWtrby5wZXJ0dHVuZW5Aa2Fwc2kuZmk+Cj4+ Cj4+IFNpZ25lZC1vZmYtYnk6IFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4K Pj4gU2lnbmVkLW9mZi1ieTogQ2Flc2FyIFdhbmcgPHd4dEByb2NrLWNoaXBzLmNvbT4KPj4gQ2M6 IFpoYW5nIFJ1aSA8cnVpLnpoYW5nQGludGVsLmNvbT4KPj4gQ2M6IEVkdWFyZG8gVmFsZW50aW4g PGVkdWJlenZhbEBnbWFpbC5jb20+Cj4+IENjOiBsaW51eC1wbUB2Z2VyLmtlcm5lbC5vcmcKPj4g LS0tCj4+Cj4+ICAgZHJpdmVycy90aGVybWFsL3RoZXJtYWxfY29yZS5jIHwgNDggKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+ICAgaW5jbHVkZS9saW51eC90aGVy bWFsLmggICAgICAgIHwgIDMgKysrCj4gR2l2ZW4gdGhhdCB0aGlzIGlzIGFkZGluZyBhIG5ldyBm ZWF0dXJlIGluIHRoZSBmcmFtZXdvcmssIEkgd291bGQgcHJlZmVyCj4gaWYgeW91IGNvdWxkIGFs c28gZGVzY3JpYmUgdGhlIC5zZXRfdHJpcHMoKSBpbiB0aGUgc3lzZnMtYXBpLnR4dAo+IGRvY3Vt ZW50YXRpb24gZmlsZS4KCk9rYXksIGRvbmUuCj4KPiBBIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRo ZSBleHBlY3RhdGlvbiBvZiB3aGF0IHRoZSBmcmFtZXdvcmsgaXMgZ29pbmcgdG8KPiBkbyBpcyBh bHNvIHdlbGNvbWUuIEZvciBleGFtcGxlLCBhcmUgZHJpdmVycyBzdXBwb3NlZCB0byBzZXR1cCB0 aGUKPiBwb2xsaW5nIHRvZ2V0aGVyIHdpdGggdGhlIHRocmVzaG9sZCBiYXNlZCBhcHByb2FjaD8K Pgo+PiAgIDIgZmlsZXMgY2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKQo+Pgo+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfY29yZS5jIGIvZHJpdmVycy90aGVybWFsL3RoZXJt YWxfY29yZS5jCj4+IGluZGV4IGYxZGI0OTYuLmNmZWY4Y2MgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZl cnMvdGhlcm1hbC90aGVybWFsX2NvcmUuYwo+PiArKysgYi9kcml2ZXJzL3RoZXJtYWwvdGhlcm1h bF9jb3JlLmMKPj4gQEAgLTUyMCw2ICs1MjAsNDcgQEAgZXhpdDoKPj4gICB9Cj4+ICAgRVhQT1JU X1NZTUJPTF9HUEwodGhlcm1hbF96b25lX2dldF90ZW1wKTsKPj4gICAKPj4gK3N0YXRpYyB2b2lk IHRoZXJtYWxfem9uZV9zZXRfdHJpcHMoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6KQo+ PiArewo+PiArCWludCBsb3cgPSAtSU5UX01BWDsKPj4gKwlpbnQgaGlnaCA9IElOVF9NQVg7Cj4+ ICsJaW50IHRyaXBfdGVtcCwgaHlzdGVyZXNpczsKPj4gKwlpbnQgdGVtcCA9IHR6LT50ZW1wZXJh dHVyZTsKPj4gKwlpbnQgaSwgcmV0Owo+PiArCj4+ICsJaWYgKCF0ei0+b3BzLT5zZXRfdHJpcHMp Cj4+ICsJCXJldHVybjsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCB0ei0+dHJpcHM7IGkrKykg ewo+PiArCQlpbnQgdHJpcF9sb3c7Cj4+ICsKPj4gKwkJdHotPm9wcy0+Z2V0X3RyaXBfdGVtcCh0 eiwgaSwgJnRyaXBfdGVtcCk7Cj4+ICsJCXR6LT5vcHMtPmdldF90cmlwX2h5c3QodHosIGksICZo eXN0ZXJlc2lzKTsKPj4gKwo+PiArCQl0cmlwX2xvdyA9IHRyaXBfdGVtcCAtIGh5c3RlcmVzaXM7 Cj4+ICsKPj4gKwkJaWYgKHRyaXBfbG93IDwgdGVtcCAmJiB0cmlwX2xvdyA+IGxvdykKPj4gKwkJ CWxvdyA9IHRyaXBfbG93Owo+PiArCj4+ICsJCWlmICh0cmlwX3RlbXAgPiB0ZW1wICYmIHRyaXBf dGVtcCA8IGhpZ2gpCj4+ICsJCQloaWdoID0gdHJpcF90ZW1wOwo+PiArCX0KPiBEaWQgSSB1bmRl cnN0YW5kIGNvcnJlY3RseSB0aGF0IHlvdSB3aWxsIGJlIGZsb29kZWQgYnkgSVJRcyB3aGVuIHlv dQo+IGhhdmU6Cj4gMS4gT25lIHNpbmdsZSB0cmlwIHBvaW50Lgo+IDIuIFlvdXIgdGVtcCBpcyBh Ym92ZSB0cmlwX3RlbXAKPgo+IFdpdGggdGhlIGFib3ZlLCB5b3Ugd291bGQgcHJvZ3JhbSBhcyB0 aHJlc2hvbGQ6Cj4gaGlnaCA9PSB0cmlwX3RlbXAKPiBsb3cgPT0gdHJpcF90ZW1wIC0gaHlzdAo+ Cj4gQW5kIHRoZSBJUlEgd291bGQgZmlyZSBpbW1lZGlhdHRlbHksIGNhdXNpbmcgYSBkZXZpY2Ug dXBkYXRlLCBjYXVzaW5nIGEKPiByZXByb2dyYW1taW5nLCBjYXVzaW5nIGFub3RoZXIgaXJxLCBh bmQgdGhpcyB3b3VsZCBjb250aW51ZSwgdW50aWwgdGhlCj4gdGVtcGVyYXR1cmUgZ29lcyBiZWxv dyB0cmlwX3RlbXAsIHJpZ2h0PwoKUmlnaHQsIEFzIHRoZSBleGFtcGxlIHRlc3RlZCBieSB0aGUg cm9ja2NoaXAgcGxhdGZvcm0uICg3MC83NS8gZGVncmVlIGlzIAp0aGUgdHJpcCBwb2ludCkKCi4u ClsgIDY2My45ODQzMjddIHJvY2tjaGlwLXRoZXJtYWwgZmYyNjAwMDAudHNhZGM6IHNlbnNvciAw IC0gdGVtcDogNjYxMTEsIApyZXR2YWw6IDAKWyAgNjY0LjA0ODMyNl0gcm9ja2NoaXAtdGhlcm1h bCBmZjI2MDAwMC50c2FkYzogc2Vuc29yIDEgLSB0ZW1wOiA2ODMzMywgCnJldHZhbDogMApbICA2 NjQuMDU1NjAwXSByb2NrY2hpcC10aGVybWFsIGZmMjYwMDAwLnRzYWRjOiAKcm9ja2NoaXBfdGhl cm1hbF9zZXRfdHJpcHM6IHNlbnNvciAxOiBsb3c6IDY4MDAwLCBoaWdoIDcwMDAwClsgIDY2NC45 OTIzMjJdIHJvY2tjaGlwLXRoZXJtYWwgZmYyNjAwMDAudHNhZGM6IHNlbnNvciAwIC0gdGVtcDog Njg4ODgsIApyZXR2YWw6IDAKWyAgNjY0Ljk5OTU3OV0gcm9ja2NoaXAtdGhlcm1hbCBmZjI2MDAw MC50c2FkYzogCnJvY2tjaGlwX3RoZXJtYWxfc2V0X3RyaXBzOiBzZW5zb3IgMDogbG93OiA2ODAw MCwgaGlnaCA3MDAwMApbICA2NjUuMDY2MzIyXSByb2NrY2hpcC10aGVybWFsIGZmMjYwMDAwLnRz YWRjOiBzZW5zb3IgMSAtIHRlbXA6IDY4MzMzLCAKcmV0dmFsOiAwCi4uLgoKWyA0MjUwLjQ3NDEw Ml0gcm9ja2NoaXAtdGhlcm1hbCBmZjI2MDAwMC50c2FkYzogc2Vuc29yIDAgLSB0ZW1wOiA3MzMz MywgCnJldHZhbDogMApbIDQyNTAuNDgxNDMyXSByb2NrY2hpcC10aGVybWFsIGZmMjYwMDAwLnRz YWRjOiBzZW5zb3IgMSAtIHRlbXA6IDc0NDQ0LCAKcmV0dmFsOiAwClsgNDI1MC40ODg3OTJdIHJv Y2tjaGlwLXRoZXJtYWwgZmYyNjAwMDAudHNhZGM6IApyb2NrY2hpcF90aGVybWFsX3NldF90cmlw czogc2Vuc29yIDE6IGxvdzogNzMwMDAsIGhpZ2ggNzUwMDAKWyA0MjUwLjU4MTM2MF0gcm9ja2No aXAtdGhlcm1hbCBmZjI2MDAwMC50c2FkYzogc2Vuc29yIDAgLSB0ZW1wOiA3Mjc3NywgCnJldHZh bDogMApbIDQyNTAuNTg4NzY3XSByb2NrY2hpcC10aGVybWFsIGZmMjYwMDAwLnRzYWRjOiAKcm9j a2NoaXBfdGhlcm1hbF9zZXRfdHJpcHM6IHNlbnNvciAwOiBsb3c6IDY4MDAwLCBoaWdoIDc1MDAw ClsgNDI1MC41OTg3MzVdIHJvY2tjaGlwLXRoZXJtYWwgZmYyNjAwMDAudHNhZGM6IHNlbnNvciAx IC0gdGVtcDogNzUwMDAsIApyZXR2YWw6IDAKWyA0MjUwLjYwNjA2NV0gcm9ja2NoaXAtdGhlcm1h bCBmZjI2MDAwMC50c2FkYzogCnJvY2tjaGlwX3RoZXJtYWxfc2V0X3RyaXBzOiBzZW5zb3IgMTog bG93OiA3MzAwMCwgaGlnaCA5NTAwMAouLi4KCgo+PiArCj4+ICsJLyogTm8gbmVlZCB0byBjaGFu Z2UgdHJpcCBwb2ludHMgKi8KPj4gKwlpZiAodHotPnByZXZfbG93X3RyaXAgPT0gbG93ICYmIHR6 LT5wcmV2X2hpZ2hfdHJpcCA9PSBoaWdoKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwl0ei0+cHJl dl9sb3dfdHJpcCA9IGxvdzsKPj4gKwl0ei0+cHJldl9oaWdoX3RyaXAgPSBoaWdoOwo+PiArCj4+ ICsJZGV2X2RiZygmdHotPmRldmljZSwgIm5ldyB0ZW1wZXJhdHVyZSBib3VuZGFyaWVzOiAlZCA8 IHggPCAlZFxuIiwKPj4gKwkJCWxvdywgaGlnaCk7Cj4+ICsKPj4gKwlyZXQgPSB0ei0+b3BzLT5z ZXRfdHJpcHModHosIGxvdywgaGlnaCk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJZGV2X2VycigmdHot PmRldmljZSwgIkZhaWxlZCB0byBzZXQgdHJpcHM6ICVkXG4iLCByZXQpOwo+PiArfQo+PiArCj4+ ICAgc3RhdGljIHZvaWQgdXBkYXRlX3RlbXBlcmF0dXJlKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2 aWNlICp0eikKPj4gICB7Cj4+ICAgCWludCB0ZW1wLCByZXQ7Cj4+IEBAIC01NjksNiArNjEwLDgg QEAgdm9pZCB0aGVybWFsX3pvbmVfZGV2aWNlX3VwZGF0ZShzdHJ1Y3QgdGhlcm1hbF96b25lX2Rl dmljZSAqdHopCj4+ICAgCj4+ICAgCXVwZGF0ZV90ZW1wZXJhdHVyZSh0eik7Cj4+ICAgCj4+ICsJ dGhlcm1hbF96b25lX3NldF90cmlwcyh0eik7Cj4+ICsKPj4gICAJZm9yIChjb3VudCA9IDA7IGNv dW50IDwgdHotPnRyaXBzOyBjb3VudCsrKQo+PiAgIAkJaGFuZGxlX3RoZXJtYWxfdHJpcCh0eiwg Y291bnQpOwo+PiAgIH0KPj4gQEAgLTc1NCw2ICs3OTcsOSBAQCB0cmlwX3BvaW50X2h5c3Rfc3Rv cmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKPj4g ICAJICovCj4+ICAgCXJldCA9IHR6LT5vcHMtPnNldF90cmlwX2h5c3QodHosIHRyaXAsIHRlbXBl cmF0dXJlKTsKPj4gICAKPj4gKwlpZiAoIXJldCkKPj4gKwkJdGhlcm1hbF96b25lX3NldF90cmlw cyh0eik7Cj4+ICsKPiBZb3Ugd291bGQgcHJvYmFibHkgd2FudCB0byBkbyB0aGUgc2FtZSBvbiB0 cmlwX3BvaW50X3RlbXBfc3RvcmUoKS4KClN1cmUuCj4+ICAgCXJldHVybiByZXQgPyByZXQgOiBj b3VudDsKPj4gICB9Cj4+ICAgCj4+IEBAIC0xODQzLDYgKzE4ODksOCBAQCBzdHJ1Y3QgdGhlcm1h bF96b25lX2RldmljZSAqdGhlcm1hbF96b25lX2RldmljZV9yZWdpc3Rlcihjb25zdCBjaGFyICp0 eXBlLAo+PiAgIAl0ei0+dHJpcHMgPSB0cmlwczsKPj4gICAJdHotPnBhc3NpdmVfZGVsYXkgPSBw YXNzaXZlX2RlbGF5Owo+PiAgIAl0ei0+cG9sbGluZ19kZWxheSA9IHBvbGxpbmdfZGVsYXk7Cj4+ ICsJdHotPnByZXZfbG93X3RyaXAgPSBJTlRfTUFYOwo+PiArCXR6LT5wcmV2X2hpZ2hfdHJpcCA9 IC1JTlRfTUFYOwo+PiAgIAkvKiBBIG5ldyB0aGVybWFsIHpvbmUgbmVlZHMgdG8gYmUgdXBkYXRl ZCBhbnl3YXkuICovCj4+ICAgCWF0b21pY19zZXQoJnR6LT5uZWVkX3VwZGF0ZSwgMSk7Cj4+ICAg Cj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RoZXJtYWwuaCBiL2luY2x1ZGUvbGludXgv dGhlcm1hbC5oCj4+IGluZGV4IGU0NWFiZTcuLmUyNTgzNTkgMTAwNjQ0Cj4+IC0tLSBhL2luY2x1 ZGUvbGludXgvdGhlcm1hbC5oCj4+ICsrKyBiL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCj4+IEBA IC05OCw2ICs5OCw3IEBAIHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlX29wcyB7Cj4+ICAgCWlu dCAoKnVuYmluZCkgKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICosCj4+ICAgCQkgICAgICAg c3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKik7Cj4+ICAgCWludCAoKmdldF90ZW1wKSAo c3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKiwgaW50ICopOwo+PiArCWludCAoKnNldF90cmlw cykgKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICosIGludCwgaW50KTsKPj4gICAJaW50ICgq Z2V0X21vZGUpIChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLAo+PiAgIAkJCSBlbnVtIHRo ZXJtYWxfZGV2aWNlX21vZGUgKik7Cj4+ICAgCWludCAoKnNldF9tb2RlKSAoc3RydWN0IHRoZXJt YWxfem9uZV9kZXZpY2UgKiwKPj4gQEAgLTE5OSw2ICsyMDAsOCBAQCBzdHJ1Y3QgdGhlcm1hbF96 b25lX2RldmljZSB7Cj4+ICAgCWludCBsYXN0X3RlbXBlcmF0dXJlOwo+PiAgIAlpbnQgZW11bF90 ZW1wZXJhdHVyZTsKPj4gICAJaW50IHBhc3NpdmU7Cj4+ICsJaW50IHByZXZfbG93X3RyaXA7Cj4+ ICsJaW50IHByZXZfaGlnaF90cmlwOwo+PiAgIAl1bnNpZ25lZCBpbnQgZm9yY2VkX3Bhc3NpdmU7 Cj4+ICAgCWF0b21pY190IG5lZWRfdXBkYXRlOwo+PiAgIAlzdHJ1Y3QgdGhlcm1hbF96b25lX2Rl dmljZV9vcHMgKm9wczsKPj4gLS0gCj4+IDEuOS4xCj4+Cj4gX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KPiBMaW51eC1yb2NrY2hpcCBtYWlsaW5nIGxpc3QK PiBMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3JnCj4gaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yb2NrY2hpcAoKCi0tIApUaGFua3MsCkNh ZXNhcgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxp bnV4LXJvY2tjaGlwIG1haWxpbmcgbGlzdApMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcm9j a2NoaXAK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932515AbcECGTf (ORCPT ); Tue, 3 May 2016 02:19:35 -0400 Received: from mail-pa0-f48.google.com ([209.85.220.48]:35713 "EHLO mail-pa0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932451AbcECGT0 (ORCPT ); Tue, 3 May 2016 02:19:26 -0400 Subject: Re: [PATCH 1/4] thermal: Add support for hardware-tracked trip points To: Eduardo Valentin References: <1461553367-24744-1-git-send-email-wxt@rock-chips.com> <1461553367-24744-2-git-send-email-wxt@rock-chips.com> <20160427214843.GA6438@localhost.localdomain> Cc: Caesar Wang , huangtao@rock-chips.com, Heiko Stuebner , linux-pm@vger.kernel.org, Sascha Hauer , dmitry.torokhov@gmail.com, dianders@chromium.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, eddie.cai@rock-chips.com, smbarber@google.com, briannorris@google.com, Zhang Rui From: Caesar Wang Message-ID: <572842DE.7080301@gmail.com> Date: Tue, 3 May 2016 14:19:10 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.4.0 MIME-Version: 1.0 In-Reply-To: <20160427214843.GA6438@localhost.localdomain> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 在 2016年04月28日 05:48, Eduardo Valentin 写道: > A couple of comments as follows, > > On Mon, Apr 25, 2016 at 11:02:44AM +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 >> --- >> >> drivers/thermal/thermal_core.c | 48 ++++++++++++++++++++++++++++++++++++++++++ >> include/linux/thermal.h | 3 +++ > Given that this is adding a new feature in the framework, I would prefer > if you could also describe the .set_trips() in the sysfs-api.txt > documentation file. Okay, done. > > A short description of the expectation of what the framework is going to > do is also welcome. For example, are drivers supposed to setup the > polling together with the threshold based approach? > >> 2 files changed, 51 insertions(+) >> >> diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c >> index f1db496..cfef8cc 100644 >> --- a/drivers/thermal/thermal_core.c >> +++ b/drivers/thermal/thermal_core.c >> @@ -520,6 +520,47 @@ exit: >> } >> EXPORT_SYMBOL_GPL(thermal_zone_get_temp); >> >> +static void thermal_zone_set_trips(struct thermal_zone_device *tz) >> +{ >> + int low = -INT_MAX; >> + int high = INT_MAX; >> + int trip_temp, hysteresis; >> + int temp = tz->temperature; >> + int i, ret; >> + >> + if (!tz->ops->set_trips) >> + return; >> + >> + for (i = 0; i < tz->trips; i++) { >> + int trip_low; >> + >> + tz->ops->get_trip_temp(tz, i, &trip_temp); >> + tz->ops->get_trip_hyst(tz, i, &hysteresis); >> + >> + trip_low = trip_temp - hysteresis; >> + >> + if (trip_low < temp && trip_low > low) >> + low = trip_low; >> + >> + if (trip_temp > temp && trip_temp < high) >> + high = trip_temp; >> + } > Did I understand correctly that you will be flooded by IRQs when you > have: > 1. One single trip point. > 2. Your temp is above trip_temp > > With the above, you would program as threshold: > high == trip_temp > low == trip_temp - hyst > > And the IRQ would fire immediattely, causing a device update, causing a > reprogramming, causing another irq, and this would continue, until the > temperature goes below trip_temp, right? Right, As the example tested by the rockchip platform. (70/75/ degree is the trip point) .. [ 663.984327] rockchip-thermal ff260000.tsadc: sensor 0 - temp: 66111, retval: 0 [ 664.048326] rockchip-thermal ff260000.tsadc: sensor 1 - temp: 68333, retval: 0 [ 664.055600] rockchip-thermal ff260000.tsadc: rockchip_thermal_set_trips: sensor 1: low: 68000, high 70000 [ 664.992322] rockchip-thermal ff260000.tsadc: sensor 0 - temp: 68888, retval: 0 [ 664.999579] rockchip-thermal ff260000.tsadc: rockchip_thermal_set_trips: sensor 0: low: 68000, high 70000 [ 665.066322] rockchip-thermal ff260000.tsadc: sensor 1 - temp: 68333, retval: 0 ... [ 4250.474102] rockchip-thermal ff260000.tsadc: sensor 0 - temp: 73333, retval: 0 [ 4250.481432] rockchip-thermal ff260000.tsadc: sensor 1 - temp: 74444, retval: 0 [ 4250.488792] rockchip-thermal ff260000.tsadc: rockchip_thermal_set_trips: sensor 1: low: 73000, high 75000 [ 4250.581360] rockchip-thermal ff260000.tsadc: sensor 0 - temp: 72777, retval: 0 [ 4250.588767] rockchip-thermal ff260000.tsadc: rockchip_thermal_set_trips: sensor 0: low: 68000, high 75000 [ 4250.598735] rockchip-thermal ff260000.tsadc: sensor 1 - temp: 75000, retval: 0 [ 4250.606065] rockchip-thermal ff260000.tsadc: rockchip_thermal_set_trips: sensor 1: low: 73000, high 95000 ... >> + >> + /* No need to change trip points */ >> + if (tz->prev_low_trip == low && tz->prev_high_trip == high) >> + return; >> + >> + tz->prev_low_trip = low; >> + tz->prev_high_trip = high; >> + >> + dev_dbg(&tz->device, "new temperature boundaries: %d < x < %d\n", >> + low, high); >> + >> + ret = tz->ops->set_trips(tz, low, high); >> + if (ret) >> + dev_err(&tz->device, "Failed to set trips: %d\n", ret); >> +} >> + >> static void update_temperature(struct thermal_zone_device *tz) >> { >> int temp, ret; >> @@ -569,6 +610,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 +797,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 would probably want to do the same on trip_point_temp_store(). Sure. >> return ret ? ret : count; >> } >> >> @@ -1843,6 +1889,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; >> unsigned int forced_passive; >> atomic_t need_update; >> struct thermal_zone_device_ops *ops; >> -- >> 1.9.1 >> > _______________________________________________ > Linux-rockchip mailing list > Linux-rockchip@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-rockchip -- Thanks, Caesar