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=-7.0 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS 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 B67E9C10DCE for ; Sun, 8 Mar 2020 17:57:55 +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 83CEA20684 for ; Sun, 8 Mar 2020 17:57:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Oa5HXs8H"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="2XOPPrk1" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 83CEA20684 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Subject:To:From:Message-ID:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=7TRdodboVoSkgDN5vm0TU5eI4jgHz3kSpDrxM0JxTdc=; b=Oa5HXs8HQAbADp P2xR9bSxT36r3D6kxm+eSqpno6pFYWvSHb0qJhdOpK2++30OzWgvjQtHSb4SdIIchwSOszXoyCYc3 +KPjVdhPaJ98Mh5fyg4l2fxrfj7F3AOjMRyjYq3STdNO0mk05nr6spOUjt9kQjlyyBk8roP5vVYK+ BJz3amOgj2vA8u+er8mBUNKXCnbi6d8ay50I9ksct49eXqt2JHK52cogQSh4mz74ljs6aACsbVnOX U3k5Wb0MVK8ramKd0fong52x89fQgpHDNYrCal+cqj1PKblbsvgJSCOo52pHa+OYSAT77IdBpjfbP WVwoJfVoOAUoyFSToMJg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jB0BS-0005fh-JO; Sun, 08 Mar 2020 17:57:50 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jB0BO-0005fK-OC for linux-arm-kernel@lists.infradead.org; Sun, 08 Mar 2020 17:57:48 +0000 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 894EE20684; Sun, 8 Mar 2020 17:57:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1583690265; bh=VAchi9Kqw5iP4YDp9ASK3XFKLiXzbasm8zCgNURPvmI=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=2XOPPrk1XwGZMpNAPuaxYNQ8IpH8sg+QG/LEW3scQp3BfYlgqpLMEN+/RA6SbAYKg 2Ln/fDKTfhhvUXpRXVrJOoRJUHFUbgNr3vKWwWllgJjTBszLV+zbP+ScWviAy8NG5h /Caqx9sOWVOvT8y2ThvzXXKId2AtRmLS/pqJaI2M= Received: from 78.163-31-62.static.virginmediabusiness.co.uk ([62.31.163.78] helo=big-swifty.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jB0BL-00B50K-LL; Sun, 08 Mar 2020 17:57:43 +0000 Date: Sun, 08 Mar 2020 17:57:42 +0000 Message-ID: <86zhcq686h.wl-maz@kernel.org> From: Marc Zyngier To: Andreas =?UTF-8?B?RsOkcmJlcg==?= Subject: Re: [RFC 09/11] irqchip: Add Sunplus SP7021 interrupt (mux) controller In-Reply-To: <20200308163230.4002-10-afaerber@suse.de> References: <20200308163230.4002-1-afaerber@suse.de> <20200308163230.4002-10-afaerber@suse.de> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 EasyPG/1.0.0 Emacs/26 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") X-SA-Exim-Connect-IP: 62.31.163.78 X-SA-Exim-Rcpt-To: afaerber@suse.de, linux-arm-kernel@lists.infradead.org, wells.lu@sunplus.com, dvorkin@tibbo.com, linux-kernel@vger.kernel.org, tglx@linutronix.de, jason@lakedaemon.net X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200308_105746_836159_3D400DB9 X-CRM114-Status: GOOD ( 25.59 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Cooper , Dvorkin Dmitry , linux-kernel@vger.kernel.org, Thomas Gleixner , linux-arm-kernel@lists.infradead.org, Wells Lu =?UTF-8?B?5ZGC6Iqz6aiw?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gU3VuLCAwOCBNYXIgMjAyMCAxNjozMjoyNyArMDAwMCwKQW5kcmVhcyBGw6RyYmVyIDxhZmFl cmJlckBzdXNlLmRlPiB3cm90ZToKPiAKPiBTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIEbDpHJiZXIg PGFmYWVyYmVyQHN1c2UuZGU+CgpTaW5jZSB5b3UndmUgbm93IGdpdmVuIG1lIGZ1bGwgcGVybWlz c2lvbiB0byBjb21wbGFpbiwgY2FuIEkgdHJvdWJsZQp5b3UgZm9yIGEgbWVhbmluZ2Z1bCBjb21t aXQgbWVzc2FnZS4gSXQncyBub3QgbGlrZSBpdCBpcyB0aGUgZmlyc3QKdGltZSB5b3Ugd3JpdGUg YSBwYXRjaC4uLgoKPiAtLS0KPiAgZHJpdmVycy9pcnFjaGlwL01ha2VmaWxlICAgICB8ICAgMSAr Cj4gIGRyaXZlcnMvaXJxY2hpcC9pcnEtc3A3MDIxLmMgfCAyODUgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAyIGZpbGVzIGNoYW5nZWQsIDI4NiBpbnNlcnRp b25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2lycWNoaXAvaXJxLXNwNzAyMS5j Cj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9NYWtlZmlsZSBiL2RyaXZlcnMvaXJx Y2hpcC9NYWtlZmlsZQo+IGluZGV4IGVhZTBkNzhjYmYyMi4uYTZiNzBkNjY2NzM5IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvaXJxY2hpcC9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvaXJxY2hpcC9N YWtlZmlsZQo+IEBAIC0xMDUsMyArMTA1LDQgQEAgb2JqLSQoQ09ORklHX01BREVSQV9JUlEpCQkr PSBpcnEtbWFkZXJhLm8KPiAgb2JqLSQoQ09ORklHX0xTMVhfSVJRKQkJCSs9IGlycS1sczF4Lm8K PiAgb2JqLSQoQ09ORklHX1RJX1NDSV9JTlRSX0lSUUNISVApCSs9IGlycS10aS1zY2ktaW50ci5v Cj4gIG9iai0kKENPTkZJR19USV9TQ0lfSU5UQV9JUlFDSElQKQkrPSBpcnEtdGktc2NpLWludGEu bwo+ICtvYmotJChDT05GSUdfQVJDSF9TVU5QTFVTKQkJKz0gaXJxLXNwNzAyMS5vCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtc3A3MDIxLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJx LXNwNzAyMS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmEw Yjc5NzJmMmFiYgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2lycWNoaXAvaXJxLXNw NzAyMS5jCj4gQEAgLTAsMCArMSwyODUgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb3ItbGF0ZXIKPiArLyoKPiArICogU3VucGx1cyBQbHVzMSBTUDcwMjEgU29DIGlu dGVycnVwdCBjb250cm9sbGVyCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMCBBbmRyZWFz IEbDpHJiZXIKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvaXJxLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9pcnFjaGlwLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pcnFjaGlwL2NoYWluZWRf aXJxLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KPiArI2luY2x1ZGUgPGxpbnV4 L29mX2FkZHJlc3MuaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgo+ICsKPiArI2RlZmlu ZSBSRUdfSU5UQ19JTlRSX1RZUEUoaSkJCSgweDAgKyAoaSkgKiA0KQo+ICsjZGVmaW5lIFJFR19J TlRDX0lOVFJfUE9MQVJJVFkoaSkJKDB4MWMgKyAoaSkgKiA0KQo+ICsjZGVmaW5lIFJFR19JTlRD X0lOVFJfUFJJTyhpKQkJKDB4MzggKyAoaSkgKiA0KQo+ICsjZGVmaW5lIFJFR19JTlRDX0lOVFJf TUFTSyhpKQkJKDB4NTQgKyAoaSkgKiA0KQo+ICsKPiArI2RlZmluZSBSRUdfSU5UQ19JTlRSX0NM UihpKQkJKDB4MCArIChpKSAqIDQpCj4gKyNkZWZpbmUgUkVHX0lOVENfTUFTS0VEX0ZJUVMoaSkJ CSgweDFjICsgKGkpICogNCkKPiArI2RlZmluZSBSRUdfSU5UQ19NQVNLRURfSVJRUyhpKQkJKDB4 MzggKyAoaSkgKiA0KQo+ICsjZGVmaW5lIFJFR19JTlRDX0lOVFJfR1JPVVAJCTB4N2MKPiArCj4g KyNkZWZpbmUgSU5UQ19JTlRSX0dST1VQX0ZJUQlHRU5NQVNLKDYsIDApCj4gKyNkZWZpbmUgSU5U Q19JTlRSX0dST1VQX0lSUQlHRU5NQVNLKDE0LCA4KQo+ICsKPiArc3RydWN0IHNwNzAyMV9pbnRj X2RhdGEgewo+ICsJdm9pZCBfX2lvbWVtCQkqYmFzZTA7Cj4gKwl2b2lkIF9faW9tZW0JCSpiYXNl MTsKPiArCWludAkJCWV4dDBfaXJxOwo+ICsJaW50CQkJZXh0MV9pcnE7Cj4gKwlzdHJ1Y3QgaXJx X2NoaXAJCWNoaXA7CgpXaHkgZG8geW91IG5lZWQgdGhpcyBpcnFfY2hpcCBvbiBhIHBlciBpbnN0 YW5jZSBiYXNpcz8KCj4gKwlzdHJ1Y3QgaXJxX2RvbWFpbgkqZG9tYWluOwo+ICsJcmF3X3NwaW5s b2NrX3QJCWxvY2s7Cj4gK307Cj4gKwo+ICtzdGF0aWMgdm9pZCBzcDcwMjFfaW50Y19leHQwX2ly cV9oYW5kbGUoc3RydWN0IGlycV9kZXNjICpkZXNjKQo+ICt7Cj4gKwlzdHJ1Y3Qgc3A3MDIxX2lu dGNfZGF0YSAqcyA9IGlycV9kZXNjX2dldF9oYW5kbGVyX2RhdGEoZGVzYyk7Cj4gKwlzdHJ1Y3Qg aXJxX2NoaXAgKmNoaXAgPSBpcnFfZGVzY19nZXRfY2hpcChkZXNjKTsKPiArCXUzMiBtYXNrLCBt YXNrZWQ7Cj4gKwlpbnQgaSwgajsKPiArCj4gKwljaGFpbmVkX2lycV9lbnRlcihjaGlwLCBkZXNj KTsKPiArCj4gKwltYXNrID0gcmVhZGxfcmVsYXhlZChzLT5iYXNlMSArIFJFR19JTlRDX0lOVFJf R1JPVVApOwo+ICsJbWFzayA9IEZJRUxEX0dFVChJTlRDX0lOVFJfR1JPVVBfSVJRLCBtYXNrKTsK PiArCXdoaWxlIChtYXNrKSB7Cj4gKwkJaSA9IGZscyhtYXNrKSAtIDE7Cj4gKwkJbWFzayAmPSB+ QklUKGkpOwo+ICsKPiArCQltYXNrZWQgPSByZWFkbF9yZWxheGVkKHMtPmJhc2UxICsgUkVHX0lO VENfTUFTS0VEX0lSUVMoaSkpOwo+ICsJCXdoaWxlIChtYXNrZWQpIHsKPiArCQkJaiA9IGZscyht YXNrZWQpIC0gMTsKPiArCQkJbWFza2VkICY9IH5CSVQoaik7Cj4gKwo+ICsJCQlnZW5lcmljX2hh bmRsZV9pcnEoaXJxX2ZpbmRfbWFwcGluZyhzLT5kb21haW4sCj4gKwkJCQkJCQkgICAgaSAqIDMy ICsgaikpOwo+ICsJCX0KPiArCX0KPiArCj4gKwljaGFpbmVkX2lycV9leGl0KGNoaXAsIGRlc2Mp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzcDcwMjFfaW50Y19leHQxX2lycV9oYW5kbGUoc3Ry dWN0IGlycV9kZXNjICpkZXNjKQo+ICt7Cj4gKwlzdHJ1Y3Qgc3A3MDIxX2ludGNfZGF0YSAqcyA9 IGlycV9kZXNjX2dldF9oYW5kbGVyX2RhdGEoZGVzYyk7Cj4gKwlzdHJ1Y3QgaXJxX2NoaXAgKmNo aXAgPSBpcnFfZGVzY19nZXRfY2hpcChkZXNjKTsKPiArCXUzMiBtYXNrLCBtYXNrZWQ7Cj4gKwlp bnQgaSwgajsKPiArCj4gKwljaGFpbmVkX2lycV9lbnRlcihjaGlwLCBkZXNjKTsKPiArCj4gKwlt YXNrID0gcmVhZGxfcmVsYXhlZChzLT5iYXNlMSArIFJFR19JTlRDX0lOVFJfR1JPVVApOwo+ICsJ bWFzayA9IEZJRUxEX0dFVChJTlRDX0lOVFJfR1JPVVBfRklRLCBtYXNrKTsKPiArCXdoaWxlICht YXNrKSB7Cj4gKwkJaSA9IGZscyhtYXNrKSAtIDE7Cj4gKwkJbWFzayAmPSB+QklUKGkpOwo+ICsK PiArCQltYXNrZWQgPSByZWFkbF9yZWxheGVkKHMtPmJhc2UxICsgUkVHX0lOVENfTUFTS0VEX0ZJ UVMoaSkpOwo+ICsJCXdoaWxlIChtYXNrZWQpIHsKPiArCQkJaiA9IGZscyhtYXNrZWQpIC0gMTsK PiArCQkJbWFza2VkICY9IH5CSVQoaik7Cj4gKwo+ICsJCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJx X2ZpbmRfbWFwcGluZyhzLT5kb21haW4sCj4gKwkJCQkJCQkgICAgaSAqIDMyICsgaikpOwo+ICsJ CX0KPiArCX0KPiArCj4gKwljaGFpbmVkX2lycV9leGl0KGNoaXAsIGRlc2MpOwo+ICt9CgpHaXZl biB0aGF0IHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGlz CklOVENfSU5UUl9HUk9VUF9JUlEgdnMgSU5UQ19JTlRSX0dST1VQX0ZJUSAod2hhdGV2ZXIgdGhh dCBtZWFucyBmb3IKc29tZXRoaW5nIGNvbm5lY3RlZCB0byBTUElzLi4uKSwgc3VyZWx5IHlvdSBj YW4gZGV2aXNlIGEgd2F5IHRvIG1ha2UKdGhpcyBjb21tb24gY29kZS4KCj4gKwo+ICtzdGF0aWMg dm9pZCBzcDcwMjFfaW50Y19hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKPiArewo+ICsJ c3RydWN0IHNwNzAyMV9pbnRjX2RhdGEgKnMgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShk YXRhKTsKPiArCXVuc2lnbmVkIGludCBpZHg7Cj4gKwl1MzIgbWFzazsKPiArCj4gKwlpZHggPSBk YXRhLT5od2lycSAvIDMyOwoKWW91IGhhdmUgdGhpcyBjb25zdHJ1Y3QgZXZlcnl3aGVyZS4gSG93 IGFib3V0IG1ha2luZyBhbGwgeW91ciBvZmZzZXQKaGVscGVycyB0YWtlIGEgaHdpcnEgbnVtYmVy IGluc3RlYWQ/IEl0IHdvdWxkIGNlcnRhaW5seSBtYWtlIHRoZSB3aG9sZQp0aGluZyBsb29rIGEg bGl0dGxlIGxlc3MgZnJhZ2lsZS4KCj4gKwo+ICsJbWFzayA9IEJJVChkYXRhLT5od2lycSAlIDMy KTsKPiArCXdyaXRlbF9yZWxheGVkKG1hc2ssIHMtPmJhc2UxICsgUkVHX0lOVENfSU5UUl9DTFIo aWR4KSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNwNzAyMV9pbnRjX21hc2tfaXJxKHN0cnVj dCBpcnFfZGF0YSAqZGF0YSkKPiArewo+ICsJc3RydWN0IHNwNzAyMV9pbnRjX2RhdGEgKnMgPSBp cnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRhKTsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 Cj4gKwl1bnNpZ25lZCBpbnQgaWR4Owo+ICsJdTMyIG1hc2s7Cj4gKwo+ICsJaWR4ID0gZGF0YS0+ aHdpcnEgLyAzMjsKPiArCj4gKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdz KTsKPiArCj4gKwltYXNrID0gcmVhZGxfcmVsYXhlZChzLT5iYXNlMCArIFJFR19JTlRDX0lOVFJf TUFTSyhpZHgpKTsKPiArCW1hc2sgJj0gfkJJVChkYXRhLT5od2lycSAlIDMyKTsKPiArCXdyaXRl bF9yZWxheGVkKG1hc2ssIHMtPmJhc2UwICsgUkVHX0lOVENfSU5UUl9NQVNLKGlkeCkpOwo+ICsK PiArCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHNwNzAyMV9pbnRjX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpk YXRhKQo+ICt7Cj4gKwlzdHJ1Y3Qgc3A3MDIxX2ludGNfZGF0YSAqcyA9IGlycV9kYXRhX2dldF9p cnFfY2hpcF9kYXRhKGRhdGEpOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCXVuc2lnbmVk IGludCBpZHg7Cj4gKwl1MzIgbWFzazsKPiArCj4gKwlpZHggPSBkYXRhLT5od2lycSAvIDMyOwo+ ICsKPiArCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwo+ICsKPiArCW1h c2sgPSByZWFkbF9yZWxheGVkKHMtPmJhc2UwICsgUkVHX0lOVENfSU5UUl9NQVNLKGlkeCkpOwo+ ICsJbWFzayB8PSBCSVQoZGF0YS0+aHdpcnEgJSAzMik7Cj4gKwl3cml0ZWxfcmVsYXhlZChtYXNr LCBzLT5iYXNlMCArIFJFR19JTlRDX0lOVFJfTUFTSyhpZHgpKTsKPiArCj4gKwlyYXdfc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHNwNzAyMV9pbnRjX3NldF9pcnFfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEsIHVuc2lnbmVk IGludCBmbG93X3R5cGUpCj4gK3sKPiArCXN0cnVjdCBzcDcwMjFfaW50Y19kYXRhICpzID0gaXJx X2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ ICsJdW5zaWduZWQgaW50IGlkeDsKPiArCXUzMiBtYXNrLCB0eXBlLCBwb2xhcml0eTsKPiArCj4g KwlpZHggPSBkYXRhLT5od2lycSAvIDMyOwo+ICsJbWFzayA9IEJJVChkYXRhLT5od2lycSAlIDMy KTsKPiArCj4gKwlpZiAoZmxvd190eXBlICYgSVJRX1RZUEVfTEVWRUxfTUFTSykKPiArCQlpcnFf c2V0X2NoaXBfaGFuZGxlcl9uYW1lX2xvY2tlZChkYXRhLCAmcy0+Y2hpcCwgaGFuZGxlX2xldmVs X2lycSwgTlVMTCk7Cj4gKwllbHNlCj4gKwkJaXJxX3NldF9jaGlwX2hhbmRsZXJfbmFtZV9sb2Nr ZWQoZGF0YSwgJnMtPmNoaXAsIGhhbmRsZV9lZGdlX2lycSwgTlVMTCk7CgpOb3cgeW91J3ZlIGNo YW5nZWQgdGhlIGZsb3cgdHlwZSBldmVuIGlmIHRoZSBjaGVja3MgYmVsb3cgZW5kLXVwCmZhaWxp bmcuIERvbid0IGRvIHRoYXQuIEFsc28sIHBsZWFzZSB1c2UgaXJxX3NldF9jaGlwX2hhbmRsZXJf bG9ja2VkKCkKaW5zdGVhZC4gWW91IGRvbid0IG5lZWQgdG8gY2hhbmdlIHRoZSBpcnFjaGlwLgoK PiArCj4gKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKPiArCj4gKwl0 eXBlID0gcmVhZGxfcmVsYXhlZChzLT5iYXNlMCArIFJFR19JTlRDX0lOVFJfVFlQRShpZHgpKTsK PiArCXBvbGFyaXR5ID0gcmVhZGxfcmVsYXhlZChzLT5iYXNlMCArIFJFR19JTlRDX0lOVFJfUE9M QVJJVFkoaWR4KSk7Cj4gKwo+ICsJc3dpdGNoIChmbG93X3R5cGUpIHsKPiArCWNhc2UgSVJRX1RZ UEVfRURHRV9SSVNJTkc6Cj4gKwkJdHlwZSB8PSBtYXNrOwo+ICsJCXBvbGFyaXR5ICY9IH5tYXNr Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6Cj4gKwkJdHlwZSB8 PSBtYXNrOwo+ICsJCXBvbGFyaXR5IHw9IG1hc2s7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElSUV9U WVBFX0xFVkVMX0hJR0g6Cj4gKwkJdHlwZSAmPSB+bWFzazsKPiArCQlwb2xhcml0eSAmPSB+bWFz azsKPiArCQlicmVhazsKPiArCWNhc2UgSVJRX1RZUEVfTEVWRUxfTE9XOgo+ICsJCXR5cGUgJj0g fm1hc2s7Cj4gKwkJcG9sYXJpdHkgfD0gbWFzazsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4g KwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKPiArCQlyZXR1 cm4gLUVCQURSOwoKVGhlIGNhbm9uaWNhbCBlcnJvciB0byB1c2UgaXMgLUVJTlZBTC4KCj4gKwl9 Cj4gKwo+ICsJd3JpdGVsX3JlbGF4ZWQodHlwZSwgcy0+YmFzZTAgKyBSRUdfSU5UQ19JTlRSX1RZ UEUoaWR4KSk7Cj4gKwl3cml0ZWxfcmVsYXhlZChwb2xhcml0eSwgcy0+YmFzZTAgKyBSRUdfSU5U Q19JTlRSX1BPTEFSSVRZKGlkeCkpOwo+ICsKPiArCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3Jl KCZzLT5sb2NrLCBmbGFncyk7Cj4gKwo+ICsJcmV0dXJuIElSUV9TRVRfTUFTS19PSzsKPiArfQo+ ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfY2hpcCBzcDcwMjFfaW50Y19pcnFfY2hpcCA9 IHsKPiArCS5uYW1lCQkJPSAiU1A3MDIxLUEiLAo+ICsJLmlycV9hY2sJCT0gc3A3MDIxX2ludGNf YWNrX2lycSwKPiArCS5pcnFfbWFzawkJPSBzcDcwMjFfaW50Y19tYXNrX2lycSwKPiArCS5pcnFf dW5tYXNrCQk9IHNwNzAyMV9pbnRjX3VubWFza19pcnEsCj4gKwkuaXJxX3NldF90eXBlCQk9IHNw NzAyMV9pbnRjX3NldF9pcnFfdHlwZSwKCkkgYXNzdW1lIHRoaXMgU29DIGlzIFNNUC4gWW91IG5l ZWQgYSBzZXRfYWZmaW5pdHkgbWV0aG9kIHRoYXQgcmV0dXJucwotRUlOVkFMLgoKPiArfTsKPiAr Cj4gK3N0YXRpYyBpbnQgc3A3MDIxX2ludGNfaXJxX2RvbWFpbl9tYXAoc3RydWN0IGlycV9kb21h aW4gKmQsCj4gKwkJdW5zaWduZWQgaW50IGlycSwgaXJxX2h3X251bWJlcl90IGh3KQo+ICt7Cj4g KwlzdHJ1Y3Qgc3A3MDIxX2ludGNfZGF0YSAqcyA9IGQtPmhvc3RfZGF0YTsKPiArCXVuc2lnbmVk IGludCBpZHg7Cj4gKwl1MzIgbWFzaywgdHlwZTsKPiArCj4gKwlpZHggPSBodyAvIDMyOwo+ICsJ bWFzayA9IEJJVChodyAlIDMyKTsKPiArCj4gKwl0eXBlID0gcmVhZGxfcmVsYXhlZChzLT5iYXNl MCArIFJFR19JTlRDX0lOVFJfVFlQRShpZHgpKTsKPiArCj4gKwlpcnFfc2V0X2NoaXBfYW5kX2hh bmRsZXIoaXJxLCAmcy0+Y2hpcCwgKHR5cGUgJiBtYXNrKSA/IGhhbmRsZV9lZGdlX2lycSA6IGhh bmRsZV9sZXZlbF9pcnEpOwo+ICsJaXJxX3NldF9jaGlwX2RhdGEoaXJxLCBzKTsKPiArCWlycV9z ZXRfcHJvYmUoaXJxKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBpcnFfZG9tYWluX29wcyBzcDcwMjFfaW50Y19kb21haW5fb3BzID0gewo+ICsJLnhs YXRlCT0gaXJxX2RvbWFpbl94bGF0ZV9vbmVjZWxsLAoKSWYgaXQgaXMgYSBzaW5nbGUgY2VsbCwg aG93IGRvIHlvdSBleHByZXNzIHRoZSBpbnRlcnJ1cHQgcG9sYXJpdHkgaW4KdGhlIERUPyBTcGVj aWFsbHkgd2hlbiB0aGUgRFQgYmluZGluZyBzYXlzIHRoYXQgI2ludGVycnVwdC1jZWxscyA9IDwy Pi4KQ2xlYXJseSwgeW91IGhhdmUgbmV2ZXIgdGVzdGVkIHRoaXMuCgo+ICsJLm1hcAk9IHNwNzAy MV9pbnRjX2lycV9kb21haW5fbWFwLAo+ICt9Owo+ICsKPiAraW50IF9faW5pdCBzcDcwMjFfaW50 Y19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgc3RydWN0IGRldmljZV9ub2RlICpwYXJl bnQpCj4gK3sKPiArCXN0cnVjdCBzcDcwMjFfaW50Y19kYXRhICpzOwo+ICsJdm9pZCBfX2lvbWVt ICpiYXNlMCwgKmJhc2UxOwo+ICsJaW50IGk7Cj4gKwo+ICsJYmFzZTAgPSBvZl9pb21hcChub2Rl LCAwKTsKPiArCWlmICghYmFzZTApCj4gKwkJcmV0dXJuIC1FSU87CgotRU5PTUVNLgoKPiArCj4g KwliYXNlMSA9IG9mX2lvbWFwKG5vZGUsIDEpOwo+ICsJaWYgKCFiYXNlMSkKPiArCQlyZXR1cm4g LUVJTzsKCkxlYWtpbmcgbWFwcGluZy4KCj4gKwo+ICsJcyA9IGt6YWxsb2Moc2l6ZW9mKCpzKSwg R0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXMpCj4gKwkJcmV0dXJuIC1FTk9NRU07CgpBZ2Fpbi4KCj4g Kwo+ICsJcy0+YmFzZTAgPSBiYXNlMDsKPiArCXMtPmJhc2UxID0gYmFzZTE7Cj4gKwlzLT5jaGlw ID0gc3A3MDIxX2ludGNfaXJxX2NoaXA7CgpUaGF0J3MgZXhhY3RseSB3aGF0IEkgd2FzIGNvbXBs YWluaW5nIGFib3V0IGVhcmxpZXI6IHBvaW50bGVzc2x5CnN0b3JpbmcgYSBjb3B5IG9mIGEgc3Rh dGljIGNvbnN0IGRhdGEgc3RydWN0dXJlIHRoYXQgbmV2ZXIgZ2V0cwp1cGRhdGVkLiBEcm9wIHRo aXMuCgo+ICsKPiArCXMtPmV4dDBfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobm9kZSwgMCk7 Cj4gKwlpZiAocy0+ZXh0MF9pcnEgPD0gMCkgewo+ICsJCWtmcmVlKHMpOwo+ICsJCXJldHVybiAt RUlOVkFMOwo+ICsJfQo+ICsKPiArCXMtPmV4dDFfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAo bm9kZSwgMSk7Cj4gKwlpZiAocy0+ZXh0MV9pcnEgPD0gMCkgewo+ICsJCWtmcmVlKHMpOwo+ICsJ CXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCXJhd19zcGluX2xvY2tfaW5pdCgmcy0+bG9j ayk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewo+ICsJCXdyaXRlbF9yZWxheGVk KDAsIHMtPmJhc2UwICsgUkVHX0lOVENfSU5UUl9NQVNLKGkpKTsKPiArCQl3cml0ZWxfcmVsYXhl ZCh+MCwgcy0+YmFzZTAgKyBSRUdfSU5UQ19JTlRSX1RZUEUoaSkpOwo+ICsJCXdyaXRlbF9yZWxh eGVkKDAsIHMtPmJhc2UwICsgUkVHX0lOVENfSU5UUl9QT0xBUklUWShpKSk7Cj4gKwo+ICsJCS8q IGlycSwgbm90IGZpcSAqLwo+ICsJCXdyaXRlbF9yZWxheGVkKH4wLCBzLT5iYXNlMCArIFJFR19J TlRDX0lOVFJfUFJJTyhpKSk7Cj4gKwo+ICsJCXdyaXRlbF9yZWxheGVkKH4wLCBzLT5iYXNlMSAr IFJFR19JTlRDX0lOVFJfQ0xSKGkpKTsKPiArCX0KPiArCj4gKwlzLT5kb21haW4gPSBpcnFfZG9t YWluX2FkZF9saW5lYXIobm9kZSwgMjAwLCAmc3A3MDIxX2ludGNfZG9tYWluX29wcywKCk1hZ2lj IG51bWJlcnMuCgo+ICsJCQkJCSAgcyk7Cj4gKwlpZiAoIXMtPmRvbWFpbikgewo+ICsJCWtmcmVl KHMpOwo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJfQo+ICsKPiArCWlycV9zZXRfY2hhaW5lZF9o YW5kbGVyX2FuZF9kYXRhKHMtPmV4dDBfaXJxLCBzcDcwMjFfaW50Y19leHQwX2lycV9oYW5kbGUs IHMpOwo+ICsJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXJfYW5kX2RhdGEocy0+ZXh0MV9pcnEsIHNw NzAyMV9pbnRjX2V4dDFfaXJxX2hhbmRsZSwgcyk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr SVJRQ0hJUF9ERUNMQVJFKHNwNzAyMV9pbnRjLCAic3VucGx1cyxzcDcwMjEtaW50YyIsIHNwNzAy MV9pbnRjX2luaXQpOwoKU28geWVzLCBJIGNvbXBsYWluZWQgYSBsb3QuIFRoYW5rcyBmb3IgZ2l2 aW5nIG1lIHRoZSBvcHBvcnR1bml0eS4KCglNLgoKLS0gCkphenogaXMgbm90IGRlYWQsIGl0IGp1 c3Qgc21lbGxzIGZ1bm55LgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBs aXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtYXJtLWtlcm5lbAo= 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=-7.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS 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 E8C20C10DCE for ; Sun, 8 Mar 2020 17:59:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B4B8E206D5 for ; Sun, 8 Mar 2020 17:59:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1583690359; bh=VAchi9Kqw5iP4YDp9ASK3XFKLiXzbasm8zCgNURPvmI=; h=Date:From:To:Cc:Subject:In-Reply-To:References:List-ID:From; b=aCiItjuqn8B7ORrJkoqmd1TkG/LEkbLf9//YuVjlNVPZV5Ub0zkgnVfyXq8zsBVvO 03CiZVn0WeXnsVucqGnrZTVn8UvBk0aTtRarQ3B58+saMHMe67wfsE9EmZyC+fjTjt P9OkhxBLT4O9gPDC+YwAI19/3BonxZlHm1zgPLOo= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726346AbgCHR5q (ORCPT ); Sun, 8 Mar 2020 13:57:46 -0400 Received: from mail.kernel.org ([198.145.29.99]:36866 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726292AbgCHR5q (ORCPT ); Sun, 8 Mar 2020 13:57:46 -0400 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 894EE20684; Sun, 8 Mar 2020 17:57:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1583690265; bh=VAchi9Kqw5iP4YDp9ASK3XFKLiXzbasm8zCgNURPvmI=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=2XOPPrk1XwGZMpNAPuaxYNQ8IpH8sg+QG/LEW3scQp3BfYlgqpLMEN+/RA6SbAYKg 2Ln/fDKTfhhvUXpRXVrJOoRJUHFUbgNr3vKWwWllgJjTBszLV+zbP+ScWviAy8NG5h /Caqx9sOWVOvT8y2ThvzXXKId2AtRmLS/pqJaI2M= Received: from 78.163-31-62.static.virginmediabusiness.co.uk ([62.31.163.78] helo=big-swifty.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jB0BL-00B50K-LL; Sun, 08 Mar 2020 17:57:43 +0000 Date: Sun, 08 Mar 2020 17:57:42 +0000 Message-ID: <86zhcq686h.wl-maz@kernel.org> From: Marc Zyngier To: Andreas =?UTF-8?B?RsOkcmJlcg==?= Cc: linux-arm-kernel@lists.infradead.org, Wells Lu =?UTF-8?B?5ZGC6Iqz6aiw?= , Dvorkin Dmitry , linux-kernel@vger.kernel.org, Thomas Gleixner , Jason Cooper Subject: Re: [RFC 09/11] irqchip: Add Sunplus SP7021 interrupt (mux) controller In-Reply-To: <20200308163230.4002-10-afaerber@suse.de> References: <20200308163230.4002-1-afaerber@suse.de> <20200308163230.4002-10-afaerber@suse.de> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 EasyPG/1.0.0 Emacs/26 (aarch64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 62.31.163.78 X-SA-Exim-Rcpt-To: afaerber@suse.de, linux-arm-kernel@lists.infradead.org, wells.lu@sunplus.com, dvorkin@tibbo.com, linux-kernel@vger.kernel.org, tglx@linutronix.de, jason@lakedaemon.net X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, 08 Mar 2020 16:32:27 +0000, Andreas F=C3=A4rber wrote: >=20 > Signed-off-by: Andreas F=C3=A4rber Since you've now given me full permission to complain, can I trouble you for a meaningful commit message. It's not like it is the first time you write a patch... > --- > drivers/irqchip/Makefile | 1 + > drivers/irqchip/irq-sp7021.c | 285 +++++++++++++++++++++++++++++++++++++= ++++++ > 2 files changed, 286 insertions(+) > create mode 100644 drivers/irqchip/irq-sp7021.c >=20 > diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile > index eae0d78cbf22..a6b70d666739 100644 > --- a/drivers/irqchip/Makefile > +++ b/drivers/irqchip/Makefile > @@ -105,3 +105,4 @@ obj-$(CONFIG_MADERA_IRQ) +=3D irq-madera.o > obj-$(CONFIG_LS1X_IRQ) +=3D irq-ls1x.o > obj-$(CONFIG_TI_SCI_INTR_IRQCHIP) +=3D irq-ti-sci-intr.o > obj-$(CONFIG_TI_SCI_INTA_IRQCHIP) +=3D irq-ti-sci-inta.o > +obj-$(CONFIG_ARCH_SUNPLUS) +=3D irq-sp7021.o > diff --git a/drivers/irqchip/irq-sp7021.c b/drivers/irqchip/irq-sp7021.c > new file mode 100644 > index 000000000000..a0b7972f2abb > --- /dev/null > +++ b/drivers/irqchip/irq-sp7021.c > @@ -0,0 +1,285 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > +/* > + * Sunplus Plus1 SP7021 SoC interrupt controller > + * > + * Copyright (c) 2020 Andreas F=C3=A4rber > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#define REG_INTC_INTR_TYPE(i) (0x0 + (i) * 4) > +#define REG_INTC_INTR_POLARITY(i) (0x1c + (i) * 4) > +#define REG_INTC_INTR_PRIO(i) (0x38 + (i) * 4) > +#define REG_INTC_INTR_MASK(i) (0x54 + (i) * 4) > + > +#define REG_INTC_INTR_CLR(i) (0x0 + (i) * 4) > +#define REG_INTC_MASKED_FIQS(i) (0x1c + (i) * 4) > +#define REG_INTC_MASKED_IRQS(i) (0x38 + (i) * 4) > +#define REG_INTC_INTR_GROUP 0x7c > + > +#define INTC_INTR_GROUP_FIQ GENMASK(6, 0) > +#define INTC_INTR_GROUP_IRQ GENMASK(14, 8) > + > +struct sp7021_intc_data { > + void __iomem *base0; > + void __iomem *base1; > + int ext0_irq; > + int ext1_irq; > + struct irq_chip chip; Why do you need this irq_chip on a per instance basis? > + struct irq_domain *domain; > + raw_spinlock_t lock; > +}; > + > +static void sp7021_intc_ext0_irq_handle(struct irq_desc *desc) > +{ > + struct sp7021_intc_data *s =3D irq_desc_get_handler_data(desc); > + struct irq_chip *chip =3D irq_desc_get_chip(desc); > + u32 mask, masked; > + int i, j; > + > + chained_irq_enter(chip, desc); > + > + mask =3D readl_relaxed(s->base1 + REG_INTC_INTR_GROUP); > + mask =3D FIELD_GET(INTC_INTR_GROUP_IRQ, mask); > + while (mask) { > + i =3D fls(mask) - 1; > + mask &=3D ~BIT(i); > + > + masked =3D readl_relaxed(s->base1 + REG_INTC_MASKED_IRQS(i)); > + while (masked) { > + j =3D fls(masked) - 1; > + masked &=3D ~BIT(j); > + > + generic_handle_irq(irq_find_mapping(s->domain, > + i * 32 + j)); > + } > + } > + > + chained_irq_exit(chip, desc); > +} > + > +static void sp7021_intc_ext1_irq_handle(struct irq_desc *desc) > +{ > + struct sp7021_intc_data *s =3D irq_desc_get_handler_data(desc); > + struct irq_chip *chip =3D irq_desc_get_chip(desc); > + u32 mask, masked; > + int i, j; > + > + chained_irq_enter(chip, desc); > + > + mask =3D readl_relaxed(s->base1 + REG_INTC_INTR_GROUP); > + mask =3D FIELD_GET(INTC_INTR_GROUP_FIQ, mask); > + while (mask) { > + i =3D fls(mask) - 1; > + mask &=3D ~BIT(i); > + > + masked =3D readl_relaxed(s->base1 + REG_INTC_MASKED_FIQS(i)); > + while (masked) { > + j =3D fls(masked) - 1; > + masked &=3D ~BIT(j); > + > + generic_handle_irq(irq_find_mapping(s->domain, > + i * 32 + j)); > + } > + } > + > + chained_irq_exit(chip, desc); > +} Given that the only difference between these two functions is INTC_INTR_GROUP_IRQ vs INTC_INTR_GROUP_FIQ (whatever that means for something connected to SPIs...), surely you can devise a way to make this common code. > + > +static void sp7021_intc_ack_irq(struct irq_data *data) > +{ > + struct sp7021_intc_data *s =3D irq_data_get_irq_chip_data(data); > + unsigned int idx; > + u32 mask; > + > + idx =3D data->hwirq / 32; You have this construct everywhere. How about making all your offset helpers take a hwirq number instead? It would certainly make the whole thing look a little less fragile. > + > + mask =3D BIT(data->hwirq % 32); > + writel_relaxed(mask, s->base1 + REG_INTC_INTR_CLR(idx)); > +} > + > +static void sp7021_intc_mask_irq(struct irq_data *data) > +{ > + struct sp7021_intc_data *s =3D irq_data_get_irq_chip_data(data); > + unsigned long flags; > + unsigned int idx; > + u32 mask; > + > + idx =3D data->hwirq / 32; > + > + raw_spin_lock_irqsave(&s->lock, flags); > + > + mask =3D readl_relaxed(s->base0 + REG_INTC_INTR_MASK(idx)); > + mask &=3D ~BIT(data->hwirq % 32); > + writel_relaxed(mask, s->base0 + REG_INTC_INTR_MASK(idx)); > + > + raw_spin_unlock_irqrestore(&s->lock, flags); > +} > + > +static void sp7021_intc_unmask_irq(struct irq_data *data) > +{ > + struct sp7021_intc_data *s =3D irq_data_get_irq_chip_data(data); > + unsigned long flags; > + unsigned int idx; > + u32 mask; > + > + idx =3D data->hwirq / 32; > + > + raw_spin_lock_irqsave(&s->lock, flags); > + > + mask =3D readl_relaxed(s->base0 + REG_INTC_INTR_MASK(idx)); > + mask |=3D BIT(data->hwirq % 32); > + writel_relaxed(mask, s->base0 + REG_INTC_INTR_MASK(idx)); > + > + raw_spin_unlock_irqrestore(&s->lock, flags); > +} > + > +static int sp7021_intc_set_irq_type(struct irq_data *data, unsigned int = flow_type) > +{ > + struct sp7021_intc_data *s =3D irq_data_get_irq_chip_data(data); > + unsigned long flags; > + unsigned int idx; > + u32 mask, type, polarity; > + > + idx =3D data->hwirq / 32; > + mask =3D BIT(data->hwirq % 32); > + > + if (flow_type & IRQ_TYPE_LEVEL_MASK) > + irq_set_chip_handler_name_locked(data, &s->chip, handle_level_irq, NUL= L); > + else > + irq_set_chip_handler_name_locked(data, &s->chip, handle_edge_irq, NULL= ); Now you've changed the flow type even if the checks below end-up failing. Don't do that. Also, please use irq_set_chip_handler_locked() instead. You don't need to change the irqchip. > + > + raw_spin_lock_irqsave(&s->lock, flags); > + > + type =3D readl_relaxed(s->base0 + REG_INTC_INTR_TYPE(idx)); > + polarity =3D readl_relaxed(s->base0 + REG_INTC_INTR_POLARITY(idx)); > + > + switch (flow_type) { > + case IRQ_TYPE_EDGE_RISING: > + type |=3D mask; > + polarity &=3D ~mask; > + break; > + case IRQ_TYPE_EDGE_FALLING: > + type |=3D mask; > + polarity |=3D mask; > + break; > + case IRQ_TYPE_LEVEL_HIGH: > + type &=3D ~mask; > + polarity &=3D ~mask; > + break; > + case IRQ_TYPE_LEVEL_LOW: > + type &=3D ~mask; > + polarity |=3D mask; > + break; > + default: > + raw_spin_unlock_irqrestore(&s->lock, flags); > + return -EBADR; The canonical error to use is -EINVAL. > + } > + > + writel_relaxed(type, s->base0 + REG_INTC_INTR_TYPE(idx)); > + writel_relaxed(polarity, s->base0 + REG_INTC_INTR_POLARITY(idx)); > + > + raw_spin_unlock_irqrestore(&s->lock, flags); > + > + return IRQ_SET_MASK_OK; > +} > + > +static const struct irq_chip sp7021_intc_irq_chip =3D { > + .name =3D "SP7021-A", > + .irq_ack =3D sp7021_intc_ack_irq, > + .irq_mask =3D sp7021_intc_mask_irq, > + .irq_unmask =3D sp7021_intc_unmask_irq, > + .irq_set_type =3D sp7021_intc_set_irq_type, I assume this SoC is SMP. You need a set_affinity method that returns -EINVAL. > +}; > + > +static int sp7021_intc_irq_domain_map(struct irq_domain *d, > + unsigned int irq, irq_hw_number_t hw) > +{ > + struct sp7021_intc_data *s =3D d->host_data; > + unsigned int idx; > + u32 mask, type; > + > + idx =3D hw / 32; > + mask =3D BIT(hw % 32); > + > + type =3D readl_relaxed(s->base0 + REG_INTC_INTR_TYPE(idx)); > + > + irq_set_chip_and_handler(irq, &s->chip, (type & mask) ? handle_edge_irq= : handle_level_irq); > + irq_set_chip_data(irq, s); > + irq_set_probe(irq); > + > + return 0; > +} > + > +static const struct irq_domain_ops sp7021_intc_domain_ops =3D { > + .xlate =3D irq_domain_xlate_onecell, If it is a single cell, how do you express the interrupt polarity in the DT? Specially when the DT binding says that #interrupt-cells =3D <2>. Clearly, you have never tested this. > + .map =3D sp7021_intc_irq_domain_map, > +}; > + > +int __init sp7021_intc_init(struct device_node *node, struct device_node= *parent) > +{ > + struct sp7021_intc_data *s; > + void __iomem *base0, *base1; > + int i; > + > + base0 =3D of_iomap(node, 0); > + if (!base0) > + return -EIO; -ENOMEM. > + > + base1 =3D of_iomap(node, 1); > + if (!base1) > + return -EIO; Leaking mapping. > + > + s =3D kzalloc(sizeof(*s), GFP_KERNEL); > + if (!s) > + return -ENOMEM; Again. > + > + s->base0 =3D base0; > + s->base1 =3D base1; > + s->chip =3D sp7021_intc_irq_chip; That's exactly what I was complaining about earlier: pointlessly storing a copy of a static const data structure that never gets updated. Drop this. > + > + s->ext0_irq =3D irq_of_parse_and_map(node, 0); > + if (s->ext0_irq <=3D 0) { > + kfree(s); > + return -EINVAL; > + } > + > + s->ext1_irq =3D irq_of_parse_and_map(node, 1); > + if (s->ext1_irq <=3D 0) { > + kfree(s); > + return -EINVAL; > + } > + > + raw_spin_lock_init(&s->lock); > + > + for (i =3D 0; i < 7; i++) { > + writel_relaxed(0, s->base0 + REG_INTC_INTR_MASK(i)); > + writel_relaxed(~0, s->base0 + REG_INTC_INTR_TYPE(i)); > + writel_relaxed(0, s->base0 + REG_INTC_INTR_POLARITY(i)); > + > + /* irq, not fiq */ > + writel_relaxed(~0, s->base0 + REG_INTC_INTR_PRIO(i)); > + > + writel_relaxed(~0, s->base1 + REG_INTC_INTR_CLR(i)); > + } > + > + s->domain =3D irq_domain_add_linear(node, 200, &sp7021_intc_domain_ops, Magic numbers. > + s); > + if (!s->domain) { > + kfree(s); > + return -ENOMEM; > + } > + > + irq_set_chained_handler_and_data(s->ext0_irq, sp7021_intc_ext0_irq_hand= le, s); > + irq_set_chained_handler_and_data(s->ext1_irq, sp7021_intc_ext1_irq_hand= le, s); > + > + return 0; > +} > +IRQCHIP_DECLARE(sp7021_intc, "sunplus,sp7021-intc", sp7021_intc_init); So yes, I complained a lot. Thanks for giving me the opportunity. M. --=20 Jazz is not dead, it just smells funny.