Skip to contentSkip to conversation

Support new Exynos3250 SoC based on Cortex-A7 dual core

PATCH Superseded Chanwoo Choi 7 participants 30 messages Apr 15, 2014 – Apr 17, 2014

Subsystems (6)

v2 of 5 Superseded Latest is v5 →

lore
Share & tools
lore

Chanwoo Choi

author maintainer
#0 lore raw

v2 cover Support new Exynos3250 SoC based on Cortex-A7 dual core

This patchset support new Exynos3250 Samsung SoC based on Cortex-A7 dual core. Exynos3250 is a System-On-Chip (SoC) that is based on 32-bit RISC processor for Smartphone. It is desigend with the 28nm low-power high-K metal gate process and provides the best performance features.

This patchset include some patches such as:
- Support secondary CPU of Exynos3250 (cpu up/down)
- Supoort uart/mct/adc/gic/i2c/spi/power-domain/pmu/mshc/pwm/amba
- Support the clock control for Exynos3250 using common clk framework

This patchset is completely tested and is based on following git repo/branch.
- git repo : git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung.git
- branch : for-next (Linux 3.15-rc1)

Additional patch description about static memory mapping:
Arnd Bergmann suggested that need proper driver instead of static memory mapping. As Chanho Park reply[2], Sachin Kamat already posted the DT support patch[1] for memory mapping for SYSRAM.
[1] http://www.spinics.net/lists/linux-samsung-soc/msg27647.html
[2] https://lkml.org/lkml/2014/4/10/161

So, I'm going to re-implement following patches related to static memory mapping after merged Sachin Kamat patch[1].
ARM: EXYNOS: Add IO mapping for non-secure SYSRAM of Exynos3250
ARM: EXYNOS: Add IO mapping for PMU of Exynos3250

Changes from v1:
- Add new "samsung,exynos3" compatible name
- Add comment about exynos_cpu_boot in Exynos4212
- Remove unnecessary 'goto' statement in firmware.c
- Use read_cpuid_part_number() function instead of assembler directly
- Post separated pinctrl patch from this patchset
: https://lkml.org/lkml/2014/4/13/156
- Remove unused pmu interrupts due to Exynos3250 dual-core
- Cosolidate all the patches related to exynos3250.dtsi into one patch
- Fix gic compatible name to "cortex-a15-gic" because Cortex-A7 GIC is same
- Add sign-off of sender to all this patches
- Fix minor typo

Chanwoo Choi (5):
ARM: EXYNOS: Add Exynos3250 SoC ID
ARM: EXYNOS: Add IO mapping for non-secure SYSRAM of Exynos3250
ARM: EXYNOS: Add IO mapping for PMU of Exynos3250
ARM: EXYNOS: Support secondary CPU boot of Exynos3250
ARM: EXYNOS: Enter a15 lowpower mode for Exynos3250 based on Cortex-a7

Kyungmin Park (1):
ARM: EXYNOS: Support secondary CPU boot of Exynos4212

Tomasz Figa (2):
clk: samsung: exynos3250: Add clocks using common clock framework
ARM: dts: Add device tree sources for Exynos3250

 arch/arm/boot/dts/exynos3250-pinctrl.dtsi | 477 ++++++++++++++++++
 arch/arm/boot/dts/exynos3250.dtsi         | 410 ++++++++++++++++
 arch/arm/mach-exynos/Kconfig              |  22 +
 arch/arm/mach-exynos/exynos.c             |  19 +
 arch/arm/mach-exynos/firmware.c           |  18 +-
 arch/arm/mach-exynos/hotplug.c            |  16 +-
 arch/arm/mach-exynos/include/mach/map.h   |   2 +
 arch/arm/plat-samsung/include/plat/cpu.h  |  10 +
 drivers/clk/samsung/Makefile              |   1 +
 drivers/clk/samsung/clk-exynos3250.c      | 785 ++++++++++++++++++++++++++++++
 include/dt-bindings/clock/exynos3250.h    | 256 ++++++++++
 11 files changed, 2010 insertions(+), 6 deletions(-)
 create mode 100644 arch/arm/boot/dts/exynos3250-pinctrl.dtsi
 create mode 100644 arch/arm/boot/dts/exynos3250.dtsi
 create mode 100644 drivers/clk/samsung/clk-exynos3250.c
 create mode 100644 include/dt-bindings/clock/exynos3250.h
Signature · 1 line
1.8.0
author maintainer
#1 lore raw

PATCH v2 1/8 ARM: EXYNOS: Add Exynos3250 SoC ID

This patch add Exynos3250's SoC ID. Exynos 3250 is System-On-Chip(SoC) that is based on the 32-bit RISC processor for Smartphone. Exynos3250 uses Cortex-A7 dual cores and has a target speed of 1.0GHz.

---
 arch/arm/mach-exynos/Kconfig             | 22 ++++++++++++++++++++++
 arch/arm/mach-exynos/exynos.c            |  2 ++
 arch/arm/plat-samsung/include/plat/cpu.h | 10 ++++++++++
 3 files changed, 34 insertions(+)
arch/arm/mach-exynos/Kconfig +22 -0
index fc8bf18..6da8a68 100644
@@ -11,6 +11,17 @@ if ARCH_EXYNOS
 
 menu "SAMSUNG EXYNOS SoCs Support"
 
+config ARCH_EXYNOS3
+	bool "SAMSUNG EXYNOS3"
+	select ARM_AMBA
+	select CLKSRC_OF
+	select HAVE_ARM_SCU if SMP
+	select HAVE_SMP
+	select PINCTRL
+	select PM_GENERIC_DOMAINS if PM_RUNTIME
+	help
+	  Samsung EXYNOS3 SoCs based systems
+
 config ARCH_EXYNOS4
 	bool "SAMSUNG EXYNOS4"
 	default y
@@ -41,6 +52,17 @@ config ARCH_EXYNOS5
 
 comment "EXYNOS SoCs"
 
+config SOC_EXYNOS3250
+	bool "SAMSUNG EXYNOS3250"
+	default y
+	depends on ARCH_EXYNOS3
+	select ARCH_HAS_BANDGAP
+	select ARM_CPU_SUSPEND if PM
+	select PINCTRL_EXYNOS
+	select SAMSUNG_DMADEV
+	help
+	  Enable EXYNOS3250 CPU support
+
 config CPU_EXYNOS4210
 	bool "SAMSUNG EXYNOS4210"
 	default y
