From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: linux-sh@vger.kernel.org
Subject: Re: [PATCH RFC] ARM: shmobile: r8a7791 legacy: Disable RMSTP clocks
Date: Fri, 07 Mar 2014 15:50:21 +0000 [thread overview]
Message-ID: <2200979.O4781BZfF8@avalon> (raw)
In-Reply-To: <1394135648-10193-1-git-send-email-geert@linux-m68k.org>
Hi Ben,
On Friday 07 March 2014 15:44:20 Ben Dooks wrote:
> On 07/03/14 15:23, Laurent Pinchart wrote:
> > On Thursday 06 March 2014 20:54:08 Geert Uytterhoeven wrote:
> >> From: Geert Uytterhoeven <geert+renesas@linux-m68k.org>
> >>
> >> Each module clock has actually two disable bits: one for the System Core
> >> (ARM) in an SMSTPCRx register, and one for the Realtime Core (SH) in an
> >> RMSTPRx register. Currently we don't touch the bits meant for the
> >> Realtime Core, so some clocks may inadvertently be enabled and still run,
> >> wasting power, while they're disabled in the SMSTPCRx register.
> >> The actual state of the clock is indicated in the corresponding status
> >> register.
> >>
> >> Set the disable bits for the Realtime Core for all module clocks we
> >> currently care about to fix this. After this, e.g. QSPI fails to work if
> >> we deliberately keep its clock gated.
> >>
> >> Thanks to Laurent for the Realtime Core hint.
> >>
> >> Signed-off-by: Geert Uytterhoeven <geert+renesas@linux-m68k.org>
> >> ---
> >> This is a quick hack, NOT to be applied!
> >>
> >> Notes/Questions/...:
> >> - The good news is that the system booted fine, hence so far I didn't
> >> notice any clocks that were not enabled correctly in our driver
> >> code, for both legacy and DT case (I used a slightly different
> >> version of this hack to test the DT case).
> >>
> >> - After bootup, the following clocks seem to be enabled for the
> >> Realtime Core:
> >> SCIFA0-2, SCIFB0-2, QSPI, MSIOF0-2, I2C0-5
> >>
> >> - The following clocks were disabled for the Realtime Core:
> >> LVDS0, DU0-1, SCIF0-5, SCIFA3-5, SDHI0-2, CMT0, Thermal, Ether,
> >> VIN0-1, SATA0-1
> >>
> >> - These are only the clocks we're currently using. There exist other
> >> clocks, I did not check their states.
> >>
> >> - Just setting all RMSTPCRx registers to 0xffffffff is not an option,
> >> as reserved bits should be written back using their read values.
> >>
> >> - Should we add a new enable_reg to struct clk for the legacy case? Or
> >> just disable them at initialization time, without enlarging struct
> >> clk?
> >>
> >> - Add more registers to the bindings for the DT case?
> >> - How to tell the system that it should (not) disable the RMSTP
> >> clocks? Someone may want to run something on the SH core, and we
> >> don't want to interfere with that.
> >
> > Those are tricky questions. RMSTPCRs are supposed to be managed by the
> > SH-4A core. If the SH-4A core isn't booted the only option we have is to
> > manage them elsewhere. In that case the registers should be configured at
> > boot time to disable all modules from the SH-4A side. This could be done
> > either when booting the kernel, or in the boot loader.
> >
> > If the SH-4A core is booted by Linux we could require the SH-4A code to
> > disable all unused clocks, but we could also do so before booting it
> > without any drawback (I expect the SH-4A firmware to enable the clocks it
> > needs).
> >
> > The SH-4A core could be booted first, and then only boot the ARM cores
> > running Linux. I don't know if that configuration is commonly used, or
> > even supported, but in theory that should be possible. In that case the
> > Linux kernel must not touch the RMSTPCRs.
> >
> > We could disable all realtime clocks from the Linux kernel at boot time
> > (with a way to bypass that depending on whether booting the SH-4A first
> > is a use case we need to support), or decide to leave this to the boot
> > loader.
>
> I agree with Laurent, we don't really have a good way yet to know
> if the SH-4A is going to be used.
Are you aware of any use case where SH-4A would be the main core and would
then boot Linux on the ARM cores ?
> My preference would be to either fix it in the bootloader (possibly
> add a script in before loading the kernel).
Either that, or what ? :-)
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2014-03-07 15:50 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-06 19:54 [PATCH RFC] ARM: shmobile: r8a7791 legacy: Disable RMSTP clocks Geert Uytterhoeven
2014-03-07 15:23 ` Laurent Pinchart
2014-03-07 15:44 ` Ben Dooks
2014-03-07 15:50 ` Laurent Pinchart [this message]
2014-03-07 16:05 ` Ben Dooks
2014-03-07 16:17 ` Geert Uytterhoeven
2014-03-07 16:27 ` Ben Dooks
2014-03-07 16:34 ` Laurent Pinchart
2014-03-10 9:00 ` Geert Uytterhoeven
2014-03-10 11:45 ` Laurent Pinchart
2014-03-10 11:51 ` Ben Dooks
2014-03-10 12:07 ` Geert Uytterhoeven
2014-03-12 9:36 ` Magnus Damm
2014-03-12 10:19 ` Laurent Pinchart
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=2200979.O4781BZfF8@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=linux-sh@vger.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).