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-stable mailing list