From patchwork Thu Jul 12 19:22:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Herring X-Patchwork-Id: 943176 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41RQmz0X5Yz9s0n for ; Fri, 13 Jul 2018 05:22:27 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726589AbeGLTdU (ORCPT ); Thu, 12 Jul 2018 15:33:20 -0400 Received: from mail-yw0-f195.google.com ([209.85.161.195]:33209 "EHLO mail-yw0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726583AbeGLTdU (ORCPT ); Thu, 12 Jul 2018 15:33:20 -0400 Received: by mail-yw0-f195.google.com with SMTP id c135-v6so10871279ywa.0 for ; Thu, 12 Jul 2018 12:22:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=OpQf3YgXgJYFELlKXdFCaJwBCiqFER7ld5GYYs5KizU=; b=WUvS1HDcDPoXP+Iq9Za6FyDvavyiuAkPNeFpzeBCTbiB43PEC4nqx9nF+ySu51QwCM 0YBsqSxtClw7YM3zWIeikND1O+wrg8FasjcTIv6I4ap90FHtOyQyxdCYdIjBYDLOdkUC 0KfzlWHJ0+2xqjTBT7AgRB6BZdi/qnIdnIBQ/n8ntCyGDsUi21dlUzuO1R1Gxsl1uLXL obTLsmQLuP3YbPyGhjRiKcZ9Twg6oTx0D+nr5xHpNgDe0a2no8zEEQjQml/uKwr7b7vm sPOg8PYNEMY6RBJhkkmQDRzK2TYTY04MXdVIwswjBK+wy64ws4afxiny4VOKgvttosHi IPag== X-Gm-Message-State: AOUpUlHP5oAgZeT91JvfTzgsrLz6NbNe25EyZHL/NbhoWqetp7QzT1B5 Sh4XtDHZh3/1ZOvK7MKSJM9jvH0= X-Google-Smtp-Source: AAOMgpd+etjyZYTgPszuHi8J5T++FqwThVwdrH1EcwKulhWMxt1t+j+IchwZclvAvNUagwkdx6BbFA== X-Received: by 2002:a0d:f7c3:: with SMTP id h186-v6mr197610ywf.272.1531423345558; Thu, 12 Jul 2018 12:22:25 -0700 (PDT) Received: from localhost.localdomain (24-223-123-72.static.usa-companies.net. [24.223.123.72]) by smtp.googlemail.com with ESMTPSA id x7-v6sm9565587ywd.43.2018.07.12.12.22.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 12 Jul 2018 12:22:24 -0700 (PDT) From: Rob Herring To: Linus Walleij Cc: Jean-Christophe Plagniol-Villard , Nicolas Ferre , Alexandre Belloni , linux-arm-kernel@lists.infradead.org, linux-gpio@vger.kernel.org Subject: [PATCH] pinctrl: at91: fix deferred probing support Date: Thu, 12 Jul 2018 13:22:22 -0600 Message-Id: <20180712192222.32481-1-robh@kernel.org> X-Mailer: git-send-email 2.17.1 Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org AT91 pinctrl deferred probing support is broken if the GPIO devices haven't probed first and set gpio_banks to non-zero. The later condition that only some GPIO devices haven't probed can't actually happen as either all the GPIO devices have probed first or none of them have. Plus the pinctrl driver has already returned -EINVAL, so it's not on the deferred list to retry probing. Fix this by consolidating the checking that all GPIO devices are probed. Cc: Jean-Christophe Plagniol-Villard Cc: Linus Walleij Cc: Nicolas Ferre Cc: Alexandre Belloni Cc: linux-arm-kernel@lists.infradead.org Cc: linux-gpio@vger.kernel.org Signed-off-by: Rob Herring Acked-by: Ludovic Desroches --- This is a result of trying to remove of_platform_default_populate from at91 code and relying on the DT core handling populating devices. That changed the probe order and broke booting. Compile tested only. Rob drivers/pinctrl/pinctrl-at91.c | 36 ++++++++++++---------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/drivers/pinctrl/pinctrl-at91.c b/drivers/pinctrl/pinctrl-at91.c index 50f0ec42c637..167838901b75 100644 --- a/drivers/pinctrl/pinctrl-at91.c +++ b/drivers/pinctrl/pinctrl-at91.c @@ -1162,7 +1162,7 @@ static int at91_pinctrl_probe_dt(struct platform_device *pdev, struct at91_pinctrl *info) { int ret = 0; - int i, j; + int i, j, ngpio_chips_enabled = 0; uint32_t *tmp; struct device_node *np = pdev->dev.of_node; struct device_node *child; @@ -1175,10 +1175,17 @@ static int at91_pinctrl_probe_dt(struct platform_device *pdev, of_match_device(at91_pinctrl_of_match, &pdev->dev)->data; at91_pinctrl_child_count(info, np); - if (gpio_banks < 1) { - dev_err(&pdev->dev, "you need to specify at least one gpio-controller\n"); - return -EINVAL; - } + /* + * We need all the GPIO drivers to probe FIRST, or we will not be able + * to obtain references to the struct gpio_chip * for them, and we + * need this to proceed. + */ + for (i = 0; i < MAX_GPIO_BANKS; i++) + if (gpio_chips[i]) + ngpio_chips_enabled++; + + if (ngpio_chips_enabled < info->nactive_banks) + return -EPROBE_DEFER; ret = at91_pinctrl_mux_mask(info, np); if (ret) @@ -1234,7 +1241,7 @@ static int at91_pinctrl_probe(struct platform_device *pdev) { struct at91_pinctrl *info; struct pinctrl_pin_desc *pdesc; - int ret, i, j, k, ngpio_chips_enabled = 0; + int ret, i, j, k; info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); if (!info) @@ -1244,23 +1251,6 @@ static int at91_pinctrl_probe(struct platform_device *pdev) if (ret) return ret; - /* - * We need all the GPIO drivers to probe FIRST, or we will not be able - * to obtain references to the struct gpio_chip * for them, and we - * need this to proceed. - */ - for (i = 0; i < gpio_banks; i++) - if (gpio_chips[i]) - ngpio_chips_enabled++; - - if (ngpio_chips_enabled < info->nactive_banks) { - dev_warn(&pdev->dev, - "All GPIO chips are not registered yet (%d/%d)\n", - ngpio_chips_enabled, info->nactive_banks); - devm_kfree(&pdev->dev, info); - return -EPROBE_DEFER; - } - at91_pinctrl_desc.name = dev_name(&pdev->dev); at91_pinctrl_desc.npins = gpio_banks * MAX_NB_GPIO_PER_BANK; at91_pinctrl_desc.pins = pdesc =