public inbox for linux-omap@vger.kernel.org
 help / color / mirror / Atom feed
From: Adrian Hunter <adrian.hunter@nokia.com>
To: Paul Walmsley <paul@pwsan.com>
Cc: "Karpov Denis.2 (EXT-Teleca/Helsinki)"
	<ext-denis.2.karpov@nokia.com>, Tony Lindgren <tony@atomide.com>,
	"khilman@deeprootsystems.com" <khilman@deeprootsystems.com>,
	linux-mmc Mailing List <linux-mmc@vger.kernel.org>,
	linux-omap Mailing List <linux-omap@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Madhusudhan Chikkature <madhu.cr@ti.com>
Subject: Re: [PATCH 4/8] omap_hsmmc: set DVFS/PM constraints
Date: Fri, 15 Jan 2010 11:04:22 +0200	[thread overview]
Message-ID: <4B502F96.3030201@nokia.com> (raw)
In-Reply-To: <alpine.DEB.2.00.1001141158290.7813@utopia.booyaka.com>

Paul Walmsley wrote:
> Hello Adrian,
> 

Thanks for your comments.  I will be dropping this patch for now.

There are a couple more comments below.

> On Thu, 14 Jan 2010, Adrian Hunter wrote:
> 
>> Paul Walmsley wrote:
>>> (added Denis and Kevin)
>>>
>>> Hello Denis, Adrian,
>>>
>>> On Wed, 13 Jan 2010, Adrian Hunter wrote:
>>>
>>>> >From afab8b432b37ae1f42b281e58989c8d607ed7183 Mon Sep 17 00:00:00 2001
>>>> From: Denis Karpov <ext-denis.2.karpov@nokia.com>
>>>> Date: Wed, 8 Jul 2009 16:15:08 +0200
>>>> Subject: [PATCH] omap_hsmmc: set DVFS/PM constraints
>>>>
>>>> Set constraint for MPU minimal frequency to maintain good
>>>> I/O performance.
>>>>
>>>> The constraint is set in MMC host 'ENABLED' state and dropped
>>>> when MMC host enters 'DISABLED' state which currently happens
>>>> upon 100ms of inactivity.
>>>>
>>>> Signed-off-by: Denis Karpov <ext-denis.2.karpov@nokia.com>
>>>> Signed-off-by: Adrian Hunter <adrian.hunter@nokia.com>
>>>> ---
>>>>  arch/arm/mach-omap2/board-rx51-peripherals.c |   18 ++++++++++++++++++
>>>>  arch/arm/mach-omap2/hsmmc.c                  |    2 ++
>>>>  arch/arm/mach-omap2/hsmmc.h                  |    2 ++
>>>>  arch/arm/plat-omap/include/plat/mmc.h        |    3 +++
>>>>  drivers/mmc/host/omap_hsmmc.c                |   17 +++++++++++++++++
>>>>  5 files changed, 42 insertions(+), 0 deletions(-)
>>>>
>>>> diff --git a/arch/arm/mach-omap2/board-rx51-peripherals.c
>>>> b/arch/arm/mach-omap2/board-rx51-peripherals.c
>>>> index ab07ca2..b6318b1 100644
>>>> --- a/arch/arm/mach-omap2/board-rx51-peripherals.c
>>>> +++ b/arch/arm/mach-omap2/board-rx51-peripherals.c
>>>> @@ -209,6 +209,22 @@ static struct twl4030_madc_platform_data
>>>> rx51_madc_data = {
>>>>  	.irq_line		= 1,
>>>>  };
>>>>  +#if defined(CONFIG_BRIDGE_DVFS)
>>>> +/*
>>>> + * This handler can be used for setting other DVFS/PM constraints:
>>>> + * intr latency, wakeup latency, DMA start latency, bus throughput
>>>> + * according to API in mach/omap-pm.h.  Currently we only set constraints
>>>> + * for MPU frequency.
>>>> + */
>>>> +#define MMC_MIN_MPU_FREQUENCY	500000000	/* S500M at OPP3 */
>>>> +static void rx51_mmc_set_pm_constraints(struct device *dev, int on)
>>>> +{
>>>> +	omap_pm_set_min_mpu_freq(dev, (on ? MMC_MIN_MPU_FREQUENCY : 0));
>>>> +}
>>> NAK.  The MMC driver (or any other driver, for that matter) must not set MPU
>>> frequency constraints merely to boost performance.  Drivers have no way of
>>> knowing what the power vs. performance policy is for a given device or use
>>> case.
>> The driver doesn't but RX-51 does, which is why the code is in the RX-51
>> board file.  
> 
> I don't think that changes the situation.  The RX-51 board file represents 
> the hardware integration on the device, not MPU power policy.  That's the 
> CPUFreq governor's responsibility.  It shouldn't be necessary to hack a 
> board file to change the CPU power management policy.  Maybe that is 
> acceptable on a device that has been locked down by the manufacturer to 
> only boot kernels signed by them, but that's not the case for RX-51.

