From: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
To: <linux-clk@vger.kernel.org>
Cc: <linux-i2c@vger.kernel.org>, <linux-spi@vger.kernel.org>,
<linux@arm.linux.org.uk>, <mturquette@baylibre.com>,
<sboyd@codeaurora.org>, <broonie@kernel.org>, <wsa@the-dreams.de>
Subject: Re: Handling clocks on external busses
Date: Mon, 4 Apr 2016 10:57:20 +0100 [thread overview]
Message-ID: <20160404095720.GJ31814@localhost.localdomain> (raw)
In-Reply-To: <20151202125855.GB6058@localhost.localdomain>
On Wed, Dec 02, 2015 at 12:58:55PM +0000, Charles Keepax wrote:
> On Tue, Nov 24, 2015 at 05:37:18PM +0000, Charles Keepax wrote:
> > Hi,
> >
> > When a clock driver is controlling a clock that is controlled
> > over I2C / SPI, we need to perform a write on that bus to enable
> > the clock. However, such busses often have their own clocks that
> > must be enabled. Since all clock prepares are controlled under
> > one large mutex this easily causes deadlock. The device is
> > waiting for the I2C / SPI write to complete and the I2C / SPI
> > driver is waiting for the clock prepare lock to be released so it
> > can enable its own clock.
> >
> > I have had a bit of a search and it seems the only really advice
> > kicking about is that all I2C / SPI drivers should leave the
> > clock prepared all the time. Is that intended to be the long term
> > solution, should I treat not leaving the clock prepared as a bug?
> >
> > Thanks,
> > Charles
>
> Adding a few more people for visibility.
>
> So after a bit more digging it seems this has been mitigated slightly
> as a lot of SPI driver have been updated to execute transfers in
> thread rather than from a worker thread and it seems the clock
> framework lets you re-enter the locked sections if called from the
> same thread.
>
> I am looking at moving some (in mainline) clocking code into an actual
> clocking driver (for a SPI/I2C audio CODEC) but I am rather nervous
> about this causing problems for customers with random deadlocks.
>
> I guess the naive solution looks like individual locks per clock, but
> from what I have been able to google it looks like there are some
> challenges with that approach, does anyone have any links to previous
> discussions on that? And any suggestions on how I might approach
> this?
>
> Thanks,
> Charles
Hi guys,
Still struggling with this, basically the issue is that I need to
add a clock DT binding so a clock source can be user controlled.
But I can't find anyway to control a clock
that is behind a SPI interface reliably. Yes if the SPI transfer
gets executed in thread things work because of the re-entrant
clock locking, but when that doesn't happen and the SPI core punts
this to its worker thread things lock up. I also tried using
async SPI calls, which technically violates the requirement then
the clock is prepared before prepare returns although in our case
this doesn't really matter, but even that can potentially cause
issues as you have a potential mutex inversion (between the SPI
bus lock and the clock prepare lock).
How would we feel about just adding the clock binding at the
moment and parsing it manually to set the clock source? Then we
could add a proper clock driver once the locking is fixed in the
clock framework.
Thanks,
Charles
prev parent reply other threads:[~2016-04-04 9:57 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-24 17:37 Handling clocks on external busses Charles Keepax
2015-12-02 12:58 ` Charles Keepax
2015-12-02 13:30 ` Mark Brown
2016-04-04 9:57 ` Charles Keepax [this message]
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=20160404095720.GJ31814@localhost.localdomain \
--to=ckeepax@opensource.wolfsonmicro.com \
--cc=broonie@kernel.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-spi@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=mturquette@baylibre.com \
--cc=sboyd@codeaurora.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 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).