Ed,
I believe you're correct. In fact, it sounds like there is no need to use the DR PSR registers at all. The reference manual says:
While the GPIO direction is set to input (GPIO_GDIR = 0), a
read access to GPIO_DR does not return GPIO_DR data.
Instead, it returns the GPIO_PSR data, which is the
corresponding input signal value.
I checked the denx u-boot tree and this issue seems to be there too. The following line:
val = (readl(®s->gpio_psr) >> gpio) & 0x01;
should be:
val = (readl(®s->gpio_dr) >> gpio) & 0x01;
FabioEstevam - can you verify this? Can Ed submit a patch to your tree that can be propogated upstream?