SUPERH platform development
 help / color / mirror / Atom feed
From: Simon Horman <horms@verge.net.au>
To: linux-sh@vger.kernel.org
Subject: Re: [PATCH] drivers: sh: compile drivers/sh/pm_runtime.c if ARCH_SHMOBILE_MULTI
Date: Thu, 01 May 2014 04:27:54 +0000	[thread overview]
Message-ID: <20140501042754.GA31620@verge.net.au> (raw)
In-Reply-To: <1398906582-29888-1-git-send-email-geert+renesas@glider.be>

On Thu, May 01, 2014 at 03:09:42AM +0200, Geert Uytterhoeven wrote:
> If the kernel is built to support multi-ARM configuration with shmobile
> support built in, then drivers/sh is not built. This contains the PM
> runtime code in drivers/sh/pm_runtime.c, which implicitly enables the
> module clocks for all devices, and thus is quite essential.
> Without this, the state of clocks depends on implicit reset state, or on
> the bootloader.
> 
> If ARCH_SHMOBILE_MULTI then build the drivers/sh directory, but ensure that
> bits that may conflict (drivers/sh/clk if the common clock framework is
> enabled) or are not used (drivers/sh/intc), are not built.
> Also, only enable the PM runtime code when actually running on a shmobile
> SoCs that needs it.
> 
> ARCH_SHMOBILE_MULTI was added a while ago by commit
> efacfce5f8a523457e9419a25d52fe39db00b26a ("ARM: shmobile: Introduce
> ARCH_SHMOBILE_MULTI"), but drivers/sh was compiled for both
> ARCH_SHMOBILE_LEGACY and ARCH_SHMOBILE_MULTI until commit
> bf98c1eac1d4a6bcf00532e4fa41d8126cd6c187 ("ARM: Rename ARCH_SHMOBILE to
> ARCH_SHMOBILE_LEGACY").
> 
> Inspired by a patch from Ben Dooks <ben.dooks@codethink.co.uk>.
> 
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
> This is a minimal solution to fix the issue for multi-platform shmobile
> kernels in a multi-platform-friendly way.
> As it touches drivers/sh-specific code only, Simom should still be able to
> get it in v3.15, and backported to v3.14-stable.
> 
> This is an RFC for several reasons:
>   1. I'm at ELC, and away from my hardware to test it properly (also on
>      non-shmobile).
>   2. Can we already reduce the list of SoCs to check for?
>      E.g. is this needed for emev2, which doesn't have MSTP clocks?

I will answer a related question: "Simon, can you test this?".

If its just a matter of testing that the board still boots to user-space
I can do so without too much effort for most shmobile boards including
the emev2 based kzm9g. The exceptions are:

* The r7s72100 based genmai
  - I think you have access to that
* The r8a7791 based henniger board.
  - I do have access to a koelsh board which is bsed on the same SoC

If the testing is a bit more involved then I don't have an automation
set up for it at this stage. That makes testing a bit more difficult
for me. Especially as I am going on holidays tomorrow.

Of course there is the caveat that a number of SoCs and their boards do
not support multiplatform yet.

> v3:
>   - Add of_machine_is_compatible() checks for multi-platform
>   - Remove Reviewed-by, Tested-by, as too much has changed,
>   - Assumed authorship, as not much is left from the original patch from
>     Ben (Ben: is that OK?),
> v2:
>   - Add Reviewed-by, Tested-by
> ---
>  drivers/Makefile        |    2 +-
>  drivers/sh/Makefile     |   14 ++++++++------
>  drivers/sh/pm_runtime.c |   23 +++++++++++++++++++++--
>  3 files changed, 30 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/Makefile b/drivers/Makefile
> index d05d81b19b50..7183b6af5dac 100644
> --- a/drivers/Makefile
> +++ b/drivers/Makefile
> @@ -119,7 +119,7 @@ obj-$(CONFIG_SGI_SN)		+= sn/
>  obj-y				+= firmware/
>  obj-$(CONFIG_CRYPTO)		+= crypto/
>  obj-$(CONFIG_SUPERH)		+= sh/
> -obj-$(CONFIG_ARCH_SHMOBILE_LEGACY)	+= sh/
> +obj-$(CONFIG_ARCH_SHMOBILE)	+= sh/
>  ifndef CONFIG_ARCH_USES_GETTIMEOFFSET
>  obj-y				+= clocksource/
>  endif
> diff --git a/drivers/sh/Makefile b/drivers/sh/Makefile
> index fc67f564f02c..788ed9b59b4e 100644
> --- a/drivers/sh/Makefile
> +++ b/drivers/sh/Makefile
> @@ -1,10 +1,12 @@
>  #
>  # Makefile for the SuperH specific drivers.
>  #
> -obj-y	:= intc/
> +obj-$(CONFIG_SUPERH)			+= intc/
> +obj-$(CONFIG_ARCH_SHMOBILE_LEGACY)	+= intc/
> +ifneq ($(CONFIG_COMMON_CLK),y)
> +obj-$(CONFIG_HAVE_CLK)			+= clk/
> +endif
> +obj-$(CONFIG_MAPLE)			+= maple/
> +obj-$(CONFIG_SUPERHYWAY)		+= superhyway/
>  
> -obj-$(CONFIG_HAVE_CLK)		+= clk/
> -obj-$(CONFIG_MAPLE)		+= maple/
> -obj-$(CONFIG_SUPERHYWAY)	+= superhyway/
> -
> -obj-y				+= pm_runtime.o
> +obj-y					+= pm_runtime.o
> diff --git a/drivers/sh/pm_runtime.c b/drivers/sh/pm_runtime.c
> index 8afa5a4589f2..cb4cb9f26896 100644
> --- a/drivers/sh/pm_runtime.c
> +++ b/drivers/sh/pm_runtime.c
> @@ -50,8 +50,25 @@ static struct pm_clk_notifier_block platform_bus_notifier = {
>  	.con_ids = { NULL, },
>  };
>  
> -static int __init sh_pm_runtime_init(void)
> +static bool default_pm_on;
> +
> +int __init sh_pm_runtime_init(void)
>  {
> +#ifdef CONFIG_ARCH_SHMOBILE_MULTI
> +	if (!of_machine_is_compatible("renesas,emev2") &&
> +	    !of_machine_is_compatible("renesas,r7s72100") &&
> +	    !of_machine_is_compatible("renesas,r8a73a4") &&
> +	    !of_machine_is_compatible("renesas,r8a7740") &&
> +	    !of_machine_is_compatible("renesas,r8a7778") &&
> +	    !of_machine_is_compatible("renesas,r8a7779") &&
> +	    !of_machine_is_compatible("renesas,r8a7790") &&
> +	    !of_machine_is_compatible("renesas,r8a7791") &&
> +	    !of_machine_is_compatible("renesas,sh7372") &&
> +	    !of_machine_is_compatible("renesas,sh73a0"))
> +		return 0;
> +#endif
> +
> +	default_pm_on = true;
>  	pm_clk_add_notifier(&platform_bus_type, &platform_bus_notifier);
>  	return 0;
>  }
> @@ -59,7 +76,9 @@ core_initcall(sh_pm_runtime_init);
>  
>  static int __init sh_pm_runtime_late_init(void)
>  {
> -	pm_genpd_poweroff_unused();
> +	if (default_pm_on)
> +		pm_genpd_poweroff_unused();
>  	return 0;
>  }
> +
>  late_initcall(sh_pm_runtime_late_init);
> -- 
> 1.7.9.5
> 

  reply	other threads:[~2014-05-01  4:27 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-01  1:09 [PATCH] drivers: sh: compile drivers/sh/pm_runtime.c if ARCH_SHMOBILE_MULTI Geert Uytterhoeven
2014-05-01  4:27 ` Simon Horman [this message]
2014-05-01  4:42 ` Geert Uytterhoeven
2014-05-01  4:58 ` Simon Horman
2014-05-03 19:29 ` Magnus Damm
2014-05-06 10:45 ` Ben Dooks
2014-05-06 21:15 ` Geert Uytterhoeven
2014-05-06 21:17 ` Geert Uytterhoeven
  -- strict thread matches above, loose matches on Subject: below --
2014-05-13  7:42 [GIT PULL] SH Driver Updates for v3.15 Simon Horman
2014-05-13  7:42 ` [PATCH] drivers: sh: compile drivers/sh/pm_runtime.c if ARCH_SHMOBILE_MULTI Simon Horman

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=20140501042754.GA31620@verge.net.au \
    --to=horms@verge.net.au \
    --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