I agree it is not the ideal way to do it.  I will drop this patch while
we try to find a better solution.

> Denis didn't go into detail on the performance problem that you and he 
> observed.  Further info would be welcome.  Hypothesizing, if the problem 
> is that MMC does a lot of MPU work before the CPUFreq timer fires to 
> re-evaluate performance, then maybe some CPUFreq function call needs to 
> exist to ask the CPUFreq governor to elevate MPU speed in advance.  But 
> it's hard to say without knowing more about the problem you observed.

We were not able to identify a single source of the reduced performance.
We suspect it is a combination of factors, all of which are addressed
by operating at a faster operating point.

> 
>> We know exactly the use cases and the effect on performance.
> 
> Certainly for Maemo 5 Harmattan as shipped that is true.  It's not 
> necessarily true if someone wants to boot another distribution like Debian 
> and use (for example) a userspace CPUFreq governor on the device.

I think we know the 3 people in the world that might try that and they
can make their own kernel ;-)

Seriously though, I would argue that end users would prefer good MMC
performance.

>>> If the system is not upscaling MPU frequency quickly enough, then the power
>>> management policy code -- CPUFreq, in the MPU case -- or the parameters for
>>> that code -- need to be adjusted.  (Of course, integrators can always dump
>>> hacks like this in their own trees if they get lazy, but these should be
>>> kept far, far away from mainline.)
>> It is unreasonable to override the policy decisions of the board maker
>> as defined in their board files.
> 
> Could you explain why?  MPU power management policy for an on-chip device 
> such as MMC, which is located internally in the OMAP SoC, is board 
> hardware-invariant, and so doesn't belong in the board file.  I agree that 
> this is dependent on the software distribution.  So we either need to 
> understand the problem and come up with a clean way to resolve it, or keep 
> hacks like this distribution-specific.

I assumed that other boards could have completely different use-cases and
completely different operating points.  Since it is a non-ideal way of doing
things, why inflict it on others.

>> Instead you must remove the omap_pm_set_min_mpu_freq() function entirely
>> or suffer the consequence that it can be used. i.e. it should not exist
>> if you don't want anyone to use it.
> 
> This function, omap_pm_set_min_mpu_freq(), does not even exist in 
> mainline, Tony's kernel, or the current PM branch.  Nor does 
> CONFIG_BRIDGE_DVFS.  When you look at the file that defines the interface 
> for these functions, arch/arm/plat-omap/include/plat/omap-pm.h, you'll 
> find this:

Yes, sorry about that.  The patch in its present form makes no sense for
the omap tree.  

