Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp1885693imm; Thu, 24 May 2018 02:19:12 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpHdy7Ctl9ZUUlfVoeP5vkdOvLxaqLTzoRZQRmdFr8/mKStOdkCPr/RlL+RCBjXx/x5usaN X-Received: by 2002:a65:5883:: with SMTP id d3-v6mr5190239pgu.131.1527153551986; Thu, 24 May 2018 02:19:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527153551; cv=none; d=google.com; s=arc-20160816; b=WBcTz3Ub8nIgilEFTLPHuGXI4guvBq2CO1DR/7Kqo5fI5AUPFrG5WlSSpfCiBcPALh eoSXWqFMGjkKqSHGamQ2niED1St77exdVKkfTAALL8NWFlMpUWDI4exAncop43BMZNNM eDeBqXJyylIhQ+BSTclFywCJb62rcEoKuOFdnXIlS4iWB5nZie/iqxP484KjCNPbfnLM dp74+6lfyO2YSqpBYiOsFdZvlfba5yGtqqiyj9wnemAIiIBtYVhrjksIvV8Pz/6cowpc nlsz1JZjn1wgO9jPWgghw/Ijbg/r82CSBA/VAl9p8IgY4xwVqNVmEX6umg4qqdw9X18I 99yQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature:arc-authentication-results; bh=M/FH3ttphLPk311fjEmfa92PIwkBizU5ho18563heiQ=; b=DRQg96zjWAL9CfteeTsY1Bk1cf0GoKk+MOn2Kq3Nl7FYesSUG1xbaeYQSzejD74Qve Xk/X400oD0w8NpBVB0THbxiYhtDzODYChQNnalpSVyceHZEEdM7LV5tEpF4CB/61PGgj 4iakayh4PwhNRUBLo0m93a+XSYn/6hQMNwp8sgziel7sK3XPgOnwkzYpxMFgcs1Ug4OM bo2hRMKsZQa6e48g+zl+eRvSdqp4kKabOaGmmvPw9x7ra0qe3UgiQPwt9kDN3Cu7cWL7 GWjFS/FF5SxNAMqgX8fbxk9ML1hMoQMT49duF8iCx4x6U0VkQyVnFRBIY50jjdG2JsQp /Mbg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=emIUp/Qp; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v11-v6si11312583pgt.356.2018.05.24.02.18.57; Thu, 24 May 2018 02:19:11 -0700 (PDT) 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=fail header.i=@gmail.com header.s=20161025 header.b=emIUp/Qp; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965900AbeEXJR4 (ORCPT + 99 others); Thu, 24 May 2018 05:17:56 -0400 Received: from mail-wr0-f193.google.com ([209.85.128.193]:35940 "EHLO mail-wr0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965664AbeEXJRv (ORCPT ); Thu, 24 May 2018 05:17:51 -0400 Received: by mail-wr0-f193.google.com with SMTP id k5-v6so1745739wrn.3; Thu, 24 May 2018 02:17:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=M/FH3ttphLPk311fjEmfa92PIwkBizU5ho18563heiQ=; b=emIUp/QpGjp61IN9Eiw1Ak4MYpwJPp56fxce+nLu2SPeHus45hd2TD9LSkPWFjVqr+ itcajlHV6yE25jrLB5IX5jhXGkmSyks8HPbWA0UmLhjilMuMoYBmbzEW2R4LLxFlG+kH Qt9JrmtxljUwwlzZHOhp8vg+Q79MNLGq5MNk3yz2rIi6dgjcQx/avQlQ8/KRETnPjRci 7E3B4tzPFJLJJhsVGN1efI/s1CAg2KsN+AkS7wm+VoUgM5o1qWnmfwKBNIGDwgXoJpEr Df6+byw2OqJQJ770bdvqt9e2WXgGIw5OFPe56OtiShse51zuV9E1ZCiylEim25UV9GcN sWJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :references:mime-version:content-disposition:in-reply-to:user-agent; bh=M/FH3ttphLPk311fjEmfa92PIwkBizU5ho18563heiQ=; b=h0e3aqA9JlY83zWJZJRSyYJ1FrEtEl6IV1A18SjBRkmaSCP1/SmFYXkM3iX4huxRgz 9ytUuPfX8Lx4gPYdJnZ0e0iXZCfSR2/QtRTw6AaMGrzxtNPPJIAgSdmR19dyUiGZbdJX 9xUj5sH06ry989pLokQuhcGZcXhJPcNR9AV6uOb50+jNPU7PcXVIrFr04WBbzLhXq+VR eTTGDu8bNEn3I6SJYmvWSCfNkbPkjXz/lC9ydpk/uN6WYc5VWwaamnt03aPvhn6XGcOz xyNZ0meyJf0lGHYNuignVt74fm9NxS1roCxx36s1IFSqFz/Iz5Wt/P/eL6EOlDqax1/V qWKA== X-Gm-Message-State: ALKqPwe9jWfjiRQvFUVKQlHTr8dY/+5eeb2mM25xuCL18+mHP7z5SdcE oYT5RD7DScs01uoGMdwsaaE= X-Received: by 2002:a19:d153:: with SMTP id i80-v6mr3791675lfg.16.1527153469489; Thu, 24 May 2018 02:17:49 -0700 (PDT) Received: from xi.terra (c-8bb2e655.07-184-6d6c6d4.bbcust.telenor.se. [85.230.178.139]) by smtp.gmail.com with ESMTPSA id 77-v6sm3858050ljz.53.2018.05.24.02.17.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 24 May 2018 02:17:48 -0700 (PDT) Received: from johan by xi.terra with local (Exim 4.90_1) (envelope-from ) id 1fLmNS-0004d9-Ia; Thu, 24 May 2018 11:17:43 +0200 Date: Thu, 24 May 2018 11:17:42 +0200 From: Johan Hovold To: Tony Lindgren Cc: Johan Hovold , Sebastian Reichel , "H. Nikolaus Schaller" , Andreas Kemnade , Mark Rutland , Arnd Bergmann , Pavel Machek , "linux-kernel@vger.kernel.org" , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Greg Kroah-Hartman , Rob Herring , linux-serial@vger.kernel.org, linux-omap@vger.kernel.org, linux-pm@vger.kernel.org Subject: Re: OMAP serial runtime PM and autosuspend (was: Re: [PATCH 4/7] dt-bindings: gnss: add u-blox binding)) Message-ID: <20180524091742.GZ30172@localhost> References: <20180508152228.GV98604@atomide.com> <20180508154756.GW98604@atomide.com> <20180508155405.GX98604@atomide.com> <20180508164904.GZ98604@atomide.com> <20180509131003.GC2285@localhost> <20180509135706.GB98604@atomide.com> <20180517100948.GI30172@localhost> <20180517171038.GL98604@atomide.com> <20180521134830.GR30172@localhost> <20180521154832.GY98604@atomide.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180521154832.GY98604@atomide.com> User-Agent: Mutt/1.9.5 (2018-04-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, May 21, 2018 at 08:48:32AM -0700, Tony Lindgren wrote: > * Johan Hovold [180521 13:50]: > > On Thu, May 17, 2018 at 10:10:38AM -0700, Tony Lindgren wrote: > > > * Johan Hovold [180517 10:12]: > > > Well in that case we should just stick with -1 value for the > > > autosuspend. And just do pm_runtime_put_sync_suspend() after > > > probe and on close. > > > > That won't work either as a negative autosuspend delay prevents runtime > > suspend completely (by grabbing an extra RPM reference). > > Well so negative autosuspend delay is working as documented then :) Yes, indeed. All too well. ;) > > > > I fail to see how we can implement this using the current toolbox. What > > > > you're after here is really a mechanism for selecting between two > > > > different runtime PM schemes at runtime: > > > > > > > > 1. normal serial RPM, where the controller is active while the > > > > port is open (this should be the safe default) > > > > > > Agreed. And that is the case already. > > > > Yes, but it's not really the case today as since omap-serial (and > > 8250-omap) sets a negative autosuspend at probe and hence does not > > runtime-suspend when the port is closed. So that's the long-standing bug > > which needs fixing. > > Yes the bug for closed ports needs to be fixed for sure. I did some forensic on this and it seems this problem has "always" been there. Specifically, closed ports have never been runtime suspended unless a non-negative autosuspend delay has been set by user space since fcdca75728ac ("ARM: OMAP2+: UART: Add runtime pm support for omap-serial driver") which was merged seven years ago. So while it would certainly be nice to save some more power by default, this would really be a new feature rather than a bug or regression fix (which reduces the urgency for this issue somewhat too). > > > > 2. aggressive serial RPM, where the controller is allowed to > > > > suspend while the port is open even though this may result in > > > > lost characters when waking up on incoming data > > > > > > In this case it seems that the only thing needed is to just > > > configure the autosuspend delay for the parent port. The use of > > > -1 has been around since the start of runtime PM AFAIK, so maybe > > > we should just document it. I guess we could also introduce > > > pm_runtime_block_autoidle_unless_configured() :) > > > > The implications of a negative autosuspend delay are already documented > > (in Documentation/power/runtime_pm.txt); it's just the omap drivers that > > gets it wrong when trying to do things which aren't currently supported > > (and never have been). > > > > So I still think we need a new mechanism for this. > > Well if you have some better mechanism in mind let's try it out. Short of > sprinkling pm_runtime_force_suspend/resume calls all over, I'm out of ideas > right now. Yeah, that would be too much of a hack and likely wouldn't work either (and we really should do away with those _force calls altogether). I've been thinking a bit too much about this already, but it may be possible to use the pm QoS framework for this. A resume latency can be set through sysfs where "n/a" is defined to mean "no latency accepted" (i.e. controller remains always-on while port is open) and "0" means "any latency accepted" (i.e. omap aggressive serial RPM is allowed). Now, implementing this may get a little tricky as we want to be able to change this setting on the fly (consider consoles) and we need to figure out the interaction with serdev (user space should probably not be allowed to request a resume latency for ports used by serdev). I'd be happy to dig into this some more, but not in my spare time I'm afraid. > > > > For normal ttys, we need a user-space interface for selecting between > > > > the two, and for serdev we may want a way to select the RPM scheme from > > > > within the kernel. > > > > > > > > Note that with my serdev controller runtime PM patch, serdev core could > > > > always opt for aggressive PM (as by default serdev core holds an RPM > > > > reference for the controller while the port is open). > > > > > > So if your serdev controller was to set the parent autosuspend > > > delay on open() and set it back on close() this should work? > > > > Is it really the job of a serdev driver to set the autosuspend delay of > > a parent controller? Isn't this somethings which depends on the > > characteristics of the controller (possibly configurable by user space) > > such as the cost of runtime suspending and resuming? > > Only in some cases will the serdev driver know it's safe to configure > the parent controller. Configuring the parent controller from userspace > works just fine as we've seen for years now. Yes, user space may override the default settings provided by the serial driver, but a serdev driver, in contrast, knows nothing about the underlying serial hardware. > > The patch I posted works with what we have today; if a parent serial > > controller driver uses aggressive runtime PM by default or after having > > been configured through sysfs to do so. > > Yeah let's stick with configuring the parent controller from userspace > for now at least. Yep, status quo works for the time being (since this isn't a regression). > > What I'm getting at here is that the delay should be set by the serial > > driver implementing aggressive runtime PM. Then all we need is a > > mechanism to determine whether an extra RPM reference should be taken at > > tty open or not (configurable by user space, defaulting to yes). > > OK yeah some additional on/off switch seems to be missing here. As mentioned above, PM QoS resume latency may possibly be used, and otherwise me may able to define a new (generic) QoS flag for this. > > Specifically, the serial drivers themselves would always use > > autosuspend and not have to deal with supporting the two RPM schemes > > (normal vs aggressive runtime PM). > > OK. So if I understand your idea right, we could have autosuspend timeout > set to 3000ms in the 8250_omap.c but still default to RPM blocked? > Then user can enable aggressive PM via /sys as desired, right? Not RPM blocked; the ports must always be able to suspend when the port is closed. But user space should be able to enable the aggressive (active) runtime PM via sysfs independently of the autosuspend delay, yes. Thanks, Johan