From mboxrd@z Thu Jan 1 00:00:00 1970 From: miquel.raynal@bootlin.com (Miquel Raynal) Date: Wed, 4 Jul 2018 17:16:22 +0200 Subject: [PATCH v3 09/17] irqchip/irq-mvebu-icu: support ICU subnodes In-Reply-To: References: <20180622151432.1566-1-miquel.raynal@bootlin.com> <20180622151432.1566-10-miquel.raynal@bootlin.com> <61ff2e4f-55b6-cf70-5f04-32cd197c35f8@arm.com> <20180704110917.65557d0a@xps13> Message-ID: <20180704171622.2df87519@xps13> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Marc, Marc Zyngier wrote on Wed, 4 Jul 2018 13:43:58 +0100: > On 04/07/18 10:09, Miquel Raynal wrote: > > Hi Marc, > > > > Marc Zyngier wrote on Thu, 28 Jun 2018 13:45:09 > > +0100: > > > >> On 22/06/18 16:14, Miquel Raynal wrote: > >>> The ICU can handle several type of interrupt, each of them being handled > >>> differently on AP side. On CP side, the ICU should be able to make the > >>> distinction between each interrupt group by pointing to the right parent. > >>> > >>> This is done through the introduction of new bindings, presenting the ICU > >>> node as the parent of multiple ICU sub-nodes, each of them being an > >>> interrupt type with a different interrupt parent. ICU interrupt 'clients' > >>> now directly point to the right sub-node, avoiding the need for the extra > >>> ICU_GRP_* parameter. > >>> > >>> ICU subnodes are probed automatically with devm_platform_populate(). If > >>> the node as no child, the probe function for NSRs will still be called > >>> 'manually' in order to preserve backward compatibility with DT using the > >>> old binding. > >>> > >>> Signed-off-by: Miquel Raynal > >>> --- > >>> drivers/irqchip/irq-mvebu-icu.c | 88 ++++++++++++++++++++++++++++++++++------- > >>> 1 file changed, 74 insertions(+), 14 deletions(-) > >>> > >>> diff --git a/drivers/irqchip/irq-mvebu-icu.c b/drivers/irqchip/irq-mvebu-icu.c > >>> index 24d45186eb6b..f7c2ede9c222 100644 > >>> --- a/drivers/irqchip/irq-mvebu-icu.c > >>> +++ b/drivers/irqchip/irq-mvebu-icu.c > >>> @@ -43,6 +43,7 @@ struct mvebu_icu { > >>> struct regmap *regmap; > >>> struct device *dev; > >>> atomic_t initialized; > >>> + bool legacy_bindings; > >>> }; > >>> > >>> struct mvebu_icu_irq_data { > >>> @@ -51,6 +52,30 @@ struct mvebu_icu_irq_data { > >>> unsigned int type; > >>> }; > >>> > >>> +static struct mvebu_icu *mvebu_icu_dev_get_drvdata(struct platform_device *pdev) > >>> +{ > >>> + struct mvebu_icu *icu; > >>> + > >>> + /* > >>> + * Device data being populated means we should be using legacy bindings. > >>> + * Using the _parent_ device data means we should be using new bindings. > >>> + */ > >>> + icu = dev_get_drvdata(&pdev->dev); > >>> + if (icu) { > >>> + if (!icu->legacy_bindings) > >>> + return ERR_PTR(-EINVAL); > >>> + } else { > >>> + icu = dev_get_drvdata(pdev->dev.parent); > >>> + if (!icu) > >>> + return ERR_PTR(-ENODEV); > >>> + > >>> + if (icu->legacy_bindings) > >>> + return ERR_PTR(-EINVAL); > >>> + } > >> > >> Doesn't this make legacy_bindings completely redundant? Either the > >> pointer is !NULL in the device, and this is using a legacy binging, or > >> it is stored in the parent, and this is a new binding. You could even > >> have a helper for that: > >> > >> static bool is_legacy(struct platform_device *pdev) > >> { > >> return !dev_get_drvdata(&pdev->dev); > >> } > >> > >> The driver really doesn't need to be defending against itself, if > >> anything, and it would save you quite a bit of error handling in the > >> callers of this function. > > > > I simplified the sanity checks but I had to keep an icu->is_legacy > > boolean because the above function would not have worked, for instance, > > in the *_translate() hook. As this hook does not receive a struct > > device * (or platform_device) as parameter, I tried to use icu->dev > > instead. This cannot work as it always points to the device having the > > driver data attached. > > You could still have the pdev as part of the domain host_data, right? > Isn't that just a matter of having a pointer to the pdev as part of the > icu data structure? There is already a 'struct device *dev' pointer in the ICU data structure. This pointer is set to "&pdev->dev" in the main probe function. Legacy: dev is the unique ICU device, the driver data is attached to it. Now: dev is the 'host' ICU device that is the parent of two other devices, ICU NSR controller and SEI NSR controller. The driver data is also attached to this device. So in both situations checking dev_get_drvdata(icu->dev) would return a valid pointer. Does this answer your question? Kind regards, Miqu?l From mboxrd@z Thu Jan 1 00:00:00 1970 From: Miquel Raynal Subject: Re: [PATCH v3 09/17] irqchip/irq-mvebu-icu: support ICU subnodes Date: Wed, 4 Jul 2018 17:16:22 +0200 Message-ID: <20180704171622.2df87519@xps13> References: <20180622151432.1566-1-miquel.raynal@bootlin.com> <20180622151432.1566-10-miquel.raynal@bootlin.com> <61ff2e4f-55b6-cf70-5f04-32cd197c35f8@arm.com> <20180704110917.65557d0a@xps13> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Marc Zyngier Cc: Mark Rutland , Andrew Lunn , Jason Cooper , devicetree@vger.kernel.org, Antoine Tenart , Catalin Marinas , Gregory Clement , Haim Boot , Will Deacon , Maxime Chevallier , Nadav Haklai , Rob Herring , Thomas Petazzoni , Thomas Gleixner , Hanna Hawa , linux-arm-kernel@lists.infradead.org, Sebastian Hesselbarth List-Id: devicetree@vger.kernel.org SGkgTWFyYywKCk1hcmMgWnluZ2llciA8bWFyYy56eW5naWVyQGFybS5jb20+IHdyb3RlIG9uIFdl ZCwgNCBKdWwgMjAxOCAxMzo0Mzo1OAorMDEwMDoKCj4gT24gMDQvMDcvMTggMTA6MDksIE1pcXVl bCBSYXluYWwgd3JvdGU6Cj4gPiBIaSBNYXJjLAo+ID4gCj4gPiBNYXJjIFp5bmdpZXIgPG1hcmMu enluZ2llckBhcm0uY29tPiB3cm90ZSBvbiBUaHUsIDI4IEp1biAyMDE4IDEzOjQ1OjA5Cj4gPiAr MDEwMDoKPiA+ICAgCj4gPj4gT24gMjIvMDYvMTggMTY6MTQsIE1pcXVlbCBSYXluYWwgd3JvdGU6 ICAKPiA+Pj4gVGhlIElDVSBjYW4gaGFuZGxlIHNldmVyYWwgdHlwZSBvZiBpbnRlcnJ1cHQsIGVh Y2ggb2YgdGhlbSBiZWluZyBoYW5kbGVkCj4gPj4+IGRpZmZlcmVudGx5IG9uIEFQIHNpZGUuIE9u IENQIHNpZGUsIHRoZSBJQ1Ugc2hvdWxkIGJlIGFibGUgdG8gbWFrZSB0aGUKPiA+Pj4gZGlzdGlu Y3Rpb24gYmV0d2VlbiBlYWNoIGludGVycnVwdCBncm91cCBieSBwb2ludGluZyB0byB0aGUgcmln aHQgcGFyZW50Lgo+ID4+Pgo+ID4+PiBUaGlzIGlzIGRvbmUgdGhyb3VnaCB0aGUgaW50cm9kdWN0 aW9uIG9mIG5ldyBiaW5kaW5ncywgcHJlc2VudGluZyB0aGUgSUNVCj4gPj4+IG5vZGUgYXMgdGhl IHBhcmVudCBvZiBtdWx0aXBsZSBJQ1Ugc3ViLW5vZGVzLCBlYWNoIG9mIHRoZW0gYmVpbmcgYW4K PiA+Pj4gaW50ZXJydXB0IHR5cGUgd2l0aCBhIGRpZmZlcmVudCBpbnRlcnJ1cHQgcGFyZW50LiBJ Q1UgaW50ZXJydXB0ICdjbGllbnRzJwo+ID4+PiBub3cgZGlyZWN0bHkgcG9pbnQgdG8gdGhlIHJp Z2h0IHN1Yi1ub2RlLCBhdm9pZGluZyB0aGUgbmVlZCBmb3IgdGhlIGV4dHJhCj4gPj4+IElDVV9H UlBfKiBwYXJhbWV0ZXIuCj4gPj4+Cj4gPj4+IElDVSBzdWJub2RlcyBhcmUgcHJvYmVkIGF1dG9t YXRpY2FsbHkgd2l0aCBkZXZtX3BsYXRmb3JtX3BvcHVsYXRlKCkuIElmCj4gPj4+IHRoZSBub2Rl IGFzIG5vIGNoaWxkLCB0aGUgcHJvYmUgZnVuY3Rpb24gZm9yIE5TUnMgd2lsbCBzdGlsbCBiZSBj YWxsZWQKPiA+Pj4gJ21hbnVhbGx5JyBpbiBvcmRlciB0byBwcmVzZXJ2ZSBiYWNrd2FyZCBjb21w YXRpYmlsaXR5IHdpdGggRFQgdXNpbmcgdGhlCj4gPj4+IG9sZCBiaW5kaW5nLgo+ID4+Pgo+ID4+ PiBTaWduZWQtb2ZmLWJ5OiBNaXF1ZWwgUmF5bmFsIDxtaXF1ZWwucmF5bmFsQGJvb3RsaW4uY29t Pgo+ID4+PiAtLS0KPiA+Pj4gIGRyaXZlcnMvaXJxY2hpcC9pcnEtbXZlYnUtaWN1LmMgfCA4OCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLQo+ID4+PiAgMSBmaWxlIGNo YW5nZWQsIDc0IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQo+ID4+Pgo+ID4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL2lycS1tdmVidS1pY3UuYyBiL2RyaXZlcnMvaXJxY2hp cC9pcnEtbXZlYnUtaWN1LmMKPiA+Pj4gaW5kZXggMjRkNDUxODZlYjZiLi5mN2MyZWRlOWMyMjIg MTAwNjQ0Cj4gPj4+IC0tLSBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtbXZlYnUtaWN1LmMKPiA+Pj4g KysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1tdmVidS1pY3UuYwo+ID4+PiBAQCAtNDMsNiArNDMs NyBAQCBzdHJ1Y3QgbXZlYnVfaWN1IHsKPiA+Pj4gIAlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7Cj4g Pj4+ICAJc3RydWN0IGRldmljZSAqZGV2Owo+ID4+PiAgCWF0b21pY190IGluaXRpYWxpemVkOwo+ ID4+PiArCWJvb2wgbGVnYWN5X2JpbmRpbmdzOwo+ID4+PiAgfTsKPiA+Pj4gIAo+ID4+PiAgc3Ry dWN0IG12ZWJ1X2ljdV9pcnFfZGF0YSB7Cj4gPj4+IEBAIC01MSw2ICs1MiwzMCBAQCBzdHJ1Y3Qg bXZlYnVfaWN1X2lycV9kYXRhIHsKPiA+Pj4gIAl1bnNpZ25lZCBpbnQgdHlwZTsKPiA+Pj4gIH07 Cj4gPj4+ICAKPiA+Pj4gK3N0YXRpYyBzdHJ1Y3QgbXZlYnVfaWN1ICptdmVidV9pY3VfZGV2X2dl dF9kcnZkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPj4+ICt7Cj4gPj4+ICsJ c3RydWN0IG12ZWJ1X2ljdSAqaWN1Owo+ID4+PiArCj4gPj4+ICsJLyoKPiA+Pj4gKwkgKiBEZXZp Y2UgZGF0YSBiZWluZyBwb3B1bGF0ZWQgbWVhbnMgd2Ugc2hvdWxkIGJlIHVzaW5nIGxlZ2FjeSBi aW5kaW5ncy4KPiA+Pj4gKwkgKiBVc2luZyB0aGUgX3BhcmVudF8gZGV2aWNlIGRhdGEgbWVhbnMg d2Ugc2hvdWxkIGJlIHVzaW5nIG5ldyBiaW5kaW5ncy4KPiA+Pj4gKwkgKi8KPiA+Pj4gKwlpY3Ug PSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7Cj4gPj4+ICsJaWYgKGljdSkgewo+ID4+PiAr CQlpZiAoIWljdS0+bGVnYWN5X2JpbmRpbmdzKQo+ID4+PiArCQkJcmV0dXJuIEVSUl9QVFIoLUVJ TlZBTCk7Cj4gPj4+ICsJfSBlbHNlIHsKPiA+Pj4gKwkJaWN1ID0gZGV2X2dldF9kcnZkYXRhKHBk ZXYtPmRldi5wYXJlbnQpOwo+ID4+PiArCQlpZiAoIWljdSkKPiA+Pj4gKwkJCXJldHVybiBFUlJf UFRSKC1FTk9ERVYpOwo+ID4+PiArCj4gPj4+ICsJCWlmIChpY3UtPmxlZ2FjeV9iaW5kaW5ncykK PiA+Pj4gKwkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ID4+PiArCX0gICAgCj4gPj4KPiA+ PiBEb2Vzbid0IHRoaXMgbWFrZSBsZWdhY3lfYmluZGluZ3MgY29tcGxldGVseSByZWR1bmRhbnQ/ IEVpdGhlciB0aGUKPiA+PiBwb2ludGVyIGlzICFOVUxMIGluIHRoZSBkZXZpY2UsIGFuZCB0aGlz IGlzIHVzaW5nIGEgbGVnYWN5IGJpbmdpbmcsIG9yCj4gPj4gaXQgaXMgc3RvcmVkIGluIHRoZSBw YXJlbnQsIGFuZCB0aGlzIGlzIGEgbmV3IGJpbmRpbmcuIFlvdSBjb3VsZCBldmVuCj4gPj4gaGF2 ZSBhIGhlbHBlciBmb3IgdGhhdDoKPiA+Pgo+ID4+IHN0YXRpYyBib29sIGlzX2xlZ2FjeShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4+IHsKPiA+PiAJcmV0dXJuICFkZXZfZ2V0X2Ry dmRhdGEoJnBkZXYtPmRldik7Cj4gPj4gfQo+ID4+Cj4gPj4gVGhlIGRyaXZlciByZWFsbHkgZG9l c24ndCBuZWVkIHRvIGJlIGRlZmVuZGluZyBhZ2FpbnN0IGl0c2VsZiwgaWYKPiA+PiBhbnl0aGlu ZywgYW5kIGl0IHdvdWxkIHNhdmUgeW91IHF1aXRlIGEgYml0IG9mIGVycm9yIGhhbmRsaW5nIGlu IHRoZQo+ID4+IGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi4gIAo+ID4gCj4gPiBJIHNpbXBsaWZp ZWQgdGhlIHNhbml0eSBjaGVja3MgYnV0IEkgaGFkIHRvIGtlZXAgYW4gaWN1LT5pc19sZWdhY3kK PiA+IGJvb2xlYW4gYmVjYXVzZSB0aGUgYWJvdmUgZnVuY3Rpb24gd291bGQgbm90IGhhdmUgd29y a2VkLCBmb3IgaW5zdGFuY2UsCj4gPiBpbiB0aGUgKl90cmFuc2xhdGUoKSBob29rLiBBcyB0aGlz IGhvb2sgZG9lcyBub3QgcmVjZWl2ZSBhIHN0cnVjdAo+ID4gZGV2aWNlICogKG9yIHBsYXRmb3Jt X2RldmljZSkgYXMgcGFyYW1ldGVyLCBJIHRyaWVkIHRvIHVzZSBpY3UtPmRldgo+ID4gaW5zdGVh ZC4gVGhpcyBjYW5ub3Qgd29yayBhcyBpdCBhbHdheXMgcG9pbnRzIHRvIHRoZSBkZXZpY2UgaGF2 aW5nIHRoZQo+ID4gZHJpdmVyIGRhdGEgYXR0YWNoZWQuICAKPiAKPiBZb3UgY291bGQgc3RpbGwg aGF2ZSB0aGUgcGRldiBhcyBwYXJ0IG9mIHRoZSBkb21haW4gaG9zdF9kYXRhLCByaWdodD8KPiBJ c24ndCB0aGF0IGp1c3QgYSBtYXR0ZXIgb2YgaGF2aW5nIGEgcG9pbnRlciB0byB0aGUgcGRldiBh cyBwYXJ0IG9mIHRoZQo+IGljdSBkYXRhIHN0cnVjdHVyZT8KClRoZXJlIGlzIGFscmVhZHkgYSAn c3RydWN0IGRldmljZSAqZGV2JyBwb2ludGVyIGluIHRoZSBJQ1UgZGF0YQpzdHJ1Y3R1cmUuIFRo aXMgcG9pbnRlciBpcyBzZXQgdG8gIiZwZGV2LT5kZXYiIGluIHRoZSBtYWluIHByb2JlCmZ1bmN0 aW9uLgoKTGVnYWN5OiBkZXYgaXMgdGhlIHVuaXF1ZSBJQ1UgZGV2aWNlLCB0aGUgZHJpdmVyIGRh dGEgaXMgYXR0YWNoZWQgdG8gaXQuCk5vdzogZGV2IGlzIHRoZSAnaG9zdCcgSUNVIGRldmljZSB0 aGF0IGlzIHRoZSBwYXJlbnQgb2YgdHdvIG90aGVyCmRldmljZXMsIElDVSBOU1IgY29udHJvbGxl ciBhbmQgU0VJIE5TUiBjb250cm9sbGVyLiBUaGUgZHJpdmVyIGRhdGEgaXMKYWxzbyBhdHRhY2hl ZCB0byB0aGlzIGRldmljZS4KClNvIGluIGJvdGggc2l0dWF0aW9ucyBjaGVja2luZyBkZXZfZ2V0 X2RydmRhdGEoaWN1LT5kZXYpIHdvdWxkIHJldHVybiBhCnZhbGlkIHBvaW50ZXIuCgpEb2VzIHRo aXMgYW5zd2VyIHlvdXIgcXVlc3Rpb24/CgpLaW5kIHJlZ2FyZHMsCk1pcXXDqGwKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwg bWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK