[PATCH 0/5] lx2160a: change the pad muxes through the RCW override
Vincent Jardin via B4 Relay
devnull+vjardin.free.fr at kernel.org
Tue Nov 3 01:51:53 PST 2026
The LX2160A muxes its IIC, XSPI, SDHC, UART, IRQ and EVT pads from
fields of the RCW. They are read-only in RCWSR12..14 of DCFG, and are
changed at runtime through the override registers in the DCSR view of
DCFG, which read 0 until written.
Since commit 8a1365c7bbc1 ("arm64: dts: lx2160a: add pinmux and i2c
gpio to support bus recovery"), fsl-lx216x.dtsi drives the override
registers with pinctrl-single for the I2C bus recovery. Its first pin
state clears every other field of the word: a board whose RCW programs
a non-zero pad mux loses those pads at the first I2C probe.
This series reads the fields in effect from RCWSR and writes RCWCR, as
fsl_guts_rcw_rmw() already does for the SerDes protocols:
- patches 1 and 2 describe the pad mux as a child of the DCFG node,
which gains its DCSR view
- patch 3 exports the RCW override of fsl-guts for any RCWSR
- patch 4 adds the pinctrl driver: one group per RCW field, one
function per encoding
- patch 5 moves the pad muxes of fsl-lx216x.dtsi under DCFG. Labels
and pin node names stay, so no board file changes, and the
pinctrl-single node goes
Patch 4 uses the exports of patch 3, and patch 5 needs the driver of
patch 4, since the I2C pin states of fsl-lx216x.dtsi then belong to it.
DTBs built before patch 5 keep their pinctrl-single node and behave as
before. There is no Fixes: tag, since patch 5 depends on a new driver.
I did not believe it should be backported then.
Tested on a Nodebox v3 (LX2160A) whose RCW muxes XSPI1_A_DATA[7:4],
SDHC1 and IIC5 are not set with the defaults, so I could confirm:
- pinctrl-single the first I2C probe cleared those fields
- with this series RCWSR12..14 read after boot exactly what the RCW and
the board's pin states select
- all I2C controllers come up with their recovery states and a
forced bus recovery on IIC1 (multi-master enabled for the test)
changes only that field
Thanks to Vladimir Oltean for pointing at fsl_guts_rcw_rmw() when I
tried to prime the override registers from the RCW instead:
https://github.com/nxp-qoriq/rcw/pull/8
Signed-off-by: Vincent Jardin <vjardin at free.fr>
---
Vincent Jardin (5):
dt-bindings: pinctrl: add the NXP LX2160A RCW pad mux
dt-bindings: soc: fsl: layerscape-dcfg: add the LX2160A pad-mux child
soc: fsl: guts: add the RCW override of any RCWSR
pinctrl: freescale: add the LX2160A RCW pad-mux driver
arm64: dts: lx2160a: describe the pad muxes as the DCFG RCW override
.../bindings/pinctrl/fsl,lx2160a-rcw-pinmux.yaml | 71 ++++
.../bindings/soc/fsl/fsl,layerscape-dcfg.yaml | 18 +
MAINTAINERS | 7 +
arch/arm64/boot/dts/freescale/fsl-lx216x.dtsi | 373 +++++++++++----------
drivers/pinctrl/freescale/Kconfig | 15 +
drivers/pinctrl/freescale/Makefile | 1 +
drivers/pinctrl/freescale/pinctrl-lx2160a.c | 355 ++++++++++++++++++++
drivers/soc/fsl/guts.c | 73 ++++
include/linux/fsl/guts.h | 3 +
9 files changed, 741 insertions(+), 175 deletions(-)
---
base-commit: 6628e7d4c6b25c8d18f1345e3a20d21829aae7e4
change-id: 20261103-for-upstream-lx2160a-rcw-pinmux-v1-31f9ad97dc86
Best regards,
--
Vincent Jardin <vjardin at free.fr>
More information about the linux-arm-kernel
mailing list