| From e6b03ab63b4d270e0249f96536fde632409dc1dc Mon Sep 17 00:00:00 2001 |
| From: Jonas Gorski <jonas.gorski@gmail.com> |
| Date: Sun, 29 Oct 2017 16:27:19 +0100 |
| Subject: MIPS: AR7: Defer registration of GPIO |
| |
| From: Jonas Gorski <jonas.gorski@gmail.com> |
| |
| commit e6b03ab63b4d270e0249f96536fde632409dc1dc upstream. |
| |
| When called from prom init code, ar7_gpio_init() will fail as it will |
| call gpiochip_add() which relies on a working kmalloc() to alloc |
| the gpio_desc array and kmalloc is not useable yet at prom init time. |
| |
| Move ar7_gpio_init() to ar7_register_devices() (a device_initcall) |
| where kmalloc works. |
| |
| Fixes: 14e85c0e69d5 ("gpio: remove gpio_descs global array") |
| Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com> |
| Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> |
| Cc: Ralf Baechle <ralf@linux-mips.org> |
| Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Cc: Yoshihiro YUNOMAE <yoshihiro.yunomae.ez@hitachi.com> |
| Cc: Nicolas Schichan <nschichan@freebox.fr> |
| Cc: linux-mips@linux-mips.org |
| Cc: linux-serial@vger.kernel.org |
| Patchwork: https://patchwork.linux-mips.org/patch/17542/ |
| Signed-off-by: James Hogan <jhogan@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/mips/ar7/platform.c | 4 ++++ |
| arch/mips/ar7/prom.c | 2 -- |
| 2 files changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/arch/mips/ar7/platform.c |
| +++ b/arch/mips/ar7/platform.c |
| @@ -654,6 +654,10 @@ static int __init ar7_register_devices(v |
| u32 val; |
| int res; |
| |
| + res = ar7_gpio_init(); |
| + if (res) |
| + pr_warn("unable to register gpios: %d\n", res); |
| + |
| res = ar7_register_uarts(); |
| if (res) |
| pr_err("unable to setup uart(s): %d\n", res); |
| --- a/arch/mips/ar7/prom.c |
| +++ b/arch/mips/ar7/prom.c |
| @@ -246,8 +246,6 @@ void __init prom_init(void) |
| ar7_init_cmdline(fw_arg0, (char **)fw_arg1); |
| ar7_init_env((struct env_var *)fw_arg2); |
| console_config(); |
| - |
| - ar7_gpio_init(); |
| } |
| |
| #define PORT(offset) (KSEG1ADDR(AR7_REGS_UART0 + (offset * 4))) |