linux-serial.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Rob Herring <robh@kernel.org>
Cc: julian schroeder <julianmarcusschroeder@gmail.com>,
	bhanumaiya@google.com,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jiri Slaby <jirislaby@kernel.org>,
	linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org,
	Johan Hovold <johan@kernel.org>
Subject: Re: [PATCH] fix serdev bind/unbind
Date: Tue, 8 Feb 2022 22:52:17 -0800	[thread overview]
Message-ID: <YgNkoegU7/NoAE6v@google.com> (raw)
In-Reply-To: <CAL_JsqJ4MqMYNiKNF_3rkbnR0CE9GhV-jzbxKn2jeJBvPGibLA@mail.gmail.com>

[ resending as I managed to lose folks from CC list ]

Hi Rob,

On Fri, Jan 21, 2022 at 11:51 AM Rob Herring <robh@kernel.org> wrote:
>
> +Johan
>
> On Tue, Jan 18, 2022 at 1:47 PM julian schroeder
> <julianmarcusschroeder@gmail.com> wrote:
> >
> > On some chromebooks, the serdev is used to communicate with
> > an embedded controller. When the controller is updated, the
> > regular ttyS* is needed. Therefore unbind/bind needs to work
> > to be able to switch between the two modes without having to
> > reboot. In the case of ACPI enabled platforms, the underlying
> > serial device is marked as enumerated but this is not cleared
> > upon remove (unbind). In this state it can not be bound as
> > serdev.
>
> 'fix' implies this was supposed to work and doesn't, but unbind/bind
> was never a feature of serdev. Or more specifically, switching between
> serdev and tty was not a feature. There have been some attempts to add
> that. I suspect it is more than a 4 line change based on those, but
> maybe I'm wrong.
>
> For your usecase, how does a given piece of h/w that needs and/or
> provides kernel support continue to work when the driver is unbound.
> Are you leaving any power controls that the serdev driver configured
> enabled so that the tty happens to keep working? What happens to

Because we are dealing with EC it stays powered up even when main CPU
is powered down, so for the core EC there are no concerns with power
management in the absence of a [dedicated] driver.

> interfaces the EC provides? The kernel doesn't deal with resources
> going away too well. I have to wonder if the existing serdev EC driver
> should learn to handle the 'update mode' itself or provide some sort
> of raw/passthru mode to userspace. A TTY, while standard, brings a lot
> of complexities.

I think these are all very good questions and from what I see in
drivers/platform/chrome/cros_ec_uart.c we will simply yank services
that the EC provides while it is being updated (which is quite
reasonable behavior as we can not be sure what configuration we will end
up with once firmware is updated, so new discovery of interfaces and
their characteristics is needed and is prudent). So from the outside a
dedicated update mode or attempting to switch to using tty interface
would look pretty similar.

That said, we can forget about EC and switching from serdev to tty here
and concentrate on the simple fact that for serdev a simple bind/unbind
sequence is not working, and that is a basic functionality for pretty
much every bus that we have in the kernel and the patch does address
this deficiency.

Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

>
> > Signed-off-by: julian schroeder <julianmarcusschroeder@gmail.com>
> > ---
> >  drivers/tty/serdev/core.c | 4 ++++
> >  1 file changed, 4 insertions(+)
> >
> > diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
> > index 92e3433276f8..668fa570bc07 100644
> > --- a/drivers/tty/serdev/core.c
> > +++ b/drivers/tty/serdev/core.c
> > @@ -138,7 +138,11 @@ EXPORT_SYMBOL_GPL(serdev_device_add);
> >  void serdev_device_remove(struct serdev_device *serdev)
> >  {
> >         struct serdev_controller *ctrl = serdev->ctrl;
> > +       struct acpi_device *adev;
> >
> > +       adev = ACPI_COMPANION(&serdev->dev);
> > +       if (adev)
> > +               acpi_device_clear_enumerated(adev);
> >         device_unregister(&serdev->dev);
> >         ctrl->serdev = NULL;
> >  }
> > --
> > 2.20.1
> >

Thanks.

-- 
Dmitry

  reply	other threads:[~2022-02-09  6:52 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-18 19:48 [PATCH] fix serdev bind/unbind julian schroeder
2022-01-19 17:05 ` Rob Herring
2022-02-09  6:52   ` Dmitry Torokhov [this message]
2022-01-21 17:22 ` Andy Shevchenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YgNkoegU7/NoAE6v@google.com \
    --to=dmitry.torokhov@gmail.com \
    --cc=bhanumaiya@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jirislaby@kernel.org \
    --cc=johan@kernel.org \
    --cc=julianmarcusschroeder@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=robh@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).