Browse Source

Merge tag 'samsung-drivers-4.12' of git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux into next/drivers

Samsung SoC drivers update for v4.12 - split building of the PMU driver between
ARMv7 and ARMv8.

* tag 'samsung-drivers-4.12' of git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux:
  soc: samsung: Do not build ARMv7 PMU drivers on ARMv8

Signed-off-by: Olof Johansson <olof@lixom.net>
Olof Johansson 8 years ago
parent
commit
d12523f14e

+ 7 - 1
drivers/soc/samsung/Kconfig

@@ -8,7 +8,13 @@ if SOC_SAMSUNG
 
 
 config EXYNOS_PMU
 config EXYNOS_PMU
 	bool "Exynos PMU controller driver" if COMPILE_TEST
 	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
+
+# 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
 config EXYNOS_PM_DOMAINS
 	bool "Exynos PM domains" if COMPILE_TEST
 	bool "Exynos PM domains" if COMPILE_TEST

+ 3 - 1
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
 					exynos5250-pmu.o exynos5420-pmu.o
 obj-$(CONFIG_EXYNOS_PM_DOMAINS) += pm_domains.o
 obj-$(CONFIG_EXYNOS_PM_DOMAINS) += pm_domains.o

+ 16 - 6
drivers/soc/samsung/exynos-pmu.c

@@ -68,28 +68,38 @@ 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.
  * PMU platform driver and devicetree bindings.
  */
  */
 static const struct of_device_id exynos_pmu_of_device_ids[] = {
 static const struct of_device_id exynos_pmu_of_device_ids[] = {
 	{
 	{
 		.compatible = "samsung,exynos3250-pmu",
 		.compatible = "samsung,exynos3250-pmu",
-		.data = &exynos3250_pmu_data,
+		.data = exynos_pmu_data_arm_ptr(exynos3250_pmu_data),
 	}, {
 	}, {
 		.compatible = "samsung,exynos4210-pmu",
 		.compatible = "samsung,exynos4210-pmu",
-		.data = &exynos4210_pmu_data,
+		.data = exynos_pmu_data_arm_ptr(exynos4210_pmu_data),
 	}, {
 	}, {
 		.compatible = "samsung,exynos4212-pmu",
 		.compatible = "samsung,exynos4212-pmu",
-		.data = &exynos4212_pmu_data,
+		.data = exynos_pmu_data_arm_ptr(exynos4212_pmu_data),
 	}, {
 	}, {
 		.compatible = "samsung,exynos4412-pmu",
 		.compatible = "samsung,exynos4412-pmu",
-		.data = &exynos4412_pmu_data,
+		.data = exynos_pmu_data_arm_ptr(exynos4412_pmu_data),
 	}, {
 	}, {
 		.compatible = "samsung,exynos5250-pmu",
 		.compatible = "samsung,exynos5250-pmu",
-		.data = &exynos5250_pmu_data,
+		.data = exynos_pmu_data_arm_ptr(exynos5250_pmu_data),
 	}, {
 	}, {
 		.compatible = "samsung,exynos5420-pmu",
 		.compatible = "samsung,exynos5420-pmu",
-		.data = &exynos5420_pmu_data,
+		.data = exynos_pmu_data_arm_ptr(exynos5420_pmu_data),
 	}, {
 	}, {
 		.compatible = "samsung,exynos5433-pmu",
 		.compatible = "samsung,exynos5433-pmu",
 	},
 	},

+ 3 - 0
drivers/soc/samsung/exynos-pmu.h

@@ -31,6 +31,8 @@ struct exynos_pmu_data {
 };
 };
 
 
 extern void __iomem *pmu_base_addr;
 extern void __iomem *pmu_base_addr;
+
+#ifdef CONFIG_EXYNOS_PMU_ARM_DRIVERS
 /* list of all exported SoC specific data */
 /* list of all exported SoC specific data */
 extern const struct exynos_pmu_data exynos3250_pmu_data;
 extern const struct exynos_pmu_data exynos3250_pmu_data;
 extern const struct exynos_pmu_data exynos4210_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 exynos4412_pmu_data;
 extern const struct exynos_pmu_data exynos5250_pmu_data;
 extern const struct exynos_pmu_data exynos5250_pmu_data;
 extern const struct exynos_pmu_data exynos5420_pmu_data;
 extern const struct exynos_pmu_data exynos5420_pmu_data;
+#endif
 
 
 extern void pmu_raw_writel(u32 val, u32 offset);
 extern void pmu_raw_writel(u32 val, u32 offset);
 extern u32 pmu_raw_readl(u32 offset);
 extern u32 pmu_raw_readl(u32 offset);