From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robin Murphy Subject: Re: [PATCH v16 2/5] iommu/arm-smmu: Invoke pm_runtime during probe, add/remove device Date: Wed, 26 Sep 2018 16:42:55 +0100 Message-ID: <763bc179-759a-cfda-e485-cf619ab5faec@arm.com> References: <20180830144541.17740-1-vivek.gautam@codeaurora.org> <20180830144541.17740-3-vivek.gautam@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180830144541.17740-3-vivek.gautam-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org> Content-Language: en-GB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: Vivek Gautam , joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org, robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, will.deacon-5wv7dgnIgG8@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: mark.rutland-5wv7dgnIgG8@public.gmane.org, architt-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, sboyd-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, sricharan-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, rjw-LthD3rsA81gm4RdzfppkhA@public.gmane.org, robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, tfiga-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org, alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org T24gMzAvMDgvMTggMTU6NDUsIFZpdmVrIEdhdXRhbSB3cm90ZToKPiBGcm9tOiBTcmljaGFyYW4g UiA8c3JpY2hhcmFuQGNvZGVhdXJvcmEub3JnPgo+IAo+IFRoZSBzbW11IGRldmljZSBwcm9iZS9y ZW1vdmUgYW5kIGFkZC9yZW1vdmUgbWFzdGVyIGRldmljZSBjYWxsYmFja3MKPiBnZXRzIGNhbGxl ZCB3aGVuIHRoZSBzbW11IGlzIG5vdCBsaW5rZWQgdG8gaXRzIG1hc3RlciwgdGhhdCBpcyB3aXRo b3V0Cj4gdGhlIGNvbnRleHQgb2YgdGhlIG1hc3RlciBkZXZpY2UuIFNvIGNhbGxpbmcgcnVudGlt ZSBhcGlzIGluIHRob3NlIHBsYWNlcwo+IHNlcGFyYXRlbHkuCj4gR2xvYmFsIGxvY2tzIGFyZSBh bHNvIGluaXRpYWxpemVkIGJlZm9yZSBlbmFibGluZyBydW50aW1lIHBtIGFzIHRoZQo+IHJ1bnRp bWVfcmVzdW1lKCkgY2FsbHMgZGV2aWNlX3Jlc2V0KCkgd2hpY2ggZG9lcyB0bGJfc3luY19nbG9i YWwoKQo+IHRoYXQgdWx0aW1hdGVseSByZXF1aXJlcyBsb2NrcyB0byBiZSBpbml0aWFsaXplZC4K ClRvIHRoZSBiZXN0IG9mIG15IGtub3dsZWRnZSBpbiB0aGlzIHN0dWZmICh3aGljaCBpcyBzdGls bCBub3QgcXVpdGUgCmVub3VnaCB0byBiZSAqdHJ1bHkqIGNvbmZpZGVudC4uLiksCgpSZXZpZXdl ZC1ieTogUm9iaW4gTXVycGh5IDxyb2Jpbi5tdXJwaHlAYXJtLmNvbT4KCj4gU2lnbmVkLW9mZi1i eTogU3JpY2hhcmFuIFIgPHNyaWNoYXJhbkBjb2RlYXVyb3JhLm9yZz4KPiBbdml2ZWs6IENsZWFu dXAgcG0gcnVudGltZSBjYWxsc10KPiBTaWduZWQtb2ZmLWJ5OiBWaXZlayBHYXV0YW0gPHZpdmVr LmdhdXRhbUBjb2RlYXVyb3JhLm9yZz4KPiBSZXZpZXdlZC1ieTogVG9tYXN6IEZpZ2EgPHRmaWdh QGNocm9taXVtLm9yZz4KPiBUZXN0ZWQtYnk6IFNyaW5pdmFzIEthbmRhZ2F0bGEgPHNyaW5pdmFz LmthbmRhZ2F0bGFAbGluYXJvLm9yZz4KPiAtLS0KPiAgIGRyaXZlcnMvaW9tbXUvYXJtLXNtbXUu YyB8IDg5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQo+ ICAgMSBmaWxlIGNoYW5nZWQsIDgxIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCj4gCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUuYyBiL2RyaXZlcnMvaW9tbXUvYXJt LXNtbXUuYwo+IGluZGV4IGQ5MDBlMDA3YzNjOS4uMWJmNTQyMDEwYmU3IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUuYwo+ICsrKyBiL2RyaXZlcnMvaW9tbXUvYXJtLXNtbXUu Ywo+IEBAIC0yNjgsNiArMjY4LDIwIEBAIHN0YXRpYyBzdHJ1Y3QgYXJtX3NtbXVfb3B0aW9uX3By b3AgYXJtX3NtbXVfb3B0aW9uc1tdID0gewo+ICAgCXsgMCwgTlVMTH0sCj4gICB9Owo+ICAgCj4g K3N0YXRpYyBpbmxpbmUgaW50IGFybV9zbW11X3JwbV9nZXQoc3RydWN0IGFybV9zbW11X2Rldmlj ZSAqc21tdSkKPiArewo+ICsJaWYgKHBtX3J1bnRpbWVfZW5hYmxlZChzbW11LT5kZXYpKQo+ICsJ CXJldHVybiBwbV9ydW50aW1lX2dldF9zeW5jKHNtbXUtPmRldik7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBhcm1fc21tdV9ycG1fcHV0KHN0cnVjdCBh cm1fc21tdV9kZXZpY2UgKnNtbXUpCj4gK3sKPiArCWlmIChwbV9ydW50aW1lX2VuYWJsZWQoc21t dS0+ZGV2KSkKPiArCQlwbV9ydW50aW1lX3B1dChzbW11LT5kZXYpOwo+ICt9Cj4gKwo+ICAgc3Rh dGljIHN0cnVjdCBhcm1fc21tdV9kb21haW4gKnRvX3NtbXVfZG9tYWluKHN0cnVjdCBpb21tdV9k b21haW4gKmRvbSkKPiAgIHsKPiAgIAlyZXR1cm4gY29udGFpbmVyX29mKGRvbSwgc3RydWN0IGFy bV9zbW11X2RvbWFpbiwgZG9tYWluKTsKPiBAQCAtOTEzLDExICs5MjcsMTUgQEAgc3RhdGljIHZv aWQgYXJtX3NtbXVfZGVzdHJveV9kb21haW5fY29udGV4dChzdHJ1Y3QgaW9tbXVfZG9tYWluICpk b21haW4pCj4gICAJc3RydWN0IGFybV9zbW11X2RvbWFpbiAqc21tdV9kb21haW4gPSB0b19zbW11 X2RvbWFpbihkb21haW4pOwo+ICAgCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUgPSBzbW11 X2RvbWFpbi0+c21tdTsKPiAgIAlzdHJ1Y3QgYXJtX3NtbXVfY2ZnICpjZmcgPSAmc21tdV9kb21h aW4tPmNmZzsKPiAtCWludCBpcnE7Cj4gKwlpbnQgcmV0LCBpcnE7Cj4gICAKPiAgIAlpZiAoIXNt bXUgfHwgZG9tYWluLT50eXBlID09IElPTU1VX0RPTUFJTl9JREVOVElUWSkKPiAgIAkJcmV0dXJu Owo+ICAgCj4gKwlyZXQgPSBhcm1fc21tdV9ycG1fZ2V0KHNtbXUpOwo+ICsJaWYgKHJldCA8IDAp Cj4gKwkJcmV0dXJuOwo+ICsKPiAgIAkvKgo+ICAgCSAqIERpc2FibGUgdGhlIGNvbnRleHQgYmFu ayBhbmQgZnJlZSB0aGUgcGFnZSB0YWJsZXMgYmVmb3JlIGZyZWVpbmcKPiAgIAkgKiBpdC4KPiBA QCAtOTMyLDYgKzk1MCw4IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X2Rlc3Ryb3lfZG9tYWluX2Nv bnRleHQoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKQo+ICAgCj4gICAJZnJlZV9pb19wZ3Rh YmxlX29wcyhzbW11X2RvbWFpbi0+cGd0Ymxfb3BzKTsKPiAgIAlfX2FybV9zbW11X2ZyZWVfYml0 bWFwKHNtbXUtPmNvbnRleHRfbWFwLCBjZmctPmNibmR4KTsKPiArCj4gKwlhcm1fc21tdV9ycG1f cHV0KHNtbXUpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgc3RydWN0IGlvbW11X2RvbWFpbiAqYXJt X3NtbXVfZG9tYWluX2FsbG9jKHVuc2lnbmVkIHR5cGUpCj4gQEAgLTEyMTMsMTAgKzEyMzMsMTUg QEAgc3RhdGljIGludCBhcm1fc21tdV9hdHRhY2hfZGV2KHN0cnVjdCBpb21tdV9kb21haW4gKmRv bWFpbiwgc3RydWN0IGRldmljZSAqZGV2KQo+ICAgCQlyZXR1cm4gLUVOT0RFVjsKPiAgIAo+ICAg CXNtbXUgPSBmd3NwZWNfc21tdShmd3NwZWMpOwo+ICsKPiArCXJldCA9IGFybV9zbW11X3JwbV9n ZXQoc21tdSk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiAgIAkvKiBF bnN1cmUgdGhhdCB0aGUgZG9tYWluIGlzIGZpbmFsaXNlZCAqLwo+ICAgCXJldCA9IGFybV9zbW11 X2luaXRfZG9tYWluX2NvbnRleHQoZG9tYWluLCBzbW11KTsKPiAgIAlpZiAocmV0IDwgMCkKPiAt CQlyZXR1cm4gcmV0Owo+ICsJCWdvdG8gcnBtX3B1dDsKPiAgIAo+ICAgCS8qCj4gICAJICogU2Fu aXR5IGNoZWNrIHRoZSBkb21haW4uIFdlIGRvbid0IHN1cHBvcnQgZG9tYWlucyBhY3Jvc3MKPiBA QCAtMTIyNiwzMyArMTI1MSw1MCBAQCBzdGF0aWMgaW50IGFybV9zbW11X2F0dGFjaF9kZXYoc3Ry dWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gICAJCWRldl9l cnIoZGV2LAo+ICAgCQkJImNhbm5vdCBhdHRhY2ggdG8gU01NVSAlcyB3aGlsc3QgYWxyZWFkeSBh dHRhY2hlZCB0byBkb21haW4gb24gU01NVSAlc1xuIiwKPiAgIAkJCWRldl9uYW1lKHNtbXVfZG9t YWluLT5zbW11LT5kZXYpLCBkZXZfbmFtZShzbW11LT5kZXYpKTsKPiAtCQlyZXR1cm4gLUVJTlZB TDsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ICsJCWdvdG8gcnBtX3B1dDsKPiAgIAl9Cj4gICAKPiAg IAkvKiBMb29rcyBvaywgc28gYWRkIHRoZSBkZXZpY2UgdG8gdGhlIGRvbWFpbiAqLwo+IC0JcmV0 dXJuIGFybV9zbW11X2RvbWFpbl9hZGRfbWFzdGVyKHNtbXVfZG9tYWluLCBmd3NwZWMpOwo+ICsJ cmV0ID0gYXJtX3NtbXVfZG9tYWluX2FkZF9tYXN0ZXIoc21tdV9kb21haW4sIGZ3c3BlYyk7Cj4g Kwo+ICtycG1fcHV0Ogo+ICsJYXJtX3NtbXVfcnBtX3B1dChzbW11KTsKPiArCXJldHVybiByZXQ7 Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbnQgYXJtX3NtbXVfbWFwKHN0cnVjdCBpb21tdV9kb21h aW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAo+ICAgCQkJcGh5c19hZGRyX3QgcGFkZHIs IHNpemVfdCBzaXplLCBpbnQgcHJvdCkKPiAgIHsKPiAgIAlzdHJ1Y3QgaW9fcGd0YWJsZV9vcHMg Km9wcyA9IHRvX3NtbXVfZG9tYWluKGRvbWFpbiktPnBndGJsX29wczsKPiArCXN0cnVjdCBhcm1f c21tdV9kZXZpY2UgKnNtbXUgPSB0b19zbW11X2RvbWFpbihkb21haW4pLT5zbW11Owo+ICsJaW50 IHJldDsKPiAgIAo+ICAgCWlmICghb3BzKQo+ICAgCQlyZXR1cm4gLUVOT0RFVjsKPiAgIAo+IC0J cmV0dXJuIG9wcy0+bWFwKG9wcywgaW92YSwgcGFkZHIsIHNpemUsIHByb3QpOwo+ICsJYXJtX3Nt bXVfcnBtX2dldChzbW11KTsKPiArCXJldCA9IG9wcy0+bWFwKG9wcywgaW92YSwgcGFkZHIsIHNp emUsIHByb3QpOwo+ICsJYXJtX3NtbXVfcnBtX3B1dChzbW11KTsKPiArCj4gKwlyZXR1cm4gcmV0 Owo+ICAgfQo+ICAgCj4gICBzdGF0aWMgc2l6ZV90IGFybV9zbW11X3VubWFwKHN0cnVjdCBpb21t dV9kb21haW4gKmRvbWFpbiwgdW5zaWduZWQgbG9uZyBpb3ZhLAo+ICAgCQkJICAgICBzaXplX3Qg c2l6ZSkKPiAgIHsKPiAgIAlzdHJ1Y3QgaW9fcGd0YWJsZV9vcHMgKm9wcyA9IHRvX3NtbXVfZG9t YWluKGRvbWFpbiktPnBndGJsX29wczsKPiArCXN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUg PSB0b19zbW11X2RvbWFpbihkb21haW4pLT5zbW11Owo+ICsJc2l6ZV90IHJldDsKPiAgIAo+ICAg CWlmICghb3BzKQo+ICAgCQlyZXR1cm4gMDsKPiAgIAo+IC0JcmV0dXJuIG9wcy0+dW5tYXAob3Bz LCBpb3ZhLCBzaXplKTsKPiArCWFybV9zbW11X3JwbV9nZXQoc21tdSk7Cj4gKwlyZXQgPSBvcHMt PnVubWFwKG9wcywgaW92YSwgc2l6ZSk7Cj4gKwlhcm1fc21tdV9ycG1fcHV0KHNtbXUpOwo+ICsK PiArCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIGFybV9zbW11X2lvdGxi X3N5bmMoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluKQo+IEBAIC0xNDA3LDcgKzE0NDksMTMg QEAgc3RhdGljIGludCBhcm1fc21tdV9hZGRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKPiAg IAl3aGlsZSAoaS0tKQo+ICAgCQljZmctPnNtZW5keFtpXSA9IElOVkFMSURfU01FTkRYOwo+ICAg Cj4gKwlyZXQgPSBhcm1fc21tdV9ycG1fZ2V0KHNtbXUpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJ Z290byBvdXRfY2ZnX2ZyZWU7Cj4gKwo+ICAgCXJldCA9IGFybV9zbW11X21hc3Rlcl9hbGxvY19z bWVzKGRldik7Cj4gKwlhcm1fc21tdV9ycG1fcHV0KHNtbXUpOwo+ICsKPiAgIAlpZiAocmV0KQo+ ICAgCQlnb3RvIG91dF9jZmdfZnJlZTsKPiAgIAo+IEBAIC0xNDI3LDcgKzE0NzUsNyBAQCBzdGF0 aWMgdm9pZCBhcm1fc21tdV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKPiAgIAlz dHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMgPSBkZXYtPmlvbW11X2Z3c3BlYzsKPiAgIAlzdHJ1 Y3QgYXJtX3NtbXVfbWFzdGVyX2NmZyAqY2ZnOwo+ICAgCXN0cnVjdCBhcm1fc21tdV9kZXZpY2Ug KnNtbXU7Cj4gLQo+ICsJaW50IHJldDsKPiAgIAo+ICAgCWlmICghZndzcGVjIHx8IGZ3c3BlYy0+ b3BzICE9ICZhcm1fc21tdV9vcHMpCj4gICAJCXJldHVybjsKPiBAQCAtMTQzNSw4ICsxNDgzLDE1 IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X3JlbW92ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2 KQo+ICAgCWNmZyAgPSBmd3NwZWMtPmlvbW11X3ByaXY7Cj4gICAJc21tdSA9IGNmZy0+c21tdTsK PiAgIAo+ICsJcmV0ID0gYXJtX3NtbXVfcnBtX2dldChzbW11KTsKPiArCWlmIChyZXQgPCAwKQo+ ICsJCXJldHVybjsKPiArCj4gICAJaW9tbXVfZGV2aWNlX3VubGluaygmc21tdS0+aW9tbXUsIGRl dik7Cj4gICAJYXJtX3NtbXVfbWFzdGVyX2ZyZWVfc21lcyhmd3NwZWMpOwo+ICsKPiArCWFybV9z bW11X3JwbV9wdXQoc21tdSk7Cj4gKwo+ICAgCWlvbW11X2dyb3VwX3JlbW92ZV9kZXZpY2UoZGV2 KTsKPiAgIAlrZnJlZShmd3NwZWMtPmlvbW11X3ByaXYpOwo+ICAgCWlvbW11X2Z3c3BlY19mcmVl KGRldik7Cj4gQEAgLTIxODAsNiArMjIzNSwxNyBAQCBzdGF0aWMgaW50IGFybV9zbW11X2Rldmlj ZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAgCWFybV9zbW11X2Rldmlj ZV9yZXNldChzbW11KTsKPiAgIAlhcm1fc21tdV90ZXN0X3Ntcl9tYXNrcyhzbW11KTsKPiAgIAo+ ICsJLyoKPiArCSAqIFdlIHdhbnQgdG8gYXZvaWQgdG91Y2hpbmcgZGV2LT5wb3dlci5sb2NrIGlu IGZhc3RwYXRocyB1bmxlc3MKPiArCSAqIGl0J3MgcmVhbGx5IGdvaW5nIHRvIGRvIHNvbWV0aGlu ZyB1c2VmdWwgLSBwbV9ydW50aW1lX2VuYWJsZWQoKQo+ICsJICogY2FuIHNlcnZlIGFzIGFuIGlk ZWFsIHByb3h5IGZvciB0aGF0IGRlY2lzaW9uLiBTbywgY29uZGl0aW9uYWxseQo+ICsJICogZW5h YmxlIHBtX3J1bnRpbWUuCj4gKwkgKi8KPiArCWlmIChkZXYtPnBtX2RvbWFpbikgewo+ICsJCXBt X3J1bnRpbWVfc2V0X2FjdGl2ZShkZXYpOwo+ICsJCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7Cj4g Kwl9Cj4gKwo+ICAgCS8qCj4gICAJICogRm9yIEFDUEkgYW5kIGdlbmVyaWMgRFQgYmluZGluZ3Ms IGFuIFNNTVUgd2lsbCBiZSBwcm9iZWQgYmVmb3JlCj4gICAJICogYW55IGRldmljZSB3aGljaCBt aWdodCBuZWVkIGl0LCBzbyB3ZSB3YW50IHRoZSBidXMgb3BzIGluIHBsYWNlCj4gQEAgLTIyMTUs MTAgKzIyODEsMTcgQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gICAJaWYgKCFiaXRtYXBfZW1wdHkoc21tdS0+Y29udGV4 dF9tYXAsIEFSTV9TTU1VX01BWF9DQlMpKQo+ICAgCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZW1v dmluZyBkZXZpY2Ugd2l0aCBhY3RpdmUgZG9tYWlucyFcbiIpOwo+ICAgCj4gKwlhcm1fc21tdV9y cG1fZ2V0KHNtbXUpOwo+ICAgCS8qIFR1cm4gdGhlIHRoaW5nIG9mZiAqLwo+ICAgCXdyaXRlbChz Q1IwX0NMSUVOVFBELCBBUk1fU01NVV9HUjBfTlMoc21tdSkgKyBBUk1fU01NVV9HUjBfc0NSMCk7 Cj4gKwlhcm1fc21tdV9ycG1fcHV0KHNtbXUpOwo+ICsKPiArCWlmIChwbV9ydW50aW1lX2VuYWJs ZWQoc21tdS0+ZGV2KSkKPiArCQlwbV9ydW50aW1lX2ZvcmNlX3N1c3BlbmQoc21tdS0+ZGV2KTsK PiArCWVsc2UKPiArCQljbGtfYnVsa19kaXNhYmxlKHNtbXUtPm51bV9jbGtzLCBzbW11LT5jbGtz KTsKPiAgIAo+IC0JY2xrX2J1bGtfZGlzYWJsZV91bnByZXBhcmUoc21tdS0+bnVtX2Nsa3MsIHNt bXUtPmNsa3MpOwo+ICsJY2xrX2J1bGtfdW5wcmVwYXJlKHNtbXUtPm51bV9jbGtzLCBzbW11LT5j bGtzKTsKPiAgIAo+ICAgCXJldHVybiAwOwo+ICAgfQo+IApfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpGcmVlZHJlbm8gbWFpbGluZyBsaXN0CkZyZWVkcmVu b0BsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9mcmVlZHJlbm8K 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=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,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 F1C8CC43382 for ; Wed, 26 Sep 2018 15:43:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9F6552151D for ; Wed, 26 Sep 2018 15:43:04 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9F6552151D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com 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 S1728302AbeIZV4e (ORCPT ); Wed, 26 Sep 2018 17:56:34 -0400 Received: from usa-sjc-mx-foss1.foss.arm.com ([217.140.101.70]:48708 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727136AbeIZV4e (ORCPT ); Wed, 26 Sep 2018 17:56:34 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 3A68118A; Wed, 26 Sep 2018 08:43:00 -0700 (PDT) Received: from [10.4.12.131] (e110467-lin.emea.arm.com [10.4.12.131]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id E9AD23F5BD; Wed, 26 Sep 2018 08:42:56 -0700 (PDT) Subject: Re: [PATCH v16 2/5] iommu/arm-smmu: Invoke pm_runtime during probe, add/remove device To: Vivek Gautam , joro@8bytes.org, robh+dt@kernel.org, will.deacon@arm.com, iommu@lists.linux-foundation.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: alex.williamson@redhat.com, mark.rutland@arm.com, rjw@rjwysocki.net, robdclark@gmail.com, linux-pm@vger.kernel.org, freedreno@lists.freedesktop.org, sboyd@kernel.org, tfiga@chromium.org, jcrouse@codeaurora.org, sricharan@codeaurora.org, m.szyprowski@samsung.com, architt@codeaurora.org, linux-arm-msm@vger.kernel.org References: <20180830144541.17740-1-vivek.gautam@codeaurora.org> <20180830144541.17740-3-vivek.gautam@codeaurora.org> From: Robin Murphy Message-ID: <763bc179-759a-cfda-e485-cf619ab5faec@arm.com> Date: Wed, 26 Sep 2018 16:42:55 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20180830144541.17740-3-vivek.gautam@codeaurora.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 30/08/18 15:45, Vivek Gautam wrote: > From: Sricharan R > > The smmu device probe/remove and add/remove master device callbacks > gets called when the smmu is not linked to its master, that is without > the context of the master device. So calling runtime apis in those places > separately. > Global locks are also initialized before enabling runtime pm as the > runtime_resume() calls device_reset() which does tlb_sync_global() > that ultimately requires locks to be initialized. To the best of my knowledge in this stuff (which is still not quite enough to be *truly* confident...), Reviewed-by: Robin Murphy > Signed-off-by: Sricharan R > [vivek: Cleanup pm runtime calls] > Signed-off-by: Vivek Gautam > Reviewed-by: Tomasz Figa > Tested-by: Srinivas Kandagatla > --- > drivers/iommu/arm-smmu.c | 89 +++++++++++++++++++++++++++++++++++++++++++----- > 1 file changed, 81 insertions(+), 8 deletions(-) > > diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c > index d900e007c3c9..1bf542010be7 100644 > --- a/drivers/iommu/arm-smmu.c > +++ b/drivers/iommu/arm-smmu.c > @@ -268,6 +268,20 @@ static struct arm_smmu_option_prop arm_smmu_options[] = { > { 0, NULL}, > }; > > +static inline int arm_smmu_rpm_get(struct arm_smmu_device *smmu) > +{ > + if (pm_runtime_enabled(smmu->dev)) > + return pm_runtime_get_sync(smmu->dev); > + > + return 0; > +} > + > +static inline void arm_smmu_rpm_put(struct arm_smmu_device *smmu) > +{ > + if (pm_runtime_enabled(smmu->dev)) > + pm_runtime_put(smmu->dev); > +} > + > static struct arm_smmu_domain *to_smmu_domain(struct iommu_domain *dom) > { > return container_of(dom, struct arm_smmu_domain, domain); > @@ -913,11 +927,15 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain) > struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain); > struct arm_smmu_device *smmu = smmu_domain->smmu; > struct arm_smmu_cfg *cfg = &smmu_domain->cfg; > - int irq; > + int ret, irq; > > if (!smmu || domain->type == IOMMU_DOMAIN_IDENTITY) > return; > > + ret = arm_smmu_rpm_get(smmu); > + if (ret < 0) > + return; > + > /* > * Disable the context bank and free the page tables before freeing > * it. > @@ -932,6 +950,8 @@ static void arm_smmu_destroy_domain_context(struct iommu_domain *domain) > > free_io_pgtable_ops(smmu_domain->pgtbl_ops); > __arm_smmu_free_bitmap(smmu->context_map, cfg->cbndx); > + > + arm_smmu_rpm_put(smmu); > } > > static struct iommu_domain *arm_smmu_domain_alloc(unsigned type) > @@ -1213,10 +1233,15 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) > return -ENODEV; > > smmu = fwspec_smmu(fwspec); > + > + ret = arm_smmu_rpm_get(smmu); > + if (ret < 0) > + return ret; > + > /* Ensure that the domain is finalised */ > ret = arm_smmu_init_domain_context(domain, smmu); > if (ret < 0) > - return ret; > + goto rpm_put; > > /* > * Sanity check the domain. We don't support domains across > @@ -1226,33 +1251,50 @@ static int arm_smmu_attach_dev(struct iommu_domain *domain, struct device *dev) > dev_err(dev, > "cannot attach to SMMU %s whilst already attached to domain on SMMU %s\n", > dev_name(smmu_domain->smmu->dev), dev_name(smmu->dev)); > - return -EINVAL; > + ret = -EINVAL; > + goto rpm_put; > } > > /* Looks ok, so add the device to the domain */ > - return arm_smmu_domain_add_master(smmu_domain, fwspec); > + ret = arm_smmu_domain_add_master(smmu_domain, fwspec); > + > +rpm_put: > + arm_smmu_rpm_put(smmu); > + return ret; > } > > static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova, > phys_addr_t paddr, size_t size, int prot) > { > struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops; > + struct arm_smmu_device *smmu = to_smmu_domain(domain)->smmu; > + int ret; > > if (!ops) > return -ENODEV; > > - return ops->map(ops, iova, paddr, size, prot); > + arm_smmu_rpm_get(smmu); > + ret = ops->map(ops, iova, paddr, size, prot); > + arm_smmu_rpm_put(smmu); > + > + return ret; > } > > static size_t arm_smmu_unmap(struct iommu_domain *domain, unsigned long iova, > size_t size) > { > struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops; > + struct arm_smmu_device *smmu = to_smmu_domain(domain)->smmu; > + size_t ret; > > if (!ops) > return 0; > > - return ops->unmap(ops, iova, size); > + arm_smmu_rpm_get(smmu); > + ret = ops->unmap(ops, iova, size); > + arm_smmu_rpm_put(smmu); > + > + return ret; > } > > static void arm_smmu_iotlb_sync(struct iommu_domain *domain) > @@ -1407,7 +1449,13 @@ static int arm_smmu_add_device(struct device *dev) > while (i--) > cfg->smendx[i] = INVALID_SMENDX; > > + ret = arm_smmu_rpm_get(smmu); > + if (ret < 0) > + goto out_cfg_free; > + > ret = arm_smmu_master_alloc_smes(dev); > + arm_smmu_rpm_put(smmu); > + > if (ret) > goto out_cfg_free; > > @@ -1427,7 +1475,7 @@ static void arm_smmu_remove_device(struct device *dev) > struct iommu_fwspec *fwspec = dev->iommu_fwspec; > struct arm_smmu_master_cfg *cfg; > struct arm_smmu_device *smmu; > - > + int ret; > > if (!fwspec || fwspec->ops != &arm_smmu_ops) > return; > @@ -1435,8 +1483,15 @@ static void arm_smmu_remove_device(struct device *dev) > cfg = fwspec->iommu_priv; > smmu = cfg->smmu; > > + ret = arm_smmu_rpm_get(smmu); > + if (ret < 0) > + return; > + > iommu_device_unlink(&smmu->iommu, dev); > arm_smmu_master_free_smes(fwspec); > + > + arm_smmu_rpm_put(smmu); > + > iommu_group_remove_device(dev); > kfree(fwspec->iommu_priv); > iommu_fwspec_free(dev); > @@ -2180,6 +2235,17 @@ static int arm_smmu_device_probe(struct platform_device *pdev) > arm_smmu_device_reset(smmu); > arm_smmu_test_smr_masks(smmu); > > + /* > + * We want to avoid touching dev->power.lock in fastpaths unless > + * it's really going to do something useful - pm_runtime_enabled() > + * can serve as an ideal proxy for that decision. So, conditionally > + * enable pm_runtime. > + */ > + if (dev->pm_domain) { > + pm_runtime_set_active(dev); > + pm_runtime_enable(dev); > + } > + > /* > * For ACPI and generic DT bindings, an SMMU will be probed before > * any device which might need it, so we want the bus ops in place > @@ -2215,10 +2281,17 @@ static int arm_smmu_device_remove(struct platform_device *pdev) > if (!bitmap_empty(smmu->context_map, ARM_SMMU_MAX_CBS)) > dev_err(&pdev->dev, "removing device with active domains!\n"); > > + arm_smmu_rpm_get(smmu); > /* Turn the thing off */ > writel(sCR0_CLIENTPD, ARM_SMMU_GR0_NS(smmu) + ARM_SMMU_GR0_sCR0); > + arm_smmu_rpm_put(smmu); > + > + if (pm_runtime_enabled(smmu->dev)) > + pm_runtime_force_suspend(smmu->dev); > + else > + clk_bulk_disable(smmu->num_clks, smmu->clks); > > - clk_bulk_disable_unprepare(smmu->num_clks, smmu->clks); > + clk_bulk_unprepare(smmu->num_clks, smmu->clks); > > return 0; > } >