svn commit: r276275 - in stable/10/sys: arm/freescale/imx dev/fdt
Ian Lepore
ian at FreeBSD.org
Sat Dec 27 01:35:05 UTC 2014
Author: ian
Date: Sat Dec 27 01:35:03 2014
New Revision: 276275
URL: https://svnweb.freebsd.org/changeset/base/276275
Log:
MFC r274412, r274413, r274414: Bugfixes for imx5/6 pinctrl driver.
Modified:
stable/10/sys/arm/freescale/imx/imx_iomux.c
stable/10/sys/dev/fdt/fdt_pinctrl.c
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/arm/freescale/imx/imx_iomux.c
==============================================================================
--- stable/10/sys/arm/freescale/imx/imx_iomux.c Sat Dec 27 01:28:52 2014 (r276274)
+++ stable/10/sys/arm/freescale/imx/imx_iomux.c Sat Dec 27 01:35:03 2014 (r276275)
@@ -99,6 +99,10 @@ struct pincfg {
uint32_t padconf_val;
};
+#define PADCONF_NONE (1U << 31) /* Do not configure pad. */
+#define PADCONF_SION (1U << 30) /* Force SION bit in mux register. */
+#define PADMUX_SION (1U << 4) /* The SION bit in the mux register. */
+
static inline uint32_t
RD4(struct iomux_softc *sc, bus_size_t off)
{
@@ -120,6 +124,7 @@ iomux_configure_pins(device_t dev, phand
struct pincfg *cfgtuples, *cfg;
phandle_t cfgnode;
int i, ntuples;
+ uint32_t sion;
sc = device_get_softc(dev);
cfgnode = OF_node_from_xref(cfgxref);
@@ -130,9 +135,22 @@ iomux_configure_pins(device_t dev, phand
if (ntuples == 0)
return (0); /* Empty property is not an error. */
for (i = 0, cfg = cfgtuples; i < ntuples; i++, cfg++) {
- WR4(sc, cfg->mux_reg, cfg->mux_val);
- WR4(sc, cfg->input_reg, cfg->input_val);
- WR4(sc, cfg->padconf_reg, cfg->padconf_val);
+ sion = (cfg->padconf_val & PADCONF_SION) ? PADMUX_SION : 0;
+ WR4(sc, cfg->mux_reg, cfg->mux_val | sion);
+ if (cfg->input_reg != 0)
+ WR4(sc, cfg->input_reg, cfg->input_val);
+ if ((cfg->padconf_val & PADCONF_NONE) == 0)
+ WR4(sc, cfg->padconf_reg, cfg->padconf_val);
+ if (bootverbose) {
+ char name[32];
+ OF_getprop(cfgnode, "name", &name, sizeof(name));
+ printf("%16s: muxreg 0x%04x muxval 0x%02x "
+ "inpreg 0x%04x inpval 0x%02x "
+ "padreg 0x%04x padval 0x%08x\n",
+ name, cfg->mux_reg, cfg->mux_val | sion,
+ cfg->input_reg, cfg->input_val,
+ cfg->padconf_reg, cfg->padconf_val);
+ }
}
free(cfgtuples, M_OFWPROP);
return (0);
Modified: stable/10/sys/dev/fdt/fdt_pinctrl.c
==============================================================================
--- stable/10/sys/dev/fdt/fdt_pinctrl.c Sat Dec 27 01:28:52 2014 (r276274)
+++ stable/10/sys/dev/fdt/fdt_pinctrl.c Sat Dec 27 01:35:03 2014 (r276275)
@@ -124,15 +124,14 @@ pinctrl_configure_children(device_t pinc
pinctrl_configure_children(pinctrl, node);
nconfigs = OF_getencprop_alloc(node, "pinctrl-0",
sizeof(*configs), (void **)&configs);
-#ifdef DEBUG
- {
+ if (nconfigs <= 0)
+ continue;
+ if (bootverbose) {
char name[32];
OF_getprop(node, "name", &name, sizeof(name));
- printf("%d items in pinctrl-0 for %s\n", nconfigs, name);
+ printf("Processing %d pin-config node(s) in pinctrl-0 for %s\n",
+ nconfigs, name);
}
-#endif
- if (nconfigs <= 0)
- continue;
for (i = 0; i < nconfigs; i++) {
if (OF_device_from_xref(configs[i]) == pinctrl)
FDT_PINCTRL_CONFIGURE(pinctrl, configs[i]);
More information about the svn-src-all
mailing list