From: Olof Johansson Date: Sat, 31 May 2014 04:44:32 +0000 (-0700) Subject: Merge tag 'samsung-exynos' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene... X-Git-Tag: firefly_0821_release~176^2~3465^2~47^2~3 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=fe388fac0f18010688032393d042807261791eaf;p=firefly-linux-kernel-4.4.55.git Merge tag 'samsung-exynos' of git://git./linux/kernel/git/kgene/linux-samsung into next/soc Samsung Exynos updates for 3.16 - add new SoCs support : exynos3250, 5260, 5410 and 5800 - enable multi-platform on exynos : consolidate exynos related Kconfig entries * tag 'samsung-exynos' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung: (22 commits) ARM: EXYNOS: Enable multi-platform build support ARM: EXYNOS: Consolidate Kconfig entries ARM: EXYNOS: Add support for EXYNOS5410 SoC ARM: EXYNOS: Support secondary CPU boot of Exynos3250 ARM: EXYNOS: Add Exynos3250 SoC ID ARM: EXYNOS: Add 5800 SoC support ARM: EXYNOS: initial board support for exynos5260 SoC cpufreq: exynos: Fix the compile error ARM: S3C24XX: move debug-macro.S into the common space ARM: S3C24XX: use generic DEBUG_UART_PHY/_VIRT in debug macro ARM: S3C24XX: trim down debug uart handling ARM: compressed/head.S: remove s3c24xx special case ARM: EXYNOS: Remove unnecessary inclusion of cpu.h ARM: EXYNOS: Migrate Exynos specific macros from plat to mach ARM: EXYNOS: Remove exynos_subsys registration ARM: EXYNOS: Remove duplicate lines in Makefile ARM: EXYNOS: use v7_exit_coherency_flush macro for cache disabling ARM: dts: Remove g2d_pd node for exynos5420 ARM: dts: Remove mau_pd node for exynos5420 ARM: exynos_defconfig: enable HS-I2C to fix for mmc partition mount ... Signed-off-by: Olof Johansson --- fe388fac0f18010688032393d042807261791eaf diff --cc arch/arm/Kconfig.debug index 149d1f02ea23,4678870f8ee8..8f90595069a1 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug @@@ -967,10 -1007,10 +1004,11 @@@ config DEBUG_LL_INCLUD DEBUG_IMX51_UART || \ DEBUG_IMX53_UART ||\ DEBUG_IMX6Q_UART || \ - DEBUG_IMX6SL_UART - default "debug/msm.S" if DEBUG_MSM_UART + DEBUG_IMX6SL_UART || \ + DEBUG_IMX6SX_UART + default "debug/msm.S" if DEBUG_MSM_UART || DEBUG_QCOM_UARTDM default "debug/omap2plus.S" if DEBUG_OMAP2PLUS_UART + default "debug/s3c24xx.S" if DEBUG_S3C24XX_UART default "debug/sirf.S" if DEBUG_SIRFPRIMA2_UART1 || DEBUG_SIRFMARCO_UART1 default "debug/sti.S" if DEBUG_STI_UART default "debug/tegra.S" if DEBUG_TEGRA_UART @@@ -1058,8 -1102,7 +1102,8 @@@ config DEBUG_UART_PHY default 0xfffff700 if ARCH_IOP33X depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \ DEBUG_LL_UART_EFM32 || \ - DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_S3C24XX_UART + DEBUG_UART_8250 || DEBUG_UART_PL01X || \ - DEBUG_MSM_UART || DEBUG_QCOM_UARTDM ++ DEBUG_MSM_UART || DEBUG_QCOM_UARTDM || DEBUG_S3C24XX_UART config DEBUG_UART_VIRT hex "Virtual base address of debug UART" @@@ -1119,8 -1166,7 +1169,8 @@@ default 0xff003000 if DEBUG_U300_UART default DEBUG_UART_PHYS if !MMU depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \ - DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_S3C24XX_UART + DEBUG_UART_8250 || DEBUG_UART_PL01X || \ - DEBUG_MSM_UART || DEBUG_QCOM_UARTDM ++ DEBUG_MSM_UART || DEBUG_QCOM_UARTDM || DEBUG_S3C24XX_UART config DEBUG_UART_8250_SHIFT int "Register offset shift for the 8250 debug UART" diff --cc arch/arm/mach-exynos/Kconfig index 1602abce6ec0,0031a57aad94..d58995c9a95a --- a/arch/arm/mach-exynos/Kconfig +++ b/arch/arm/mach-exynos/Kconfig @@@ -108,14 -113,11 +113,19 @@@ config SOC_EXYNOS544 help Enable EXYNOS5440 SoC support + config SOC_EXYNOS5800 + bool "SAMSUNG EXYNOS5800" + default y + depends on SOC_EXYNOS5420 + endmenu +config EXYNOS5420_MCPM + bool "Exynos5420 Multi-Cluster PM support" + depends on MCPM && SOC_EXYNOS5420 + select ARM_CCI + help + This is needed to provide CPU and cluster power management + on Exynos5420 implementing big.LITTLE. + endif diff --cc arch/arm/mach-exynos/Makefile index 01bc9b94a032,24a8efe3d4bd..97af694291f1 --- a/arch/arm/mach-exynos/Makefile +++ b/arch/arm/mach-exynos/Makefile @@@ -24,10 -24,5 +24,7 @@@ obj-$(CONFIG_SMP) += platsmp.o headsmp obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o - obj-$(CONFIG_ARCH_EXYNOS) += exynos-smc.o - obj-$(CONFIG_ARCH_EXYNOS) += firmware.o - plus_sec := $(call as-instr,.arch_extension sec,+sec) AFLAGS_exynos-smc.o :=-Wa,-march=armv7-a$(plus_sec) + +obj-$(CONFIG_EXYNOS5420_MCPM) += mcpm-exynos.o diff --cc arch/arm/mach-exynos/common.h index 7876ed04b7a5,099b22f9fd9f..5dba5a1ee6c2 --- a/arch/arm/mach-exynos/common.h +++ b/arch/arm/mach-exynos/common.h @@@ -63,11 -158,8 +159,14 @@@ struct exynos_pmu_conf }; extern void exynos_sys_powerdown_conf(enum sys_powerdown mode); +extern void exynos_cpu_power_down(int cpu); +extern void exynos_cpu_power_up(int cpu); +extern int exynos_cpu_power_state(int cpu); +extern void exynos_cluster_power_down(int cluster); +extern void exynos_cluster_power_up(int cluster); +extern int exynos_cluster_power_state(int cluster); + extern void s5p_init_cpu(void __iomem *cpuid_addr); + extern unsigned int samsung_rev(void); + #endif /* __ARCH_ARM_MACH_EXYNOS_COMMON_H */ diff --cc arch/arm/mach-exynos/firmware.c index 483dfcd69065,1120c28394dd..eb91d2350f8c --- a/arch/arm/mach-exynos/firmware.c +++ b/arch/arm/mach-exynos/firmware.c @@@ -35,12 -50,10 +50,15 @@@ static int exynos_cpu_boot(int cpu static int exynos_set_cpu_boot_addr(int cpu, unsigned long boot_addr) { - void __iomem *boot_reg = S5P_VA_SYSRAM_NS + 0x1c; + void __iomem *boot_reg; + + if (!sysram_ns_base_addr) + return -ENODEV; + - boot_reg = sysram_ns_base_addr + 0x1c + 4*cpu; ++ boot_reg = sysram_ns_base_addr + 0x1c; + + if (!soc_is_exynos4212() && !soc_is_exynos3250()) + boot_reg += 4*cpu; __raw_writel(boot_addr, boot_reg); return 0; diff --cc arch/arm/mach-exynos/platsmp.c index 78002c7344b3,f5ec7e805298..112bc66927a1 --- a/arch/arm/mach-exynos/platsmp.c +++ b/arch/arm/mach-exynos/platsmp.c @@@ -68,11 -43,9 +66,11 @@@ static inline void __iomem *cpu_boot_re void __iomem *boot_reg; boot_reg = cpu_boot_reg_base(); + if (!boot_reg) + return ERR_PTR(-ENODEV); if (soc_is_exynos4412()) boot_reg += 4*cpu; - else if (soc_is_exynos5420()) + else if (soc_is_exynos5420() || soc_is_exynos5800()) boot_reg += 4; return boot_reg; }