[U-Boot] OMAP3 Beagle Pin Mux initialization issue

Bob Feretich
2011-02-22T01:51:36Z

The BeagleBoard beagle.c file contains:
242 /* Configure GPIOs to output */
243 writel(~(GPIO23 | GPIO10 | GPIO8 | GPIO2 | GPIO1),
&gpio6_base->oe);
244 writel(~(GPIO31 | GPIO30 | GPIO29 | GPIO28 | GPIO22 | GPIO21 |
245 GPIO15 | GPIO14 | GPIO13 | GPIO12), &gpio5_base->oe);
246
247 /* Set GPIOs */
248 writel(GPIO23 | GPIO10 | GPIO8 | GPIO2 | GPIO1,
249 &gpio6_base->setdataout);
250 writel(GPIO31 | GPIO30 | GPIO29 | GPIO28 | GPIO22 | GPIO21 |
251 GPIO15 | GPIO14 | GPIO13 | GPIO12,
&gpio5_base->setdataout);

It first sets some pins as outputs and then initializes their values.
This can cause narrow glitches on the output pins.

To prevent the glitches the order should be reversed. First Set the
GPIOs, then Configure them as outputs.

Also, I have observed the discussion regarding moving Pin Mux control to
the kernel. This is fine except for pins that need to be configured ASAP
after power-on. (The system could sit at the u-boot command prompt
indefinitely, so the kernel pin mux configuration can be significantly
delayed.). Please leave the hook so that u-boot customizers can
configure their critical pins muxes.

Regards,
Bob Feretich