pinctrl: cy8c95x0: Cache muxed registers
authorPatrick Rudolph <patrick.rudolph@9elements.com>
Tue, 19 Dec 2023 12:53:49 +0000 (13:53 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 20 Dec 2023 12:04:04 +0000 (13:04 +0100)
commit7d7cd22dc497dc79c2b1ae0e26cada1c5207d5dd
tree0e13f4971b9601e38e9a8b1864f8e1348ffb06dc
parent00bb152d62825b5f659d9b4ff87d49637e44eea0
pinctrl: cy8c95x0: Cache muxed registers

Currently the port specific registers behind the PORTSEL mux aren't
cached in the regmap and thus the typical setup time for a single pin
on cy8c9560 is about 200msec on our system. The hotspot is the IRQ
(un)masking, which causes lots of R/W operations.

Introduce a separate regmap for muxed registers and helper functions
to use the newly introduced regmap for muxed register access under
the i2c lock.

With the new cache in place the typical pin setup time is reduced to
20msec, making it about 10 times faster. As a side effect the system
boot time is also reduced by 50%.

Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Link: https://lore.kernel.org/r/20231219125350.4031370-1-patrick.rudolph@9elements.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/pinctrl-cy8c95x0.c