From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vivek Gautam Subject: Re: [PATCH v12 1/4] iommu/arm-smmu: Add pm_runtime/sleep ops Date: Mon, 16 Jul 2018 15:41:12 +0530 Message-ID: <010cb56a-36e8-e729-1fe7-738048eb551d@codeaurora.org> References: <20180708173413.1965-1-vivek.gautam@codeaurora.org> <20180708173413.1965-2-vivek.gautam@codeaurora.org> <17407514.unFVTGoGrn@aspire.rjw.lan> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: "Rafael J. Wysocki" Cc: Mark Rutland , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Linux PM , Stephen Boyd , "Rafael J. Wysocki" , Joerg Roedel , Will Deacon , Linux Kernel Mailing List , Tomasz Figa , iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, Rob Herring , linux-arm-msm , freedreno List-Id: linux-arm-msm@vger.kernel.org SEkgUmFmYWVsLAoKCk9uIDcvMTYvMjAxOCAyOjIxIFBNLCBSYWZhZWwgSi4gV3lzb2NraSB3cm90 ZToKPiBPbiBUaHUsIEp1bCAxMiwgMjAxOCBhdCAxMjo1NyBQTSwgVml2ZWsgR2F1dGFtCj4gPHZp dmVrLmdhdXRhbUBjb2RlYXVyb3JhLm9yZz4gd3JvdGU6Cj4+IEhpLAo+Pgo+Pgo+PiBPbiBXZWQs IEp1bCAxMSwgMjAxOCBhdCA2OjIxIFBNLCBUb21hc3ogRmlnYSA8dGZpZ2FAY2hyb21pdW0ub3Jn PiB3cm90ZToKPj4+IE9uIFdlZCwgSnVsIDExLCAyMDE4IGF0IDg6MTEgUE0gUmFmYWVsIEouIFd5 c29ja2kgPHJhZmFlbEBrZXJuZWwub3JnPiB3cm90ZToKPj4+PiBPbiBXZWQsIEp1bCAxMSwgMjAx OCBhdCAxMjo1NSBQTSwgVml2ZWsgR2F1dGFtCj4+Pj4gPHZpdmVrLmdhdXRhbUBjb2RlYXVyb3Jh Lm9yZz4gd3JvdGU6Cj4+Pj4+IEhpIFJhZmFlbCwKPj4+Pj4KPj4+Pj4KPj4+Pj4gT24gV2VkLCBK dWwgMTEsIDIwMTggYXQgMzoyMCBQTSwgUmFmYWVsIEouIFd5c29ja2kgPHJqd0Byand5c29ja2ku bmV0PiB3cm90ZToKPj4+Pj4+IE9uIFN1bmRheSwgSnVseSA4LCAyMDE4IDc6MzQ6MTAgUE0gQ0VT VCBWaXZlayBHYXV0YW0gd3JvdGU6Cj4+Pj4+Pj4gRnJvbTogU3JpY2hhcmFuIFIgPHNyaWNoYXJh bkBjb2RlYXVyb3JhLm9yZz4KPj4+Pj4+Pgo+Pj4+Pj4+IFRoZSBzbW11IG5lZWRzIHRvIGJlIGZ1 bmN0aW9uYWwgb25seSB3aGVuIHRoZSByZXNwZWN0aXZlCj4+Pj4+Pj4gbWFzdGVyJ3MgdXNpbmcg aXQgYXJlIGFjdGl2ZS4gVGhlIGRldmljZV9saW5rIGZlYXR1cmUKPj4+Pj4+PiBoZWxwcyB0byB0 cmFjayBzdWNoIGZ1bmN0aW9uYWwgZGVwZW5kZW5jaWVzLCBzbyB0aGF0IHRoZQo+Pj4+Pj4+IGlv bW11IGdldHMgcG93ZXJlZCB3aGVuIHRoZSBtYXN0ZXIgZGV2aWNlIGVuYWJsZXMgaXRzZWxmCj4+ Pj4+Pj4gdXNpbmcgcG1fcnVudGltZS4gU28gYnkgYWRhcHRpbmcgdGhlIHNtbXUgZHJpdmVyIGZv cgo+Pj4+Pj4+IHJ1bnRpbWUgcG0sIGFib3ZlIHNhaWQgZGVwZW5kZW5jeSBjYW4gYmUgYWRkcmVz c2VkLgo+Pj4+Pj4+Cj4+Pj4+Pj4gVGhpcyBwYXRjaCBhZGRzIHRoZSBwbSBydW50aW1lL3NsZWVw IGNhbGxiYWNrcyB0byB0aGUKPj4+Pj4+PiBkcml2ZXIgYW5kIGFsc28gdGhlIGZ1bmN0aW9ucyB0 byBwYXJzZSB0aGUgc21tdSBjbG9ja3MKPj4+Pj4+PiBmcm9tIERUIGFuZCBlbmFibGUgdGhlbSBp biByZXN1bWUvc3VzcGVuZC4KPj4+Pj4+Pgo+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6IFNyaWNoYXJh biBSIDxzcmljaGFyYW5AY29kZWF1cm9yYS5vcmc+Cj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogQXJj aGl0IFRhbmVqYSA8YXJjaGl0dEBjb2RlYXVyb3JhLm9yZz4KPj4+Pj4+PiBbdml2ZWs6IENsb2Nr IHJld29yayB0byByZXF1ZXN0IGJ1bGsgb2YgY2xvY2tzXQo+Pj4+Pj4+IFNpZ25lZC1vZmYtYnk6 IFZpdmVrIEdhdXRhbSA8dml2ZWsuZ2F1dGFtQGNvZGVhdXJvcmEub3JnPgo+Pj4+Pj4+IFJldmll d2VkLWJ5OiBUb21hc3ogRmlnYSA8dGZpZ2FAY2hyb21pdW0ub3JnPgo+Pj4+Pj4+IC0tLQo+Pj4+ Pj4+Cj4+Pj4+Pj4gICAtIE5vIGNoYW5nZSBzaW5jZSB2MTEuCj4+Pj4+Pj4KPj4+Pj4+PiAgIGRy aXZlcnMvaW9tbXUvYXJtLXNtbXUuYyB8IDYwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystLQo+Pj4+Pj4+ICAgMSBmaWxlIGNoYW5nZWQsIDU4IGluc2VydGlv bnMoKyksIDIgZGVsZXRpb25zKC0pCj4+Pj4+Pj4KPj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9pb21tdS9hcm0tc21tdS5jIGIvZHJpdmVycy9pb21tdS9hcm0tc21tdS5jCj4+Pj4+Pj4gaW5k ZXggZjdhOTZiY2Y5NGE2Li5hMDFkMGRkZTIxZGQgMTAwNjQ0Cj4+Pj4+Pj4gLS0tIGEvZHJpdmVy cy9pb21tdS9hcm0tc21tdS5jCj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9pb21tdS9hcm0tc21tdS5j Cj4+Pj4+Pj4gQEAgLTQ4LDYgKzQ4LDcgQEAKPj4+Pj4+PiAgICNpbmNsdWRlIDxsaW51eC9vZl9p b21tdS5oPgo+Pj4+Pj4+ICAgI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgo+Pj4+Pj4+ICAgI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+Pj4+Pj4+ICsjaW5jbHVkZSA8bGludXgvcG1f cnVudGltZS5oPgo+Pj4+Pj4+ICAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPj4+Pj4+PiAgICNp bmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgo+Pj4+Pj4+Cj4+Pj4+Pj4gQEAgLTIwNSw2ICsyMDYs OCBAQCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlIHsKPj4+Pj4+PiAgICAgICAgdTMyICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBudW1fZ2xvYmFsX2lycXM7Cj4+Pj4+Pj4gICAgICAgIHUzMiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2NvbnRleHRfaXJxczsKPj4+Pj4+PiAgICAg ICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICAqaXJxczsKPj4+Pj4+PiArICAgICBz dHJ1Y3QgY2xrX2J1bGtfZGF0YSAgICAgICAgICAgICpjbGtzOwo+Pj4+Pj4+ICsgICAgIGludCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2Nsa3M7Cj4+Pj4+Pj4KPj4+Pj4+PiAgICAg ICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXZpdW1faWRfYmFzZTsgLyogU3Bl Y2lmaWMgdG8gQ2F2aXVtICovCj4+Pj4+Pj4KPj4+Pj4+PiBAQCAtMTg5NywxMCArMTkwMCwxMiBA QCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9jZmdfcHJvYmUoc3RydWN0IGFybV9zbW11X2Rl dmljZSAqc21tdSkKPj4+Pj4+PiAgIHN0cnVjdCBhcm1fc21tdV9tYXRjaF9kYXRhIHsKPj4+Pj4+ PiAgICAgICAgZW51bSBhcm1fc21tdV9hcmNoX3ZlcnNpb24gdmVyc2lvbjsKPj4+Pj4+PiAgICAg ICAgZW51bSBhcm1fc21tdV9pbXBsZW1lbnRhdGlvbiBtb2RlbDsKPj4+Pj4+PiArICAgICBjb25z dCBjaGFyICogY29uc3QgKmNsa3M7Cj4+Pj4+Pj4gKyAgICAgaW50IG51bV9jbGtzOwo+Pj4+Pj4+ ICAgfTsKPj4+Pj4+Pgo+Pj4+Pj4+ICAgI2RlZmluZSBBUk1fU01NVV9NQVRDSF9EQVRBKG5hbWUs IHZlciwgaW1wKSAgXAo+Pj4+Pj4+IC1zdGF0aWMgc3RydWN0IGFybV9zbW11X21hdGNoX2RhdGEg bmFtZSA9IHsgLnZlcnNpb24gPSB2ZXIsIC5tb2RlbCA9IGltcCB9Cj4+Pj4+Pj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgYXJtX3NtbXVfbWF0Y2hfZGF0YSBuYW1lID0geyAudmVyc2lvbiA9IHZlciwg Lm1vZGVsID0gaW1wIH0KPj4+Pj4+Pgo+Pj4+Pj4+ICAgQVJNX1NNTVVfTUFUQ0hfREFUQShzbW11 X2dlbmVyaWNfdjEsIEFSTV9TTU1VX1YxLCBHRU5FUklDX1NNTVUpOwo+Pj4+Pj4+ICAgQVJNX1NN TVVfTUFUQ0hfREFUQShzbW11X2dlbmVyaWNfdjIsIEFSTV9TTU1VX1YyLCBHRU5FUklDX1NNTVUp Owo+Pj4+Pj4+IEBAIC0xOTE5LDYgKzE5MjQsMjMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9k ZXZpY2VfaWQgYXJtX3NtbXVfb2ZfbWF0Y2hbXSA9IHsKPj4+Pj4+PiAgIH07Cj4+Pj4+Pj4gICBN T0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhcm1fc21tdV9vZl9tYXRjaCk7Cj4+Pj4+Pj4KPj4+Pj4+ PiArc3RhdGljIHZvaWQgYXJtX3NtbXVfZmlsbF9jbGtfZGF0YShzdHJ1Y3QgYXJtX3NtbXVfZGV2 aWNlICpzbW11LAo+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKiBjb25zdCAqY2xrcykKPj4+Pj4+PiArewo+Pj4+Pj4+ICsgICAgIGludCBpOwo+Pj4+ Pj4+ICsKPj4+Pj4+PiArICAgICBpZiAoc21tdS0+bnVtX2Nsa3MgPCAxKQo+Pj4+Pj4+ICsgICAg ICAgICAgICAgcmV0dXJuOwo+Pj4+Pj4+ICsKPj4+Pj4+PiArICAgICBzbW11LT5jbGtzID0gZGV2 bV9rY2FsbG9jKHNtbXUtPmRldiwgc21tdS0+bnVtX2Nsa3MsCj4+Pj4+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2YoKnNtbXUtPmNsa3MpLCBHRlBfS0VSTkVMKTsKPj4+ Pj4+PiArICAgICBpZiAoIXNtbXUtPmNsa3MpCj4+Pj4+Pj4gKyAgICAgICAgICAgICByZXR1cm47 Cj4+Pj4+Pj4gKwo+Pj4+Pj4+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBzbW11LT5udW1fY2xrczsg aSsrKQo+Pj4+Pj4+ICsgICAgICAgICAgICAgc21tdS0+Y2xrc1tpXS5pZCA9IGNsa3NbaV07Cj4+ Pj4+Pj4gK30KPj4+Pj4+PiArCj4+Pj4+Pj4gICAjaWZkZWYgQ09ORklHX0FDUEkKPj4+Pj4+PiAg IHN0YXRpYyBpbnQgYWNwaV9zbW11X2dldF9kYXRhKHUzMiBtb2RlbCwgc3RydWN0IGFybV9zbW11 X2RldmljZSAqc21tdSkKPj4+Pj4+PiAgIHsKPj4+Pj4+PiBAQCAtMjAwMSw2ICsyMDIzLDkgQEAg c3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldiwKPj4+Pj4+PiAgICAgICAgZGF0YSA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShk ZXYpOwo+Pj4+Pj4+ICAgICAgICBzbW11LT52ZXJzaW9uID0gZGF0YS0+dmVyc2lvbjsKPj4+Pj4+ PiAgICAgICAgc21tdS0+bW9kZWwgPSBkYXRhLT5tb2RlbDsKPj4+Pj4+PiArICAgICBzbW11LT5u dW1fY2xrcyA9IGRhdGEtPm51bV9jbGtzOwo+Pj4+Pj4+ICsKPj4+Pj4+PiArICAgICBhcm1fc21t dV9maWxsX2Nsa19kYXRhKHNtbXUsIGRhdGEtPmNsa3MpOwo+Pj4+Pj4+Cj4+Pj4+Pj4gICAgICAg IHBhcnNlX2RyaXZlcl9vcHRpb25zKHNtbXUpOwo+Pj4+Pj4+Cj4+Pj4+Pj4gQEAgLTIwOTksNiAr MjEyNCwxNCBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQo+Pj4+Pj4+ICAgICAgICAgICAgICAgIHNtbXUtPmlycXNbaV0gPSBp cnE7Cj4+Pj4+Pj4gICAgICAgIH0KPj4+Pj4+Pgo+Pj4+Pj4+ICsgICAgIGVyciA9IGRldm1fY2xr X2J1bGtfZ2V0KHNtbXUtPmRldiwgc21tdS0+bnVtX2Nsa3MsIHNtbXUtPmNsa3MpOwo+Pj4+Pj4+ ICsgICAgIGlmIChlcnIpCj4+Pj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4gZXJyOwo+Pj4+Pj4+ ICsKPj4+Pj4+PiArICAgICBlcnIgPSBjbGtfYnVsa19wcmVwYXJlKHNtbXUtPm51bV9jbGtzLCBz bW11LT5jbGtzKTsKPj4+Pj4+PiArICAgICBpZiAoZXJyKQo+Pj4+Pj4+ICsgICAgICAgICAgICAg cmV0dXJuIGVycjsKPj4+Pj4+PiArCj4+Pj4+Pj4gICAgICAgIGVyciA9IGFybV9zbW11X2Rldmlj ZV9jZmdfcHJvYmUoc21tdSk7Cj4+Pj4+Pj4gICAgICAgIGlmIChlcnIpCj4+Pj4+Pj4gICAgICAg ICAgICAgICAgcmV0dXJuIGVycjsKPj4+Pj4+PiBAQCAtMjE4MSw2ICsyMjE0LDkgQEAgc3RhdGlj IGludCBhcm1fc21tdV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp Cj4+Pj4+Pj4KPj4+Pj4+PiAgICAgICAgLyogVHVybiB0aGUgdGhpbmcgb2ZmICovCj4+Pj4+Pj4g ICAgICAgIHdyaXRlbChzQ1IwX0NMSUVOVFBELCBBUk1fU01NVV9HUjBfTlMoc21tdSkgKyBBUk1f U01NVV9HUjBfc0NSMCk7Cj4+Pj4+Pj4gKwo+Pj4+Pj4+ICsgICAgIGNsa19idWxrX3VucHJlcGFy ZShzbW11LT5udW1fY2xrcywgc21tdS0+Y2xrcyk7Cj4+Pj4+Pj4gKwo+Pj4+Pj4+ICAgICAgICBy ZXR1cm4gMDsKPj4+Pj4+PiAgIH0KPj4+Pj4+Pgo+Pj4+Pj4+IEBAIC0yMTk3LDcgKzIyMzMsMjcg QEAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBhcm1fc21tdV9wbV9yZXN1bWUoc3RydWN0IGRl dmljZSAqZGV2KQo+Pj4+Pj4+ICAgICAgICByZXR1cm4gMDsKPj4+Pj4+PiAgIH0KPj4+Pj4+Pgo+ Pj4+Pj4+IC1zdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoYXJtX3NtbXVfcG1fb3BzLCBOVUxMLCBh cm1fc21tdV9wbV9yZXN1bWUpOwo+Pj4+Pj4+ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGFy bV9zbW11X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPj4+Pj4+PiArewo+Pj4+ Pj4+ICsgICAgIHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsKPj4+Pj4+PiArCj4+Pj4+Pj4gKyAgICAgcmV0dXJuIGNsa19idWxrX2VuYWJsZShzbW11 LT5udW1fY2xrcywgc21tdS0+Y2xrcyk7Cj4+Pj4+Pj4gK30KPj4+Pj4+PiArCj4+Pj4+Pj4gK3N0 YXRpYyBpbnQgX19tYXliZV91bnVzZWQgYXJtX3NtbXVfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBk ZXZpY2UgKmRldikKPj4+Pj4+PiArewo+Pj4+Pj4+ICsgICAgIHN0cnVjdCBhcm1fc21tdV9kZXZp Y2UgKnNtbXUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPj4+Pj4+PiArCj4+Pj4+Pj4gKyAgICAg Y2xrX2J1bGtfZGlzYWJsZShzbW11LT5udW1fY2xrcywgc21tdS0+Y2xrcyk7Cj4+Pj4+Pj4gKwo+ Pj4+Pj4+ICsgICAgIHJldHVybiAwOwo+Pj4+Pj4+ICt9Cj4+Pj4+Pj4gKwo+Pj4+Pj4+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYXJtX3NtbXVfcG1fb3BzID0gewo+Pj4+Pj4+ICsg ICAgIFNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKE5VTEwsIGFybV9zbW11X3BtX3Jlc3VtZSkKPj4+ Pj4+IFRoaXMgaXMgc3VzcGljaW91cy4KPj4+Pj4+Cj4+Pj4+PiBJZiB5b3UgbmVlZCBhIHJ1bnRp bWUgc3VzcGVuZCBtZXRob2QsIHdoeSBkbyB5b3UgdGhpbmsgdGhhdCBpdCBpcyBub3QgbmVjZXNz YXJ5Cj4+Pj4+PiB0byBzdXNwZW5kIHRoZSBkZXZpY2UgZHVyaW5nIHN5c3RlbS13aWRlIHRyYW5z aXRpb25zPwo+Pj4+PiBPa2F5LCBzbyB5b3Ugc3VnZ2VzdCB0byBwdXQgY2xvY2sgZGlzYWJsaW5n IGluIHNheSBhcm1fc21tdV9wbV9zdXNwZW5kKCk/Cj4+Pj4+IEluIHRoYXQgY2FzZSB0aGUgY2xv Y2tzIGhhdmUgdG8gYmUgZW5hYmxlZCBpbiB0aGUgcmVzdW1lIHBhdGggdG9vLgo+Pj4+Pgo+Pj4+ PiBJIHJlbWVtYmVyIFRvbWFzeiBwb2ludGVkIHRvIHRoYXQgd2Ugc2hvdWxkbid0IG5lZWQgY2xv Y2sgZW5hYmxlIGluIHJlc3VtZQo+Pj4+PiBwYXRoIFsxXS4KPj4+Pj4KPj4+Pj4gWzFdIGh0dHBz Oi8vbGttbC5vcmcvbGttbC8yMDE4LzMvMTUvNjAKPj4+IFRoYXQgd2FzIGFuIGFuc3dlciBmb3Ig YSBkaWZmZXJlbnQgcXVlc3Rpb24uIEkgZG9uJ3QgcmVtZW1iZXIKPj4+IHN1Z2dlc3RpbmcgaGF2 aW5nIG5vIHN1c3BlbmQgZnVuY3Rpb24uCj4+IE15IGJhZCwgYXBvbG9naWVzLiBZb3UgYXJlIHJp Z2h0LCB3ZSB3ZXJlIGRpc2N1c3NpbmcgaWYgd2UgbmVlZCBhbnkgYWRkaXRpb25hbAo+PiBoYW5k bGluZyBvZiBwb3dlciBmb3IgYXJtX3NtbXVfZGV2aWNlX3Jlc2V0KCkgaW4gYXJtX3NtbXVfcG1f cmVzdW1lKCkuCj4+Cj4+PiBBbHRob3VnaCwgZ2l2ZW4gdGhlIFBNCj4+PiBzdWJzeXN0ZW0gaW50 ZXJuYWxzLCB0aGUgc3VzcGVuZCBmdW5jdGlvbiB3b3VsZG4ndCBiZSBjYWxsZWQgb24gU01NVQo+ Pj4gaW1wbGVtZW50YXRpb24gbmVlZGVkIHBvd2VyIGNvbnRyb2wgKHNpbmNlIHRoZXkgd291bGQg aGF2ZSBydW50aW1lIFBNCj4+PiBlbmFibGVkKSBhbmQgb24gb3RoZXJzLCBpdCB3b3VsZCBiZSBj YWxsZWQgYnV0IGRvIG5vdGhpbmcgKHNpbmNlIG5vCj4+PiBjbG9ja3MpLgo+Pj4KPj4+PiBIb25l c3RseSwgSSBqdXN0IGRvbid0IGtub3cuIDotKQo+Pj4+Cj4+Pj4gSXQganVzdCBsb29rcyBvZGQg dGhlIHdheSBpdCBpcyBkb25lLiAgSSB0aGluayB0aGUgY2xvY2sgc2hvdWxkIGJlCj4+Pj4gZ2F0 ZWQgZHVyaW5nIHN5c3RlbS13aWRlIHN1c3BlbmQgdG9vLCBiZWNhdXNlIHRoZSBzeXN0ZW0gY2Fu IHNwZW5kCj4+Pj4gbXVjaCBtb3JlIHRpbWUgaW4gYSBzbGVlcCBzdGF0ZSB0aGFuIGluIHRoZSB3 b3JraW5nIHN0YXRlLCBvbiBhdmVyYWdlLgo+Pj4+Cj4+Pj4gQW5kIG5vdGUgdGhhdCB5b3UgY2Fu bm90IHJlbHkgb24gcnVudGltZSBQTSB0byBhbHdheXMgZG8gaXQgZm9yIHlvdSwKPj4+PiBiZWNh dXNlIGl0IG1heSBiZSBkaXNhYmxlZCBhdCBhIGNsaWVudCBkZXZpY2Ugb3IgZXZlbiBibG9ja2Vk IGJ5IHVzZXIKPj4+PiBzcGFjZSB2aWEgcG93ZXIvY29udHJvbCBpbiBzeXNmcyBhbmQgdGhhdCBz aG91bGRuJ3QgbWF0dGVyIGZvcgo+Pj4+IHN5c3RlbS13aWRlIFBNLgo+Pj4gVXNlciBzcGFjZSBi bG9ja2luZyBydW50aW1lIFBNIHRocm91Z2ggc3lzZnMgaXMgYSBnb29kIHBvaW50LiBJJ20gbm90 Cj4+PiAxMDAlIHN1cmUgaG93IHRoZSBQTSBzdWJzeXN0ZW0gZGVhbHMgd2l0aCB0aGF0IGluIGNh c2Ugb2Ygc3lzdGVtLXdpZGUKPj4+IHN1c3BlbmQuIEkgZ3Vlc3MgZm9yIGNvbnNpc3RlbmN5IGFu ZCBzYWZldHksIHdlIHNob3VsZCBoYXZlIHRoZQo+Pj4gc3VzcGVuZCBjYWxsYmFjay4KPj4gV2ls bCBhZGQgdGhlIGZvbGxvd2luZyBzdXNwZW5kIGNhbGxiYWNrIChzYW1lIGFzIGFybV9zbW11X3J1 bnRpbWVfc3VzcGVuZCk6Cj4+Cj4+ICAgc3RhdGljIGludCBfX21heWJlX3VudXNlZCBhcm1fc21t dV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPj4gICB7Cj4+ICAgICAgICAgICBzdHJ1 Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+Cj4+ICAg ICAgICAgICBjbGtfYnVsa19kaXNhYmxlKHNtbXUtPm51bV9jbGtzLCBzbW11LT5jbGtzKTsKPj4K Pj4gICAgICAgICAgIHJldHVybiAwOwo+PiAgIH0KPiBJIHRoaW5rIHlvdSBhbHNvIG5lZWQgdG8g Y2hlY2sgaWYgdGhlIGNsb2NrIGhhcyBhbHJlYWR5IGJlZW4gZGlzYWJsZWQKPiBieSBydW50aW1l IFBNLiAgT3RoZXJ3aXNlIHlvdSBtYXkgZW5kIHVwIGRpc2FibGluZyBpdCB0d2ljZSBpbiBhIHJv dy4KClNob3VsZCBJIHJhdGhlciBjYWxsIGEgcG1fcnVudGltZV9wdXQoKSBpbiBzdXNwZW5kIGNh bGxiYWNrPyBPciBhbiAKZXhwYW5kZWQgZm9ybQpzb21ldGhpbmcgc2ltaWxhciB0bzoKaHR0cHM6 Ly9lbGl4aXIuYm9vdGxpbi5jb20vbGludXgvdjQuMTgtcmM1L3NvdXJjZS9kcml2ZXJzL3NsaW1i dXMvcWNvbS1jdHJsLmMjTDY5NQoKCkJlc3QgcmVnYXJkcwpWaXZlawpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZy ZWVkcmVub0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9mcmVlZHJlbm8K 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=-0.6 required=3.0 tests=DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS,T_DKIM_INVALID, URIBL_BLOCKED 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 1BA10ECDFAA for ; Mon, 16 Jul 2018 10:11:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id AF485208E9 for ; Mon, 16 Jul 2018 10:11:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="PyBGMxzP"; dkim=fail reason="key not found in DNS" (0-bit key) header.d=codeaurora.org header.i=@codeaurora.org header.b="GX2D+LnP" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AF485208E9 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731151AbeGPKiD (ORCPT ); Mon, 16 Jul 2018 06:38:03 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:47442 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730919AbeGPKiD (ORCPT ); Mon, 16 Jul 2018 06:38:03 -0400 Received: by smtp.codeaurora.org (Postfix, from userid 1000) id B28D160B1E; Mon, 16 Jul 2018 10:11:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1531735881; bh=OdZI8JjSKQWv4qa/XyqSgLAJJbeZ8bU2n73iI00WRO4=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=PyBGMxzPvQhgc8NxmHjCtHmvajSM8RY5pHskhpVQ6Fd7HfbkkJ8njjP6NctC/HHZT rlDEOqUIn6IZ1Uy6/UiEd/vAoUH77JFcHrFb9U8wS9oEWzXdMAr+lYQNHtkJWbqjD7 3qpD9IANSoTd01HHSWOTShLZN4HvBMHfRo/lhp/Y= Received: from [10.79.40.153] (blr-bdr-fw-01_globalnat_allzones-outside.qualcomm.com [103.229.18.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: vivek.gautam@smtp.codeaurora.org) by smtp.codeaurora.org (Postfix) with ESMTPSA id 3BE5960555; Mon, 16 Jul 2018 10:11:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org; s=default; t=1531735878; bh=OdZI8JjSKQWv4qa/XyqSgLAJJbeZ8bU2n73iI00WRO4=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=GX2D+LnPIs9gbYO27WrhQxFsyOW2sMoIxGiHHy+8yL8lP50tO43EHOu7BV7Hh45po OF4JrRTHmKrz8xiXNqXUjyHiuOm6lwSZvc6ghsKn9AXgwrUHsq07sr/M0wcCQ8tK4c 4aT7Vnpe7hEeXVCrS2KCxKTAhZ52h+/aFp8Fd+i4= DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org 3BE5960555 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=vivek.gautam@codeaurora.org Subject: Re: [PATCH v12 1/4] iommu/arm-smmu: Add pm_runtime/sleep ops To: "Rafael J. Wysocki" Cc: Tomasz Figa , Mark Rutland , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Linux PM , Stephen Boyd , Will Deacon , "Rafael J. Wysocki" , Linux Kernel Mailing List , "list@263.net:IOMMU DRIVERS" , Joerg Roedel , iommu@lists.linux-foundation.org, Rob Herring , linux-arm-msm , freedreno References: <20180708173413.1965-1-vivek.gautam@codeaurora.org> <20180708173413.1965-2-vivek.gautam@codeaurora.org> <17407514.unFVTGoGrn@aspire.rjw.lan> From: Vivek Gautam Message-ID: <010cb56a-36e8-e729-1fe7-738048eb551d@codeaurora.org> Date: Mon, 16 Jul 2018 15:41:12 +0530 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org HI Rafael, On 7/16/2018 2:21 PM, Rafael J. Wysocki wrote: > On Thu, Jul 12, 2018 at 12:57 PM, Vivek Gautam > wrote: >> Hi, >> >> >> On Wed, Jul 11, 2018 at 6:21 PM, Tomasz Figa wrote: >>> On Wed, Jul 11, 2018 at 8:11 PM Rafael J. Wysocki wrote: >>>> On Wed, Jul 11, 2018 at 12:55 PM, Vivek Gautam >>>> wrote: >>>>> Hi Rafael, >>>>> >>>>> >>>>> On Wed, Jul 11, 2018 at 3:20 PM, Rafael J. Wysocki wrote: >>>>>> On Sunday, July 8, 2018 7:34:10 PM CEST Vivek Gautam wrote: >>>>>>> From: Sricharan R >>>>>>> >>>>>>> The smmu needs to be functional only when the respective >>>>>>> master's using it are active. The device_link feature >>>>>>> helps to track such functional dependencies, so that the >>>>>>> iommu gets powered when the master device enables itself >>>>>>> using pm_runtime. So by adapting the smmu driver for >>>>>>> runtime pm, above said dependency can be addressed. >>>>>>> >>>>>>> This patch adds the pm runtime/sleep callbacks to the >>>>>>> driver and also the functions to parse the smmu clocks >>>>>>> from DT and enable them in resume/suspend. >>>>>>> >>>>>>> Signed-off-by: Sricharan R >>>>>>> Signed-off-by: Archit Taneja >>>>>>> [vivek: Clock rework to request bulk of clocks] >>>>>>> Signed-off-by: Vivek Gautam >>>>>>> Reviewed-by: Tomasz Figa >>>>>>> --- >>>>>>> >>>>>>> - No change since v11. >>>>>>> >>>>>>> drivers/iommu/arm-smmu.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++-- >>>>>>> 1 file changed, 58 insertions(+), 2 deletions(-) >>>>>>> >>>>>>> diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c >>>>>>> index f7a96bcf94a6..a01d0dde21dd 100644 >>>>>>> --- a/drivers/iommu/arm-smmu.c >>>>>>> +++ b/drivers/iommu/arm-smmu.c >>>>>>> @@ -48,6 +48,7 @@ >>>>>>> #include >>>>>>> #include >>>>>>> #include >>>>>>> +#include >>>>>>> #include >>>>>>> #include >>>>>>> >>>>>>> @@ -205,6 +206,8 @@ struct arm_smmu_device { >>>>>>> u32 num_global_irqs; >>>>>>> u32 num_context_irqs; >>>>>>> unsigned int *irqs; >>>>>>> + struct clk_bulk_data *clks; >>>>>>> + int num_clks; >>>>>>> >>>>>>> u32 cavium_id_base; /* Specific to Cavium */ >>>>>>> >>>>>>> @@ -1897,10 +1900,12 @@ static int arm_smmu_device_cfg_probe(struct arm_smmu_device *smmu) >>>>>>> struct arm_smmu_match_data { >>>>>>> enum arm_smmu_arch_version version; >>>>>>> enum arm_smmu_implementation model; >>>>>>> + const char * const *clks; >>>>>>> + int num_clks; >>>>>>> }; >>>>>>> >>>>>>> #define ARM_SMMU_MATCH_DATA(name, ver, imp) \ >>>>>>> -static struct arm_smmu_match_data name = { .version = ver, .model = imp } >>>>>>> +static const struct arm_smmu_match_data name = { .version = ver, .model = imp } >>>>>>> >>>>>>> ARM_SMMU_MATCH_DATA(smmu_generic_v1, ARM_SMMU_V1, GENERIC_SMMU); >>>>>>> ARM_SMMU_MATCH_DATA(smmu_generic_v2, ARM_SMMU_V2, GENERIC_SMMU); >>>>>>> @@ -1919,6 +1924,23 @@ static const struct of_device_id arm_smmu_of_match[] = { >>>>>>> }; >>>>>>> MODULE_DEVICE_TABLE(of, arm_smmu_of_match); >>>>>>> >>>>>>> +static void arm_smmu_fill_clk_data(struct arm_smmu_device *smmu, >>>>>>> + const char * const *clks) >>>>>>> +{ >>>>>>> + int i; >>>>>>> + >>>>>>> + if (smmu->num_clks < 1) >>>>>>> + return; >>>>>>> + >>>>>>> + smmu->clks = devm_kcalloc(smmu->dev, smmu->num_clks, >>>>>>> + sizeof(*smmu->clks), GFP_KERNEL); >>>>>>> + if (!smmu->clks) >>>>>>> + return; >>>>>>> + >>>>>>> + for (i = 0; i < smmu->num_clks; i++) >>>>>>> + smmu->clks[i].id = clks[i]; >>>>>>> +} >>>>>>> + >>>>>>> #ifdef CONFIG_ACPI >>>>>>> static int acpi_smmu_get_data(u32 model, struct arm_smmu_device *smmu) >>>>>>> { >>>>>>> @@ -2001,6 +2023,9 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev, >>>>>>> data = of_device_get_match_data(dev); >>>>>>> smmu->version = data->version; >>>>>>> smmu->model = data->model; >>>>>>> + smmu->num_clks = data->num_clks; >>>>>>> + >>>>>>> + arm_smmu_fill_clk_data(smmu, data->clks); >>>>>>> >>>>>>> parse_driver_options(smmu); >>>>>>> >>>>>>> @@ -2099,6 +2124,14 @@ static int arm_smmu_device_probe(struct platform_device *pdev) >>>>>>> smmu->irqs[i] = irq; >>>>>>> } >>>>>>> >>>>>>> + err = devm_clk_bulk_get(smmu->dev, smmu->num_clks, smmu->clks); >>>>>>> + if (err) >>>>>>> + return err; >>>>>>> + >>>>>>> + err = clk_bulk_prepare(smmu->num_clks, smmu->clks); >>>>>>> + if (err) >>>>>>> + return err; >>>>>>> + >>>>>>> err = arm_smmu_device_cfg_probe(smmu); >>>>>>> if (err) >>>>>>> return err; >>>>>>> @@ -2181,6 +2214,9 @@ static int arm_smmu_device_remove(struct platform_device *pdev) >>>>>>> >>>>>>> /* Turn the thing off */ >>>>>>> writel(sCR0_CLIENTPD, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0); >>>>>>> + >>>>>>> + clk_bulk_unprepare(smmu->num_clks, smmu->clks); >>>>>>> + >>>>>>> return 0; >>>>>>> } >>>>>>> >>>>>>> @@ -2197,7 +2233,27 @@ static int __maybe_unused arm_smmu_pm_resume(struct device *dev) >>>>>>> return 0; >>>>>>> } >>>>>>> >>>>>>> -static SIMPLE_DEV_PM_OPS(arm_smmu_pm_ops, NULL, arm_smmu_pm_resume); >>>>>>> +static int __maybe_unused arm_smmu_runtime_resume(struct device *dev) >>>>>>> +{ >>>>>>> + struct arm_smmu_device *smmu = dev_get_drvdata(dev); >>>>>>> + >>>>>>> + return clk_bulk_enable(smmu->num_clks, smmu->clks); >>>>>>> +} >>>>>>> + >>>>>>> +static int __maybe_unused arm_smmu_runtime_suspend(struct device *dev) >>>>>>> +{ >>>>>>> + struct arm_smmu_device *smmu = dev_get_drvdata(dev); >>>>>>> + >>>>>>> + clk_bulk_disable(smmu->num_clks, smmu->clks); >>>>>>> + >>>>>>> + return 0; >>>>>>> +} >>>>>>> + >>>>>>> +static const struct dev_pm_ops arm_smmu_pm_ops = { >>>>>>> + SET_SYSTEM_SLEEP_PM_OPS(NULL, arm_smmu_pm_resume) >>>>>> This is suspicious. >>>>>> >>>>>> If you need a runtime suspend method, why do you think that it is not necessary >>>>>> to suspend the device during system-wide transitions? >>>>> Okay, so you suggest to put clock disabling in say arm_smmu_pm_suspend()? >>>>> In that case the clocks have to be enabled in the resume path too. >>>>> >>>>> I remember Tomasz pointed to that we shouldn't need clock enable in resume >>>>> path [1]. >>>>> >>>>> [1] https://lkml.org/lkml/2018/3/15/60 >>> That was an answer for a different question. I don't remember >>> suggesting having no suspend function. >> My bad, apologies. You are right, we were discussing if we need any additional >> handling of power for arm_smmu_device_reset() in arm_smmu_pm_resume(). >> >>> Although, given the PM >>> subsystem internals, the suspend function wouldn't be called on SMMU >>> implementation needed power control (since they would have runtime PM >>> enabled) and on others, it would be called but do nothing (since no >>> clocks). >>> >>>> Honestly, I just don't know. :-) >>>> >>>> It just looks odd the way it is done. I think the clock should be >>>> gated during system-wide suspend too, because the system can spend >>>> much more time in a sleep state than in the working state, on average. >>>> >>>> And note that you cannot rely on runtime PM to always do it for you, >>>> because it may be disabled at a client device or even blocked by user >>>> space via power/control in sysfs and that shouldn't matter for >>>> system-wide PM. >>> User space blocking runtime PM through sysfs is a good point. I'm not >>> 100% sure how the PM subsystem deals with that in case of system-wide >>> suspend. I guess for consistency and safety, we should have the >>> suspend callback. >> Will add the following suspend callback (same as arm_smmu_runtime_suspend): >> >> static int __maybe_unused arm_smmu_pm_suspend(struct device *dev) >> { >> struct arm_smmu_device *smmu = dev_get_drvdata(dev); >> >> clk_bulk_disable(smmu->num_clks, smmu->clks); >> >> return 0; >> } > I think you also need to check if the clock has already been disabled > by runtime PM. Otherwise you may end up disabling it twice in a row. Should I rather call a pm_runtime_put() in suspend callback? Or an expanded form something similar to: https://elixir.bootlin.com/linux/v4.18-rc5/source/drivers/slimbus/qcom-ctrl.c#L695 Best regards Vivek