From mboxrd@z Thu Jan 1 00:00:00 1970 From: Linus Walleij Subject: Re: [PATCH 0/3] GPIO support for BRCMSTB Date: Wed, 13 May 2015 10:59:30 +0200 Message-ID: References: <1430901477-10678-1-git-send-email-gregory.0xf0@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Return-path: In-Reply-To: Sender: devicetree-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Gregory Fong Cc: "linux-gpio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Alexandre Courbot , bcm-kernel-feedback-list , Brian Norris , "devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Florian Fainelli , Ian Campbell , Kumar Gala , "linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org" , "linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Mark Rutland , Pawel Moll , Rob Herring , Russell King List-Id: linux-gpio@vger.kernel.org On Tue, May 12, 2015 at 9:38 PM, Gregory Fong wrote: > On Tue, May 12, 2015 at 3:59 AM, Linus Walleij wrote: >> On Wed, May 6, 2015 at 10:37 AM, Gregory Fong wrote: >> >>> There is only one IRQ for each GIO IP block (i.e. several register banks share >>> an IRQ). After briefly looking into the generic IRQ chip implementation, it >>> seemed like in this case that using it would result in the driver being more >>> complex than necessary because AFAICT it expects a 1:1 mapping of >>> irq_chip_generic to gpio_chip. It seemed like less of a pain to have a single >>> irq_chip since we have a single IRQ for all register banks (multiple >>> gpio_chips). I might be missing something, maybe using a shared IRQ across >>> multiple irq_chips is easier than I think? Suggestions welcome. >> >> What is needed is a 1:1 mapping between GPIO offsets and IRQ >> offsets. >> >> If you just number your GPIOs 0...n and your IRQs 0...n >> it should work just fine with one irqchip for all banks. >> >> What screws things up is likely that the hardware supports >> 32 lines per bank and not all are used. >> >> I suggest you enable 32 line and 32 IRQs per bank, >> so that hwirq maps nicely 1:1 on the GPIO offsets, >> then just use the width thing to NACK operations on >> GPIO lines you are not using. This way you can also >> decode and warn on spurious IRQs on the unused lines. > > For having 32 lines per bank, the big problem here is the upper limit > of 256 GPIOs. Which arch is this? Usually this limit comes from arch/*/include/asm/gpio.h For ARM that was bumped to 512 a while back. It is also possible to define a custom value for your system by defining ARCH_NR_GPIOS > Anyway, I don't think I understand IRQ domains and irq_chip_generic > very well. One possibility _might_ be to use multiple irq_chips. That is probably not possible if there is just one IRQ for all banks. The task of the irqdomain is a 1-to-1 translation from one hardware numberspace to the Linux IRQ number space. In your case the hardware IRQ (hwirq) numberspace should be: bank0: 0..31 bank1: 32..63 .... bankn: 32*n..32*n+31 I think the gpiolib irqchip code can translate that properly as it is just a simple 0...x mapping, the irq handler need some magic to loop over all banks from 0..n though. Yours, Linus Walleij -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html