Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp628432pxb; Wed, 27 Jan 2021 17:17:36 -0800 (PST) X-Google-Smtp-Source: ABdhPJzwkhz/LNa2kl/VZjaISf7QcAmncMFAJgSPn96SMbOcMSyiqIpmzyV1GDgWEEwnwBUbt1rL X-Received: by 2002:a05:6402:278a:: with SMTP id b10mr11729027ede.347.1611796656321; Wed, 27 Jan 2021 17:17:36 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611796656; cv=none; d=google.com; s=arc-20160816; b=jVxSq+IEcdI7uR5EynUSBv2OG3FUnidosf7JGOrGZiWATv4qf9Pkx2y4AY+GDvKDG6 edKsfawtVNb8N/9P3pYhAxL4rYt0YS4ZPpdgO8J7B2AJsenoa31LW4XcTl4TOW230WH3 du5hfTHIiPQ78M3xfWJ1jEee9TEHukusn9zyzF7qqwK6GmYd2TAqZENVAu15zWAhvV/S O0M3EViczPFqcotDPdX8g+JhtyJKowDBeHW8OBOLA/QH4akgSN6V65geJZXuntkqeYsj mgO8au1tEYVTtaGQTsvdaXtbjWkBZxYMsPhn2DUMqcRN2jGO4AX7/4OeirgbHUCMlhjr YMWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date; bh=J9l6Rejlq9p+mX62Zf8cTBWF2z+MVFjGhw/Z6wtdS5M=; b=fHBooK4waMw+VzenlS1hW++kkJJu6J8JPGWKPG5IYN+Vs2UZkIoDOJg91qN2M87kjU oj2VLkJLy8emu4sbUYoK8tnGfXzzcjoZGpuDDfJhmYHPKgoY1MkNqRTzm6WAzhmn96qY TeQdUVvuEYWWPRv92wX7ebVWzyVFUq2BP7uBL8WBX0JF9oejS7pmMBSuhenU41bQBLKI SzYCZr7z74vjuNUpJ8sKs+JGwkTmt4ud/JLVkAEgWMipDdulpybNl3+VCuovB1JnWs/G RbrxGRjinCRiv1N+CQfXgUCYn3cMywc7g4CJrkckud8Z2a0j3e76xmqCl52c0G0+tpYL HkHA== 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 r23si1908577edy.113.2021.01.27.17.17.11; Wed, 27 Jan 2021 17:17:36 -0800 (PST) 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 S231737AbhA1BQU (ORCPT + 99 others); Wed, 27 Jan 2021 20:16:20 -0500 Received: from vps0.lunn.ch ([185.16.172.187]:35440 "EHLO vps0.lunn.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231132AbhA1BNh (ORCPT ); Wed, 27 Jan 2021 20:13:37 -0500 Received: from andrew by vps0.lunn.ch with local (Exim 4.94) (envelope-from ) id 1l4vrb-002xF8-6S; Thu, 28 Jan 2021 02:12:47 +0100 Date: Thu, 28 Jan 2021 02:12:47 +0100 From: Andrew Lunn To: Russell King - ARM Linux admin Cc: Mike Looijmans , netdev@vger.kernel.org, "David S. Miller" , Heiner Kallweit , Jakub Kicinski , linux-kernel@vger.kernel.org Subject: Re: [PATCH] net: mdiobus: Prevent spike on MDIO bus reset signal Message-ID: References: <20210126073337.20393-1-mike.looijmans@topic.nl> <20210126134937.GI1551@shell.armlinux.org.uk> <20210128002555.GQ1551@shell.armlinux.org.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210128002555.GQ1551@shell.armlinux.org.uk> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jan 28, 2021 at 12:25:55AM +0000, Russell King - ARM Linux admin wrote: > On Thu, Jan 28, 2021 at 01:00:57AM +0100, Andrew Lunn wrote: > > On Tue, Jan 26, 2021 at 01:49:38PM +0000, Russell King - ARM Linux admin wrote: > > > On Tue, Jan 26, 2021 at 02:14:40PM +0100, Andrew Lunn wrote: > > > > On Tue, Jan 26, 2021 at 08:33:37AM +0100, Mike Looijmans wrote: > > > > > The mdio_bus reset code first de-asserted the reset by allocating with > > > > > GPIOD_OUT_LOW, then asserted and de-asserted again. In other words, if > > > > > the reset signal defaulted to asserted, there'd be a short "spike" > > > > > before the reset. > > > > > > > > > > Instead, directly assert the reset signal using GPIOD_OUT_HIGH, this > > > > > removes the spike and also removes a line of code since the signal > > > > > is already high. > > > > > > > > Hi Mike > > > > > > > > This however appears to remove the reset pulse, if the reset line was > > > > already low to start with. Notice you left > > > > > > > > fsleep(bus->reset_delay_us); > > > > > > > > without any action before it? What are we now waiting for? Most data > > > > sheets talk of a reset pulse. Take the reset line high, wait for some > > > > time, take the reset low, wait for some time, and then start talking > > > > to the PHY. I think with this patch, we have lost the guarantee of a > > > > low to high transition. > > > > > > > > Is this spike, followed by a pulse actually causing you problems? If > > > > so, i would actually suggest adding another delay, to stretch the > > > > spike. We have no control over the initial state of the reset line, it > > > > is how the bootloader left it, we have to handle both states. > > > > > > Andrew, I don't get what you're saying. > > > > > > Here is what happens depending on the pre-existing state of the > > > reset signal: > > > > > > Reset (previously asserted): ~~~|_|~~~~|_______ > > > Reset (previously deasserted): _____|~~~~|_______ > > > ^ ^ ^ > > > A B C > > > > > > At point A, the low going transition is because the reset line is > > > requested using GPIOD_OUT_LOW. If the line is successfully requested, > > > the first thing we do is set it high _without_ any delay. This is > > > point B. So, a glitch occurs between A and B. > > > > > > We then fsleep() and finally set the GPIO low at point C. > > > > > > Requesting the line using GPIOD_OUT_HIGH eliminates the A and B > > > transitions. Instead we get: > > > > > > Reset (previously asserted) : ~~~~~~~~~~|______ > > > Reset (previously deasserted): ____|~~~~~|______ > > > ^ ^ > > > A C > > > > > > Where A and C are the points described above in the code. Point B > > > has been eliminated. > > > > > > Therefore, to me the patch looks entirely reasonable and correct. > > > > I wonder if there are any PHYs which actually need a pulse? Would it > > be better to have: > > > > Reset (previously asserted): ~~~|____|~~~~|_______ > > Reset (previously deasserted): ________|~~~~|_______ > > ^ ^ ^ ^ > > A B C D > > > > Point D is where we actually start talking to the PHY. C-D is > > reset-post-delay-us, and defaults to 0, but can be set via DT. B-C is > > reset-delay-us, and defaults to 10us, but can be set via DT. > > Currently A-B is '0', so we get the glitch. But should we make A-B the > > same as B-C, so we get a real pulse? > > I do not see any need for A-B - what is the reason for it? If level is all that matters, then it is not needed. If a PHY needs an actual pulse, both a raising and a falling edge, we potentially don't get the rising edge now. But the datasheets you have looked at all seem to talk about level, not pulse. So lets go with this. Reviewed-by: Andrew Lunn Andrew