All of lore.kernel.org
 help / color / mirror / Atom feed
From: Philipp Zabel <p.zabel@pengutronix.de>
To: Peter Rosin <peda@axentia.se>
Cc: Mark Rutland <mark.rutland@arm.com>,
	devicetree@vger.kernel.org, Lars-Peter Clausen <lars@metafoo.de>,
	kernel@pengutronix.de, Wolfram Sang <wsa@the-dreams.de>,
	linux-iio@vger.kernel.org,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jonathan Corbet <corbet@lwn.net>,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	Paul Gortmaker <paul.gortmaker@windriver.com>,
	Rob Herring <robh+dt@kernel.org>,
	linux-i2c@vger.kernel.org,
	Peter Meerwald-Stadler <pmeerw@pmeerw.net>,
	Hartmut Knaack <knaack.h@gmx.de>,
	Colin Ian King <colin.king@canonical.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Jonathan Cameron <jic23@kernel.org>
Subject: Re: [PATCH v13 03/10] mux: minimal mux subsystem and gpio-based mux controller
Date: Fri, 21 Apr 2017 17:19:04 +0200	[thread overview]
Message-ID: <1492787944.2364.16.camel@pengutronix.de> (raw)
In-Reply-To: <6bc3120a-81dd-3b6c-d246-559a3c072969@axentia.se>

