From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750982AbdCNHyc (ORCPT ); Tue, 14 Mar 2017 03:54:32 -0400 Received: from mailout3.samsung.com ([203.254.224.33]:59214 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750780AbdCNHya (ORCPT ); Tue, 14 Mar 2017 03:54:30 -0400 X-AuditID: b6c32a2e-f79d66d0000012ad-0a-58c7a1b384c8 Subject: Re: [2/3] soc: samsung: Do not build ARMv7 PMU drivers on ARMv8 To: Krzysztof Kozlowski , Catalin Marinas , Will Deacon , Kukjin Kim , Javier Martinez Canillas , Arnd Bergmann , Kevin Hilman , Olof Johansson , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org From: Alim Akhtar Message-id: <2da8c346-dae9-6754-8349-df0946c89ae2@samsung.com> Date: Tue, 14 Mar 2017 13:21:10 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-version: 1.0 In-reply-to: <20170311213856.21701-3-krzk@kernel.org> Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrLKsWRmVeSWpSXmKPExsWy7bCmlu7mhccjDBb+kbX4O+kYu8X7ZT2M Fm/ermGy6H/8mtniZ/sWJovz5zewW2x6fI3V4vKuOWwWM87vY7I4df0zm8XLjydYHLg91sxb w+jx+9ckRo/3N1rZPTat6mTz2Lyk3uPKiSZWjy39d9k9Pm+SC+CI4rJJSc3JLEst0rdL4Mro /rmFqWCFTsWx1fUNjPtVuhg5OCQETCQmvy7uYuQEMsUkLtxbz9bFyMUhJLCUUaL//ldmCOcT o8TNDbdY4JwfWxqZIFpMJBrb7zJCJHYyShw8upAJwnnLKPFrQT8jyA5hAQ+Jt40mIA0iAvOZ JTas9Aax2QS0Je5O3wI2iFfATmJb2wVmEJtFQFVi1svDjCC2qECExI4bPWwQNYISJ2c+YQGx OQVMJU72XAOzmQXkJba/nQN2qoTAbzaJvyves0Bc5yJxfUcfO4QtLPHq+BYoW0riZX8bO0RD O6PEvQnvWCGcGYwSnWvfQv1mL3HgyhwWkA+YBTQl1u/ShwjbSjxY9IEZEnh8EjfeCkIcwSfR +/sJVKeqRPO7qywQJbwSHW1CEGEPiWuXnkGFHSUmvRafwKg4C8lns5B8Mwth7QJG5lWMYqkF xbnpqcWmBcZ6xYm5xaV56XrJ+bmbGMGJSktvB+O/Bd6HGAU4GJV4eAPmHY8QYk0sK67MPcQo wcGsJMK7rQkoxJuSWFmVWpQfX1Sak1p8iFGag0VJnDfKYGKEkEB6YklqdmpqQWoRTJaJg1Oq gVHfbGmGYd/SqBvfpfh2ikQy/Z6iJrKneNfvZSmxPO7ta2olW1oir62fE7og1vNRiHmgpsaZ oiR35k0cXl6WJlt8ZQMO9AeU7dzVej8/sO/QDA2FVU0z53+ynBdy4dH5nK/ec3zWCfyvLTP2 +n87vWMv4ySmf6tqvDfdWqMUxlTQvuuRc1vNLiWW4oxEQy3mouJEAI5D/wRQAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupkkeLIzCtJLcpLzFFi42LZdlhJTnfqwuMRBk+OiVv8nXSM3eL9sh5G izdv1zBZ9D9+zWzxs30Lk8X58xvYLTY9vsZqcXnXHDaLGef3MVmcuv6ZzeLlxxMsDtwea+at YfT4/WsSo8f7G63sHptWdbJ5bF5S73HlRBOrx5b+u+wenzfJBXBEcdmkpOZklqUW6dslcGV0 /9zCVLBCp+LY6voGxv0qXYycHBICJhKN7XcZIWwxiQv31rN1MXJxCAlsZ5T4feU9C0RCXWLu 9VdsELawxMp/z9khil4zSqxe/JKpi5GDQ1jAQ+JtowlIXERgIbPEnhaIqUJAG7Y8e88KYrMJ aEvcnb6FCcTmFbCT2NZ2gRnEZhFQlZj18jBYvahAhMT8p6ugagQlTs58AnYEp4CpxMmea2A2 s4CZxLzND5khbHmJ7W/nME9gFJyFpGUWkrJZSMoWMDKvYhRNLSjOTc8tLjDUK07MLS7NS9dL zs/dxAiOIK3EHYzrZoQfYhTgYFTi4X3w4ViEEGtiWXFl7iFGCQ5mJRHebU3HI4R4UxIrq1KL 8uOLSnNSiw8xSnOwKInz3qreECEkkJ5YkpqdmlqQWgSTZeLglGpgVJT4fjm/aB6Xl3d0yYY4 RvnWR7bFV3YxOO//kyg91VNdbo625P2zUZxCOzsWLXVdFWWh5zTRnuPHJ849MTu3OiQ/PpK9 fL/I8oZbnD+t2ede0/jh73f7KdvGbYbsJzV3G5+dWVG//4+khEG79vxLuUwp56bfT49bIrdZ oYf/090+z+othyYvV2Ipzkg01GIuKk4EAOTzQiOcAgAA X-CMS-MailID: 20170314075427epcas5p19d137fbcc390e937172a17ae99f11a0c X-Msg-Generator: CA X-Sender-IP: 182.195.40.13 X-Local-Sender: =?UTF-8?B?7JWM66a8G1NTSVItVHVybiBLZXkgU29sdXRpb25zG+yCvA==?= =?UTF-8?B?7ISx7KCE7J6QGy4vU2VuaW9yIENoaWVmIEVuZ2luZWVy?= X-Global-Sender: =?UTF-8?B?QUxJTSBBS0hUQVIbU1NJUi1UdXJuIEtleSBTb2x1dGlvbnMb?= =?UTF-8?B?U2Ftc3VuZyBFbGVjdHJvbmljcxsuL1NlbmlvciBDaGllZiBFbmdpbmVlcg==?= X-Sender-Code: =?UTF-8?B?QzEwG1NXQUhRG0MxMElEMDdJRDAxMDk5Nw==?= Content-type: text/plain; charset=utf-8 X-MTR: 20170314075427epcas5p19d137fbcc390e937172a17ae99f11a0c X-EPHeader: CA CMS-TYPE: 105P X-Auth-Email: alim.akhtar@samsung.com X-HopCount: 7 X-CMS-RootMailID: 20170314075427epcas5p19d137fbcc390e937172a17ae99f11a0c X-RootMTR: 20170314075427epcas5p19d137fbcc390e937172a17ae99f11a0c References: <20170311213856.21701-3-krzk@kernel.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 > --- > 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. > +# 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? > }, > diff --git a/drivers/soc/samsung/exynos-pmu.h b/drivers/soc/samsung/exynos-pmu.h > index a469e366fead..40d4229abfb5 100644 > --- a/drivers/soc/samsung/exynos-pmu.h > +++ b/drivers/soc/samsung/exynos-pmu.h > @@ -31,6 +31,8 @@ struct exynos_pmu_data { > }; > > extern void __iomem *pmu_base_addr; > + > +#ifdef CONFIG_EXYNOS_PMU_ARM_DRIVERS > /* list of all exported SoC specific data */ > extern const struct exynos_pmu_data exynos3250_pmu_data; > extern const struct exynos_pmu_data exynos4210_pmu_data; > @@ -38,6 +40,7 @@ extern const struct exynos_pmu_data exynos4212_pmu_data; > extern const struct exynos_pmu_data exynos4412_pmu_data; > extern const struct exynos_pmu_data exynos5250_pmu_data; > extern const struct exynos_pmu_data exynos5420_pmu_data; > +#endif > > extern void pmu_raw_writel(u32 val, u32 offset); > extern u32 pmu_raw_readl(u32 offset); >