From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sasha Levin Subject: [PATCH AUTOSEL 5.0 194/262] drm/msm/dpu: Convert to a chained irq chip Date: Wed, 27 Mar 2019 14:00:49 -0400 Message-ID: <20190327180158.10245-194-sashal@kernel.org> References: <20190327180158.10245-1-sashal@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190327180158.10245-1-sashal-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: freedreno-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Freedreno" To: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, stable-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: Sasha Levin , Rajesh Yadav , linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Stephen Boyd , Jayant Shekhar , Jordan Crouse , Sean Paul , Jeykumar Sankaran , freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: linux-arm-msm@vger.kernel.org RnJvbTogU3RlcGhlbiBCb3lkIDxzd2JveWRAY2hyb21pdW0ub3JnPgoKWyBVcHN0cmVhbSBjb21t aXQgMDcwZTY0ZGMxYmJjODc5YjdlMGU5ZmZmY2NkOWRkMTM5YmFmODlmMCBdCgpEZXZpY2VzIHRo YXQgbWFrZSB1cCBEUFUsIGkuZS4gZ3JhcGhpY3MgY2FyZCwgcmVxdWVzdCB0aGVpciBpbnRlcnJ1 cHRzCmZyb20gdGhpcyAidmlydHVhbCIgaW50ZXJydXB0IGNoaXAuIFRoZSBpbnRlcnJ1cHQgY2hp cCBidWlsZHMgdXBvbiBhIEdJQwpTUEkgaW50ZXJydXB0IHRoYXQgcmFpc2VzIGhpZ2ggd2hlbiBh bnkgb2YgdGhlIGludGVycnVwdHMgaW4gdGhlIERQVSdzCmlycSBzdGF0dXMgcmVnaXN0ZXIgYXJl IHRyaWdnZXJlZC4gRnJvbSB0aGUga2VybmVsJ3MgcGVyc3BlY3RpdmUgdGhpcyBpcwphIGNoYWlu ZWQgaXJxIGNoaXAsIHNvIHJlcXVlc3RpbmcgYSBmbG93IGhhbmRsZXIgZm9yIHRoZSBHSUMgU1BJ IGFuZAp0aGVuIGNhbGxpbmcgZ2VuZXJpYyBJUlEgaGFuZGxpbmcgY29kZSBmcm9tIHRoYXQgaXJx IGhhbmRsZXIgaXMgbm90CmNvbXBsZXRlbHkgcHJvcGVyLiBJdCdzIGJldHRlciB0byBjb252ZXJ0 IHRoaXMgdG8gYSBjaGFpbmVkIGlycSBzbyB0aGF0CnRoZSBHSUMgU1BJIGlycSBkb2Vzbid0IGFw cGVhciBpbiAvcHJvYy9pbnRlcnJ1cHRzLCBjYW4ndCBoYXZlIENQVQphZmZpbml0eSBjaGFuZ2Vk LCBhbmQgd29uJ3QgYmUgYWNjb3VudGVkIGZvciB3aXRoIGlycSBzdGF0cy4gRG9pbmcgdGhpcwph bHNvIHNpbGVuY2VzIGEgcmVjdXJzaXZlIGxvY2tkZXAgd2FybmluZyBiZWNhdXNlIHdlIGNhbiBz cGVjaWZ5IGEKZGlmZmVyZW50IGxvY2sgY2xhc3MgZm9yIHRoZSBjaGFpbmVkIGludGVycnVwdHMs IHNpbGVuY2luZyBhIHdhcm5pbmcKdGhhdCBpcyBlYXN5IHRvIHNlZSB3aXRoICd0aHJlYWRpcnFz JyBvbiB0aGUga2VybmVsIGNvbW1hbmRsaW5lLgoKIFdBUk5JTkc6IGluY29uc2lzdGVudCBsb2Nr IHN0YXRlCiA0LjE5LjEwICM3NiBUYWludGVkOiBHICAgICAgICBXCiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogaW5jb25zaXN0ZW50IHtJTi1IQVJESVJRLVd9IC0+IHtIQVJESVJR LU9OLVd9IHVzYWdlLgogaXJxLzQwLWRwdV9tZHNzLzIwMyBbSEMwWzBdOlNDMFsyXTpIRTE6U0Uw XSB0YWtlczoKIDAwMDAwMDAwNTNlYTkwMjEgKCZpcnFfZGVzY19sb2NrX2NsYXNzKXs/Li0ufSwg YXQ6IGhhbmRsZV9sZXZlbF9pcnErMHgzNC8weDI2Ywoge0lOLUhBUkRJUlEtV30gc3RhdGUgd2Fz IHJlZ2lzdGVyZWQgYXQ6CiAgIGxvY2tfYWNxdWlyZSsweDI0NC8weDM2MAogICBfcmF3X3NwaW5f bG9jaysweDY0LzB4YTAKICAgaGFuZGxlX2Zhc3Rlb2lfaXJxKzB4NTQvMHgyZWMKICAgZ2VuZXJp Y19oYW5kbGVfaXJxKzB4NDQvMHg1YwogICBfX2hhbmRsZV9kb21haW5faXJxKzB4OWMvMHgxMWMK ICAgZ2ljX2hhbmRsZV9pcnErMHgyMDgvMHgyNjAKICAgZWwxX2lycSsweGI0LzB4MTMwCiAgIGFy Y2hfY3B1X2lkbGUrMHgxNzgvMHgzY2MKICAgZGVmYXVsdF9pZGxlX2NhbGwrMHgzYy8weDU0CiAg IGRvX2lkbGUrMHgxYTgvMHgzZGMKICAgY3B1X3N0YXJ0dXBfZW50cnkrMHgyNC8weDI4CiAgIHJl c3RfaW5pdCsweDI0MC8weDI3MAogICBzdGFydF9rZXJuZWwrMHg1YTgvMHg2YmMKIGlycSBldmVu dCBzdGFtcDogMTgKIGhhcmRpcnFzIGxhc3QgIGVuYWJsZWQgYXQgKDE3KTogWzxmZmZmZmY5MDQy Mzg1ZTgwPl0gX3Jhd19zcGluX3VubG9ja19pcnErMHg0MC8weGMwCiBoYXJkaXJxcyBsYXN0IGRp c2FibGVkIGF0ICgxNik6IFs8ZmZmZmZmOTA0MjM3YTFmND5dIF9fc2NoZWR1bGUrMHgyMGMvMHgx YmJjCiBzb2Z0aXJxcyBsYXN0ICBlbmFibGVkIGF0ICgwKTogWzxmZmZmZmY5MDQwZjMxOGQwPl0g Y29weV9wcm9jZXNzKzB4YjUwLzB4Mzk2NAogc29mdGlycXMgbGFzdCBkaXNhYmxlZCBhdCAoMTgp OiBbPGZmZmZmZjkwNDEwMzYzNjQ+XSBsb2NhbF9iaF9kaXNhYmxlKzB4OC8weDIwCgogb3RoZXIg aW5mbyB0aGF0IG1pZ2h0IGhlbHAgdXMgZGVidWcgdGhpczoKICBQb3NzaWJsZSB1bnNhZmUgbG9j a2luZyBzY2VuYXJpbzoKCiAgICAgICAgQ1BVMAogICAgICAgIC0tLS0KICAgbG9jaygmaXJxX2Rl c2NfbG9ja19jbGFzcyk7CiAgIDxJbnRlcnJ1cHQ+CiAgICAgbG9jaygmaXJxX2Rlc2NfbG9ja19j bGFzcyk7CgogICoqKiBERUFETE9DSyAqKioKCiBubyBsb2NrcyBoZWxkIGJ5IGlycS80MC1kcHVf bWRzcy8yMDMuCgogc3RhY2sgYmFja3RyYWNlOgogQ1BVOiAwIFBJRDogMjAzIENvbW06IGlycS80 MC1kcHVfbWRzcyBUYWludGVkOiBHICAgICAgICBXICAgICAgICAgNC4xOS4xMCAjNzYKIENhbGwg dHJhY2U6CiAgZHVtcF9iYWNrdHJhY2UrMHgwLzB4MmY4CiAgc2hvd19zdGFjaysweDIwLzB4MmMK ICBfX2R1bXBfc3RhY2srMHgyMC8weDI4CiAgZHVtcF9zdGFjaysweGNjLzB4MTBjCiAgbWFya19s b2NrKzB4YmUwLzB4ZTI0CiAgX19sb2NrX2FjcXVpcmUrMHg0Y2MvMHgyNzA4CiAgbG9ja19hY3F1 aXJlKzB4MjQ0LzB4MzYwCiAgX3Jhd19zcGluX2xvY2srMHg2NC8weGEwCiAgaGFuZGxlX2xldmVs X2lycSsweDM0LzB4MjZjCiAgZ2VuZXJpY19oYW5kbGVfaXJxKzB4NDQvMHg1YwogIGRwdV9tZHNz X2lycSsweDY0LzB4ZWMKICBpcnFfZm9yY2VkX3RocmVhZF9mbisweDU4LzB4OWMKICBpcnFfdGhy ZWFkKzB4MTIwLzB4MWRjCiAga3RocmVhZCsweDI0OC8weDI2MAogIHJldF9mcm9tX2ZvcmsrMHgx MC8weDE4CiAtLS0tLS0tLS0tLS1bIGN1dCBoZXJlIF0tLS0tLS0tLS0tLS0KIGlycSAxNjkgaGFu ZGxlciBpcnFfZGVmYXVsdF9wcmltYXJ5X2hhbmRsZXIrMHgwLzB4MTggZW5hYmxlZCBpbnRlcnJ1 cHRzCgpDYzogU2VhbiBQYXVsIDxzZWFucGF1bEBjaHJvbWl1bS5vcmc+CkNjOiBKb3JkYW4gQ3Jv dXNlIDxqY3JvdXNlQGNvZGVhdXJvcmEub3JnPgpDYzogSmF5YW50IFNoZWtoYXIgPGpzaGVraGFy QGNvZGVhdXJvcmEub3JnPgpDYzogUmFqZXNoIFlhZGF2IDxyeWFkYXZAY29kZWF1cm9yYS5vcmc+ CkNjOiBKZXlrdW1hciBTYW5rYXJhbiA8anNhbmthQGNvZGVhdXJvcmEub3JnPgpTaWduZWQtb2Zm LWJ5OiBTdGVwaGVuIEJveWQgPHN3Ym95ZEBjaHJvbWl1bS5vcmc+ClNpZ25lZC1vZmYtYnk6IFNl YW4gUGF1bCA8c2VhbnBhdWxAY2hyb21pdW0ub3JnPgpTaWduZWQtb2ZmLWJ5OiBTYXNoYSBMZXZp biA8c2FzaGFsQGtlcm5lbC5vcmc+Ci0tLQogZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL2RwdTEv ZHB1X21kc3MuYyB8IDM2ICsrKysrKysrKysrKysrLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs IDIxIGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9tZHNzLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rp c3AvZHB1MS9kcHVfbWRzcy5jCmluZGV4IGNiMzA3YTJhYmYwNi4uNzMxNmI0YWIxYjg1IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvZHB1MS9kcHVfbWRzcy5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9tc20vZGlzcC9kcHUxL2RwdV9tZHNzLmMKQEAgLTIzLDExICsyMywxNCBA QCBzdHJ1Y3QgZHB1X21kc3MgewogCXN0cnVjdCBkcHVfaXJxX2NvbnRyb2xsZXIgaXJxX2NvbnRy b2xsZXI7CiB9OwogCi1zdGF0aWMgaXJxcmV0dXJuX3QgZHB1X21kc3NfaXJxKGludCBpcnEsIHZv aWQgKmFyZykKK3N0YXRpYyB2b2lkIGRwdV9tZHNzX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2Mp CiB7Ci0Jc3RydWN0IGRwdV9tZHNzICpkcHVfbWRzcyA9IGFyZzsKKwlzdHJ1Y3QgZHB1X21kc3Mg KmRwdV9tZHNzID0gaXJxX2Rlc2NfZ2V0X2hhbmRsZXJfZGF0YShkZXNjKTsKKwlzdHJ1Y3QgaXJx X2NoaXAgKmNoaXAgPSBpcnFfZGVzY19nZXRfY2hpcChkZXNjKTsKIAl1MzIgaW50ZXJydXB0czsK IAorCWNoYWluZWRfaXJxX2VudGVyKGNoaXAsIGRlc2MpOworCiAJaW50ZXJydXB0cyA9IHJlYWRs X3JlbGF4ZWQoZHB1X21kc3MtPm1taW8gKyBIV19JTlRSX1NUQVRVUyk7CiAKIAl3aGlsZSAoaW50 ZXJydXB0cykgewpAQCAtMzksMjAgKzQyLDIwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBkcHVfbWRz c19pcnEoaW50IGlycSwgdm9pZCAqYXJnKQogCQkJCQkgICBod2lycSk7CiAJCWlmIChtYXBwaW5n ID09IDApIHsKIAkJCURSTV9FUlJPUigiY291bGRuJ3QgZmluZCBpcnEgbWFwcGluZyBmb3IgJWx1 XG4iLCBod2lycSk7Ci0JCQlyZXR1cm4gSVJRX05PTkU7CisJCQlicmVhazsKIAkJfQogCiAJCXJj ID0gZ2VuZXJpY19oYW5kbGVfaXJxKG1hcHBpbmcpOwogCQlpZiAocmMgPCAwKSB7CiAJCQlEUk1f RVJST1IoImhhbmRsZSBpcnEgZmFpbDogaXJxPSVsdSBtYXBwaW5nPSV1IHJjPSVkXG4iLAogCQkJ CSAgaHdpcnEsIG1hcHBpbmcsIHJjKTsKLQkJCXJldHVybiBJUlFfTk9ORTsKKwkJCWJyZWFrOwog CQl9CiAKIAkJaW50ZXJydXB0cyAmPSB+KDEgPDwgaHdpcnEpOwogCX0KIAotCXJldHVybiBJUlFf SEFORExFRDsKKwljaGFpbmVkX2lycV9leGl0KGNoaXAsIGRlc2MpOwogfQogCiBzdGF0aWMgdm9p ZCBkcHVfbWRzc19pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmlycWQpCkBAIC04MywxNiArODYs MTYgQEAgc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBkcHVfbWRzc19pcnFfY2hpcCA9IHsKIAkuaXJx X3VubWFzayA9IGRwdV9tZHNzX2lycV91bm1hc2ssCiB9OwogCitzdGF0aWMgc3RydWN0IGxvY2tf Y2xhc3Nfa2V5IGRwdV9tZHNzX2xvY2tfa2V5LCBkcHVfbWRzc19yZXF1ZXN0X2tleTsKKwogc3Rh dGljIGludCBkcHVfbWRzc19pcnFkb21haW5fbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4s CiAJCXVuc2lnbmVkIGludCBpcnEsIGlycV9od19udW1iZXJfdCBod2lycSkKIHsKIAlzdHJ1Y3Qg ZHB1X21kc3MgKmRwdV9tZHNzID0gZG9tYWluLT5ob3N0X2RhdGE7Ci0JaW50IHJldDsKIAorCWly cV9zZXRfbG9ja2RlcF9jbGFzcyhpcnEsICZkcHVfbWRzc19sb2NrX2tleSwgJmRwdV9tZHNzX3Jl cXVlc3Rfa2V5KTsKIAlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmZHB1X21kc3NfaXJx X2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEpOwotCXJldCA9IGlycV9zZXRfY2hpcF9kYXRhKGlycSwg ZHB1X21kc3MpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gaXJxX3NldF9jaGlwX2RhdGEoaXJx LCBkcHVfbWRzcyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgZHB1 X21kc3NfaXJxZG9tYWluX29wcyA9IHsKQEAgLTE1OSwxMSArMTYyLDEzIEBAIHN0YXRpYyB2b2lk IGRwdV9tZHNzX2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAlzdHJ1Y3QgbXNtX2Ry bV9wcml2YXRlICpwcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHB1X21kc3MgKmRw dV9tZHNzID0gdG9fZHB1X21kc3MocHJpdi0+bWRzcyk7CiAJc3RydWN0IGRzc19tb2R1bGVfcG93 ZXIgKm1wID0gJmRwdV9tZHNzLT5tcDsKKwlpbnQgaXJxOwogCiAJcG1fcnVudGltZV9zdXNwZW5k KGRldi0+ZGV2KTsKIAlwbV9ydW50aW1lX2Rpc2FibGUoZGV2LT5kZXYpOwogCV9kcHVfbWRzc19p cnFfZG9tYWluX2ZpbmkoZHB1X21kc3MpOwotCWZyZWVfaXJxKHBsYXRmb3JtX2dldF9pcnEocGRl diwgMCksIGRwdV9tZHNzKTsKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWly cV9zZXRfY2hhaW5lZF9oYW5kbGVyX2FuZF9kYXRhKGlycSwgTlVMTCwgTlVMTCk7CiAJbXNtX2Rz c19wdXRfY2xrKG1wLT5jbGtfY29uZmlnLCBtcC0+bnVtX2Nsayk7CiAJZGV2bV9rZnJlZSgmcGRl di0+ZGV2LCBtcC0+Y2xrX2NvbmZpZyk7CiAKQEAgLTE4Nyw2ICsxOTIsNyBAQCBpbnQgZHB1X21k c3NfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCXN0cnVjdCBkcHVfbWRzcyAqZHB1X21k c3M7CiAJc3RydWN0IGRzc19tb2R1bGVfcG93ZXIgKm1wOwogCWludCByZXQgPSAwOworCWludCBp cnE7CiAKIAlkcHVfbWRzcyA9IGRldm1fa3phbGxvYyhkZXYtPmRldiwgc2l6ZW9mKCpkcHVfbWRz cyksIEdGUF9LRVJORUwpOwogCWlmICghZHB1X21kc3MpCkBAIC0yMTksMTIgKzIyNSwxMiBAQCBp bnQgZHB1X21kc3NfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCWlmIChyZXQpCiAJCWdv dG8gaXJxX2RvbWFpbl9lcnJvcjsKIAotCXJldCA9IHJlcXVlc3RfaXJxKHBsYXRmb3JtX2dldF9p cnEocGRldiwgMCksCi0JCQlkcHVfbWRzc19pcnEsIDAsICJkcHVfbWRzc19pc3IiLCBkcHVfbWRz cyk7Ci0JaWYgKHJldCkgewotCQlEUFVfRVJST1IoImZhaWxlZCB0byBpbml0IGlycTogJWRcbiIs IHJldCk7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkK IAkJZ290byBpcnFfZXJyb3I7Ci0JfQorCisJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXJfYW5kX2Rh dGEoaXJxLCBkcHVfbWRzc19pcnEsCisJCQkJCSBkcHVfbWRzcyk7CiAKIAlwbV9ydW50aW1lX2Vu YWJsZShkZXYtPmRldik7CiAKLS0gCjIuMTkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KRnJlZWRyZW5vIG1haWxpbmcgbGlzdApGcmVlZHJlbm9AbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZnJlZWRyZW5v 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=-9.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT 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 410FCC43381 for ; Wed, 27 Mar 2019 18:08:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 086E92177E for ; Wed, 27 Mar 2019 18:08:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553710101; bh=NRuaSr8n8fZnBHbG/H+fVSxuNyWN6hyEjm7+spBBsIM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=yWQsuLd4PaVGE4AGfzctyNgsn9h4diLKJ3vyv2URPdwiv86Gon3fiuFPkSabLWEFf dY0fSmwIbaD3z8PBVj73k5LBUP+eKaiPIt2TQtbFnfMDM0gxBAoxtl0Z8G84i4p9Hv HuX6PdJpkiiaHqhaairT4E2moGrISA0RuXNwYTwU= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388331AbfC0SIT (ORCPT ); Wed, 27 Mar 2019 14:08:19 -0400 Received: from mail.kernel.org ([198.145.29.99]:50150 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731929AbfC0SIQ (ORCPT ); Wed, 27 Mar 2019 14:08:16 -0400 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 06C84217D9; Wed, 27 Mar 2019 18:08:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553710095; bh=NRuaSr8n8fZnBHbG/H+fVSxuNyWN6hyEjm7+spBBsIM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ew2t6BXd1TIp4OBek0/p63c62sHlS2spH4Tm6RN1xfMOwZc8EFuj+eJqwNcjocFeT LQWd8jMhJiIhJUSWuImEDT1kJuRI+1JPyGtMDfZldwwWPJWEStTm/TQUfV9QKb5fXe lj46m0yF6L5mY6JpMg3lPzFs3PUK3RVSyhwpidOY= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Stephen Boyd , Sean Paul , Jordan Crouse , Jayant Shekhar , Rajesh Yadav , Jeykumar Sankaran , Sasha Levin , linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org Subject: [PATCH AUTOSEL 5.0 194/262] drm/msm/dpu: Convert to a chained irq chip Date: Wed, 27 Mar 2019 14:00:49 -0400 Message-Id: <20190327180158.10245-194-sashal@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190327180158.10245-1-sashal@kernel.org> References: <20190327180158.10245-1-sashal@kernel.org> MIME-Version: 1.0 X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Stephen Boyd [ Upstream commit 070e64dc1bbc879b7e0e9fffccd9dd139baf89f0 ] Devices that make up DPU, i.e. graphics card, request their interrupts from this "virtual" interrupt chip. The interrupt chip builds upon a GIC SPI interrupt that raises high when any of the interrupts in the DPU's irq status register are triggered. From the kernel's perspective this is a chained irq chip, so requesting a flow handler for the GIC SPI and then calling generic IRQ handling code from that irq handler is not completely proper. It's better to convert this to a chained irq so that the GIC SPI irq doesn't appear in /proc/interrupts, can't have CPU affinity changed, and won't be accounted for with irq stats. Doing this also silences a recursive lockdep warning because we can specify a different lock class for the chained interrupts, silencing a warning that is easy to see with 'threadirqs' on the kernel commandline. WARNING: inconsistent lock state 4.19.10 #76 Tainted: G W -------------------------------- inconsistent {IN-HARDIRQ-W} -> {HARDIRQ-ON-W} usage. irq/40-dpu_mdss/203 [HC0[0]:SC0[2]:HE1:SE0] takes: 0000000053ea9021 (&irq_desc_lock_class){?.-.}, at: handle_level_irq+0x34/0x26c {IN-HARDIRQ-W} state was registered at: lock_acquire+0x244/0x360 _raw_spin_lock+0x64/0xa0 handle_fasteoi_irq+0x54/0x2ec generic_handle_irq+0x44/0x5c __handle_domain_irq+0x9c/0x11c gic_handle_irq+0x208/0x260 el1_irq+0xb4/0x130 arch_cpu_idle+0x178/0x3cc default_idle_call+0x3c/0x54 do_idle+0x1a8/0x3dc cpu_startup_entry+0x24/0x28 rest_init+0x240/0x270 start_kernel+0x5a8/0x6bc irq event stamp: 18 hardirqs last enabled at (17): [] _raw_spin_unlock_irq+0x40/0xc0 hardirqs last disabled at (16): [] __schedule+0x20c/0x1bbc softirqs last enabled at (0): [] copy_process+0xb50/0x3964 softirqs last disabled at (18): [] local_bh_disable+0x8/0x20 other info that might help us debug this: Possible unsafe locking scenario: CPU0 ---- lock(&irq_desc_lock_class); lock(&irq_desc_lock_class); *** DEADLOCK *** no locks held by irq/40-dpu_mdss/203. stack backtrace: CPU: 0 PID: 203 Comm: irq/40-dpu_mdss Tainted: G W 4.19.10 #76 Call trace: dump_backtrace+0x0/0x2f8 show_stack+0x20/0x2c __dump_stack+0x20/0x28 dump_stack+0xcc/0x10c mark_lock+0xbe0/0xe24 __lock_acquire+0x4cc/0x2708 lock_acquire+0x244/0x360 _raw_spin_lock+0x64/0xa0 handle_level_irq+0x34/0x26c generic_handle_irq+0x44/0x5c dpu_mdss_irq+0x64/0xec irq_forced_thread_fn+0x58/0x9c irq_thread+0x120/0x1dc kthread+0x248/0x260 ret_from_fork+0x10/0x18 ------------[ cut here ]------------ irq 169 handler irq_default_primary_handler+0x0/0x18 enabled interrupts Cc: Sean Paul Cc: Jordan Crouse Cc: Jayant Shekhar Cc: Rajesh Yadav Cc: Jeykumar Sankaran Signed-off-by: Stephen Boyd Signed-off-by: Sean Paul Signed-off-by: Sasha Levin --- drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c | 36 ++++++++++++++---------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c index cb307a2abf06..7316b4ab1b85 100644 --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_mdss.c @@ -23,11 +23,14 @@ struct dpu_mdss { struct dpu_irq_controller irq_controller; }; -static irqreturn_t dpu_mdss_irq(int irq, void *arg) +static void dpu_mdss_irq(struct irq_desc *desc) { - struct dpu_mdss *dpu_mdss = arg; + struct dpu_mdss *dpu_mdss = irq_desc_get_handler_data(desc); + struct irq_chip *chip = irq_desc_get_chip(desc); u32 interrupts; + chained_irq_enter(chip, desc); + interrupts = readl_relaxed(dpu_mdss->mmio + HW_INTR_STATUS); while (interrupts) { @@ -39,20 +42,20 @@ static irqreturn_t dpu_mdss_irq(int irq, void *arg) hwirq); if (mapping == 0) { DRM_ERROR("couldn't find irq mapping for %lu\n", hwirq); - return IRQ_NONE; + break; } rc = generic_handle_irq(mapping); if (rc < 0) { DRM_ERROR("handle irq fail: irq=%lu mapping=%u rc=%d\n", hwirq, mapping, rc); - return IRQ_NONE; + break; } interrupts &= ~(1 << hwirq); } - return IRQ_HANDLED; + chained_irq_exit(chip, desc); } static void dpu_mdss_irq_mask(struct irq_data *irqd) @@ -83,16 +86,16 @@ static struct irq_chip dpu_mdss_irq_chip = { .irq_unmask = dpu_mdss_irq_unmask, }; +static struct lock_class_key dpu_mdss_lock_key, dpu_mdss_request_key; + static int dpu_mdss_irqdomain_map(struct irq_domain *domain, unsigned int irq, irq_hw_number_t hwirq) { struct dpu_mdss *dpu_mdss = domain->host_data; - int ret; + irq_set_lockdep_class(irq, &dpu_mdss_lock_key, &dpu_mdss_request_key); irq_set_chip_and_handler(irq, &dpu_mdss_irq_chip, handle_level_irq); - ret = irq_set_chip_data(irq, dpu_mdss); - - return ret; + return irq_set_chip_data(irq, dpu_mdss); } static const struct irq_domain_ops dpu_mdss_irqdomain_ops = { @@ -159,11 +162,13 @@ static void dpu_mdss_destroy(struct drm_device *dev) struct msm_drm_private *priv = dev->dev_private; struct dpu_mdss *dpu_mdss = to_dpu_mdss(priv->mdss); struct dss_module_power *mp = &dpu_mdss->mp; + int irq; pm_runtime_suspend(dev->dev); pm_runtime_disable(dev->dev); _dpu_mdss_irq_domain_fini(dpu_mdss); - free_irq(platform_get_irq(pdev, 0), dpu_mdss); + irq = platform_get_irq(pdev, 0); + irq_set_chained_handler_and_data(irq, NULL, NULL); msm_dss_put_clk(mp->clk_config, mp->num_clk); devm_kfree(&pdev->dev, mp->clk_config); @@ -187,6 +192,7 @@ int dpu_mdss_init(struct drm_device *dev) struct dpu_mdss *dpu_mdss; struct dss_module_power *mp; int ret = 0; + int irq; dpu_mdss = devm_kzalloc(dev->dev, sizeof(*dpu_mdss), GFP_KERNEL); if (!dpu_mdss) @@ -219,12 +225,12 @@ int dpu_mdss_init(struct drm_device *dev) if (ret) goto irq_domain_error; - ret = request_irq(platform_get_irq(pdev, 0), - dpu_mdss_irq, 0, "dpu_mdss_isr", dpu_mdss); - if (ret) { - DPU_ERROR("failed to init irq: %d\n", ret); + irq = platform_get_irq(pdev, 0); + if (irq < 0) goto irq_error; - } + + irq_set_chained_handler_and_data(irq, dpu_mdss_irq, + dpu_mdss); pm_runtime_enable(dev->dev); -- 2.19.1