Re: [PATCH V2 1/2] mmc: sdhci: Add support for setting parent clock

From: Thierry Reding
Date: Mon Mar 20 2017 - 12:52:30 EST


On Fri, Mar 17, 2017 at 09:25:31AM +0000, Jon Hunter wrote:
> It is common for SD/MMC host controllers to set the parent clock that
> drives the SD/MMC interface in order to support various operating
> speeds. Typically, this is performed by calling common clock framework
> APIs such as clk_set_rate(). The problem is that these APIs may sleep
> and must not be called from within atomic sections and therefore, these
> functions cannot be called within the existing 'set_clock' SDHCI
> operator because they are called from within the context of a spinlock.
> Add a new 'set_parent_clock' operator for the SDHCI driver that is
> called early during the SDHCI 'set_ios' before the spinlock is aquired
> to give the platform driver the opportunity to set the parent clock
> rate.
>
> Please note that the Tegra and MSM SDHCI drivers currently appear to
> mis-use the 'set_clock' operator by calling clk_set_rate(). In the case
> of Tegra, occasionally but not always, 'scheduling while atomic' errors
> are reported (so most of the time we are getting lucky). In the of the
> MSM SDHCI driver, it is releasing and re-acquiring the spinlock which is
> bad.
>
> Signed-off-by: Jon Hunter <jonathanh@xxxxxxxxxx>
> ---
>
> Changes since V1:
> - Fixed idiotic copy-paste error and testing thoroughly!
>
> drivers/mmc/host/sdhci.c | 3 +++
> drivers/mmc/host/sdhci.h | 2 ++
> 2 files changed, 5 insertions(+)

Reviewed-by: Thierry Reding <treding@xxxxxxxxxx>

Attachment: signature.asc
Description: PGP signature