Skip to content

Commit f07798d

Browse files
DragonBluepBartosz Golaszewski
authored andcommitted
gpio: mmio: do not calculate bgpio_bits via "ngpios"
bgpio_bits must be aligned with the data bus width. For example, on a 32 bit big endian system and we only have 16 GPIOs. If we only assume bgpio_bits=16 we can never control the GPIO because the base address is the lowest address. low address high address ------------------------------------------------- | byte3 | byte2 | byte1 | byte0 | ------------------------------------------------- | NaN | NaN | gpio8-15 | gpio0-7 | ------------------------------------------------- Fixes: 55b2395 ("gpio: mmio: handle "ngpios" properly in bgpio_init()") Fixes: openwrt/openwrt#15739 Reported-by: Mark Mentovai <[email protected]> Signed-off-by: Shiji Yang <[email protected]> Suggested-By: Mark Mentovai <[email protected]> Reviewed-by: Jonas Gorski <[email protected]> Tested-by: Lóránd Horváth <[email protected]> Reviewed-by: Linus Walleij <[email protected]> Link: https://lore.kernel.org/r/TYCP286MB089577B47D70F0AB25ABA6F5BCD52@TYCP286MB0895.JPNP286.PROD.OUTLOOK.COM Signed-off-by: Bartosz Golaszewski <[email protected]>
1 parent 3645ffa commit f07798d

File tree

1 file changed

+0
-2
lines changed

1 file changed

+0
-2
lines changed

drivers/gpio/gpio-mmio.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -619,8 +619,6 @@ int bgpio_init(struct gpio_chip *gc, struct device *dev,
619619
ret = gpiochip_get_ngpios(gc, dev);
620620
if (ret)
621621
gc->ngpio = gc->bgpio_bits;
622-
else
623-
gc->bgpio_bits = roundup_pow_of_two(round_up(gc->ngpio, 8));
624622

625623
ret = bgpio_setup_io(gc, dat, set, clr, flags);
626624
if (ret)

0 commit comments

Comments
 (0)