mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Alim Akhtar <alim.akhtar@samsung.com>
To: Krzysztof Kozlowski <krzk@kernel.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will.deacon@arm.com>, Kukjin Kim <kgene@kernel.org>,
	Javier Martinez Canillas <javier@osg.samsung.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Kevin Hilman <khilman@baylibre.com>,
	Olof Johansson <olof@lixom.net>,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org
Subject: Re: [2/3] soc: samsung: Do not build ARMv7 PMU drivers on ARMv8
Date: Tue, 14 Mar 2017 14:10:02 +0530	[thread overview]
Message-ID: <0ae4c538-a3af-a1b7-418d-4bccbf09faf4@samsung.com> (raw)
In-Reply-To: <CAJKOXPd=K8rbBxV21ibubjgU8BV3g4AqDrXX0f6-N_VPkR=puQ@mail.gmail.com>



On 03/14/2017 01:32 PM, Krzysztof Kozlowski wrote:
> On Tue, Mar 14, 2017 at 9:51 AM, Alim Akhtar <alim.akhtar@samsung.com> wrote:
>> Hi Krzysztof,
>>
>> On 03/12/2017 03:08 AM, Krzysztof Kozlowski wrote:
>>> The Exynos Power Management Unit (PMU) drivers contain quite large
>>> static arrays of register values necessary for given Exynos SoC to enter
>>> low power mode.  All this data is useless for ARMv8 SoC like
>>> Exynos5433, because the image will not be shared between ARMv7 and
>>> ARMv8.
>>>
>>> Add additional Kconfig symbol for selecting the SoC-specific driver
>>> addons thus skipping the useless data in the final image (this is
>>> similar approach to chosen for Exynos clock controller drivers):
>>>  - exynos-pmu driver will be compiled on both architectures ARMv7
>>>    and ARMv8,
>>>  - additional driver_data for ARMv7 SoCs will not be built on ARMv8
>>>    and a macro will return NULL for them in of_device_id - this should
>>>    be safe as these compatibles cannot match on ARMv7 and driver
>>>    anyway handles NULL driver_data,
>>>  - on ARMv8 compile only exynos-pmu driver which exposes the
>>>    syscon-regmap for PMU address space.
>>>
>>> Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
>>> ---
>>>  drivers/soc/samsung/Kconfig      |  8 +++++++-
>>>  drivers/soc/samsung/Makefile     |  4 +++-
>>>  drivers/soc/samsung/exynos-pmu.c | 22 ++++++++++++++++------
>>>  drivers/soc/samsung/exynos-pmu.h |  3 +++
>>>  4 files changed, 29 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/drivers/soc/samsung/Kconfig b/drivers/soc/samsung/Kconfig
>>> index 245533907d1b..8b25bd55e648 100644
>>> --- a/drivers/soc/samsung/Kconfig
>>> +++ b/drivers/soc/samsung/Kconfig
>>> @@ -8,7 +8,13 @@ if SOC_SAMSUNG
>>>
>>>  config EXYNOS_PMU
>>>       bool "Exynos PMU controller driver" if COMPILE_TEST
>>> -     depends on (ARM && ARCH_EXYNOS) || ((ARM || ARM64) && COMPILE_TEST)
>>> +     depends on ARCH_EXYNOS || ((ARM || ARM64) && COMPILE_TEST)
>>> +     select EXYNOS_PMU_ARM_DRIVERS if ARM && ARCH_EXYNOS
>>> +
>>
>> In general this patch look ok, but I was think we should make these
>> configs configurable via _menuconfig_. Currently these are visible only
>> if COMPILE_TEST is enabled.
>> Recently I was working on adding PMU support for Exynos7 and I face
>> issues when I want to disable this option and re-enable it for testing
>> purpose.
>
> These drivers are not available in menuconfig on purpose - these are
> essential parts of SoC. Without them usually something will not work
> so user should not be able to disable them. For all of such drivers,
> we use the SELECT from mach approach.
>
Well, what you are saying is very subjective. In past I have face issues 
where to isolate or narrow down some issue, we do need to play with PMU 
and power domains. So, having a configurable option won't hurt here.
Anyway if you (or anyone else) strongly feel we should be following 
"SELECT from MACH approach" then lets follow it.