arch/arm/mach-exynos/exynos.c +2 -0
index b32a907..a603dfa 100644
@@ -370,6 +370,8 @@ static void __init exynos_dt_machine_init(void)
 }
 
 static char const *exynos_dt_compat[] __initconst = {
+	"samsung,exynos3",
+	"samsung,exynos3250",
 	"samsung,exynos4",
 	"samsung,exynos4210",
 	"samsung,exynos4212",
arch/arm/plat-samsung/include/plat/cpu.h +10 -0
index 5992b8d..3d808f6b 100644
@@ -43,6 +43,9 @@ extern unsigned long samsung_cpu_id;
 #define S5PV210_CPU_ID		0x43110000
 #define S5PV210_CPU_MASK	0xFFFFF000
 
+#define EXYNOS3250_SOC_ID       0xE3472000
+#define EXYNOS3_SOC_MASK        0xFFFFF000
+
 #define EXYNOS4210_CPU_ID	0x43210000
 #define EXYNOS4212_CPU_ID	0x43220000
 #define EXYNOS4412_CPU_ID	0xE4412200
@@ -68,6 +71,7 @@ IS_SAMSUNG_CPU(s5p6440, S5P6440_CPU_ID, S5P64XX_CPU_MASK)
 IS_SAMSUNG_CPU(s5p6450, S5P6450_CPU_ID, S5P64XX_CPU_MASK)
 IS_SAMSUNG_CPU(s5pc100, S5PC100_CPU_ID, S5PC100_CPU_MASK)
 IS_SAMSUNG_CPU(s5pv210, S5PV210_CPU_ID, S5PV210_CPU_MASK)
+IS_SAMSUNG_CPU(exynos3250, EXYNOS3250_SOC_ID, EXYNOS3_SOC_MASK)
 IS_SAMSUNG_CPU(exynos4210, EXYNOS4210_CPU_ID, EXYNOS4_CPU_MASK)
 IS_SAMSUNG_CPU(exynos4212, EXYNOS4212_CPU_ID, EXYNOS4_CPU_MASK)
 IS_SAMSUNG_CPU(exynos4412, EXYNOS4412_CPU_ID, EXYNOS4_CPU_MASK)
@@ -126,6 +130,12 @@ IS_SAMSUNG_CPU(exynos5440, EXYNOS5440_SOC_ID, EXYNOS5_SOC_MASK)
 # define soc_is_s5pv210()	0
 #endif
 
+#if defined(CONFIG_SOC_EXYNOS3250)
+# define soc_is_exynos3250()    is_samsung_exynos3250()
+#else
+# define soc_is_exynos3250()    0
+#endif
+
 #if defined(CONFIG_CPU_EXYNOS4210)
 # define soc_is_exynos4210()	is_samsung_exynos4210()
 #else
Signature · 1 line
1.8.0
author maintainer
#2 lore raw

PATCH v2 2/8 ARM: EXYNOS: Add IO mapping for non-secure SYSRAM of Exynos3250

In reply to Chanwoo Choi

The non-secure SYSRAM is used for secondary CPU bring-up. This patch add IO mapping for non-scure SYSRAM.

---
Arnd Bergmann suggested that need proper driver instead of static memory mapping. As Chanho Park reply[2], Sachin Kamat already posted the DT support patch[1] for memory mapping for SYSRAM.
[1] http://www.spinics.net/lists/linux-samsung-soc/msg27647.html
[2] https://lkml.org/lkml/2014/4/10/161

So, I'm going to re-implement following patch related to static memory mapping after merged Sachin Kamat patch[1].
ARM: EXYNOS: Add IO mapping for non-secure SYSRAM of Exynos3250

 arch/arm/mach-exynos/exynos.c           | 12 ++++++++++++
 arch/arm/mach-exynos/include/mach/map.h |  1 +
 2 files changed, 13 insertions(+)
arch/arm/mach-exynos/exynos.c +12 -0
index a603dfa..c7c9472 100644
@@ -35,6 +35,15 @@
 #define L2_AUX_VAL 0x7C470001
 #define L2_AUX_MASK 0xC200ffff
 
+static struct map_desc exynos3250_iodesc[] __initdata = {
+	{
+		.virtual	= (unsigned long)S5P_VA_SYSRAM_NS,
+		.pfn		= __phys_to_pfn(EXYNOS3_PA_SYSRAM_NS),
+		.length		= SZ_4K,
+		.type		= MT_DEVICE,
+	},
+};
+
 static struct map_desc exynos4_iodesc[] __initdata = {
 	{
 		.virtual	= (unsigned long)S3C_VA_SYS,
@@ -275,6 +284,9 @@ static int __init exynos_fdt_map_chipid(unsigned long node, const char *uname,
  */
 static void __init exynos_map_io(void)
 {
+	if (soc_is_exynos3250())
+		iotable_init(exynos3250_iodesc, ARRAY_SIZE(exynos3250_iodesc));
+
 	if (soc_is_exynos4())
 		iotable_init(exynos4_iodesc, ARRAY_SIZE(exynos4_iodesc));
 
arch/arm/mach-exynos/include/mach/map.h +1 -0
index 7b046b5..a53981b 100644
@@ -26,6 +26,7 @@
 #define EXYNOS4_PA_SYSRAM0		0x02025000
 #define EXYNOS4_PA_SYSRAM1		0x02020000
 #define EXYNOS5_PA_SYSRAM		0x02020000
+#define EXYNOS3_PA_SYSRAM_NS		0x0205F000
 #define EXYNOS4210_PA_SYSRAM_NS		0x0203F000
 #define EXYNOS4x12_PA_SYSRAM_NS		0x0204F000
 #define EXYNOS5250_PA_SYSRAM_NS		0x0204F000
Signature · 1 line
1.8.0
author maintainer
#3 lore raw

PATCH v2 3/8 ARM: EXYNOS: Add IO mapping for PMU of Exynos3250

In reply to Chanwoo Choi

This patch add memory mapping for PMU (Power Management Unit) which is used for power control of Exynos3250.

---
Arnd Bergmann suggested that need proper driver instead of static memory mapping. As Chanho Park reply[2], Sachin Kamat already posted the DT support patch[1] for memory mapping for SYSRAM.
[1] http://www.spinics.net/lists/linux-samsung-soc/msg27647.html
[2] https://lkml.org/lkml/2014/4/10/161

So, I'm going to re-implement following patch related to static memory mapping after merged Sachin Kamat patch[1].
ARM: EXYNOS: Add IO mapping for PMU of Exynos3250

 arch/arm/mach-exynos/exynos.c           | 5 +++++
 arch/arm/mach-exynos/include/mach/map.h | 1 +
 2 files changed, 6 insertions(+)
arch/arm/mach-exynos/exynos.c +5 -0
index c7c9472..8f6f73d 100644
@@ -41,6 +41,11 @@ static struct map_desc exynos3250_iodesc[] __initdata = {
 		.pfn		= __phys_to_pfn(EXYNOS3_PA_SYSRAM_NS),
 		.length		= SZ_4K,
 		.type		= MT_DEVICE,
+	}, {
+		.virtual	= (unsigned long)S5P_VA_PMU,
+		.pfn		= __phys_to_pfn(EXYNOS3_PA_PMU),
+		.length		= SZ_64K,
+		.type		= MT_DEVICE,
 	},
 };
 
arch/arm/mach-exynos/include/mach/map.h +1 -0
index a53981b..4aea694 100644
@@ -36,6 +36,7 @@
 #define EXYNOS4_PA_SYSCON		0x10010000
 #define EXYNOS5_PA_SYSCON		0x10050100
 
+#define EXYNOS3_PA_PMU			0x10020000
 #define EXYNOS4_PA_PMU			0x10020000
 #define EXYNOS5_PA_PMU			0x10040000
 
Signature · 1 line
1.8.0
#4 lore raw

Re: [PATCHv2 3/8] ARM: EXYNOS: Add IO mapping for PMU of Exynos3250

Quoted 12 lines · On Tuesday 15 April 2014 10:59:47 Chanwoo Choi wrote:

This patch add memory mapping for PMU (Power Management Unit) which is used for power control of Exynos3250.

---
Arnd Bergmann suggested that need proper driver instead of static memory mapping. As Chanho Park reply[2], Sachin Kamat already posted the DT support patch[1] for memory mapping for SYSRAM.
[1] http://www.spinics.net/lists/linux-samsung-soc/msg27647.html
[2] https://lkml.org/lkml/2014/4/10/161

Quoted 3 lines

So, I'm going to re-implement following patch related to static memory mapping after merged Sachin Kamat patch[1].
ARM: EXYNOS: Add IO mapping for PMU of Exynos3250

I don't think we have a patch for the PMU yet, Sachin was looking at the SYSRAM only.

Arnd

author maintainer
#5 lore raw

Re: [PATCHv2 3/8] ARM: EXYNOS: Add IO mapping for PMU of Exynos3250

Hi,

Quoted 13 lines · Arnd Bergmann
Quoted 12 lines · On Tuesday 15 April 2014 10:59:47 Chanwoo Choi wrote:

This patch add memory mapping for PMU (Power Management Unit) which is used for power control of Exynos3250.

---
Arnd Bergmann suggested that need proper driver instead of static memory mapping. As Chanho Park reply[2], Sachin Kamat already posted the DT support patch[1] for memory mapping for SYSRAM.
[1] http://www.spinics.net/lists/linux-samsung-soc/msg27647.html
[2] https://lkml.org/lkml/2014/4/10/161

Quoted 6 lines
Quoted 3 lines

So, I'm going to re-implement following patch related to static memory mapping after merged Sachin Kamat patch[1].
ARM: EXYNOS: Add IO mapping for PMU of Exynos3250

I don't think we have a patch for the PMU yet, Sachin was looking at the SYSRAM only.

You are right. Sachin's patch only included the solution of SYSRAM memory mapping. I set out the plan that I would implment proper driver for PMU memory mapping instead of static method after merged Sachin's patch for SYSRAM.

But,
If you'd like me to implment PMU memory mapping instead of static mapping right now, I'll implement it for PMU such as Sachin's patch on next posting(v3).

Thanks for your review.

Best Regards,
Chanwoo Choi

#6 lore raw

Re: [PATCHv2 3/8] ARM: EXYNOS: Add IO mapping for PMU of Exynos3250

Hi,

Quoted 23 lines · Chanwoo Choi

Hi,

Quoted 13 lines · Arnd Bergmann
Quoted 12 lines · On Tuesday 15 April 2014 10:59:47 Chanwoo Choi wrote:

This patch add memory mapping for PMU (Power Management Unit) which is used for power control of Exynos3250.

---
Arnd Bergmann suggested that need proper driver instead of static memory mapping. As Chanho Park reply[2], Sachin Kamat already posted the DT support patch[1] for memory mapping for SYSRAM.
[1] http://www.spinics.net/lists/linux-samsung-soc/msg27647.html
[2] https://lkml.org/lkml/2014/4/10/161

Quoted 6 lines
Quoted 3 lines

So, I'm going to re-implement following patch related to static memory mapping after merged Sachin Kamat patch[1].
ARM: EXYNOS: Add IO mapping for PMU of Exynos3250

I don't think we have a patch for the PMU yet, Sachin was looking at the SYSRAM only.

Quoted 8 lines

You are right. Sachin's patch only included the solution of SYSRAM memory mapping. I set out the plan that I would implment proper driver for PMU memory mapping instead of static method after merged Sachin's patch for SYSRAM.

But,
If you'd like me to implment PMU memory mapping instead of static mapping right now, I'll implement it for PMU such as Sachin's patch on next posting(v3).

I have already posted patch[1] for mapping PMU through DT as part of my PMU series for exynos5260.
You can rebase on the same.

[1] http://www.spinics.net/lists/arm-kernel/msg316013.html

Quoted 11 lines

Thanks for your review.

Best Regards,
Chanwoo Choi

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

author maintainer
#7 lore raw

Re: [PATCHv2 3/8] ARM: EXYNOS: Add IO mapping for PMU of Exynos3250

Hi,

Quoted 35 lines · Vikas Sajjan

Hi,

Quoted 23 lines · Chanwoo Choi

Hi,

Quoted 13 lines · Arnd Bergmann
Quoted 12 lines · On Tuesday 15 April 2014 10:59:47 Chanwoo Choi wrote:

This patch add memory mapping for PMU (Power Management Unit) which is used for power control of Exynos3250.

---
Arnd Bergmann suggested that need proper driver instead of static memory mapping. As Chanho Park reply[2], Sachin Kamat already posted the DT support patch[1] for memory mapping for SYSRAM.
[1] http://www.spinics.net/lists/linux-samsung-soc/msg27647.html
[2] https://lkml.org/lkml/2014/4/10/161

Quoted 6 lines
Quoted 3 lines

So, I'm going to re-implement following patch related to static memory mapping after merged Sachin Kamat patch[1].
ARM: EXYNOS: Add IO mapping for PMU of Exynos3250

I don't think we have a patch for the PMU yet, Sachin was looking at the SYSRAM only.

Quoted 8 lines

You are right. Sachin's patch only included the solution of SYSRAM memory mapping. I set out the plan that I would implment proper driver for PMU memory mapping instead of static method after merged Sachin's patch for SYSRAM.

But,
If you'd like me to implment PMU memory mapping instead of static mapping right now, I'll implement it for PMU such as Sachin's patch on next posting(v3).

Quoted 6 lines

I have already posted patch[1] for mapping PMU through DT as part of my PMU series for exynos5260.
You can rebase on the same.

[1] http://www.spinics.net/lists/arm-kernel/msg316013.html

OK, I'll rebase it after merged PMU mapping patch[1].

Thanks,
Chanwoo Choi

#8 lore raw

Re: [PATCHv2 3/8] ARM: EXYNOS: Add IO mapping for PMU of Exynos3250

In reply to Chanwoo Choi
Quoted 6 lines · On Tuesday 15 April 2014 17:32:40 Chanwoo Choi wrote:
Quoted 4 lines · Arnd Bergmann

On Tuesday 15 April 2014 10:59:47 Chanwoo Choi wrote:

I don't think we have a patch for the PMU yet, Sachin was looking at the SYSRAM only.

Quoted 7 lines

You are right. Sachin's patch only included the solution of SYSRAM memory mapping. I set out the plan that I would implment proper driver for PMU memory mapping instead of static method after merged Sachin's patch for SYSRAM.

But,
If you'd like me to implment PMU memory mapping instead of static mapping right now, I'll implement it for PMU such as Sachin's patch on next posting(v3).

I don't really want to merge a new SoC type until these are resolved, so it would definitely be better to implement this for v3.

Arnd

author maintainer
#9 lore raw

Re: [PATCHv2 3/8] ARM: EXYNOS: Add IO mapping for PMU of Exynos3250

Quoted 11 lines · Arnd Bergmann
Quoted 10 lines · On Tuesday 15 April 2014 17:32:40 Chanwoo Choi wrote:
Quoted 4 lines · Arnd Bergmann

On Tuesday 15 April 2014 10:59:47 Chanwoo Choi wrote:

I don't think we have a patch for the PMU yet, Sachin was looking at the SYSRAM only.

You are right. Sachin's patch only included the solution of SYSRAM memory mapping. I set out the plan that I would implment proper driver for PMU memory mapping instead of static method after merged Sachin's patch for SYSRAM.

Quoted 7 lines
Quoted 3 lines

But,
If you'd like me to implment PMU memory mapping instead of static mapping right now, I'll implement it for PMU such as Sachin's patch on next posting(v3).

I don't really want to merge a new SoC type until these are resolved, so it would definitely be better to implement this for v3.

OK,
I'll rebase this patch on following patch which support PMU memory mapping through DT.

[1] http://www.spinics.net/lists/arm-kernel/msg316013.html

Thanks for your review.

Best Regards,
Chanwoo Choi

author maintainer
#10 lore raw

PATCH v2 4/8 ARM: EXYNOS: Support secondary CPU boot of Exynos4212

In reply to Chanwoo Choi

From: Kyungmin Park <[email protected]>

This patch fix the offset of CPU boot address and change parameter of smc call of SMC_CMD_CPU1BOOT command for Exynos4212.

---
 arch/arm/mach-exynos/firmware.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)
arch/arm/mach-exynos/firmware.c +14 -1
index 932129e..aa01c42 100644
@@ -18,6 +18,8 @@
 
 #include <mach/map.h>
 
+#include <plat/cpu.h>
+
 #include "smc.h"
 
 static int exynos_do_idle(void)
@@ -28,13 +30,24 @@ static int exynos_do_idle(void)
 
 static int exynos_cpu_boot(int cpu)
 {
+	/*
+	 * The second parameter of SMC_CMD_CPU1BOOT command means CPU id.
+	 * But, Exynos4212 has only one secondary CPU so second parameter
+	 * isn't used for informing secure firmware about CPU id.
+	 */
+	if (soc_is_exynos4212())
+		cpu = 0;
+
 	exynos_smc(SMC_CMD_CPU1BOOT, cpu, 0, 0);
 	return 0;
 }
 
 static int exynos_set_cpu_boot_addr(int cpu, unsigned long boot_addr)
 {
-	void __iomem *boot_reg = S5P_VA_SYSRAM_NS + 0x1c + 4*cpu;
+	void __iomem *boot_reg = S5P_VA_SYSRAM_NS + 0x1c;
+
+	if (!soc_is_exynos4212())
+		boot_reg += 4*cpu;
 
 	__raw_writel(boot_addr, boot_reg);
 	return 0;
Signature · 1 line
1.8.0
author maintainer
#11 lore raw

PATCH v2 5/8 ARM: EXYNOS: Support secondary CPU boot of Exynos3250

In reply to Chanwoo Choi

This patch fix the offset of CPU boot address and don't operate smc call of SMC_CMD_CPU1BOOT command for Exynos3250.

---
 arch/arm/mach-exynos/firmware.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
arch/arm/mach-exynos/firmware.c +5 -2
index aa01c42..6205d4f 100644
@@ -30,13 +30,16 @@ static int exynos_do_idle(void)
 
 static int exynos_cpu_boot(int cpu)
 {
+	if (soc_is_exynos3250()) {
+		return 0;
 	/*
 	 * The second parameter of SMC_CMD_CPU1BOOT command means CPU id.
 	 * But, Exynos4212 has only one secondary CPU so second parameter
 	 * isn't used for informing secure firmware about CPU id.
 	 */
-	if (soc_is_exynos4212())
+	} else if (soc_is_exynos4212()) {
 		cpu = 0;
+	}
 
 	exynos_smc(SMC_CMD_CPU1BOOT, cpu, 0, 0);
 	return 0;
@@ -46,7 +49,7 @@ static int exynos_set_cpu_boot_addr(int cpu, unsigned long boot_addr)
 {
 	void __iomem *boot_reg = S5P_VA_SYSRAM_NS + 0x1c;
 
-	if (!soc_is_exynos4212())
+	if (!soc_is_exynos4212() && !soc_is_exynos3250())
 		boot_reg += 4*cpu;
 
 	__raw_writel(boot_addr, boot_reg);
Signature · 1 line
1.8.0
#12 lore raw

Re: [PATCHv2 5/8] ARM: EXYNOS: Support secondary CPU boot of Exynos3250

Quoted 19 lines · Chanwoo Choi

This patch fix the offset of CPU boot address and don't operate smc call of SMC_CMD_CPU1BOOT command for Exynos3250.

---
 arch/arm/mach-exynos/firmware.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
arch/arm/mach-exynos/firmware.c +2 -0
index aa01c42..6205d4f 100644
@@ -30,13 +30,16 @@ static int exynos_do_idle(void)
 
 static int exynos_cpu_boot(int cpu)
 {
+       if (soc_is_exynos3250()) {
+               return 0;

arch/arm/mach-exynos/firmware.c static int exynos_do_idle(void) · line 43

Quoted 10 lines
arch/arm/mach-exynos/firmware.c +2 -1
        /*
         * The second parameter of SMC_CMD_CPU1BOOT command means CPU id.
         * But, Exynos4212 has only one secondary CPU so second parameter
         * isn't used for informing secure firmware about CPU id.
         */
-       if (soc_is_exynos4212())
+       } else if (soc_is_exynos4212()) {
                cpu = 0;
+       }
 

As you already return in case of Exynos3250, you need not change this. First commit hunk without the opening brace should be sufficient.

Quoted 18 lines
arch/arm/mach-exynos/firmware.c +1 -2
        exynos_smc(SMC_CMD_CPU1BOOT, cpu, 0, 0);
        return 0;
@@ -46,7 +49,7 @@ static int exynos_set_cpu_boot_addr(int cpu, unsigned long boot_addr)
 {
        void __iomem *boot_reg = S5P_VA_SYSRAM_NS + 0x1c;
 
-       if (!soc_is_exynos4212())
+       if (!soc_is_exynos4212() && !soc_is_exynos3250())
                boot_reg += 4*cpu;
 
        __raw_writel(boot_addr, boot_reg);
--

1.8.0

--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html

Signature · 1 line
Tushar Behera
author maintainer
#13 lore raw

Re: [PATCHv2 5/8] ARM: EXYNOS: Support secondary CPU boot of Exynos3250

Hi Tushar,

Quoted 25 lines · Tushar Behera
Quoted 24 lines · Chanwoo Choi

This patch fix the offset of CPU boot address and don't operate smc call of SMC_CMD_CPU1BOOT command for Exynos3250.

---
 arch/arm/mach-exynos/firmware.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
arch/arm/mach-exynos/firmware.c +2 -0
index aa01c42..6205d4f 100644
@@ -30,13 +30,16 @@ static int exynos_do_idle(void)
 
 static int exynos_cpu_boot(int cpu)
 {
+       if (soc_is_exynos3250()) {
+               return 0;
        /*
         * The second parameter of SMC_CMD_CPU1BOOT command means CPU id.
         * But, Exynos4212 has only one secondary CPU so second parameter
         * isn't used for informing secure firmware about CPU id.
         */
Quoted 8 lines

arch/arm/mach-exynos/firmware.c static int exynos_do_idle(void) · line 43

Quoted 5 lines
arch/arm/mach-exynos/firmware.c +2 -1
-       if (soc_is_exynos4212())
+       } else if (soc_is_exynos4212()) {
                cpu = 0;
+       }
 

As you already return in case of Exynos3250, you need not change this. First commit hunk without the opening brace should be sufficient.

OK, I'll remove brace.

Best Regards,
Chanwoo Choi

#14 lore raw

Re: [PATCHv2 5/8] ARM: EXYNOS: Support secondary CPU boot of Exynos3250

In reply to Chanwoo Choi

Hi Chanwoo,

Quoted 14 lines · Chanwoo Choi

This patch fix the offset of CPU boot address and don't operate smc call of SMC_CMD_CPU1BOOT command for Exynos3250.

---
  arch/arm/mach-exynos/firmware.c | 7 +++++--
  1 file changed, 5 insertions(+), 2 deletions(-)
arch/arm/mach-exynos/firmware.c +0 -0
index aa01c42..6205d4f 100644

arch/arm/mach-exynos/firmware.c static int exynos_do_idle(void) · line 34

Quoted 5 lines
arch/arm/mach-exynos/firmware.c +2 -0
@@ -30,13 +30,16 @@ static int exynos_do_idle(void)
 
  static int exynos_cpu_boot(int cpu)
  {
+	if (soc_is_exynos3250()) {
+		return 0;

This is strange. How the firmware knows when to boot the CPU then, if CPU1BOOT command is not called?

Best regards,
Tomasz

author maintainer
#15 lore raw

Re: [PATCHv2 5/8] ARM: EXYNOS: Support secondary CPU boot of Exynos3250

Hi Tomasz,

Quoted 18 lines · Tomasz Figa

Hi Chanwoo,

Quoted 15 lines · Chanwoo Choi

This patch fix the offset of CPU boot address and don't operate smc call of SMC_CMD_CPU1BOOT command for Exynos3250.

---
  arch/arm/mach-exynos/firmware.c | 7 +++++--
  1 file changed, 5 insertions(+), 2 deletions(-)
arch/arm/mach-exynos/firmware.c +0 -0
index aa01c42..6205d4f 100644
@@ -30,13 +30,16 @@ static int exynos_do_idle(void)
 
Quoted 6 lines

arch/arm/mach-exynos/firmware.c static int exynos_do_idle(void) · line 34

Quoted 4 lines
arch/arm/mach-exynos/firmware.c +2 -0
  static int exynos_cpu_boot(int cpu)
  {
+    if (soc_is_exynos3250()) {
+        return 0;

This is strange. How the firmware knows when to boot the CPU then, if CPU1BOOT command is not called?

As I knew, Exynos3250 doesn't need smc for secondary boot
because WFE in secure mode for Exynos3250 is removed.
So, Exynos3250 doesn't need to send IPI_WAKEUP after call_firmware_op(cpu_boot, ...).

Best Regards,
Chanwoo Choi

author maintainer
#16 lore raw

PATCH v2 6/8 ARM: EXYNOS: Enter a15 lowpower mode for Exynos3250 based on Cortex-a7

In reply to Chanwoo Choi

This patch decide proper lowpower mode of either a15 or a9 according to own ID from Main ID register.

---
 arch/arm/mach-exynos/hotplug.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)
arch/arm/mach-exynos/hotplug.c +11 -5
index 5eead53..99e54e0 100644
@@ -135,16 +135,22 @@ void __ref exynos_cpu_die(unsigned int cpu)
 	int primary_part = 0;
 
 	/*
-	 * we're ready for shutdown now, so do it.
-	 * Exynos4 is A9 based while Exynos5 is A15; check the CPU part
+	 * we're ready for shutdown now, so do it. Exynos4 is A9 based
+	 * while Exynos5 is A15/Exynos3 is A7; check the CPU part
 	 * number by reading the Main ID register and then perform the
 	 * appropriate sequence for entering low power.
 	 */
-	asm("mrc p15, 0, %0, c0, c0, 0" : "=r"(primary_part) : : "cc");
-	if ((primary_part & 0xfff0) == 0xc0f0)
+	primary_part = read_cpuid_part_number();
+
+	switch (primary_part) {
+	case ARM_CPU_PART_CORTEX_A7:
+	case ARM_CPU_PART_CORTEX_A15:
 		cpu_enter_lowpower_a15();
-	else
+		break;
+	default:
 		cpu_enter_lowpower_a9();
+		break;
+	}
 
 	platform_do_lowpower(cpu, &spurious);
 
Signature · 1 line
1.8.0
#17 lore raw

Re: [PATCHv2 6/8] ARM: EXYNOS: Enter a15 lowpower mode for Exynos3250 based on Cortex-a7

Hi Chanwoo,

Quoted 14 lines · Chanwoo Choi

This patch decide proper lowpower mode of either a15 or a9 according to own ID from Main ID register.

---
  arch/arm/mach-exynos/hotplug.c | 16 +++++++++++-----
  1 file changed, 11 insertions(+), 5 deletions(-)
arch/arm/mach-exynos/hotplug.c +0 -0
index 5eead53..99e54e0 100644

arch/arm/mach-exynos/hotplug.c void __ref exynos_cpu_die(unsigned int cpu) · line 141

Quoted 9 lines
arch/arm/mach-exynos/hotplug.c +2 -2
@@ -135,16 +135,22 @@ void __ref exynos_cpu_die(unsigned int cpu)
  	int primary_part = 0;
 
  	/*
-	 * we're ready for shutdown now, so do it.
-	 * Exynos4 is A9 based while Exynos5 is A15; check the CPU part
+	 * we're ready for shutdown now, so do it. Exynos4 is A9 based
+	 * while Exynos5 is A15/Exynos3 is A7; check the CPU part
  	 * number by reading the Main ID register and then perform the
  	 * appropriate sequence for entering low power.

If changing this comment anyway, I'd suggest removing particular SoC series from it and also correct writing style. My suggestion is:

/*
* Prepare the CPU for shutting down. The required sequence of
* operations depends on core type. CPUID part number can be used to
* determine the right way.
*/

Best regards,
Tomasz

#18 lore raw

Re: [PATCHv2 6/8] ARM: EXYNOS: Enter a15 lowpower mode for Exynos3250 based on Cortex-a7

Hi Tomasz,

Quoted 23 lines · Tomasz Figa

Hi Chanwoo,

Quoted 19 lines · Chanwoo Choi

This patch decide proper lowpower mode of either a15 or a9 according to own ID
from Main ID register.

---
  arch/arm/mach-exynos/hotplug.c | 16 +++++++++++-----
  1 file changed, 11 insertions(+), 5 deletions(-)
arch/arm/mach-exynos/hotplug.c +0 -0
index 5eead53..99e54e0 100644
@@ -135,16 +135,22 @@ void __ref exynos_cpu_die(unsigned int cpu)
        int primary_part = 0;
 
Quoted 11 lines

arch/arm/mach-exynos/hotplug.c void __ref exynos_cpu_die(unsigned int cpu) · line 141

Quoted 7 lines
arch/arm/mach-exynos/hotplug.c +2 -2
        /*
-        * we're ready for shutdown now, so do it.
-        * Exynos4 is A9 based while Exynos5 is A15; check the CPU part
+        * we're ready for shutdown now, so do it. Exynos4 is A9 based
+        * while Exynos5 is A15/Exynos3 is A7; check the CPU part
         * number by reading the Main ID register and then perform the
         * appropriate sequence for entering low power.

If changing this comment anyway, I'd suggest removing particular SoC series from it and also correct writing style. My suggestion is:

OK, I'll fix it.

Best regards,
Chanwoo Choi

Quoted 14 lines

/*
* Prepare the CPU for shutting down. The required sequence of
* operations depends on core type. CPUID part number can be used to
* determine the right way.
*/

Best regards,
Tomasz
--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html

author maintainer
#19 lore raw

PATCH v2 7/8 clk: samsung: exynos3250: Add clocks using common clock framework

In reply to Chanwoo Choi

From: Tomasz Figa <[email protected]>

This patch add new the clock drvier of Exynos3250 SoC based on Cortex-A7 using common clock framework. The CMU (Clock Management Unit) of Exynos3250 control PLLs(Phase Locked Loops) and generate system clocks for CPU, buses, and function clocks for individual IPs.

The CMU of Exynos3250 includes following clock doamins:
- CPU block for Cortex-A7 MPCore processor
- LEFTBUS/RIGHTBUS block
- TOP block for G3D/MFC/LCD0/ISP/CAM/FSYS/MFC/PERIL/PERIR

Changes from v1:
- None

---
 drivers/clk/samsung/Makefile           |   1 +
 drivers/clk/samsung/clk-exynos3250.c   | 785 +++++++++++++++++++++++++++++++++
 include/dt-bindings/clock/exynos3250.h | 256 +++++++++++
 3 files changed, 1042 insertions(+)
 create mode 100644 drivers/clk/samsung/clk-exynos3250.c
 create mode 100644 include/dt-bindings/clock/exynos3250.h
drivers/clk/samsung/Makefile +1 -0
index 8eb4799..d120797 100644
@@ -3,6 +3,7 @@
 #
 
 obj-$(CONFIG_COMMON_CLK)	+= clk.o clk-pll.o
+obj-$(CONFIG_SOC_EXYNOS3250)	+= clk-exynos3250.o
 obj-$(CONFIG_ARCH_EXYNOS4)	+= clk-exynos4.o
 obj-$(CONFIG_SOC_EXYNOS5250)	+= clk-exynos5250.o
 obj-$(CONFIG_SOC_EXYNOS5420)	+= clk-exynos5420.o
drivers/clk/samsung/clk-exynos3250.c new file +785 -0

785 lines not on this page · raw message

include/dt-bindings/clock/exynos3250.h new file +256 -0

256 lines not on this page · raw message

Signature · 1 line
1.8.0
author maintainer
#20 lore raw

PATCH v2 8/8 ARM: dts: Add device tree sources for Exynos3250

In reply to Chanwoo Choi

From: Tomasz Figa <[email protected]>

This patch add new exynos3250.dtsi to support Exynos3250 SoC based on Cortex-A7 dual core and includes following dt nodes:

- GIC interrupt controller
- Pinctrl to control GPIOs
- Clock controller
- CPU information (Cortex-A7 dual core)
- UART to support serial port
- MCT (Multi Core Timer)
- ADC (Analog Digital Converter)
- I2C/SPI bus
- Power domain
- PMU (Performance Monitoring Unit)
- MSHC (Mobile Storage Host Controller)
- PWM (Pluse Width Modulation)
- AMBA bus

Cc Ben Dooks <[email protected]>
Cc Kukjin Kim <[email protected]>
Cc Rob Herring <[email protected]>
Cc Pawel Moll <[email protected]>
Cc Mark Rutland <[email protected]>
Cc Ian Campbell <[email protected]>
Cc Kumar Gala <[email protected]>
Cc Russell King <[email protected]>
Cc devicetree at vger.kernel.org
---
 arch/arm/boot/dts/exynos3250-pinctrl.dtsi | 477 ++++++++++++++++++++++++++++++
 arch/arm/boot/dts/exynos3250.dtsi         | 410 +++++++++++++++++++++++++
 2 files changed, 887 insertions(+)
 create mode 100644 arch/arm/boot/dts/exynos3250-pinctrl.dtsi
 create mode 100644 arch/arm/boot/dts/exynos3250.dtsi
arch/arm/boot/dts/exynos3250-pinctrl.dtsi new file +477 -0
new file mode 100644
index 0000000..976490b
@@ -0,0 +1,477 @@
+/*
+ * Samsung's Exynos3250 SoCs pin-mux and pin-config device tree source
+ *
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ *		http://www.samsung.com
+ *
+ * Samsung's Exynos3250 SoCs pin-mux and pin-config optiosn are listed as device
+ * tree nodes are listed in this file.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+*/
+
+/ {
+	pinctrl at 11400000 {
+		gpa0: gpa0 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		gpa1: gpa1 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		gpb: gpb {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		gpc0: gpc0 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		gpc1: gpc1 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		gpd0: gpd0 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		gpd1: gpd1 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		uart0_data: uart0-data {
+			samsung,pins = "gpa0-0", "gpa0-1";
+			samsung,pin-function = <0x2>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <0>;
+		};
+
+		uart0_fctl: uart0-fctl {
+			samsung,pins = "gpa0-2", "gpa0-3";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <0>;
+		};
+
+		uart1_data: uart1-data {
+			samsung,pins = "gpa0-4", "gpa0-5";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <0>;
+		};
+
+		uart1_fctl: uart1-fctl {
+			samsung,pins = "gpa0-6", "gpa0-7";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <0>;
+		};
+
+		i2c2_bus: i2c2-bus {
+			samsung,pins = "gpa0-6", "gpa0-7";
+			samsung,pin-function = <3>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <0>;
+		};
+
+		i2c3_bus: i2c3-bus {
+			samsung,pins = "gpa1-2", "gpa1-3";
+			samsung,pin-function = <3>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <0>;
+		};
+
+		spi0_bus: spi0-bus {
+			samsung,pins = "gpb-0", "gpb-2", "gpb-3";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <0>;
+		};
+
+		i2c4_bus: i2c4-bus {
+			samsung,pins = "gpb-0", "gpb-1";
+			samsung,pin-function = <3>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <0>;
+		};
+
+		spi1_bus: spi1-bus {
+			samsung,pins = "gpb-4", "gpb-6", "gpb-7";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <0>;
+		};
+
+		i2c5_bus: i2c5-bus {
+			samsung,pins = "gpb-2", "gpb-3";
+			samsung,pin-function = <3>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <0>;
+		};
+
+		i2s2_bus: i2s2-bus {
+			samsung,pins = "gpc1-0", "gpc1-1", "gpc1-2", "gpc1-3",
+					"gpc1-4";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <0>;
+		};
+
+		pcm2_bus: pcm2-bus {
+			samsung,pins = "gpc1-0", "gpc1-1", "gpc1-2", "gpc1-3",
+					"gpc1-4";
+			samsung,pin-function = <3>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <0>;
+		};
+
+		i2c6_bus: i2c6-bus {
+			samsung,pins = "gpc1-3", "gpc1-4";
+			samsung,pin-function = <4>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <0>;
+		};
+
+		pwm0_out: pwm0-out {
+			samsung,pins = "gpd0-0";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <0>;
+		};
+
+		pwm1_out: pwm1-out {
+			samsung,pins = "gpd0-1";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <0>;
+		};
+
+		i2c7_bus: i2c7-bus {
+			samsung,pins = "gpd0-2", "gpd0-3";
+			samsung,pin-function = <3>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <0>;
+		};
+
+		pwm2_out: pwm2-out {
+			samsung,pins = "gpd0-2";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <0>;
+		};
+
+		pwm3_out: pwm3-out {
+			samsung,pins = "gpd0-3";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <0>;
+		};
+
+		i2c0_bus: i2c0-bus {
+			samsung,pins = "gpd1-0", "gpd1-1";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <0>;
+		};
+
+		mipi0_clk: mipi0-clk {
+			samsung,pins = "gpd1-0", "gpd1-1";
+			samsung,pin-function = <3>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <0>;
+		};
+
+		i2c1_bus: i2c1-bus {
+			samsung,pins = "gpd1-2", "gpd1-3";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <0>;
+		};
+	};
+
+	pinctrl at 11000000 {
+		gpe0: gpe0 {
+			gpio-controller;
+			#gpio-cells = <2>;
+		};
+
+		gpe1: gpe1 {
+			gpio-controller;
+			#gpio-cells = <2>;
+		};
+
+		gpe2: gpe2 {
+			gpio-controller;
+			#gpio-cells = <2>;
+		};
+
+		gpk0: gpk0 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		gpk1: gpk1 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		gpk2: gpk2 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		gpl0: gpl0 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		gpm0: gpm0 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		gpm1: gpm1 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		gpm2: gpm2 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		gpm3: gpm3 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		gpm4: gpm4 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		gpx0: gpx0 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			interrupt-parent = <&gic>;
+			interrupts = <0 32 0>, <0 33 0>, <0 34 0>, <0 35 0>,
+					<0 36 0>, <0 37 0>, <0 38 0>, <0 39 0>;
+			#interrupt-cells = <2>;
+		};
+
+		gpx1: gpx1 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			interrupt-parent = <&gic>;
+			interrupts = <0 40 0>, <0 41 0>, <0 42 0>, <0 43 0>,
+					<0 44 0>, <0 45 0>, <0 46 0>, <0 47 0>;
+			#interrupt-cells = <2>;
+		};
+
+		gpx2: gpx2 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		gpx3: gpx3 {
+			gpio-controller;
+			#gpio-cells = <2>;
+
+			interrupt-controller;
+			#interrupt-cells = <2>;
+		};
+
+		sd0_clk: sd0-clk {
+			samsung,pins = "gpk0-0";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <3>;
+		};
+
+		sd0_cmd: sd0-cmd {
+			samsung,pins = "gpk0-1";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <3>;
+		};
+
+		sd0_cd: sd0-cd {
+			samsung,pins = "gpk0-2";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <3>;
+		};
+
+		sd0_rdqs: sd0-rdqs {
+			samsung,pins = "gpk0-7";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <3>;
+		};
+
+		sd0_bus1: sd0-bus-width1 {
+			samsung,pins = "gpk0-3";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <3>;
+		};
+
+		sd0_bus4: sd0-bus-width4 {
+			samsung,pins = "gpk0-4", "gpk0-5", "gpk0-6";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <3>;
+		};
+
+		sd0_bus8: sd0-bus-width8 {
+			samsung,pins = "gpl0-0", "gpl0-1", "gpl0-2", "gpl0-3";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <3>;
+		};
+
+		sd1_clk: sd1-clk {
+			samsung,pins = "gpk1-0";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <3>;
+		};
+
+		sd1_cmd: sd1-cmd {
+			samsung,pins = "gpk1-1";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <3>;
+		};
+
+		sd1_cd: sd1-cd {
+			samsung,pins = "gpk1-2";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <3>;
+		};
+
+		sd1_bus1: sd1-bus-width1 {
+			samsung,pins = "gpk1-3";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <3>;
+		};
+
+		sd1_bus4: sd1-bus-width4 {
+			samsung,pins = "gpk1-4", "gpk1-5", "gpk1-6";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <3>;
+		};
+
+		cam_port_b_io: cam-port-b-io {
+			samsung,pins = "gpm0-0", "gpm0-1", "gpm0-2", "gpm0-3",
+					"gpm0-4", "gpm0-5", "gpm0-6", "gpm0-7",
+					"gpm1-0", "gpm1-1", "gpm2-0", "gpm2-1";
+			samsung,pin-function = <3>;
+			samsung,pin-pud = <3>;
+			samsung,pin-drv = <0>;
+		};
+
+		cam_port_b_clk_active: cam-port-b-clk-active {
+			samsung,pins = "gpm2-2";
+			samsung,pin-function = <3>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <3>;
+		};
+
+		cam_port_b_clk_idle: cam-port-b-clk-idle {
+			samsung,pins = "gpm2-2";
+			samsung,pin-function = <0>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <0>;
+		};
+
+		fimc_is_i2c0: fimc-is-i2c0 {
+			samsung,pins = "gpm4-0", "gpm4-1";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <0>;
+		};
+
+		fimc_is_i2c1: fimc-is-i2c1 {
+			samsung,pins = "gpm4-2", "gpm4-3";
+			samsung,pin-function = <2>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <0>;
+		};
+
+		fimc_is_uart: fimc-is-uart {
+			samsung,pins = "gpm3-5", "gpm3-7";
+			samsung,pin-function = <3>;
+			samsung,pin-pud = <0>;
+			samsung,pin-drv = <0>;
+		};
+	};
+};
arch/arm/boot/dts/exynos3250.dtsi new file +410 -0

410 lines not on this page · raw message

Signature · 1 line
1.8.0
#21 lore raw

PATCH v2 8/8 ARM: dts: Add device tree sources for Exynos3250

Quoted 5 lines · Chanwoo Choi

From: Tomasz Figa <[email protected]>

This patch add new exynos3250.dtsi to support Exynos3250 SoC based on Cortex-A7 dual core and includes following dt nodes:

Quoted 13 lines

- GIC interrupt controller
- Pinctrl to control GPIOs
- Clock controller
- CPU information (Cortex-A7 dual core)
- UART to support serial port
- MCT (Multi Core Timer)
- ADC (Analog Digital Converter)
- I2C/SPI bus
- Power domain
- PMU (Performance Monitoring Unit)
- MSHC (Mobile Storage Host Controller)
- PWM (Pluse Width Modulation)
- AMBA bus

[...]

Where is the arch timer node?

	M.
Signature · 1 line
Jazz is not dead. It just smells funny...
author maintainer
#22 lore raw

PATCH v2 8/8 ARM: dts: Add device tree sources for Exynos3250

Hi,

Quoted 20 lines · Marc Zyngier
Quoted 5 lines · Chanwoo Choi

From: Tomasz Figa <[email protected]>

This patch add new exynos3250.dtsi to support Exynos3250 SoC based on Cortex-A7 dual core and includes following dt nodes:

Quoted 13 lines

- GIC interrupt controller
- Pinctrl to control GPIOs
- Clock controller
- CPU information (Cortex-A7 dual core)
- UART to support serial port
- MCT (Multi Core Timer)
- ADC (Analog Digital Converter)
- I2C/SPI bus
- Power domain
- PMU (Performance Monitoring Unit)
- MSHC (Mobile Storage Host Controller)
- PWM (Pluse Width Modulation)
- AMBA bus

Quoted 3 lines

[...]

Where is the arch timer node?

Exynos3250 uses MCT (Multi Core Timer) instead of ARM_ARCH_TIMER.
- in drivers/clocksource/exynos_mct.c

Best Regards,
Chanwoo Choi

#23 lore raw

PATCH v2 8/8 ARM: dts: Add device tree sources for Exynos3250

Quoted 23 lines · Chanwoo Choi

Hi,

Quoted 20 lines · Marc Zyngier
Quoted 18 lines · Chanwoo Choi

From: Tomasz Figa <[email protected]>

This patch add new exynos3250.dtsi to support Exynos3250 SoC based on Cortex-A7 dual core and includes following dt nodes:

- GIC interrupt controller
- Pinctrl to control GPIOs
- Clock controller
- CPU information (Cortex-A7 dual core)
- UART to support serial port
- MCT (Multi Core Timer)
- ADC (Analog Digital Converter)
- I2C/SPI bus
- Power domain
- PMU (Performance Monitoring Unit)
- MSHC (Mobile Storage Host Controller)
- PWM (Pluse Width Modulation)
- AMBA bus

Quoted 6 lines
Quoted 3 lines

[...]

Where is the arch timer node?

Exynos3250 uses MCT (Multi Core Timer) instead of ARM_ARCH_TIMER.
- in drivers/clocksource/exynos_mct.c

Don't you have a Cortex-A7? If so, you have the arch timer.

	M.
Signature · 1 line
Jazz is not dead. It just smells funny...
author maintainer
#24 lore raw

PATCH v2 8/8 ARM: dts: Add device tree sources for Exynos3250

Quoted 24 lines · Marc Zyngier
Quoted 23 lines · Chanwoo Choi

Hi,

Quoted 20 lines · Marc Zyngier
Quoted 18 lines · Chanwoo Choi

From: Tomasz Figa <[email protected]>

This patch add new exynos3250.dtsi to support Exynos3250 SoC based on Cortex-A7 dual core and includes following dt nodes:

- GIC interrupt controller
- Pinctrl to control GPIOs
- Clock controller
- CPU information (Cortex-A7 dual core)
- UART to support serial port
- MCT (Multi Core Timer)
- ADC (Analog Digital Converter)
- I2C/SPI bus
- Power domain
- PMU (Performance Monitoring Unit)
- MSHC (Mobile Storage Host Controller)
- PWM (Pluse Width Modulation)
- AMBA bus

Quoted 8 lines
Quoted 6 lines
Quoted 3 lines

[...]

Where is the arch timer node?

Exynos3250 uses MCT (Multi Core Timer) instead of ARM_ARCH_TIMER.
- in drivers/clocksource/exynos_mct.c

Don't you have a Cortex-A7? If so, you have the arch timer.

Do you means that 'arch timer" is ARM_ARCH_TIMER?

As I knew, ARM_ARCH_TIMER is clocksource driver for system timer. But, Exynos SoC used MCT clocksource for system timer.

Exynos dts file didn't include arch timer node but only include mct node.

Best Regards,
Chanwoo Choi

#25 lore raw

PATCH v2 8/8 ARM: dts: Add device tree sources for Exynos3250

Quoted 27 lines · Chanwoo Choi
Quoted 26 lines · Marc Zyngier
Quoted 25 lines · Chanwoo Choi

Hi,

Quoted 22 lines · Marc Zyngier
Quoted 18 lines · Chanwoo Choi

From: Tomasz Figa <[email protected]>

This patch add new exynos3250.dtsi to support Exynos3250 SoC based on Cortex-A7 dual core and includes following dt nodes:

- GIC interrupt controller
- Pinctrl to control GPIOs
- Clock controller
- CPU information (Cortex-A7 dual core)
- UART to support serial port
- MCT (Multi Core Timer)
- ADC (Analog Digital Converter)
- I2C/SPI bus
- Power domain
- PMU (Performance Monitoring Unit)
- MSHC (Mobile Storage Host Controller)
- PWM (Pluse Width Modulation)
- AMBA bus

[...]

Quoted 8 lines
Quoted 6 lines
Quoted 4 lines
Quoted 1 line

Where is the arch timer node?

Exynos3250 uses MCT (Multi Core Timer) instead of ARM_ARCH_TIMER.
- in drivers/clocksource/exynos_mct.c

Don't you have a Cortex-A7? If so, you have the arch timer.

Do you means that 'arch timer" is ARM_ARCH_TIMER?

Yes.

Quoted 4 lines

As I knew, ARM_ARCH_TIMER is clocksource driver for system timer. But, Exynos SoC used MCT clocksource for system timer.

Exynos dts file didn't include arch timer node but only include mct node.

Well, it is a bug, and a recurrent one. A Cortex-A7 has the arch timers implemented. Always.

http://infocenter.arm.com/help/topic/com.arm.doc.ddi0464f/BABFEBJJ.html

All Cortex-A7 have it, and so do A12, A15, A17, A53, A57.

Cheers,

	M.
Signature · 1 line
Jazz is not dead. It just smells funny...
author maintainer
#26 lore raw

PATCH v2 8/8 ARM: dts: Add device tree sources for Exynos3250

Hi Marc,

Quoted 42 lines · Marc Zyngier
Quoted 27 lines · Chanwoo Choi
Quoted 26 lines · Marc Zyngier
Quoted 25 lines · Chanwoo Choi

Hi,

Quoted 22 lines · Marc Zyngier
Quoted 18 lines · Chanwoo Choi

From: Tomasz Figa <[email protected]>

This patch add new exynos3250.dtsi to support Exynos3250 SoC based on Cortex-A7 dual core and includes following dt nodes:

- GIC interrupt controller
- Pinctrl to control GPIOs
- Clock controller
- CPU information (Cortex-A7 dual core)
- UART to support serial port
- MCT (Multi Core Timer)
- ADC (Analog Digital Converter)
- I2C/SPI bus
- Power domain
- PMU (Performance Monitoring Unit)
- MSHC (Mobile Storage Host Controller)
- PWM (Pluse Width Modulation)
- AMBA bus

[...]

Quoted 8 lines
Quoted 6 lines
Quoted 4 lines
Quoted 1 line

Where is the arch timer node?

Exynos3250 uses MCT (Multi Core Timer) instead of ARM_ARCH_TIMER.
- in drivers/clocksource/exynos_mct.c

Don't you have a Cortex-A7? If so, you have the arch timer.

Do you means that 'arch timer" is ARM_ARCH_TIMER?

Yes.

Quoted 3 lines

As I knew, ARM_ARCH_TIMER is clocksource driver for system timer. But, Exynos SoC used MCT clocksource for system timer.

Quoted 8 lines
Quoted 1 line

Exynos dts file didn't include arch timer node but only include mct node.

Well, it is a bug, and a recurrent one. A Cortex-A7 has the arch timers implemented. Always.

http://infocenter.arm.com/help/topic/com.arm.doc.ddi0464f/BABFEBJJ.html

All Cortex-A7 have it, and so do A12, A15, A17, A53, A57.

I tested 'arch_timer'(drivers/clocksource/arm_arch_timer.c) on Exynos3250 based on Cortex-A7.

To test arch timer, I used the clocksource of arch_timer for timekeeping instead of clocksource of Exynos MCT. But, I faced with issue. The following function return only same value(zero) as following kernel log:
- arch_counter_get_cntvct() in arch/arm/include/asm/arch_timer.h

Uncompressing Linux... done, booting the kernel.

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.15.0-rc1-00020-gf452826-dirty ...
[    0.000000] CPU: ARMv7 Processor ...
...
[    0.000000] Architected cp15 timer(s) running at 24.00MHz (virt).
[    0.000000] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 2863311519744ns

...

Could you give me a solution to resolve this issue or a expected cause?

Best Regards,
Chanwoo Choi

#27 lore raw

PATCH v2 8/8 ARM: dts: Add device tree sources for Exynos3250

Quoted 71 lines · Chanwoo Choi

Hi Marc,

Quoted 42 lines · Marc Zyngier
Quoted 27 lines · Chanwoo Choi
Quoted 26 lines · Marc Zyngier
Quoted 25 lines · Chanwoo Choi

Hi,

Quoted 22 lines · Marc Zyngier
Quoted 18 lines · Chanwoo Choi

From: Tomasz Figa <[email protected]>

This patch add new exynos3250.dtsi to support Exynos3250 SoC based on Cortex-A7 dual core and includes following dt nodes:

- GIC interrupt controller
- Pinctrl to control GPIOs
- Clock controller
- CPU information (Cortex-A7 dual core)
- UART to support serial port
- MCT (Multi Core Timer)
- ADC (Analog Digital Converter)
- I2C/SPI bus
- Power domain
- PMU (Performance Monitoring Unit)
- MSHC (Mobile Storage Host Controller)
- PWM (Pluse Width Modulation)
- AMBA bus

[...]

Quoted 8 lines
Quoted 6 lines
Quoted 4 lines
Quoted 1 line

Where is the arch timer node?

Exynos3250 uses MCT (Multi Core Timer) instead of ARM_ARCH_TIMER.
- in drivers/clocksource/exynos_mct.c

Don't you have a Cortex-A7? If so, you have the arch timer.

Do you means that 'arch timer" is ARM_ARCH_TIMER?

Yes.

Quoted 3 lines

As I knew, ARM_ARCH_TIMER is clocksource driver for system timer. But, Exynos SoC used MCT clocksource for system timer.

Quoted 8 lines
Quoted 1 line

Exynos dts file didn't include arch timer node but only include mct node.

Well, it is a bug, and a recurrent one. A Cortex-A7 has the arch timers implemented. Always.

http://infocenter.arm.com/help/topic/com.arm.doc.ddi0464f/BABFEBJJ.html

All Cortex-A7 have it, and so do A12, A15, A17, A53, A57.

I tested 'arch_timer'(drivers/clocksource/arm_arch_timer.c) on Exynos3250 based on Cortex-A7.

To test arch timer, I used the clocksource of arch_timer for timekeeping instead of clocksource of Exynos MCT. But, I faced with issue. The following function return only same value(zero) as following kernel log:
- arch_counter_get_cntvct() in arch/arm/include/asm/arch_timer.h

Uncompressing Linux... done, booting the kernel.

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.15.0-rc1-00020-gf452826-dirty ...
[    0.000000] CPU: ARMv7 Processor ...
...
[    0.000000] Architected cp15 timer(s) running at 24.00MHz (virt).
[    0.000000] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 2863311519744ns
Quoted 3 lines

...

Could you give me a solution to resolve this issue or a expected cause?

My guess is that you need to enable some clock for the timer to tick. Ask your HW guys how they have wired this clock.

Also, I cannot help but notice that you are entering your kernel at SVC instead of HYP. I suggest you fix your bootloader/firmware to allow all CPUs to enter the kernel in HYP.

Thanks,

	M.
Signature · 1 line
Jazz is not dead. It just smells funny...
author maintainer
#28 lore raw

PATCH v2 8/8 ARM: dts: Add device tree sources for Exynos3250

Hi Marc,

Quoted 74 lines · Marc Zyngier
Quoted 73 lines · Chanwoo Choi

Hi Marc,

Quoted 42 lines · Marc Zyngier
Quoted 27 lines · Chanwoo Choi
Quoted 26 lines · Marc Zyngier
Quoted 25 lines · Chanwoo Choi

Hi,

Quoted 22 lines · Marc Zyngier
Quoted 18 lines · Chanwoo Choi

From: Tomasz Figa <[email protected]>

This patch add new exynos3250.dtsi to support Exynos3250 SoC based on Cortex-A7 dual core and includes following dt nodes:

- GIC interrupt controller
- Pinctrl to control GPIOs
- Clock controller
- CPU information (Cortex-A7 dual core)
- UART to support serial port
- MCT (Multi Core Timer)
- ADC (Analog Digital Converter)
- I2C/SPI bus
- Power domain
- PMU (Performance Monitoring Unit)
- MSHC (Mobile Storage Host Controller)
- PWM (Pluse Width Modulation)
- AMBA bus

[...]

Quoted 8 lines
Quoted 6 lines
Quoted 4 lines
Quoted 1 line

Where is the arch timer node?

Exynos3250 uses MCT (Multi Core Timer) instead of ARM_ARCH_TIMER.
- in drivers/clocksource/exynos_mct.c

Don't you have a Cortex-A7? If so, you have the arch timer.

Do you means that 'arch timer" is ARM_ARCH_TIMER?

Yes.

Quoted 3 lines

As I knew, ARM_ARCH_TIMER is clocksource driver for system timer. But, Exynos SoC used MCT clocksource for system timer.

Quoted 8 lines
Quoted 1 line

Exynos dts file didn't include arch timer node but only include mct node.

Well, it is a bug, and a recurrent one. A Cortex-A7 has the arch timers implemented. Always.

http://infocenter.arm.com/help/topic/com.arm.doc.ddi0464f/BABFEBJJ.html

All Cortex-A7 have it, and so do A12, A15, A17, A53, A57.

I tested 'arch_timer'(drivers/clocksource/arm_arch_timer.c) on Exynos3250 based on Cortex-A7.

To test arch timer, I used the clocksource of arch_timer for timekeeping instead of clocksource of Exynos MCT. But, I faced with issue. The following function return only same value(zero) as following kernel log:
- arch_counter_get_cntvct() in arch/arm/include/asm/arch_timer.h

Uncompressing Linux... done, booting the kernel.

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.15.0-rc1-00020-gf452826-dirty ...
[    0.000000] CPU: ARMv7 Processor ...
...
[    0.000000] Architected cp15 timer(s) running at 24.00MHz (virt).
[    0.000000] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 2863311519744ns

...

Quoted 8 lines
Quoted 1 line

Could you give me a solution to resolve this issue or a expected cause?

My guess is that you need to enable some clock for the timer to tick. Ask your HW guys how they have wired this clock.

Also, I cannot help but notice that you are entering your kernel at SVC instead of HYP. I suggest you fix your bootloader/firmware to allow all CPUs to enter the kernel in HYP.

OK, I understand. Thanks for your comment.

I think this patchset series will add arch_timer node to exynos3250.dtsi on next patchset(v3).

And then I will post other patch for arch_timer node after find the solution of this issue.

Best Regards,
Chanwoo Choi

author maintainer
#29 lore raw

PATCH v2 8/8 ARM: dts: Add device tree sources for Exynos3250

In reply to Marc Zyngier

Hi Marc,

Quoted 74 lines · Marc Zyngier
Quoted 73 lines · Chanwoo Choi

Hi Marc,

Quoted 42 lines · Marc Zyngier
Quoted 27 lines · Chanwoo Choi
Quoted 26 lines · Marc Zyngier
Quoted 25 lines · Chanwoo Choi

Hi,

Quoted 22 lines · Marc Zyngier
Quoted 18 lines · Chanwoo Choi

From: Tomasz Figa <[email protected]>

This patch add new exynos3250.dtsi to support Exynos3250 SoC based on Cortex-A7 dual core and includes following dt nodes:

- GIC interrupt controller
- Pinctrl to control GPIOs
- Clock controller
- CPU information (Cortex-A7 dual core)
- UART to support serial port
- MCT (Multi Core Timer)
- ADC (Analog Digital Converter)
- I2C/SPI bus
- Power domain
- PMU (Performance Monitoring Unit)
- MSHC (Mobile Storage Host Controller)
- PWM (Pluse Width Modulation)
- AMBA bus

[...]

Quoted 8 lines
Quoted 6 lines
Quoted 4 lines
Quoted 1 line

Where is the arch timer node?

Exynos3250 uses MCT (Multi Core Timer) instead of ARM_ARCH_TIMER.
- in drivers/clocksource/exynos_mct.c

Don't you have a Cortex-A7? If so, you have the arch timer.

Do you means that 'arch timer" is ARM_ARCH_TIMER?

Yes.

Quoted 3 lines

As I knew, ARM_ARCH_TIMER is clocksource driver for system timer. But, Exynos SoC used MCT clocksource for system timer.

Quoted 8 lines
Quoted 1 line

Exynos dts file didn't include arch timer node but only include mct node.

Well, it is a bug, and a recurrent one. A Cortex-A7 has the arch timers implemented. Always.

http://infocenter.arm.com/help/topic/com.arm.doc.ddi0464f/BABFEBJJ.html

All Cortex-A7 have it, and so do A12, A15, A17, A53, A57.

I tested 'arch_timer'(drivers/clocksource/arm_arch_timer.c) on Exynos3250 based on Cortex-A7.

To test arch timer, I used the clocksource of arch_timer for timekeeping instead of clocksource of Exynos MCT. But, I faced with issue. The following function return only same value(zero) as following kernel log:
- arch_counter_get_cntvct() in arch/arm/include/asm/arch_timer.h

Uncompressing Linux... done, booting the kernel.

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.15.0-rc1-00020-gf452826-dirty ...
[    0.000000] CPU: ARMv7 Processor ...
...
[    0.000000] Architected cp15 timer(s) running at 24.00MHz (virt).
[    0.000000] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 2863311519744ns

...

Quoted 8 lines
Quoted 1 line

Could you give me a solution to resolve this issue or a expected cause?

My guess is that you need to enable some clock for the timer to tick. Ask your HW guys how they have wired this clock.

Also, I cannot help but notice that you are entering your kernel at SVC instead of HYP. I suggest you fix your bootloader/firmware to allow all CPUs to enter the kernel in HYP.

I think again that I would like to add arch_timer dt node to exynos3250.dtsi as separated patchset after finishing the test arch_timer clocksource for timekeeping.

Thanks for your review.

Best Regards,
Chanwoo Choi