Message ID | 20200425044655.166257-1-davidgow@google.com |
---|---|
State | New |
Headers | show |
Series | gpio: of: Build fails if CONFIG_OF_DYNAMIC enabled without CONFIG_OF_GPIO | expand |
Hi David, On Sat, Apr 25, 2020 at 6:47 AM David Gow <davidgow@google.com> wrote: > The symbol 'gpio_of_notifier' doesn't exist without both CONFIG_OF_GPIO > and CONFIG_OF_DYNAMIC enabled, but is referenced when only > CONFIG_OF_DYNAMIC is enabled. > > This broke building with 'make ARCH=um allyesconfig': Right, so you have CONFIG_OF=y, but CONFIG_OF_GPIO=n, as the latter depends on HAS_IOMEM, which is not set for UML. Interestingly, the latter dependency claims to have been added because gpiolib-of.c uses ioremap()/iounmap(). However, it seems to have never called ioremap(), only of_iomap() and iounmap(). of_iomap() itself is available, as it depends on OF_ADDRESS, which depends on HAS_IOMEM || UML. Interestingly, of_iomap() calls ioremap(), without a dependency on HAS_IOMEM? So perhaps the dependency of CONFIG_OF_GPIO on HAS_IOMEM can be dropped these days, solving this issue as well? > --------------- > /usr/bin/ld: drivers/gpio/gpiolib.o: in function `gpiolib_dev_init': > ./drivers/gpio/gpiolib.c:5293: undefined reference to `gpio_of_notifier' > collect2: error: ld returned 1 exit status > --------------- > > Fixes: 63636d956c45 ("gpio: of: Add DT overlay support for GPIO hogs") > Signed-off-by: David Gow <davidgow@google.com> Anyway: Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> > --- a/drivers/gpio/gpiolib.c > +++ b/drivers/gpio/gpiolib.c > @@ -5289,8 +5289,9 @@ static int __init gpiolib_dev_init(void) > gpiolib_initialized = true; > gpiochip_setup_devs(); > > - if (IS_ENABLED(CONFIG_OF_DYNAMIC)) > - WARN_ON(of_reconfig_notifier_register(&gpio_of_notifier)); > +#if IS_ENABLED(CONFIG_OF_DYNAMIC) && IS_ENABLED(CONFIG_OF_GPIO) > + WARN_ON(of_reconfig_notifier_register(&gpio_of_notifier)); > +#endif /* CONFIG_OF_DYNAMIC && CONFIG_OF_GPIO */ > > return ret; > } Gr{oetje,eeting}s, Geert
On Sat, Apr 25, 2020 at 6:46 AM David Gow <davidgow@google.com> wrote: > The symbol 'gpio_of_notifier' doesn't exist without both CONFIG_OF_GPIO > and CONFIG_OF_DYNAMIC enabled, but is referenced when only > CONFIG_OF_DYNAMIC is enabled. > > This broke building with 'make ARCH=um allyesconfig': > --------------- > /usr/bin/ld: drivers/gpio/gpiolib.o: in function `gpiolib_dev_init': > ./drivers/gpio/gpiolib.c:5293: undefined reference to `gpio_of_notifier' > collect2: error: ld returned 1 exit status > --------------- > > Fixes: 63636d956c45 ("gpio: of: Add DT overlay support for GPIO hogs") > Signed-off-by: David Gow <davidgow@google.com> Patch applied for fixes since it fixes a regression, I recommend looking a bit down the dependency chain as indicated by Geert if you have time! Yours, Linus Walleij
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c index 40f2d7f69be2..5c292fb3355c 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c @@ -5289,8 +5289,9 @@ static int __init gpiolib_dev_init(void) gpiolib_initialized = true; gpiochip_setup_devs(); - if (IS_ENABLED(CONFIG_OF_DYNAMIC)) - WARN_ON(of_reconfig_notifier_register(&gpio_of_notifier)); +#if IS_ENABLED(CONFIG_OF_DYNAMIC) && IS_ENABLED(CONFIG_OF_GPIO) + WARN_ON(of_reconfig_notifier_register(&gpio_of_notifier)); +#endif /* CONFIG_OF_DYNAMIC && CONFIG_OF_GPIO */ return ret; }
The symbol 'gpio_of_notifier' doesn't exist without both CONFIG_OF_GPIO and CONFIG_OF_DYNAMIC enabled, but is referenced when only CONFIG_OF_DYNAMIC is enabled. This broke building with 'make ARCH=um allyesconfig': --------------- /usr/bin/ld: drivers/gpio/gpiolib.o: in function `gpiolib_dev_init': ./drivers/gpio/gpiolib.c:5293: undefined reference to `gpio_of_notifier' collect2: error: ld returned 1 exit status --------------- Fixes: 63636d956c45 ("gpio: of: Add DT overlay support for GPIO hogs") Signed-off-by: David Gow <davidgow@google.com> --- drivers/gpio/gpiolib.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)