> 
>    /*
>     * CPUFreq-originated constraint
>     *
>     * In the future, this should be handled by custom OPP clocktype
>     * functions.
>     */
> 
> [...]
> 
>    /**
>     * omap_pm_cpu_set_freq - set the current minimum MPU frequency
>     * @f: MPU frequency in Hz
>     *
>     * Set the current minimum CPU frequency.  The actual CPU frequency
>     * used could end up higher if the DSP requested a higher OPP.
>     * Intended to be called by plat-omap/cpu_omap.c:omap_target().  No
>     * return value.
>     */
>    void omap_pm_cpu_set_freq(unsigned long f);
> 
> To my reading, this file is quite clear that this function is intended to 
> be called only from CPUFreq.
> 
>>> N.B.  As a separate matter, the MMC driver should call
>>> omap_pm_set_min_bus_tput() with the maximum throughput that the current MMC
>>> card can sustain to memory.  A reasonable upper bound should be easy to
>>> calculate based on the MMC clock speed and the width of the MMC transfers.
>>> This will allow the kernel to adjust the bus frequency appropriately as the
>>> OMAP PM core's bus utilization model improves.
>> Many different constraints were tried.  min_mpu_freq was the only one that
>> worked.
>>
>> In the future, improvements to DMA and changes to PM may be able to get the
>> same performance without the min_mpu_freq constraint.
> 
> omap_pm_set_min_bus_tput() addresses a different case than 
> omap_pm_cpu_set_freq().  It's just intended to ensure that the 
> interconnect clock frequency is high enough to sustain the desired data 
> rate.  It presumably won't affect the performance problem that this patch 
> is intended to address.
> 
> 
> regards,
> 
> - Paul


  reply	other threads:[~2010-01-15  9:04 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-13 11:40 [PATCH 0/8] omap_hsmmc changes Adrian Hunter
2010-01-13 11:40 ` [PATCH 1/8] omap_hsmmc: move gpio and regulator control from board file Adrian Hunter
2010-01-13 18:54   ` Tony Lindgren
2010-01-14  7:58     ` Adrian Hunter
2010-01-13 22:28   ` Madhusudhan
2010-01-14  8:17     ` Adrian Hunter
2010-01-13 11:40 ` [PATCH 2/8] OMAP: rename mmc-twl4030 to hsmmc Adrian Hunter
2010-01-13 11:40 ` [PATCH 3/8] OMAP: reconnect hsmmc context loss count Adrian Hunter
2010-01-14 19:55   ` Paul Walmsley
2010-01-13 11:40 ` [PATCH 4/8] omap_hsmmc: set DVFS/PM constraints Adrian Hunter
2010-01-13 22:53   ` Paul Walmsley
2010-01-14  8:28     ` Adrian Hunter
2010-01-14 19:53       ` Paul Walmsley
2010-01-15  9:04         ` Adrian Hunter [this message]
2010-01-13 11:40 ` [PATCH 5/8] omap_hsmmc: RX51: set padconfs to pull down when powering off eMMC Adrian Hunter
2010-01-13 20:37   ` Tony Lindgren
2010-01-13 20:39     ` Tony Lindgren
2010-01-13 21:00       ` Tony Lindgren
2010-01-13 23:30         ` Nishanth Menon
2010-01-14  7:57           ` Adrian Hunter
2010-01-15 13:11         ` Adrian Hunter
2010-01-13 11:40 ` [PATCH 6/8] omap_hsmmc: allow for power saving without going off Adrian Hunter
2010-01-13 11:41 ` [PATCH 7/8] omap_hsmmc: fix disable timeouts Adrian Hunter
2010-01-13 11:41 ` [PATCH 8/8] omap_hsmmc: allow for a shared VccQ Adrian Hunter

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=4B502F96.3030201@nokia.com \
    --to=adrian.hunter@nokia.com \
    --cc=akpm@linux-foundation.org \
    --cc=ext-denis.2.karpov@nokia.com \
    --cc=khilman@deeprootsystems.com \
    --cc=linux-mmc@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=madhu.cr@ti.com \
    --cc=paul@pwsan.com \
    --cc=tony@atomide.com \
    /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