On Fri, 2017-04-21 at 16:55 +0200, Peter Rosin wrote:
> On 2017-04-21 16:41, Philipp Zabel wrote:
> > On Fri, 2017-04-21 at 16:32 +0200, Peter Rosin wrote:
> >> On 2017-04-21 16:23, Philipp Zabel wrote:
> >>> On Thu, 2017-04-13 at 18:43 +0200, Peter Rosin wrote:
> >>> [...]
> >>>> +int mux_chip_register(struct mux_chip *mux_chip)
> >>>> +{
> >>>> +	int i;
> >>>> +	int ret;
> >>>> +
> >>>> +	for (i = 0; i < mux_chip->controllers; ++i) {
> >>>> +		struct mux_control *mux = &mux_chip->mux[i];
> >>>> +
> >>>> +		if (mux->idle_state == mux->cached_state)
> >>>> +			continue;
> >>>
> >>> I think this should be changed to
> >>>  
> >>> -               if (mux->idle_state == mux->cached_state)
> >>> +               if (mux->idle_state == mux->cached_state ||
> >>> +                   mux->idle_state == MUX_IDLE_AS_IS)
> >>>                         continue;
> >>>
> >>> or the following mux_control_set will be called with state ==
> >>> MUX_IDLE_AS_IS. Alternatively, mux_control_set should return when passed
> >>> this value.
> >>
> >> That cannot happen because ->cached_state is initialized to -1
> >> in mux_chip_alloc, so should always be == MUX_IDLE_AS_IS when
> >> registering. And drivers are not supposed to touch ->cached_state.
> >> I.e., ->cached_state is "owned" by the core.
> > 
> > So this was caused by me filling cached_state from register reads in the
> > mmio driver. Makes me wonder why I am not allowed to do this, though, if
> > I am able to read back the initial state?
> 
> You gain fairly little by reading back the original state. If the mux
> should idle-as-is, you can avoid a maximum of one mux update if the first
> consumer happens to starts by requesting the previously active state.
> Similarly, if the mux should idle in a specific state, you can avoid a
> maximum of one mux update.
> 
> In both cases it costs one unconditional read of the mux state.
> 
> Sure, in some cases reads are cheaper than writes, but I didn't think
> support for seeding the cache was worth it. Is it worth it?

Probably not, I'll just drop the cached_state initialization. It should
be documented in the mux.h that this field is framework internal and not
to be touched by the drivers. At least I was surprised.

regards
Philipp

  reply	other threads:[~2017-04-21 16:41 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-13 16:43 [PATCH v13 00/10] mux controller abstraction and iio/i2c muxes Peter Rosin
2017-04-13 16:43 ` Peter Rosin
2017-04-13 16:43 ` [PATCH v13 01/10] devres: trivial whitespace fix Peter Rosin
2017-04-13 16:43   ` Peter Rosin
2017-04-13 16:43 ` [PATCH v13 02/10] dt-bindings: document devicetree bindings for mux-controllers and gpio-mux Peter Rosin
2017-04-13 16:43   ` Peter Rosin
2017-04-18 10:06   ` Philipp Zabel
2017-04-18 10:06     ` Philipp Zabel
2017-04-18 13:36     ` Peter Rosin
2017-04-18 13:36       ` Peter Rosin
2017-04-19  9:17       ` Philipp Zabel
2017-04-19  9:17         ` Philipp Zabel
2017-04-19  9:17         ` Philipp Zabel
2017-04-19 10:41         ` Peter Rosin
2017-04-19 10:41           ` Peter Rosin
2017-04-19 11:05           ` Philipp Zabel
2017-04-19 11:23             ` Peter Rosin
2017-04-19 11:23               ` Peter Rosin
2017-04-19 16:34               ` Philipp Zabel
2017-04-19 16:34                 ` Philipp Zabel
2017-04-13 16:43 ` [PATCH v13 03/10] mux: minimal mux subsystem and gpio-based mux controller Peter Rosin
2017-04-13 16:43   ` Peter Rosin
2017-04-18  8:34   ` Philipp Zabel
2017-04-18  8:34     ` Philipp Zabel
2017-04-18  8:51   ` Greg Kroah-Hartman
2017-04-18  8:51     ` Greg Kroah-Hartman
2017-04-18 10:59     ` Peter Rosin
2017-04-18 10:59       ` Peter Rosin
2017-04-18 11:44       ` Greg Kroah-Hartman
2017-04-18 11:44         ` Greg Kroah-Hartman
2017-04-18 21:53         ` Peter Rosin
2017-04-18 21:53           ` Peter Rosin
2017-04-19  2:23           ` Joe Perches
2017-04-19  2:23             ` Joe Perches
2017-04-20 21:53           ` Peter Rosin
2017-04-20 21:53             ` Peter Rosin
2017-04-21 23:28             ` Peter Rosin
2017-04-21 23:28               ` Peter Rosin
2017-05-05 13:19       ` Peter Rosin
2017-05-05 13:19         ` Peter Rosin
2017-04-19  9:06   ` Philipp Zabel
2017-04-19  9:06     ` Philipp Zabel
2017-04-19 12:00     ` Peter Rosin
2017-04-19 12:00       ` Peter Rosin
2017-04-19 13:49       ` Philipp Zabel
2017-04-19 21:04         ` Peter Rosin
2017-04-19 21:04           ` Peter Rosin
2017-04-21 14:18   ` Philipp Zabel
2017-04-21 15:08     ` Peter Rosin
2017-04-21 15:08       ` Peter Rosin
2017-04-21 14:23   ` Philipp Zabel
2017-04-21 14:32     ` Peter Rosin
2017-04-21 14:32       ` Peter Rosin
2017-04-21 14:41       ` Philipp Zabel
2017-04-21 14:41         ` Philipp Zabel
2017-04-21 14:55         ` Peter Rosin
2017-04-21 14:55           ` Peter Rosin
2017-04-21 15:19           ` Philipp Zabel [this message]
2017-04-13 16:43 ` [PATCH v13 04/10] iio: inkern: api for manipulating ext_info of iio channels Peter Rosin
2017-04-13 16:43   ` Peter Rosin
2017-04-13 16:43 ` [PATCH v13 05/10] dt-bindings: iio: io-channel-mux: document io-channel-mux bindings Peter Rosin
2017-04-13 16:43   ` Peter Rosin
2017-04-13 16:43 ` [PATCH v13 06/10] iio: multiplexer: new iio category and iio-mux driver Peter Rosin
2017-04-13 16:43   ` Peter Rosin
2017-04-13 16:43 ` [PATCH v13 07/10] dt-bindings: i2c: i2c-mux: document general purpose i2c-mux bindings Peter Rosin
2017-04-13 16:43   ` Peter Rosin
2017-04-13 16:43 ` [PATCH v13 08/10] i2c: i2c-mux-gpmux: new driver Peter Rosin
2017-04-13 16:43   ` Peter Rosin
2017-04-13 16:43 ` [PATCH v13 09/10] dt-bindings: mux-adg792a: document devicetree bindings for ADG792A/G mux Peter Rosin
2017-04-13 16:43   ` Peter Rosin
2017-04-13 16:43 ` [PATCH v13 10/10] mux: adg792a: add mux controller driver for ADG792A/G Peter Rosin
2017-04-13 16:43   ` Peter Rosin

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=1492787944.2364.16.camel@pengutronix.de \
    --to=p.zabel@pengutronix.de \
    --cc=akpm@linux-foundation.org \
    --cc=colin.king@canonical.com \
    --cc=corbet@lwn.net \
    --cc=devicetree@vger.kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jic23@kernel.org \
    --cc=kernel@pengutronix.de \
    --cc=knaack.h@gmx.de \
    --cc=lars@metafoo.de \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=paul.gortmaker@windriver.com \
    --cc=peda@axentia.se \
    --cc=pmeerw@pmeerw.net \
    --cc=robh+dt@kernel.org \
    --cc=wsa@the-dreams.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.