Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp2442677imj; Mon, 18 Feb 2019 06:09:18 -0800 (PST) X-Google-Smtp-Source: AHgI3IZ/8SV7L9fPynjnl3r0bUMoFwe+3GwGMv0aVN4Vb1UVXgGwdIGmvGr1wCpcTuLEdOrEcrGI X-Received: by 2002:a17:902:d708:: with SMTP id w8mr25855523ply.294.1550498958152; Mon, 18 Feb 2019 06:09:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550498958; cv=none; d=google.com; s=arc-20160816; b=E3EEoNPCQC7SCH+gIFC3rr3G+WiIr2un/PLmJhuOMoivaiPTz16uucWPv2Ye/SoP51 ix7k/CRpGK0LP7BNW5CA8gUqzaHMP7qFFcTgVlGrkNvbsweOo6Ppdlt3ZiTsPFofb7VZ 40V3tXgpSlCnwl218rC8lMmSlYaJ848WFU4pfIIHGWxZI8XOpmAgnmSHb8KQzvlMsNt7 O1A4mCvhSLNG+9bzEz4ZNrhBme8a1fHj+XDshahWmEEQrEq2S1WdmwC9HJgUxBqhldJo 4IqnzhgRUvZKB/JfXCfGWogMMrsA6htKnU4GSnyQeONC12oEKQF3L9m7JyTK1HT5Bg4L 93zw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=V5jLik/GEsklN9Zycskp8S6F1n17ujt6Sezh0Oqu+PY=; b=zrpcVHiH6EYsRQdiATQZnYUaAVySsGL9bgxwG8sRLCmI62Zxji63V8lMXIwX96agD5 0Ecae1nddv7RbhNwajX0PhjXrJqi65CMElNYd59XTpK0NAv0UPYJUKf4qr6XqhtMEGCs i3iIIl8LX65bmafaDkfgBwY6/5sOLP3/hPb8wJbaPTRGHsKI9xaF6mQlQPMl3RF2fxEP ztoYJxcembWf/EynzNqXB5d8dcXZQCjSMaeIVOdbxNwcUJOKUAK6Cx9fxGK8wLW5vg/f dfVqxw9cohDzYylmY45jrJKj2kVQ/5BHtKOa1eNP7t4mqafzmkAE1eZjO1ef5aju+Nxz eiYw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=IyZh0Awk; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u63si13210497pfi.196.2019.02.18.06.09.02; Mon, 18 Feb 2019 06:09:18 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=IyZh0Awk; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390781AbfBROHp (ORCPT + 99 others); Mon, 18 Feb 2019 09:07:45 -0500 Received: from mail.kernel.org ([198.145.29.99]:50776 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390747AbfBROHk (ORCPT ); Mon, 18 Feb 2019 09:07:40 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 35FEC204FD; Mon, 18 Feb 2019 14:07:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1550498858; bh=g9Ny/1K8bdjqdsZNTW2oBxURYfshJHz8vJgCLwA0KRE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IyZh0Awk/IAJNEQ75/D228IQE22rtuiJU00rBlNDiaEH4ViX2xWr3jNhByYC06JFF gyI5htt0rDqH1ngs94i/M3QpMx5EQPyqpxbjH8jIlGvlUpLix6eBdOesjd1yWxzCUb Oj05LYKsw9jmqS8CT8o1MSr9LuA0ZASoCS9E4qiA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sven Eckelmann , Bjorn Andersson , Christian Lamparter , Linus Walleij , Amit Pundir Subject: [PATCH 4.4 143/143] pinctrl: msm: fix gpio-hog related boot issues Date: Mon, 18 Feb 2019 14:44:31 +0100 Message-Id: <20190218133534.191264510@linuxfoundation.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190218133529.099444112@linuxfoundation.org> References: <20190218133529.099444112@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ From: Christian Lamparter commit a86caa9ba5d70696ceb35d1d39caa20d8b641387 upstream. Sven Eckelmann reported an issue with the current IPQ4019 pinctrl. Setting up any gpio-hog in the device-tree for his device would "kill the bootup completely": | [ 0.477838] msm_serial 78af000.serial: could not find pctldev for node /soc/pinctrl@1000000/serial_pinmux, deferring probe | [ 0.499828] spi_qup 78b5000.spi: could not find pctldev for node /soc/pinctrl@1000000/spi_0_pinmux, deferring probe | [ 1.298883] requesting hog GPIO enable USB2 power (chip 1000000.pinctrl, offset 58) failed, -517 | [ 1.299609] gpiochip_add_data: GPIOs 0..99 (1000000.pinctrl) failed to register | [ 1.308589] ipq4019-pinctrl 1000000.pinctrl: Failed register gpiochip | [ 1.316586] msm_serial 78af000.serial: could not find pctldev for node /soc/pinctrl@1000000/serial_pinmux, deferring probe | [ 1.322415] spi_qup 78b5000.spi: could not find pctldev for node /soc/pinctrl@1000000/spi_0_pinmux, deferri This was also verified on a RT-AC58U (IPQ4018) which would no longer boot, if a gpio-hog was specified. (Tried forcing the USB LED PIN (GPIO0) to high.). The problem is that Pinctrl+GPIO registration is currently peformed in the following order in pinctrl-msm.c: 1. pinctrl_register() 2. gpiochip_add() 3. gpiochip_add_pin_range() The actual error code -517 == -EPROBE_DEFER is coming from pinctrl_get_device_gpio_range(), which is called through: gpiochip_add of_gpiochip_add of_gpiochip_scan_gpios gpiod_hog gpiochip_request_own_desc __gpiod_request chip->request gpiochip_generic_request pinctrl_gpio_request pinctrl_get_device_gpio_range pinctrl_get_device_gpio_range() is unable to find any valid pin ranges, since nothing has been added to the pinctrldev_list yet. so the range can't be found, and the operation fails with -EPROBE_DEFER. This patch fixes the issue by adding the "gpio-ranges" property to the pinctrl device node of all upstream Qcom SoC. The pin ranges are then added by the gpio core. In order to remain compatible with older, existing DTs (and ACPI) a check for the "gpio-ranges" property has been added to msm_gpio_init(). This prevents the driver of adding the same entry to the pinctrldev_list twice. Reported-by: Sven Eckelmann Tested-by: Sven Eckelmann [ipq4019] Reviewed-by: Bjorn Andersson Signed-off-by: Christian Lamparter Signed-off-by: Linus Walleij Signed-off-by: Amit Pundir Signed-off-by: Greg Kroah-Hartman --- drivers/pinctrl/qcom/pinctrl-msm.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) --- a/drivers/pinctrl/qcom/pinctrl-msm.c +++ b/drivers/pinctrl/qcom/pinctrl-msm.c @@ -806,11 +806,24 @@ static int msm_gpio_init(struct msm_pinc return ret; } - ret = gpiochip_add_pin_range(&pctrl->chip, dev_name(pctrl->dev), 0, 0, chip->ngpio); - if (ret) { - dev_err(pctrl->dev, "Failed to add pin range\n"); - gpiochip_remove(&pctrl->chip); - return ret; + /* + * For DeviceTree-supported systems, the gpio core checks the + * pinctrl's device node for the "gpio-ranges" property. + * If it is present, it takes care of adding the pin ranges + * for the driver. In this case the driver can skip ahead. + * + * In order to remain compatible with older, existing DeviceTree + * files which don't set the "gpio-ranges" property or systems that + * utilize ACPI the driver has to call gpiochip_add_pin_range(). + */ + if (!of_property_read_bool(pctrl->dev->of_node, "gpio-ranges")) { + ret = gpiochip_add_pin_range(&pctrl->chip, + dev_name(pctrl->dev), 0, 0, chip->ngpio); + if (ret) { + dev_err(pctrl->dev, "Failed to add pin range\n"); + gpiochip_remove(&pctrl->chip); + return ret; + } } ret = gpiochip_irqchip_add(chip,