Received: by 2002:ab2:6c55:0:b0:1fd:c486:4f03 with SMTP id v21csp652553lqp; Wed, 12 Jun 2024 11:59:48 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWzTjNPbKvitqfHDgOf7/JSW1Nn+VCxRnWhQHHGMQewByNl9PIKcfAgW6NkUGlb2Hu7csvmFpy9oowIByHv7zrT0cD8AHvLR1jr2ca+Pg== X-Google-Smtp-Source: AGHT+IGdd5h8fKllLJ9dA7qOzs2tK6CGxX1zxIxFNEpEhPVUgI62KzxQFfIeb4yiMCpA8iKuTqjz X-Received: by 2002:a05:6358:b018:b0:19f:48c3:62b with SMTP id e5c5f4694b2df-19f69cfb5a8mr328525255d.3.1718218788366; Wed, 12 Jun 2024 11:59:48 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1718218788; cv=pass; d=google.com; s=arc-20160816; b=xRK3uALPgXTG5qgrjvzff2sOL0eRSJCnNcZrNJZO74J4NbVV6y5cGcThaxLnjj6qQc wpOw2WFkS3tufYZ6ur+P+WdyG2C5iOaLHAQQnJQxedFRYi3FKgV7iRgz5SXLUKO1yHUX J7XvjxdE/aGNT0XqR/SBG8QtT4fdO2v7XYw74Unnpg1AdKf9lDTDhJWEnrvN/DlmgoXF PzduYMso+GpV5mzh1gEkTFxCx2L3xLST+uEIeLgqkkWvQXgfAieAjDp1oraIUWwqym/w JctLSTZrwoanx393sxNdILwWAmejggl4jqC8TrYl+wdvO1dtOU0kBLjXD5iDRoopvXyr Djyg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=user-agent:message-id:references:in-reply-to:organization:subject :cc:to:from:date:content-transfer-encoding:mime-version :list-unsubscribe:list-subscribe:list-id:precedence; bh=wTI4mZHpC5jULlnqte+fTqGNaauWXhK4EHZgwQUjtWA=; fh=UP0f47MXOpxFZAN826cy+OIV2mRfFP5AmNEXZZNdX0w=; b=kgYjCW16cfdf56yEPoDS1RV3FCxgKpUWZrnnu8noR4GXlSF04FUgX4H8vJOrfgbkfl IM2cTXGWqJaw1MKdLX1uhDZ9l+R0hy6bAGjev/wjDtXpA6x3RuP0ESmPf7fWLTFCd/i/ JhhR/9FkwKn7BuP3M+jUDayynyu3gQiH5d4VOQv0mzFyT8+huZetzSPFeNZJ+aMFSRvQ BIRwibwSTXu7Bjx9vRuho1gTtb1zg3VBFNblmTYQITgwdP/yhM3HgxHQSaQ1FmgX86mr c9thYzhbl6jxAZjRkTI3fyfmcyLYCJm4AK59G4TbAHhMC0aj7NNoZYi5CQAPlEPs+OTt WTPA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=dev.tdt.de); spf=pass (google.com: domain of linux-kernel+bounces-212100-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-212100-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id 41be03b00d2f7-6e443b31ee3si8318947a12.30.2024.06.12.11.59.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jun 2024 11:59:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-212100-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=dev.tdt.de); spf=pass (google.com: domain of linux-kernel+bounces-212100-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-212100-linux.lists.archive=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 9B9C8B255B3 for ; Wed, 12 Jun 2024 18:40:34 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 29A474F1F8; Wed, 12 Jun 2024 18:40:21 +0000 (UTC) Received: from mxout70.expurgate.net (mxout70.expurgate.net [194.37.255.70]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B796447F4B; Wed, 12 Jun 2024 18:40:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=194.37.255.70 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718217620; cv=none; b=PDq2HYKtRorLKwdRDKcQhWcvalsPbxG3YmxmDr+/03mCFERZZmtgCxmjUcKRenjVJcen14f9jDkmMP4mwtJlbcGtzNzfKXjXD5nAAeh/ZDaCFmF2aaXM0EJwPeBx97nqS6ZXsYk5a0vFgd7WPKKBbofZovREuBhghxiWSXdGq/0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718217620; c=relaxed/simple; bh=KuaLG9bzDcur9dwVKKPiSS8EqUoqRjZ3JTJzUwbnx/s=; h=MIME-Version:Content-Type:Date:From:To:Cc:Subject:In-Reply-To: References:Message-ID; b=Zdkx7JDOx8PtDg/8Bzn3FhWBIF0lC+25S5QXxaik4UlGRu8rkvfMkeIsu6hsbgwx0/0rL1bcGxX/9KQiVCQXGjAI1zZbN3A1gB3ugJ/kpbrMjgq3zSLtc8yyNlR61n+F785Tmmv0ESLGnJBi4xiNOz6oupQEeB4k9PKFg6y4SM0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dev.tdt.de; spf=pass smtp.mailfrom=dev.tdt.de; arc=none smtp.client-ip=194.37.255.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=dev.tdt.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=dev.tdt.de Received: from [127.0.0.1] (helo=localhost) by relay.expurgate.net with smtp (Exim 4.92) (envelope-from ) id 1sHSt8-003PMm-DD; Wed, 12 Jun 2024 20:40:02 +0200 Received: from [195.243.126.94] (helo=securemail.tdt.de) by relay.expurgate.net with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1sHSt7-002UFN-H0; Wed, 12 Jun 2024 20:40:01 +0200 Received: from securemail.tdt.de (localhost [127.0.0.1]) by securemail.tdt.de (Postfix) with ESMTP id 2386F240053; Wed, 12 Jun 2024 20:40:01 +0200 (CEST) Received: from mail.dev.tdt.de (unknown [10.2.4.42]) by securemail.tdt.de (Postfix) with ESMTP id 7CC15240050; Wed, 12 Jun 2024 20:40:00 +0200 (CEST) Received: from mail.dev.tdt.de (localhost [IPv6:::1]) by mail.dev.tdt.de (Postfix) with ESMTP id E1FB53773C; Wed, 12 Jun 2024 20:39:59 +0200 (CEST) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Wed, 12 Jun 2024 20:39:59 +0200 From: Martin Schiller To: Dmitry Torokhov Cc: hauke@hauke-m.de, tsbogend@alpha.franken.de, rdunlap@infradead.org, robh@kernel.org, bhelgaas@google.com, linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org Subject: Re: [PATCH] MIPS: pci: lantiq: restore reset gpio polarity Organization: TDT AG In-Reply-To: References: <20240607090400.1816612-1-ms@dev.tdt.de> Message-ID: <7d34eb4017e809245daa342e3ccddf4f@dev.tdt.de> X-Sender: ms@dev.tdt.de User-Agent: Roundcube Webmail/1.3.17 X-purgate-type: clean X-purgate: clean X-purgate-ID: 151534::1718217602-83CB5642-2266EBAB/0/0 On 2024-06-12 19:47, Dmitry Torokhov wrote: > Hi Marton, Hi Dmitry, > > On Fri, Jun 07, 2024 at 11:04:00AM +0200, Martin Schiller wrote: >> Commit 90c2d2eb7ab5 ("MIPS: pci: lantiq: switch to using gpiod API") >> not >> only switched to the gpiod API, but also inverted / changed the >> polarity >> of the GPIO. >> >> According to the PCI specification, the RST# pin is an active-low >> signal. However, most of the device trees that have been widely used >> for >> a long time (mainly in the openWrt project) define this GPIO as >> active-high and the old driver code inverted the signal internally. >> >> Apparently there are actually boards where the reset gpio must be >> operated inverted. For this reason, we cannot use the >> GPIOD_OUT_LOW/HIGH >> flag for initialization. Instead, we must explicitly set the gpio to >> value 1 in order to take into account any "GPIO_ACTIVE_LOW" flag that >> may have been set. > > Do you have example of such boards? They could not have worked before > 90c2d2eb7ab5 because it was actively setting the reset line to physical > high, which should leave the device in reset state if there is an > inverter between the AP and the device. Oh, you're right. I totally missed that '__gpio_set_value' was used in the original code and that raw accesses took place without paying attention to the GPIO_ACTIVE_* flags. You can find the device trees I am talking about in [1]. @Thomas Bogendoerfer: Would it be possible to stop the merging of this patch? I think We have to do do some further/other changes. > >> >> In order to remain compatible with all these existing device trees, we >> should therefore keep the logic as it was before the commit. > > With gpiod API operating with logical states there's still difference > in > logic: > > gpiod_set_value_cansleep(reset_gpio, 1); > > will leave GPIO at 1 if it is described as GPIO_ACTIVE_HIGH (which is > apparently what you want for boards with broken DTS) but for boards > that accurately describe GPIO as GPIO_ACTIVE_LOW it well drive GPIO to > 0, leaving the card in reset state. > > You should either use gpiod_set_raw_value_calsleep() or we can try and > quirk it in gpiolib (like we do for many other cases of incorrect GPIO > polarity descriptions and which is my preference). > > This still leaves the question about boards that require inversion. Are > you saying that they have real signal inverter on the line or that > their > device trees correctly describe the signal as GPIO_ACTIVE_LOW? > > BTW, please consider getting DTS trees for your devices into mainline. > Why do you keep them separate? Unfortunately, these are not "my" devices and I can't even test them. I've got feedback from some users when I updated the lantiq target to linux 6.1 in openwrt. Let's assume that all boards physically expect an active-low signal. If the GPIO_ACTIVE_LOW flag were now set in the device tree, the original (old) driver would have an incorrect initial level (LOW instead of HIGH) due to the gpio_direction_output(reset_gpio, 1); This is probably the reason why the flag GPIO_ACTIVE_HIGH is set in almost all dts files in openwrt. But with commit 90c2d2eb7ab5 the initial level (LOW) is guaranteed to be wrong because of the "GPIOD_OUT_LOW" and cannot be changed by "wrong" device tree settings. The signal curve is LOW -> LOW -> HIGH instead of HIGH -> LOW -> HIGH. > >> >> Fixes: 90c2d2eb7ab5 ("MIPS: pci: lantiq: switch to using gpiod API") >> Cc: stable@vger.kernel.org >> Signed-off-by: Martin Schiller >> --- >> arch/mips/pci/pci-lantiq.c | 8 ++++---- >> 1 file changed, 4 insertions(+), 4 deletions(-) >> >> diff --git a/arch/mips/pci/pci-lantiq.c b/arch/mips/pci/pci-lantiq.c >> index 68a8cefed420..0844db34022e 100644 >> --- a/arch/mips/pci/pci-lantiq.c >> +++ b/arch/mips/pci/pci-lantiq.c >> @@ -124,14 +124,14 @@ static int ltq_pci_startup(struct >> platform_device *pdev) >> clk_disable(clk_external); >> >> /* setup reset gpio used by pci */ >> - reset_gpio = devm_gpiod_get_optional(&pdev->dev, "reset", >> - GPIOD_OUT_LOW); >> + reset_gpio = devm_gpiod_get_optional(&pdev->dev, "reset", >> GPIOD_ASIS); >> error = PTR_ERR_OR_ZERO(reset_gpio); >> if (error) { >> dev_err(&pdev->dev, "failed to request gpio: %d\n", error); >> return error; >> } >> gpiod_set_consumer_name(reset_gpio, "pci_reset"); >> + gpiod_direction_output(reset_gpio, 1); >> >> /* enable auto-switching between PCI and EBU */ >> ltq_pci_w32(0xa, PCI_CR_CLK_CTRL); >> @@ -194,10 +194,10 @@ static int ltq_pci_startup(struct >> platform_device *pdev) >> >> /* toggle reset pin */ >> if (reset_gpio) { >> - gpiod_set_value_cansleep(reset_gpio, 1); >> + gpiod_set_value_cansleep(reset_gpio, 0); >> wmb(); >> mdelay(1); >> - gpiod_set_value_cansleep(reset_gpio, 0); >> + gpiod_set_value_cansleep(reset_gpio, 1); >> } >> return 0; >> } >> -- >> 2.39.2 >> > > Thanks. [1] https://git.openwrt.org/?p=openwrt/openwrt.git;a=tree;f=target/linux/lantiq/files/arch/mips/boot/dts/lantiq