Thread (42 messages) flat view 42 messages, 8 authors, 2h ago

Re:Re: Re: [PATCH v6 08/13] gpio: regmap: support write_data_after_dir and girq

From: zl020895 <hidden>
Date: 2026-09-07 10:31:38
Also in: linux-arm-kernel, linux-clk, linux-devicetree, linux-serial, lkml

Hi Andy,

Thanks for the bxtwc pointer.

I looked at mapping PL061 onto regmap-irq. Status/mask/ack (MIS/IE/IC)
could fit, but PL061 still needs the chained demux plus IS/IBE/IEV type
programming (including EDGE_BOTH) and the existing gpiochip immutable
helpers. That looks like a poor fit versus idi-48/bxtwc-style chips, and
switching the long-standing ARM PL061 path from chained to threaded
regmap-irq seems risky.

What I plan for the next round (without extending gpio-regmap with girq):
keep the custom irqchip + chained handler, create the irq_domain in
gpio-pl061, and pass it via config.irq_domain to gpio-regmap.

Does that match what you had in mind, or do you still prefer a
regmap-irq-based approach?

Best regards,
Long Zhao

At 2026-09-07 12:45:53, "Andy Shevchenko" [off-list ref] wrote:
On Mon, Sep 07, 2026 at 12:20:03PM +0800, zl020895 wrote:
quoted
quoted
Are you going to fix this HW in the next version of the SoC?
No — Ambarella does not use write_data_after_dir. It only preserves the
existing ARM PL061 quirk already documented in gpio-pl061 (data writes
ignored while the pin is still an input). Only pl061_arm sets the flag.
Ah, this is a good news!

In any case when documenting that flag, please also mention that any new HW
should not use it as it's considered buggy (glitches during direction change
are guaranteed).
quoted
I will also make the first gpio_regmap_set() conditional so the quirk
path writes once after direction_output, not twice.
I see that original pl061 actually writes twice. TBH I don't know the best
effort here and if it's really required to do so. Probably others have
better ideas...
quoted
quoted
This needs to be in a separate update. Also we need to understand why
it is required.
OK, girq will be a separate patch. PL061 keeps a custom chained
irqchip (not regmap-irq); gpio_regmap today only takes irq_domain or
regmap_irq_chip, so we passed girq to keep the usual gpio_irq_chip +
gpiochip_add flow. Open to using a caller-created irq_domain instead if
you prefer.
If there is a chained IRQ, look how PMIC drivers usually do similar setups.
First what comes to my mind is drivers/mfd/intel_soc_pmic_bxtwc.c.

-- 
With Best Regards,
Andy Shevchenko
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help