Hi Andrew, (Cc Julia C for the RT spinlock question.) thanks for the updated v2 patch! It's almost perfect. But I ran into some snags. Overall it is pretty much an MMIO driver, just that it uses ioread()/iowrite() and we really need to get around to fixing up the gpio-mmio.c to support x86 style io with some flag. But it is a bit much to ask for a simple driver (I might send or ask for patches later to convert it.) On Sat, Jan 12, 2019 at 12:49 AM Andrew Lunn <andrew@xxxxxxx> wrote: > Some TQ-Systems ComExpress modules contain an IO controller with 8 > GPIO lines. > > Signed-off-by: Andrew Lunn <andrew@xxxxxxx> > --- > v2 > diff --git a/drivers/gpio/gpio-tqmx86.c b/drivers/gpio/gpio-tqmx86.c > new file mode 100644 > index 000000000000..f626b716f30c > --- /dev/null > +++ b/drivers/gpio/gpio-tqmx86.c Strangely this does not apply in my tree! $ git am --signoff lunn1.patch Applying: gpio: tqmx86: Add GPIO from for this IO controller error: new file drivers/gpio/gpio-tqmx86.c depends on old contents Patch failed at 0001 gpio: tqmx86: Add GPIO from for this IO controller I don't know if the problem is on my side :/ I guess I can figure it out if it fails again. > +struct tqmx86_gpio_data { > + struct gpio_chip chip; > + struct irq_chip irq_chip; > + void __iomem *io_base; > + int irq; > + spinlock_t spinlock; I am not an expert in RT but I think this needs to be a raw_spinlock_t (and use raw accessors) to work with realtime. But maybe that just apply to chained IRQ handlers? Julia do you have a definitive answer to this? Yours, Linus Walleij