Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2441170pxj; Mon, 31 May 2021 02:10:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx48Ko/szjMsH9cfR5tineBeAhomd2XW/DLTXe2PxwBKDiTwR9SnSNNL+qAIeA2DGyrJ6bG X-Received: by 2002:a17:906:4c8c:: with SMTP id q12mr21940101eju.254.1622452217687; Mon, 31 May 2021 02:10:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622452217; cv=none; d=google.com; s=arc-20160816; b=0tkrjeeukyRC7GUsV6qWuswBVp+A0nQycoM/beUfPydtxQZmJIuw38OkImEBpyFCty w6aZANUeCcawsmtW5z5v+dFtV5Q/bdpRgSCq8mY2LI/R0ug5q8wiImKel0GX/ASB2V5r VKV8JzMXaFfIlAkCYzqC34TthouHPfgUBEdgvnoWcZjX0Knq/ZKODzjy8qGpNQ2TNXpp 31+c+6mPn6xcoWjkqiBzORfyd8cs5tcrY+/n0wiJ8iF59GHHsVVHqokym+QYLJK0doR8 l7FA0Lu5Gi0tM6fR4mWmN0BJync3MCVlnT51Ze1Uuo5GH+q9dLg1QwpHpKhwxEZrH284 CViQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=ZleU19HY0U+YRy/OzvSYdquW90RuOhcfmxcx0Ubbnf8=; b=IW/lzSxJN3Re64sC6VSmBwL0HLbk5+3BRUBFSaAbM7fHOdI5UIAWJZM+8FrCohiJP7 Olsme5brRO7w+NXVRaN3oZKtJgR2ieJRDJ3T7R4V9RqMqWoZyvXKElxtI7VvKgO1ccmO 00a+OTCZuqkfVEHAr9T22RY9d6h9lpoKhO1rniDzIiInlI+BRR0EwiHh5t00v9+WuqMA 00q7oB6PiryIk8c165+sKwsr+HukgH/aPvCjLyPQJQh9nz/H7tMyTDLVFo/hiN9TuxMP cosQNU4CscRc26TdExqOwlPq7OkrSQIycK+vSHE6ZmYH3EJ7FgJi6Pgc1i2seA8Q8HCZ UPZQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id x4si5532280edr.51.2021.05.31.02.09.54; Mon, 31 May 2021 02:10:17 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230423AbhEaJHz (ORCPT + 99 others); Mon, 31 May 2021 05:07:55 -0400 Received: from hostingweb31-40.netsons.net ([89.40.174.40]:41694 "EHLO hostingweb31-40.netsons.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229945AbhEaJHk (ORCPT ); Mon, 31 May 2021 05:07:40 -0400 Received: from [77.244.183.192] (port=63384 helo=melee.fritz.box) by hostingweb31.netsons.net with esmtpa (Exim 4.94.2) (envelope-from ) id 1lndrr-0009Gk-0d; Mon, 31 May 2021 11:05:51 +0200 From: Luca Ceresoli To: linux-pci@vger.kernel.org Cc: Luca Ceresoli , linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Kishon Vijay Abraham I , Lorenzo Pieralisi , Rob Herring , Bjorn Helgaas Subject: [PATCH v2] PCI: dra7xx: Fix reset behaviour Date: Mon, 31 May 2021 11:05:40 +0200 Message-Id: <20210531090540.2663171-1-luca@lucaceresoli.net> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - hostingweb31.netsons.net X-AntiAbuse: Original Domain - vger.kernel.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - lucaceresoli.net X-Get-Message-Sender-Via: hostingweb31.netsons.net: authenticated_id: luca+lucaceresoli.net/only user confirmed/virtual account not confirmed X-Authenticated-Sender: hostingweb31.netsons.net: luca@lucaceresoli.net X-Source: X-Source-Args: X-Source-Dir: Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The PCIe PERSTn reset pin is active low and should be asserted, then deasserted. The current implementation only drives the pin once in "HIGH" position, thus presumably it was intended to deassert the pin. This has two problems: 1) it assumes the pin was asserted by other means before loading the driver 2) it has the wrong polarity, since "HIGH" means "active", and the pin is presumably configured as active low coherently with the PCIe convention, thus it is driven physically to 0, keeping the device under reset unless the pin is configured as active high. Fix both problems by: 1) keeping devm_gpiod_get_optional(dev, NULL, GPIOD_OUT_HIGH) as is, but assuming the pin is correctly configured as "active low" this now becomes a reset assertion 2) adding gpiod_set_value(reset, 0) after a delay to deassert reset Fixes: 78bdcad05ea1 ("PCI: dra7xx: Add support to make GPIO drive PERST# line") Signed-off-by: Luca Ceresoli --- Changes v1 -> v2: - No changes to the patch - Reword commit message according to suggestions from Bjorn Helgaas (from another patchset) - Add Fixes: tag --- drivers/pci/controller/dwc/pci-dra7xx.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/pci/controller/dwc/pci-dra7xx.c b/drivers/pci/controller/dwc/pci-dra7xx.c index cb5d4c245ff6..11f392b7a9a2 100644 --- a/drivers/pci/controller/dwc/pci-dra7xx.c +++ b/drivers/pci/controller/dwc/pci-dra7xx.c @@ -801,6 +801,8 @@ static int dra7xx_pcie_probe(struct platform_device *pdev) dev_err(&pdev->dev, "gpio request failed, ret %d\n", ret); goto err_gpio; } + usleep_range(1000, 2000); + gpiod_set_value(reset, 0); reg = dra7xx_pcie_readl(dra7xx, PCIECTRL_DRA7XX_CONF_DEVICE_CMD); reg &= ~LTSSM_EN; -- 2.25.1