>>> +# There is no need to enable these drivers for ARMv8
>>> +config EXYNOS_PMU_ARM_DRIVERS
>>> +     bool "Exynos PMU ARMv7-specific driver extensions" if COMPILE_TEST
>>> +     depends on EXYNOS_PMU
>>>
>>>  config EXYNOS_PM_DOMAINS
>>>       bool "Exynos PM domains" if COMPILE_TEST
>>> diff --git a/drivers/soc/samsung/Makefile b/drivers/soc/samsung/Makefile
>>> index 3619f2ecddaa..4d7694a4e7a4 100644
>>> --- a/drivers/soc/samsung/Makefile
>>> +++ b/drivers/soc/samsung/Makefile
>>> @@ -1,3 +1,5 @@
>>> -obj-$(CONFIG_EXYNOS_PMU)     += exynos-pmu.o exynos3250-pmu.o exynos4-pmu.o \
>>> +obj-$(CONFIG_EXYNOS_PMU)     += exynos-pmu.o
>>> +
>>> +obj-$(CONFIG_EXYNOS_PMU_ARM_DRIVERS) += exynos3250-pmu.o exynos4-pmu.o \
>>>                                       exynos5250-pmu.o exynos5420-pmu.o
>>>  obj-$(CONFIG_EXYNOS_PM_DOMAINS) += pm_domains.o
>>> diff --git a/drivers/soc/samsung/exynos-pmu.c b/drivers/soc/samsung/exynos-pmu.c
>>> index 56d9244ff981..bd4a76f27bc2 100644
>>> --- a/drivers/soc/samsung/exynos-pmu.c
>>> +++ b/drivers/soc/samsung/exynos-pmu.c
>>> @@ -69,27 +69,37 @@ void exynos_sys_powerdown_conf(enum sys_powerdown mode)
>>>  }
>>>
>>>  /*
>>> + * Split the data between ARM architectures because it is relatively big
>>> + * and useless on other arch.
>>> + */
>>> +#ifdef CONFIG_EXYNOS_PMU_ARM_DRIVERS
>>> +#define exynos_pmu_data_arm_ptr(data)        (&data)
>>> +#else
>>> +#define exynos_pmu_data_arm_ptr(data)        NULL
>>> +#endif
>>> +
>>> +/*
>>>   * PMU platform driver and devicetree bindings.
>>>   */
>>>  static const struct of_device_id exynos_pmu_of_device_ids[] = {
>>>       {
>>>               .compatible = "samsung,exynos3250-pmu",
>>> -             .data = &exynos3250_pmu_data,
>>> +             .data = exynos_pmu_data_arm_ptr(exynos3250_pmu_data),
>>>       }, {
>>>               .compatible = "samsung,exynos4210-pmu",
>>> -             .data = &exynos4210_pmu_data,
>>> +             .data = exynos_pmu_data_arm_ptr(exynos4210_pmu_data),
>>>       }, {
>>>               .compatible = "samsung,exynos4212-pmu",
>>> -             .data = &exynos4212_pmu_data,
>>> +             .data = exynos_pmu_data_arm_ptr(exynos4212_pmu_data),
>>>       }, {
>>>               .compatible = "samsung,exynos4412-pmu",
>>> -             .data = &exynos4412_pmu_data,
>>> +             .data = exynos_pmu_data_arm_ptr(exynos4412_pmu_data),
>>>       }, {
>>>               .compatible = "samsung,exynos5250-pmu",
>>> -             .data = &exynos5250_pmu_data,
>>> +             .data = exynos_pmu_data_arm_ptr(exynos5250_pmu_data),
>>>       }, {
>>>               .compatible = "samsung,exynos5420-pmu",
>>> -             .data = &exynos5420_pmu_data,
>>> +             .data = exynos_pmu_data_arm_ptr(exynos5420_pmu_data),
>>>       }, {
>>>               .compatible = "samsung,exynos5433-pmu",
>> So, as I understand, the idea here to use something like
>>         .data = &exynos5433_pmu_data or so in case ARMv8?
>
> In the future, yes. Now there is no low power mode support for
> Exynos5433 so the data is left empty.
>
Ok, this is fine.

> Best regards,
> Krzysztof
>
>
>

  reply	other threads:[~2017-03-14  8:43 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-11 21:38 [PATCH 0/3] arm64: exynos: Enable drivers for Exynos5433 Krzysztof Kozlowski
2017-03-11 21:38 ` [PATCH 1/3] arm64: defconfig: Enable DRM and LPASS drivers for Exynos5433 and Exynos7 Krzysztof Kozlowski
     [not found]   ` <CGME20170314141613epcas5p30fa91bf723a5e3a8f11ce9a8cfdb7dd7@epcas5p3.samsung.com>
2017-03-14 14:16     ` Bartlomiej Zolnierkiewicz
2017-03-14 14:18       ` Krzysztof Kozlowski
2017-03-11 21:38 ` [PATCH 2/3] soc: samsung: Do not build ARMv7 PMU drivers on ARMv8 Krzysztof Kozlowski
     [not found]   ` <CGME20170314075427epcas5p19d137fbcc390e937172a17ae99f11a0c@epcas5p1.samsung.com>
2017-03-14  7:51     ` [2/3] " Alim Akhtar
2017-03-14  8:02       ` Krzysztof Kozlowski
2017-03-14  8:40         ` Alim Akhtar [this message]
2017-03-14  9:14           ` Krzysztof Kozlowski
2017-03-14 14:30             ` Alim Akhtar
     [not found]   ` <CGME20170314140626epcas5p20694a5324299c556fbaf7df1e9bf5955@epcas5p2.samsung.com>
2017-03-14 14:06     ` [PATCH 2/3] " Bartlomiej Zolnierkiewicz
2017-03-11 21:38 ` [PATCH 3/3] arm64: exynos: Enable Exynos PMU and PM domains drivers Krzysztof Kozlowski
     [not found]   ` <CGME20170314141711epcas1p40ae1d73674e2c0eaa95da6d021456452@epcas1p4.samsung.com>
2017-03-14 14:17     ` Bartlomiej Zolnierkiewicz
     [not found]   ` <CGME20170314143652epcas5p43c7c8556228f996d19d716506eb9a0ed@epcas5p4.samsung.com>
2017-03-14 14:33     ` [3/3] " Alim Akhtar

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=0ae4c538-a3af-a1b7-418d-4bccbf09faf4@samsung.com \
    --to=alim.akhtar@samsung.com \
    --cc=arnd@arndb.de \
    --cc=catalin.marinas@arm.com \
    --cc=javier@osg.samsung.com \
    --cc=kgene@kernel.org \
    --cc=khilman@baylibre.com \
    --cc=krzk@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=olof@lixom.net \
    --cc=will.deacon@arm.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

all inboxes | Powered by JetHome®