Hi Wolfgang, On 12/17/2012 02:32 PM, Roland Stigge wrote: > And I guess Russell is right: If possible, we should write outputs > simultaneously via ODSR (plus OWER/OWDR/OWSR) instead of separate set/clear. > > I wonder if we need to save/restore the state of OWSR at every write > operation or if we need/can cache it. Assuming that block GPIO are the > only code in the kernel that manipulates ODSR.
Can you please test the following: +static void at91_gpiolib_set_block(struct gpio_chip *chip, unsigned long mask, unsigned long val) +{ + struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip); + void __iomem *pio = at91_gpio->regbase; + + __raw_writel(~mask, pio + PIO_OWDR); + __raw_writel(mask, pio + PIO_OWER); + __raw_writel(val, pio + PIO_ODSR); +} Would caching OWSR be a significant speedup here? Thanks in advance, Roland -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/