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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 75BD4C4332F for ; Wed, 13 Oct 2021 09:05:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 54BCB610CE for ; Wed, 13 Oct 2021 09:05:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238964AbhJMJHk (ORCPT ); Wed, 13 Oct 2021 05:07:40 -0400 Received: from mailgw02.mediatek.com ([1.203.163.81]:17006 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S229987AbhJMJHh (ORCPT ); Wed, 13 Oct 2021 05:07:37 -0400 X-UUID: a5bb4c48f4ba461b83d660149281dec8-20211013 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=qyw2jvRrWrpLU3Qi9lhBa5j9cxz4dl/xIrGBRFmd6hc=; b=S6jGg8GC+L26rlIuvhk2A9j3VkLfib5/AvGre4Xvm+IPUvrE3Gckf+VvjGBMR1QvVmJJSgY53j2t+ShWhnJcEA0rIyGOpzttfR1I4te3zrKQ9Ul4V13GXG1toZ5JPAW7iYoDvyrvDsahI/4s3Fpwftpcr9mzsUQpMEtPMj+lifo=; X-UUID: a5bb4c48f4ba461b83d660149281dec8-20211013 Received: from mtkcas36.mediatek.inc [(172.27.7.253)] by mailgw02.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 400759757; Wed, 13 Oct 2021 17:05:30 +0800 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS31N1.mediatek.inc (172.27.4.69) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 13 Oct 2021 17:05:25 +0800 Received: from mhfsdcap04 (10.17.3.154) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 13 Oct 2021 17:05:24 +0800 Message-ID: <6ed7c99ea2f8ef46d62785ecdbe4ae29bd66a630.camel@mediatek.com> Subject: Re: [PATCH RESEND v3 1/2] PM / wakeirq: support enabling wake-up irq after runtime_suspend called From: Chunfeng Yun To: "Rafael J . Wysocki" CC: Len Brown , Pavel Machek , "Greg Kroah-Hartman" , Mathias Nyman , Matthias Brugger , , , , , , "Rafael J . Wysocki" Date: Wed, 13 Oct 2021 17:05:27 +0800 In-Reply-To: <20210924023746.22423-1-chunfeng.yun@mediatek.com> References: <20210924023746.22423-1-chunfeng.yun@mediatek.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.2 MIME-Version: 1.0 X-TM-SNTS-SMTP: CB26C819106148658AD623A5739B6A41013C67FBEF91DC638C8C2A10594EBE112000:8 X-MTK: N Content-Transfer-Encoding: base64 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gRnJpLCAyMDIxLTA5LTI0IGF0IDEwOjM3ICswODAwLCBDaHVuZmVuZyBZdW4gd3JvdGU6DQo+ IFdoZW4gdGhlIGRlZGljYXRlZCB3YWtlLWlycSBpcyBsZXZlbCB0cmlnZ2VyLCBhbmQgaXQgdXNl cyB0aGUNCj4gY29uc3VtZXIncyBzbGVlcCBzdGF0dXMgYXMgdGhlIHdha2V1cCBzb3VyY2UsIHRo YXQgbWVhbnMgaWYgdGhlDQo+IGNvbnN1bWVyIGlzIG5vdCBpbiBzbGVlcCBzdGF0ZSwgdGhlIHdh a2UtaXJxIHdpbGwgYmUgdHJpZ2dlcmVkDQo+IHdoZW4gZW5hYmxlIGl0OyBGb3IgdGhpcyBjYXNl LCBuZWVkIGVuYWJsZSB0aGUgd2FrZS1pcnEgYWZ0ZXINCj4gaW52b2tpbmcgdGhlIGNvbnN1bWVy J3MgcnVudGltZV9zdXNwZW5kKCkgd2hpY2ggbWFrZSB0aGUgY29uc3VtZXINCj4gZW50ZXIgc2xl ZXAgc3RhdGUuDQo+IA0KPiBlLmcuDQo+IEFzc3VtZSB0aGUgd2FrZS1pcnEgaXMgYSBsb3cgbGV2 ZWwgdHJpZ2dlciB0eXBlLCBhbmQgdGhlIHdha2V1cA0KPiBzaWduYWwgY29tZXMgZnJvbSB0aGUg c2xlZXAgc3RhdHVzIG9mIGNvbnN1bWVyLg0KPiBUaGUgd2FrZXVwIHNpZ25hbCBpcyBsb3cgbGV2 ZWwgYXQgcnVubmluZyB0aW1lICgwKSwgYW5kIGJlY29tZXMNCj4gaGlnaCBsZXZlbCB3aGVuIHRo ZSBjb25zdW1lciBlbnRlcnMgc2xlZXAgc3RhdGUgKHJ1bnRpbWVfc3VzcGVuZA0KPiAoMSkgaXMg Y2FsbGVkKSwgYSB3YWtldXAgZXZlbnQgYXQgKDIpIG1ha2UgdGhlIGNvbnN1bWVyIGV4aXQgc2xl ZXANCj4gc3RhdGUsIHRoZW4gdGhlIHdha2V1cCBzaWduYWwgYWxzbyBiZWNvbWVzIGxvdyBsZXZl bC4NCj4gDQo+ICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0NCj4gICAgICAgICAg ICAgICAgfCAgICAgICAgICAgXiAgICAgXnwNCj4gLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAg fCAgICAgfCAtLS0tLS0tLS0tLS0tLQ0KPiAgfDwtLS0oMCktLS0+fDwtLSgxKS0tfCAgICgzKSAg ICgyKSAgICAoNCkNCj4gDQo+IGlmIGVuYWJsZSB0aGUgd2FrZS1pcnEgYmVmb3JlIGNhbGxpbmcg cnVudGltZV9zdXNwZW5kIGR1cmluZyAoMCksDQo+IGFuIGludGVycnVwdCB3aWxsIGFyaXNlLCBp dCBjYXVzZXMgcmVzdW1lIGltbWVkaWF0ZWx5Ow0KPiBpdCB3b3JrcyBpZiBlbmFibGUgd2FrZS1p cnEgKCBlLmcuIGF0ICgzKSBvciAoNCkpIGFmdGVyIGNhbGxpbmcNCj4gcnVudGltZV9zdXNwZW5k Lg0KPiANCj4gVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHN0YXR1cyBXQUtFX0lSUV9ERURJ Q0FURURfTEFURV9FTkFCTEVEDQo+IHRvIG9wdGlvbmFsbHkgc3VwcG9ydCBlbmFibGluZyB3YWtl LWlycSBhZnRlciBjYWxsaW5nDQo+IHJ1bnRpbWVfc3VzcGVuZCgpLg0KPiANCj4gU3VnZ2VzdGVk LWJ5OiBSYWZhZWwgSi4gV3lzb2NraSA8cmFmYWVsLmoud3lzb2NraUBpbnRlbC5jb20+DQo+IFNp Z25lZC1vZmYtYnk6IENodW5mZW5nIFl1biA8Y2h1bmZlbmcueXVuQG1lZGlhdGVrLmNvbT4NCj4g LS0tDQo+IHYzOiBhZGQgbmV3IHN0YXR1cyBzdWdnZXN0ZWQgYnkgUmFmYWVsDQo+IA0KPiB2Mjog YWRkIG1vcmUgY29tbWl0IG1lc3NhZ2UNCj4gDQo+ICAgVXNlIHRoZSBmYWxsaW5nIGVkZ2UgdHJp Z2dlciBpbnRlcnJ1cHQgc3VnZ2VzdGVkIGJ5IElram9vbiBbMV0sIGl0DQo+IHdvcmtzIHdlbGwg YXQgZmlyc3RseSB3aGVuIG9ubHkgdXNlIHRoaXMgcmVsYXRlZCB3YWtldXAgc291cmNlLCBidXQN Cj4gZW5jb3VudGVyIGlzc3VlcyBpZiB1c2Ugb3RoZXIgd2FrZXVwIHNvdXJjZXMgdG8gd2FrZXVw IHBsYXRmb3JtIGFzDQo+IGJlbG93IHN0ZXBzOg0KPiAxLiB1c2UgYW5vdGhlciB3YWtldXAgc291 cmNlIHRvIHdha2UgdXAgdGhlIHN1c3BlbmRlZCBzeXN0ZW07DQo+IDIuIHRoZSBjb25zdW1lcidz IHJlc3VtZSgpIHdpbGwgYmUgY2FsbGVkLCBhbmQgZXhpdHMgc2xlZXAgc3RhdGU7DQo+IDMuIHRo ZSBjb25zdW1lcidzIHdha2V1cCBzaWduYWwgd2lsbCBmYWxsIGludG8gbG93IGxldmVsLCBkdWUg dG8NCj4gICAgY3VycmVudGx5IHRoZSB3YWtldXAgaXJxIGlzIGRpc2FibGVkLCB0aGUgd2FrZS1p cnEgaXMgcGVuZGluZzsNCj4gNC4gdGhlIGNvbnN1bWVyIHRyaWVzIHRvIGVudGVyIHJ1bnRpbWUg c3VzcGVuZCwgYnV0IHRoZXJlIGlzIGENCj4gICAgcGVuZGluZyB3YWtldXAgaXJxLCBzbyB3aWxs IHJlc3VtZSBhZ2FpbiwgdGhpcyB3aWxsIHJlcGVhdA0KPiAgICBlbmRsZXNzbHkuDQo+IA0KPiAg IFNlbmQgb3V0IHRoZSBwYXRjaCBhZ2FpbiBmb3IgZnVydGhlciBkaXNjdXNzaW9uLg0KPiANCj4g WzFdOiBodHRwczovL3BhdGNod29yay5rZXJuZWwub3JnL3BhdGNoLzEyMTkwNDA3DQo+IA0KPiAt LS0NCj4gIGRyaXZlcnMvYmFzZS9wb3dlci9wb3dlci5oICAgfCAgNyArKysrLS0NCj4gIGRyaXZl cnMvYmFzZS9wb3dlci9ydW50aW1lLmMgfCAgNiArKystLQ0KPiAgZHJpdmVycy9iYXNlL3Bvd2Vy L3dha2VpcnEuYyB8IDQ5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0NCj4gLS0N Cj4gIGluY2x1ZGUvbGludXgvcG1fd2FrZWlycS5oICAgfCAgNSArKysrDQo+ICA0IGZpbGVzIGNo YW5nZWQsIDYwIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pDQpQaW5nIC4uLg0KDQo+IA0K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmggYi9kcml2ZXJzL2Jhc2Uv cG93ZXIvcG93ZXIuaA0KPiBpbmRleCA1NDI5MmNkZDc4MDguLjJkNWRmYzg4NmYwYiAxMDA2NDQN Cj4gLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmgNCj4gKysrIGIvZHJpdmVycy9iYXNl L3Bvd2VyL3Bvd2VyLmgNCj4gQEAgLTI1LDggKzI1LDEwIEBAIGV4dGVybiB1NjQgcG1fcnVudGlt ZV9hY3RpdmVfdGltZShzdHJ1Y3QgZGV2aWNlDQo+ICpkZXYpOw0KPiAgDQo+ICAjZGVmaW5lIFdB S0VfSVJRX0RFRElDQVRFRF9BTExPQ0FURUQJQklUKDApDQo+ICAjZGVmaW5lIFdBS0VfSVJRX0RF RElDQVRFRF9NQU5BR0VECUJJVCgxKQ0KPiArI2RlZmluZSBXQUtFX0lSUV9ERURJQ0FURURfTEFU RV9FTkFCTEVECUJJVCgyKQ0KPiAgI2RlZmluZSBXQUtFX0lSUV9ERURJQ0FURURfTUFTSwkJKFdB S0VfSVJRX0RFRElDQVRFRF9BTEwNCj4gT0NBVEVEIHwgXA0KPiAtCQkJCQkgV0FLRV9JUlFfREVE SUNBVEVEX01BTkFHRUQpDQo+ICsJCQkJCSBXQUtFX0lSUV9ERURJQ0FURURfTUFOQUdFRCB8IFwN Cj4gKwkJCQkJIFdBS0VfSVJRX0RFRElDQVRFRF9MQVRFX0VOQUJMRQ0KPiBEKQ0KPiAgDQo+ICBz dHJ1Y3Qgd2FrZV9pcnEgew0KPiAgCXN0cnVjdCBkZXZpY2UgKmRldjsNCj4gQEAgLTM5LDcgKzQx LDggQEAgZXh0ZXJuIHZvaWQgZGV2X3BtX2FybV93YWtlX2lycShzdHJ1Y3Qgd2FrZV9pcnENCj4g KndpcnEpOw0KPiAgZXh0ZXJuIHZvaWQgZGV2X3BtX2Rpc2FybV93YWtlX2lycShzdHJ1Y3Qgd2Fr ZV9pcnEgKndpcnEpOw0KPiAgZXh0ZXJuIHZvaWQgZGV2X3BtX2VuYWJsZV93YWtlX2lycV9jaGVj ayhzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ICAJCQkJCSBib29sIGNhbl9jaGFuZ2Vfc3RhdHVzKTsN Cj4gLWV4dGVybiB2b2lkIGRldl9wbV9kaXNhYmxlX3dha2VfaXJxX2NoZWNrKHN0cnVjdCBkZXZp Y2UgKmRldik7DQo+ICtleHRlcm4gdm9pZCBkZXZfcG1fZGlzYWJsZV93YWtlX2lycV9jaGVjayhz dHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wNCj4gc2tpcF9lbmFibGVfbGF0ZSk7DQo+ICtleHRlcm4g dm9pZCBkZXZfcG1fZW5hYmxlX3dha2VfaXJxX2NvbXBsZXRlKHN0cnVjdCBkZXZpY2UgKmRldik7 DQo+ICANCj4gICNpZmRlZiBDT05GSUdfUE1fU0xFRVANCj4gIA0KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYw0KPiBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1l LmMNCj4gaW5kZXggZWM5NDA0OTQ0MmI5Li5lOGI4MDdjZDcwMTAgMTAwNjQ0DQo+IC0tLSBhL2Ry aXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMNCj4gKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1 bnRpbWUuYw0KPiBAQCAtNjQ1LDYgKzY0NSw4IEBAIHN0YXRpYyBpbnQgcnBtX3N1c3BlbmQoc3Ry dWN0IGRldmljZSAqZGV2LCBpbnQNCj4gcnBtZmxhZ3MpDQo+ICAJaWYgKHJldHZhbCkNCj4gIAkJ Z290byBmYWlsOw0KPiAgDQo+ICsJZGV2X3BtX2VuYWJsZV93YWtlX2lycV9jb21wbGV0ZShkZXYp Ow0KPiArDQo+ICAgbm9fY2FsbGJhY2s6DQo+ICAJX191cGRhdGVfcnVudGltZV9zdGF0dXMoZGV2 LCBSUE1fU1VTUEVOREVEKTsNCj4gIAlwbV9ydW50aW1lX2RlYWN0aXZhdGVfdGltZXIoZGV2KTsN Cj4gQEAgLTY5MCw3ICs2OTIsNyBAQCBzdGF0aWMgaW50IHJwbV9zdXNwZW5kKHN0cnVjdCBkZXZp Y2UgKmRldiwgaW50DQo+IHJwbWZsYWdzKQ0KPiAgCXJldHVybiByZXR2YWw7DQo+ICANCj4gICBm YWlsOg0KPiAtCWRldl9wbV9kaXNhYmxlX3dha2VfaXJxX2NoZWNrKGRldik7DQo+ICsJZGV2X3Bt X2Rpc2FibGVfd2FrZV9pcnFfY2hlY2soZGV2LCBmYWxzZSk7DQo+ICAJX191cGRhdGVfcnVudGlt ZV9zdGF0dXMoZGV2LCBSUE1fQUNUSVZFKTsNCj4gIAlkZXYtPnBvd2VyLmRlZmVycmVkX3Jlc3Vt ZSA9IGZhbHNlOw0KPiAgCXdha2VfdXBfYWxsKCZkZXYtPnBvd2VyLndhaXRfcXVldWUpOw0KPiBA QCAtODczLDcgKzg3NSw3IEBAIHN0YXRpYyBpbnQgcnBtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpk ZXYsIGludA0KPiBycG1mbGFncykNCj4gIA0KPiAgCWNhbGxiYWNrID0gUlBNX0dFVF9DQUxMQkFD SyhkZXYsIHJ1bnRpbWVfcmVzdW1lKTsNCj4gIA0KPiAtCWRldl9wbV9kaXNhYmxlX3dha2VfaXJx X2NoZWNrKGRldik7DQo+ICsJZGV2X3BtX2Rpc2FibGVfd2FrZV9pcnFfY2hlY2soZGV2LCB0cnVl KTsNCj4gIAlyZXR2YWwgPSBycG1fY2FsbGJhY2soY2FsbGJhY2ssIGRldik7DQo+ICAJaWYgKHJl dHZhbCkgew0KPiAgCQlfX3VwZGF0ZV9ydW50aW1lX3N0YXR1cyhkZXYsIFJQTV9TVVNQRU5ERUQp Ow0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3dha2VpcnEuYw0KPiBiL2RyaXZl cnMvYmFzZS9wb3dlci93YWtlaXJxLmMNCj4gaW5kZXggYjkxYTNhOWJmOWY2Li4xYWNmNzg1ZWJk Y2QgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci93YWtlaXJxLmMNCj4gKysrIGIv ZHJpdmVycy9iYXNlL3Bvd2VyL3dha2VpcnEuYw0KPiBAQCAtMjEyLDYgKzIxMiwyNCBAQCBpbnQg ZGV2X3BtX3NldF9kZWRpY2F0ZWRfd2FrZV9pcnEoc3RydWN0IGRldmljZQ0KPiAqZGV2LCBpbnQg aXJxKQ0KPiAgfQ0KPiAgRVhQT1JUX1NZTUJPTF9HUEwoZGV2X3BtX3NldF9kZWRpY2F0ZWRfd2Fr ZV9pcnEpOw0KPiAgDQo+ICsvKioNCj4gKyAqIGRldl9wbV93YWtlX2lycV9zZXRfbGF0ZV9lbmFi bGVkX3N0YXR1cyAtIHNldCBzdGF0dXMNCj4gV0FLRV9JUlFfREVESUNBVEVEX0xBVEVfRU5BQkxF RA0KPiArICogQGRldjogRGV2aWNlDQo+ICsgKg0KPiArICogU2V0IHRoZSBzdGF0dXMgb2YgV0FL RV9JUlFfREVESUNBVEVEX0xBVEVfRU5BQkxFRCB0byB0ZWxsDQo+IHJwbV9zdXNwZW5kKCkNCj4g KyAqIHRvIGVuYWJsZSBkZWRpY2F0ZWQgd2FrZS11cCBpbnRlcnJ1cHQgYWZ0ZXIgaW52b2tpbmcg dGhlDQo+IHJ1bnRpbWVfc3VzcGVuZCgpLA0KPiArICoNCj4gKyAqIFNob3VsZCBiZSBjYWxsZWQg YWZ0ZXIgc2V0dGluZyBkZWRpY2F0ZWQgd2FrZS11cCBpbnRlcnJ1cHQuDQo+ICsgKi8NCj4gK3Zv aWQgZGV2X3BtX3dha2VfaXJxX3NldF9sYXRlX2VuYWJsZWRfc3RhdHVzKHN0cnVjdCBkZXZpY2Ug KmRldikNCj4gK3sNCj4gKwlzdHJ1Y3Qgd2FrZV9pcnEgKndpcnEgPSBkZXYtPnBvd2VyLndha2Vp cnE7DQo+ICsNCj4gKwlpZiAod2lycSAmJiAod2lycS0+c3RhdHVzICYgV0FLRV9JUlFfREVESUNB VEVEX0FMTE9DQVRFRCkpDQo+ICsJCXdpcnEtPnN0YXR1cyB8PSBXQUtFX0lSUV9ERURJQ0FURURf TEFURV9FTkFCTEVEOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoZGV2X3BtX3dha2VfaXJx X3NldF9sYXRlX2VuYWJsZWRfc3RhdHVzKTsNCj4gKw0KPiAgLyoqDQo+ICAgKiBkZXZfcG1fZW5h YmxlX3dha2VfaXJxIC0gRW5hYmxlIGRldmljZSB3YWtlLXVwIGludGVycnVwdA0KPiAgICogQGRl djogRGV2aWNlDQo+IEBAIC0yODIsMjcgKzMwMCw1MiBAQCB2b2lkIGRldl9wbV9lbmFibGVfd2Fr ZV9pcnFfY2hlY2soc3RydWN0IGRldmljZQ0KPiAqZGV2LA0KPiAgCXJldHVybjsNCj4gIA0KPiAg ZW5hYmxlOg0KPiAtCWVuYWJsZV9pcnEod2lycS0+aXJxKTsNCj4gKwlpZiAoIWNhbl9jaGFuZ2Vf c3RhdHVzIHx8ICEod2lycS0+c3RhdHVzICYNCj4gV0FLRV9JUlFfREVESUNBVEVEX0xBVEVfRU5B QkxFRCkpDQo+ICsJCWVuYWJsZV9pcnEod2lycS0+aXJxKTsNCj4gIH0NCj4gIA0KPiAgLyoqDQo+ ICAgKiBkZXZfcG1fZGlzYWJsZV93YWtlX2lycV9jaGVjayAtIENoZWNrcyBhbmQgZGlzYWJsZXMg d2FrZS11cA0KPiBpbnRlcnJ1cHQNCj4gICAqIEBkZXY6IERldmljZQ0KPiArICogQHNraXBfbGF0 ZV9lbmFibGVkX3N0YXR1czogc2tpcCBjaGVja2luZw0KPiBXQUtFX0lSUV9ERURJQ0FURURfTEFU RV9FTkFCTEVEDQo+ICAgKg0KPiAgICogRGlzYWJsZXMgd2FrZS11cCBpbnRlcnJ1cHQgY29uZGl0 aW9uYWxseSBiYXNlZCBvbiBzdGF0dXMuDQo+ICAgKiBTaG91bGQgYmUgb25seSBjYWxsZWQgZnJv bSBycG1fc3VzcGVuZCgpIGFuZCBycG1fcmVzdW1lKCkgcGF0aC4NCj4gICAqLw0KPiAtdm9pZCBk ZXZfcG1fZGlzYWJsZV93YWtlX2lycV9jaGVjayhzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ICt2b2lk IGRldl9wbV9kaXNhYmxlX3dha2VfaXJxX2NoZWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbA0K PiBza2lwX2xhdGVfZW5hYmxlZF9zdGF0dXMpDQo+ICB7DQo+ICAJc3RydWN0IHdha2VfaXJxICp3 aXJxID0gZGV2LT5wb3dlci53YWtlaXJxOw0KPiAgDQo+ICAJaWYgKCF3aXJxIHx8ICEod2lycS0+ c3RhdHVzICYgV0FLRV9JUlFfREVESUNBVEVEX01BU0spKQ0KPiAgCQlyZXR1cm47DQo+ICANCj4g LQlpZiAod2lycS0+c3RhdHVzICYgV0FLRV9JUlFfREVESUNBVEVEX01BTkFHRUQpDQo+ICsJaWYg KHdpcnEtPnN0YXR1cyAmIFdBS0VfSVJRX0RFRElDQVRFRF9NQU5BR0VEICYmDQo+ICsJICAgIChz a2lwX2xhdGVfZW5hYmxlZF9zdGF0dXMgfHwNCj4gKwkgICAgICEod2lycS0+c3RhdHVzICYgV0FL RV9JUlFfREVESUNBVEVEX0xBVEVfRU5BQkxFRCkpKQ0KPiAgCQlkaXNhYmxlX2lycV9ub3N5bmMo d2lycS0+aXJxKTsNCj4gIH0NCj4gIA0KPiArLyoqDQo+ICsgKiBkZXZfcG1fZW5hYmxlX3dha2Vf aXJxX2NvbXBsZXRlIC0gZW5hYmxlIHdha2UgaXJxIGJhc2VkIG9uIHN0YXR1cw0KPiArICogQGRl djogRGV2aWNlDQo+ICsgKg0KPiArICogRW5hYmxlIHdha2UtdXAgaW50ZXJydXB0IGNvbmRpdGlv bmFsbHkgYmFzZWQgb24gc3RhdHVzLCBtYWlubHkNCj4gZm9yDQo+ICsgKiBlbmFibGluZyB3YWtl LXVwIGludGVycnVwdCBhZnRlciBydW50aW1lX3N1c3BlbmQoKSBpcyBjYWxsZWQuDQo+ICsgKg0K PiArICogU2hvdWxkIGJlIG9ubHkgY2FsbGVkIGZyb20gcnBtX3N1c3BlbmQoKSBwYXRoLg0KPiAr ICovDQo+ICt2b2lkIGRldl9wbV9lbmFibGVfd2FrZV9pcnFfY29tcGxldGUoc3RydWN0IGRldmlj ZSAqZGV2KQ0KPiArew0KPiArCXN0cnVjdCB3YWtlX2lycSAqd2lycSA9IGRldi0+cG93ZXIud2Fr ZWlycTsNCj4gKw0KPiArCWlmICghd2lycSB8fCAhKHdpcnEtPnN0YXR1cyAmIFdBS0VfSVJRX0RF RElDQVRFRF9NQVNLKSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJaWYgKHdpcnEtPnN0YXR1cyAm IFdBS0VfSVJRX0RFRElDQVRFRF9NQU5BR0VEICYmDQo+ICsJICAgIHdpcnEtPnN0YXR1cyAmIFdB S0VfSVJRX0RFRElDQVRFRF9MQVRFX0VOQUJMRUQpDQo+ICsJCWVuYWJsZV9pcnEod2lycS0+aXJx KTsNCj4gK30NCj4gKw0KPiAgLyoqDQo+ICAgKiBkZXZfcG1fYXJtX3dha2VfaXJxIC0gQXJtIGRl dmljZSB3YWtlLXVwDQo+ICAgKiBAd2lycTogRGV2aWNlIHdha2UtdXAgaW50ZXJydXB0DQo+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtX3dha2VpcnEuaCBiL2luY2x1ZGUvbGludXgvcG1f d2FrZWlycS5oDQo+IGluZGV4IGNkNWI2MmRiOTA4NC4uOTJmODE0ZDU4M2Y4IDEwMDY0NA0KPiAt LS0gYS9pbmNsdWRlL2xpbnV4L3BtX3dha2VpcnEuaA0KPiArKysgYi9pbmNsdWRlL2xpbnV4L3Bt X3dha2VpcnEuaA0KPiBAQCAtMjIsNiArMjIsNyBAQCBleHRlcm4gaW50IGRldl9wbV9zZXRfZGVk aWNhdGVkX3dha2VfaXJxKHN0cnVjdA0KPiBkZXZpY2UgKmRldiwNCj4gIGV4dGVybiB2b2lkIGRl dl9wbV9jbGVhcl93YWtlX2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpOw0KPiAgZXh0ZXJuIHZvaWQg ZGV2X3BtX2VuYWJsZV93YWtlX2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpOw0KPiAgZXh0ZXJuIHZv aWQgZGV2X3BtX2Rpc2FibGVfd2FrZV9pcnEoc3RydWN0IGRldmljZSAqZGV2KTsNCj4gK2V4dGVy biB2b2lkIGRldl9wbV93YWtlX2lycV9zZXRfbGF0ZV9lbmFibGVkX3N0YXR1cyhzdHJ1Y3QgZGV2 aWNlDQo+ICpkZXYpOw0KPiAgDQo+ICAjZWxzZQkvKiAhQ09ORklHX1BNICovDQo+ICANCj4gQEAg LTQ3LDUgKzQ4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIGRldl9wbV9kaXNhYmxlX3dha2VfaXJx KHN0cnVjdA0KPiBkZXZpY2UgKmRldikNCj4gIHsNCj4gIH0NCj4gIA0KPiArc3RhdGljIGlubGlu ZSB2b2lkIGRldl9wbV93YWtlX2lycV9zZXRfbGF0ZV9lbmFibGVkX3N0YXR1cyhzdHJ1Y3QNCj4g ZGV2aWNlICpkZXYpDQo+ICt7DQo+ICt9DQo+ICsNCj4gICNlbmRpZgkvKiBDT05GSUdfUE0gKi8N Cj4gICNlbmRpZgkvKiBfTElOVVhfUE1fV0FLRUlSUV9IICovDQo= 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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3B22AC433F5 for ; Wed, 13 Oct 2021 11:09:45 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 03DE461053 for ; Wed, 13 Oct 2021 11:09:44 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 03DE461053 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:CC: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=eH4xxrNiGBE/i7L44QW+Hn4u9q8aVCE63WpBan+CFRs=; b=oZKx0+4tlbT3Hq vaKxYUxFGRKWaYeVmfXhC8U3Zli/oHCTmMZbf5i6vfdGUr5ukDCNlUMBWR10++ETpB9Fv3kK0Qkp3 B8HDd3tJ7uCu2C3d6MwZPaLp0uMAf4vuz52yUEqUso1LxlrISShzgZS4kNzk/04eu/F77vE2ZVGaE D7gTFWYioXRMRd5kLs8MpLSUYiAzVcLti4nuR/W/Nqp7jyt+dnJNHxvJGroB7/dnV/KH8LjZY4Df/ pyaPR7Eo/TQdyXIUaqtYEH8VNmsktuQfuMpV7YBMlpJezhOyZWowjT4NG4xGnFrJRvF8f+uQx9Twb dj5U60jkhEw1odYM31jw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mac8W-00GCkT-Ph; Wed, 13 Oct 2021 11:09:28 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1maaCk-00FhqQ-DM; Wed, 13 Oct 2021 09:05:48 +0000 X-UUID: ca1914ee3c234cc389214429c0cfec93-20211013 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=qyw2jvRrWrpLU3Qi9lhBa5j9cxz4dl/xIrGBRFmd6hc=; b=S6jGg8GC+L26rlIuvhk2A9j3VkLfib5/AvGre4Xvm+IPUvrE3Gckf+VvjGBMR1QvVmJJSgY53j2t+ShWhnJcEA0rIyGOpzttfR1I4te3zrKQ9Ul4V13GXG1toZ5JPAW7iYoDvyrvDsahI/4s3Fpwftpcr9mzsUQpMEtPMj+lifo=; X-UUID: ca1914ee3c234cc389214429c0cfec93-20211013 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 815920474; Wed, 13 Oct 2021 02:05:33 -0700 Received: from MTKMBS31N1.mediatek.inc (172.27.4.69) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 13 Oct 2021 02:05:31 -0700 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS31N1.mediatek.inc (172.27.4.69) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 13 Oct 2021 17:05:25 +0800 Received: from mhfsdcap04 (10.17.3.154) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 13 Oct 2021 17:05:24 +0800 Message-ID: <6ed7c99ea2f8ef46d62785ecdbe4ae29bd66a630.camel@mediatek.com> Subject: Re: [PATCH RESEND v3 1/2] PM / wakeirq: support enabling wake-up irq after runtime_suspend called From: Chunfeng Yun To: "Rafael J . Wysocki" CC: Len Brown , Pavel Machek , "Greg Kroah-Hartman" , Mathias Nyman , Matthias Brugger , , , , , , "Rafael J . Wysocki" Date: Wed, 13 Oct 2021 17:05:27 +0800 In-Reply-To: <20210924023746.22423-1-chunfeng.yun@mediatek.com> References: <20210924023746.22423-1-chunfeng.yun@mediatek.com> X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.2 MIME-Version: 1.0 X-TM-SNTS-SMTP: CB26C819106148658AD623A5739B6A41013C67FBEF91DC638C8C2A10594EBE112000:8 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211013_020545_677123_C5F7B306 X-CRM114-Status: GOOD ( 35.46 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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, 2021-09-24 at 10:37 +0800, Chunfeng Yun wrote: > When the dedicated wake-irq is level trigger, and it uses the > consumer's sleep status as the wakeup source, that means if the > consumer is not in sleep state, the wake-irq will be triggered > when enable it; For this case, need enable the wake-irq after > invoking the consumer's runtime_suspend() which make the consumer > enter sleep state. > > e.g. > Assume the wake-irq is a low level trigger type, and the wakeup > signal comes from the sleep status of consumer. > The wakeup signal is low level at running time (0), and becomes > high level when the consumer enters sleep state (runtime_suspend > (1) is called), a wakeup event at (2) make the consumer exit sleep > state, then the wakeup signal also becomes low level. > > ------------------ > | ^ ^| > ---------------- | | -------------- > |<---(0)--->|<--(1)--| (3) (2) (4) > > if enable the wake-irq before calling runtime_suspend during (0), > an interrupt will arise, it causes resume immediately; > it works if enable wake-irq ( e.g. at (3) or (4)) after calling > runtime_suspend. > > This patch introduces a new status WAKE_IRQ_DEDICATED_LATE_ENABLED > to optionally support enabling wake-irq after calling > runtime_suspend(). > > Suggested-by: Rafael J. Wysocki > Signed-off-by: Chunfeng Yun > --- > v3: add new status suggested by Rafael > > v2: add more commit message > > Use the falling edge trigger interrupt suggested by Ikjoon [1], it > works well at firstly when only use this related wakeup source, but > encounter issues if use other wakeup sources to wakeup platform as > below steps: > 1. use another wakeup source to wake up the suspended system; > 2. the consumer's resume() will be called, and exits sleep state; > 3. the consumer's wakeup signal will fall into low level, due to > currently the wakeup irq is disabled, the wake-irq is pending; > 4. the consumer tries to enter runtime suspend, but there is a > pending wakeup irq, so will resume again, this will repeat > endlessly. > > Send out the patch again for further discussion. > > [1]: https://patchwork.kernel.org/patch/12190407 > > --- > drivers/base/power/power.h | 7 ++++-- > drivers/base/power/runtime.c | 6 +++-- > drivers/base/power/wakeirq.c | 49 +++++++++++++++++++++++++++++++++- > -- > include/linux/pm_wakeirq.h | 5 ++++ > 4 files changed, 60 insertions(+), 7 deletions(-) Ping ... > > diff --git a/drivers/base/power/power.h b/drivers/base/power/power.h > index 54292cdd7808..2d5dfc886f0b 100644 > --- a/drivers/base/power/power.h > +++ b/drivers/base/power/power.h > @@ -25,8 +25,10 @@ extern u64 pm_runtime_active_time(struct device > *dev); > > #define WAKE_IRQ_DEDICATED_ALLOCATED BIT(0) > #define WAKE_IRQ_DEDICATED_MANAGED BIT(1) > +#define WAKE_IRQ_DEDICATED_LATE_ENABLED BIT(2) > #define WAKE_IRQ_DEDICATED_MASK (WAKE_IRQ_DEDICATED_ALL > OCATED | \ > - WAKE_IRQ_DEDICATED_MANAGED) > + WAKE_IRQ_DEDICATED_MANAGED | \ > + WAKE_IRQ_DEDICATED_LATE_ENABLE > D) > > struct wake_irq { > struct device *dev; > @@ -39,7 +41,8 @@ extern void dev_pm_arm_wake_irq(struct wake_irq > *wirq); > extern void dev_pm_disarm_wake_irq(struct wake_irq *wirq); > extern void dev_pm_enable_wake_irq_check(struct device *dev, > bool can_change_status); > -extern void dev_pm_disable_wake_irq_check(struct device *dev); > +extern void dev_pm_disable_wake_irq_check(struct device *dev, bool > skip_enable_late); > +extern void dev_pm_enable_wake_irq_complete(struct device *dev); > > #ifdef CONFIG_PM_SLEEP > > diff --git a/drivers/base/power/runtime.c > b/drivers/base/power/runtime.c > index ec94049442b9..e8b807cd7010 100644 > --- a/drivers/base/power/runtime.c > +++ b/drivers/base/power/runtime.c > @@ -645,6 +645,8 @@ static int rpm_suspend(struct device *dev, int > rpmflags) > if (retval) > goto fail; > > + dev_pm_enable_wake_irq_complete(dev); > + > no_callback: > __update_runtime_status(dev, RPM_SUSPENDED); > pm_runtime_deactivate_timer(dev); > @@ -690,7 +692,7 @@ static int rpm_suspend(struct device *dev, int > rpmflags) > return retval; > > fail: > - dev_pm_disable_wake_irq_check(dev); > + dev_pm_disable_wake_irq_check(dev, false); > __update_runtime_status(dev, RPM_ACTIVE); > dev->power.deferred_resume = false; > wake_up_all(&dev->power.wait_queue); > @@ -873,7 +875,7 @@ static int rpm_resume(struct device *dev, int > rpmflags) > > callback = RPM_GET_CALLBACK(dev, runtime_resume); > > - dev_pm_disable_wake_irq_check(dev); > + dev_pm_disable_wake_irq_check(dev, true); > retval = rpm_callback(callback, dev); > if (retval) { > __update_runtime_status(dev, RPM_SUSPENDED); > diff --git a/drivers/base/power/wakeirq.c > b/drivers/base/power/wakeirq.c > index b91a3a9bf9f6..1acf785ebdcd 100644 > --- a/drivers/base/power/wakeirq.c > +++ b/drivers/base/power/wakeirq.c > @@ -212,6 +212,24 @@ int dev_pm_set_dedicated_wake_irq(struct device > *dev, int irq) > } > EXPORT_SYMBOL_GPL(dev_pm_set_dedicated_wake_irq); > > +/** > + * dev_pm_wake_irq_set_late_enabled_status - set status > WAKE_IRQ_DEDICATED_LATE_ENABLED > + * @dev: Device > + * > + * Set the status of WAKE_IRQ_DEDICATED_LATE_ENABLED to tell > rpm_suspend() > + * to enable dedicated wake-up interrupt after invoking the > runtime_suspend(), > + * > + * Should be called after setting dedicated wake-up interrupt. > + */ > +void dev_pm_wake_irq_set_late_enabled_status(struct device *dev) > +{ > + struct wake_irq *wirq = dev->power.wakeirq; > + > + if (wirq && (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED)) > + wirq->status |= WAKE_IRQ_DEDICATED_LATE_ENABLED; > +} > +EXPORT_SYMBOL_GPL(dev_pm_wake_irq_set_late_enabled_status); > + > /** > * dev_pm_enable_wake_irq - Enable device wake-up interrupt > * @dev: Device > @@ -282,27 +300,52 @@ void dev_pm_enable_wake_irq_check(struct device > *dev, > return; > > enable: > - enable_irq(wirq->irq); > + if (!can_change_status || !(wirq->status & > WAKE_IRQ_DEDICATED_LATE_ENABLED)) > + enable_irq(wirq->irq); > } > > /** > * dev_pm_disable_wake_irq_check - Checks and disables wake-up > interrupt > * @dev: Device > + * @skip_late_enabled_status: skip checking > WAKE_IRQ_DEDICATED_LATE_ENABLED > * > * Disables wake-up interrupt conditionally based on status. > * Should be only called from rpm_suspend() and rpm_resume() path. > */ > -void dev_pm_disable_wake_irq_check(struct device *dev) > +void dev_pm_disable_wake_irq_check(struct device *dev, bool > skip_late_enabled_status) > { > struct wake_irq *wirq = dev->power.wakeirq; > > if (!wirq || !(wirq->status & WAKE_IRQ_DEDICATED_MASK)) > return; > > - if (wirq->status & WAKE_IRQ_DEDICATED_MANAGED) > + if (wirq->status & WAKE_IRQ_DEDICATED_MANAGED && > + (skip_late_enabled_status || > + !(wirq->status & WAKE_IRQ_DEDICATED_LATE_ENABLED))) > disable_irq_nosync(wirq->irq); > } > > +/** > + * dev_pm_enable_wake_irq_complete - enable wake irq based on status > + * @dev: Device > + * > + * Enable wake-up interrupt conditionally based on status, mainly > for > + * enabling wake-up interrupt after runtime_suspend() is called. > + * > + * Should be only called from rpm_suspend() path. > + */ > +void dev_pm_enable_wake_irq_complete(struct device *dev) > +{ > + struct wake_irq *wirq = dev->power.wakeirq; > + > + if (!wirq || !(wirq->status & WAKE_IRQ_DEDICATED_MASK)) > + return; > + > + if (wirq->status & WAKE_IRQ_DEDICATED_MANAGED && > + wirq->status & WAKE_IRQ_DEDICATED_LATE_ENABLED) > + enable_irq(wirq->irq); > +} > + > /** > * dev_pm_arm_wake_irq - Arm device wake-up > * @wirq: Device wake-up interrupt > diff --git a/include/linux/pm_wakeirq.h b/include/linux/pm_wakeirq.h > index cd5b62db9084..92f814d583f8 100644 > --- a/include/linux/pm_wakeirq.h > +++ b/include/linux/pm_wakeirq.h > @@ -22,6 +22,7 @@ extern int dev_pm_set_dedicated_wake_irq(struct > device *dev, > extern void dev_pm_clear_wake_irq(struct device *dev); > extern void dev_pm_enable_wake_irq(struct device *dev); > extern void dev_pm_disable_wake_irq(struct device *dev); > +extern void dev_pm_wake_irq_set_late_enabled_status(struct device > *dev); > > #else /* !CONFIG_PM */ > > @@ -47,5 +48,9 @@ static inline void dev_pm_disable_wake_irq(struct > device *dev) > { > } > > +static inline void dev_pm_wake_irq_set_late_enabled_status(struct > device *dev) > +{ > +} > + > #endif /* CONFIG_PM */ > #endif /* _LINUX_PM_WAKEIRQ_H */ _______________________________________________ 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 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 45FFFC433F5 for ; Wed, 13 Oct 2021 11:12:37 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E4FF261056 for ; Wed, 13 Oct 2021 11:12:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org E4FF261056 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:CC: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=Bi1CiewoqNpoFJiDuPZYx5fp5SmCyLeugZGCH6rG/qI=; b=j/Soj4/8JvTHn7 ZHE096x9JbpMXmCKpx7tHaM+4TPX3arESzgqMkYdI+dA7JCnw8IT+vF2oTe+loKoDOmoNFuniyMYz PsXKuF3+hgDLhoXJguiqZEuMq+knPrH1u9RWoPALdlzfEZ8zr5WkZyaCSYZGewBweTU+InWnrRJDp i1t7mjGAuk9E8LiCFsBZzxupfpnsKKomU53+iejWn8CBKWAMg3iakv8iNLL7DCh8DBGutYX4wbAc8 Ekx1xPAmfXwU0Of7kSm9kzMlE9sbcUg3Go6W+INx2wFh6WnYWoJ3LqXla+8MqIO5LVt19WVCVmn6r PWrtzGNfYyqfYGKVQOdA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mac8g-00GCmd-5h; Wed, 13 Oct 2021 11:09:38 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1maaCk-00FhqQ-DM; Wed, 13 Oct 2021 09:05:48 +0000 X-UUID: ca1914ee3c234cc389214429c0cfec93-20211013 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=qyw2jvRrWrpLU3Qi9lhBa5j9cxz4dl/xIrGBRFmd6hc=; b=S6jGg8GC+L26rlIuvhk2A9j3VkLfib5/AvGre4Xvm+IPUvrE3Gckf+VvjGBMR1QvVmJJSgY53j2t+ShWhnJcEA0rIyGOpzttfR1I4te3zrKQ9Ul4V13GXG1toZ5JPAW7iYoDvyrvDsahI/4s3Fpwftpcr9mzsUQpMEtPMj+lifo=; X-UUID: ca1914ee3c234cc389214429c0cfec93-20211013 Received: from mtkcas66.mediatek.inc [(172.29.193.44)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 815920474; Wed, 13 Oct 2021 02:05:33 -0700 Received: from MTKMBS31N1.mediatek.inc (172.27.4.69) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 13 Oct 2021 02:05:31 -0700 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS31N1.mediatek.inc (172.27.4.69) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 13 Oct 2021 17:05:25 +0800 Received: from mhfsdcap04 (10.17.3.154) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 13 Oct 2021 17:05:24 +0800 Message-ID: <6ed7c99ea2f8ef46d62785ecdbe4ae29bd66a630.camel@mediatek.com> Subject: Re: [PATCH RESEND v3 1/2] PM / wakeirq: support enabling wake-up irq after runtime_suspend called From: Chunfeng Yun To: "Rafael J . Wysocki" CC: Len Brown , Pavel Machek , "Greg Kroah-Hartman" , Mathias Nyman , Matthias Brugger , , , , , , "Rafael J . Wysocki" Date: Wed, 13 Oct 2021 17:05:27 +0800 In-Reply-To: <20210924023746.22423-1-chunfeng.yun@mediatek.com> References: <20210924023746.22423-1-chunfeng.yun@mediatek.com> X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.2 MIME-Version: 1.0 X-TM-SNTS-SMTP: CB26C819106148658AD623A5739B6A41013C67FBEF91DC638C8C2A10594EBE112000:8 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211013_020545_677123_C5F7B306 X-CRM114-Status: GOOD ( 35.46 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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, 2021-09-24 at 10:37 +0800, Chunfeng Yun wrote: > When the dedicated wake-irq is level trigger, and it uses the > consumer's sleep status as the wakeup source, that means if the > consumer is not in sleep state, the wake-irq will be triggered > when enable it; For this case, need enable the wake-irq after > invoking the consumer's runtime_suspend() which make the consumer > enter sleep state. > > e.g. > Assume the wake-irq is a low level trigger type, and the wakeup > signal comes from the sleep status of consumer. > The wakeup signal is low level at running time (0), and becomes > high level when the consumer enters sleep state (runtime_suspend > (1) is called), a wakeup event at (2) make the consumer exit sleep > state, then the wakeup signal also becomes low level. > > ------------------ > | ^ ^| > ---------------- | | -------------- > |<---(0)--->|<--(1)--| (3) (2) (4) > > if enable the wake-irq before calling runtime_suspend during (0), > an interrupt will arise, it causes resume immediately; > it works if enable wake-irq ( e.g. at (3) or (4)) after calling > runtime_suspend. > > This patch introduces a new status WAKE_IRQ_DEDICATED_LATE_ENABLED > to optionally support enabling wake-irq after calling > runtime_suspend(). > > Suggested-by: Rafael J. Wysocki > Signed-off-by: Chunfeng Yun > --- > v3: add new status suggested by Rafael > > v2: add more commit message > > Use the falling edge trigger interrupt suggested by Ikjoon [1], it > works well at firstly when only use this related wakeup source, but > encounter issues if use other wakeup sources to wakeup platform as > below steps: > 1. use another wakeup source to wake up the suspended system; > 2. the consumer's resume() will be called, and exits sleep state; > 3. the consumer's wakeup signal will fall into low level, due to > currently the wakeup irq is disabled, the wake-irq is pending; > 4. the consumer tries to enter runtime suspend, but there is a > pending wakeup irq, so will resume again, this will repeat > endlessly. > > Send out the patch again for further discussion. > > [1]: https://patchwork.kernel.org/patch/12190407 > > --- > drivers/base/power/power.h | 7 ++++-- > drivers/base/power/runtime.c | 6 +++-- > drivers/base/power/wakeirq.c | 49 +++++++++++++++++++++++++++++++++- > -- > include/linux/pm_wakeirq.h | 5 ++++ > 4 files changed, 60 insertions(+), 7 deletions(-) Ping ... > > diff --git a/drivers/base/power/power.h b/drivers/base/power/power.h > index 54292cdd7808..2d5dfc886f0b 100644 > --- a/drivers/base/power/power.h > +++ b/drivers/base/power/power.h > @@ -25,8 +25,10 @@ extern u64 pm_runtime_active_time(struct device > *dev); > > #define WAKE_IRQ_DEDICATED_ALLOCATED BIT(0) > #define WAKE_IRQ_DEDICATED_MANAGED BIT(1) > +#define WAKE_IRQ_DEDICATED_LATE_ENABLED BIT(2) > #define WAKE_IRQ_DEDICATED_MASK (WAKE_IRQ_DEDICATED_ALL > OCATED | \ > - WAKE_IRQ_DEDICATED_MANAGED) > + WAKE_IRQ_DEDICATED_MANAGED | \ > + WAKE_IRQ_DEDICATED_LATE_ENABLE > D) > > struct wake_irq { > struct device *dev; > @@ -39,7 +41,8 @@ extern void dev_pm_arm_wake_irq(struct wake_irq > *wirq); > extern void dev_pm_disarm_wake_irq(struct wake_irq *wirq); > extern void dev_pm_enable_wake_irq_check(struct device *dev, > bool can_change_status); > -extern void dev_pm_disable_wake_irq_check(struct device *dev); > +extern void dev_pm_disable_wake_irq_check(struct device *dev, bool > skip_enable_late); > +extern void dev_pm_enable_wake_irq_complete(struct device *dev); > > #ifdef CONFIG_PM_SLEEP > > diff --git a/drivers/base/power/runtime.c > b/drivers/base/power/runtime.c > index ec94049442b9..e8b807cd7010 100644 > --- a/drivers/base/power/runtime.c > +++ b/drivers/base/power/runtime.c > @@ -645,6 +645,8 @@ static int rpm_suspend(struct device *dev, int > rpmflags) > if (retval) > goto fail; > > + dev_pm_enable_wake_irq_complete(dev); > + > no_callback: > __update_runtime_status(dev, RPM_SUSPENDED); > pm_runtime_deactivate_timer(dev); > @@ -690,7 +692,7 @@ static int rpm_suspend(struct device *dev, int > rpmflags) > return retval; > > fail: > - dev_pm_disable_wake_irq_check(dev); > + dev_pm_disable_wake_irq_check(dev, false); > __update_runtime_status(dev, RPM_ACTIVE); > dev->power.deferred_resume = false; > wake_up_all(&dev->power.wait_queue); > @@ -873,7 +875,7 @@ static int rpm_resume(struct device *dev, int > rpmflags) > > callback = RPM_GET_CALLBACK(dev, runtime_resume); > > - dev_pm_disable_wake_irq_check(dev); > + dev_pm_disable_wake_irq_check(dev, true); > retval = rpm_callback(callback, dev); > if (retval) { > __update_runtime_status(dev, RPM_SUSPENDED); > diff --git a/drivers/base/power/wakeirq.c > b/drivers/base/power/wakeirq.c > index b91a3a9bf9f6..1acf785ebdcd 100644 > --- a/drivers/base/power/wakeirq.c > +++ b/drivers/base/power/wakeirq.c > @@ -212,6 +212,24 @@ int dev_pm_set_dedicated_wake_irq(struct device > *dev, int irq) > } > EXPORT_SYMBOL_GPL(dev_pm_set_dedicated_wake_irq); > > +/** > + * dev_pm_wake_irq_set_late_enabled_status - set status > WAKE_IRQ_DEDICATED_LATE_ENABLED > + * @dev: Device > + * > + * Set the status of WAKE_IRQ_DEDICATED_LATE_ENABLED to tell > rpm_suspend() > + * to enable dedicated wake-up interrupt after invoking the > runtime_suspend(), > + * > + * Should be called after setting dedicated wake-up interrupt. > + */ > +void dev_pm_wake_irq_set_late_enabled_status(struct device *dev) > +{ > + struct wake_irq *wirq = dev->power.wakeirq; > + > + if (wirq && (wirq->status & WAKE_IRQ_DEDICATED_ALLOCATED)) > + wirq->status |= WAKE_IRQ_DEDICATED_LATE_ENABLED; > +} > +EXPORT_SYMBOL_GPL(dev_pm_wake_irq_set_late_enabled_status); > + > /** > * dev_pm_enable_wake_irq - Enable device wake-up interrupt > * @dev: Device > @@ -282,27 +300,52 @@ void dev_pm_enable_wake_irq_check(struct device > *dev, > return; > > enable: > - enable_irq(wirq->irq); > + if (!can_change_status || !(wirq->status & > WAKE_IRQ_DEDICATED_LATE_ENABLED)) > + enable_irq(wirq->irq); > } > > /** > * dev_pm_disable_wake_irq_check - Checks and disables wake-up > interrupt > * @dev: Device > + * @skip_late_enabled_status: skip checking > WAKE_IRQ_DEDICATED_LATE_ENABLED > * > * Disables wake-up interrupt conditionally based on status. > * Should be only called from rpm_suspend() and rpm_resume() path. > */ > -void dev_pm_disable_wake_irq_check(struct device *dev) > +void dev_pm_disable_wake_irq_check(struct device *dev, bool > skip_late_enabled_status) > { > struct wake_irq *wirq = dev->power.wakeirq; > > if (!wirq || !(wirq->status & WAKE_IRQ_DEDICATED_MASK)) > return; > > - if (wirq->status & WAKE_IRQ_DEDICATED_MANAGED) > + if (wirq->status & WAKE_IRQ_DEDICATED_MANAGED && > + (skip_late_enabled_status || > + !(wirq->status & WAKE_IRQ_DEDICATED_LATE_ENABLED))) > disable_irq_nosync(wirq->irq); > } > > +/** > + * dev_pm_enable_wake_irq_complete - enable wake irq based on status > + * @dev: Device > + * > + * Enable wake-up interrupt conditionally based on status, mainly > for > + * enabling wake-up interrupt after runtime_suspend() is called. > + * > + * Should be only called from rpm_suspend() path. > + */ > +void dev_pm_enable_wake_irq_complete(struct device *dev) > +{ > + struct wake_irq *wirq = dev->power.wakeirq; > + > + if (!wirq || !(wirq->status & WAKE_IRQ_DEDICATED_MASK)) > + return; > + > + if (wirq->status & WAKE_IRQ_DEDICATED_MANAGED && > + wirq->status & WAKE_IRQ_DEDICATED_LATE_ENABLED) > + enable_irq(wirq->irq); > +} > + > /** > * dev_pm_arm_wake_irq - Arm device wake-up > * @wirq: Device wake-up interrupt > diff --git a/include/linux/pm_wakeirq.h b/include/linux/pm_wakeirq.h > index cd5b62db9084..92f814d583f8 100644 > --- a/include/linux/pm_wakeirq.h > +++ b/include/linux/pm_wakeirq.h > @@ -22,6 +22,7 @@ extern int dev_pm_set_dedicated_wake_irq(struct > device *dev, > extern void dev_pm_clear_wake_irq(struct device *dev); > extern void dev_pm_enable_wake_irq(struct device *dev); > extern void dev_pm_disable_wake_irq(struct device *dev); > +extern void dev_pm_wake_irq_set_late_enabled_status(struct device > *dev); > > #else /* !CONFIG_PM */ > > @@ -47,5 +48,9 @@ static inline void dev_pm_disable_wake_irq(struct > device *dev) > { > } > > +static inline void dev_pm_wake_irq_set_late_enabled_status(struct > device *dev) > +{ > +} > + > #endif /* CONFIG_PM */ > #endif /* _LINUX_PM_WAKEIRQ_H */ _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel