diff options
Diffstat (limited to 'arch/arm/plat-s5p')
-rw-r--r-- | arch/arm/plat-s5p/Kconfig | 18 | ||||
-rw-r--r-- | arch/arm/plat-s5p/Makefile | 3 | ||||
-rw-r--r-- | arch/arm/plat-s5p/clock.c | 36 | ||||
-rw-r--r-- | arch/arm/plat-s5p/irq-eint.c | 2 | ||||
-rw-r--r-- | arch/arm/plat-s5p/irq-gpioint.c | 2 | ||||
-rw-r--r-- | arch/arm/plat-s5p/irq-pm.c | 25 | ||||
-rw-r--r-- | arch/arm/plat-s5p/sleep.S | 44 |
7 files changed, 113 insertions, 17 deletions
diff --git a/arch/arm/plat-s5p/Kconfig b/arch/arm/plat-s5p/Kconfig index 8167ce66188c..96bea3202304 100644 --- a/arch/arm/plat-s5p/Kconfig +++ b/arch/arm/plat-s5p/Kconfig | |||
@@ -9,8 +9,8 @@ config PLAT_S5P | |||
9 | bool | 9 | bool |
10 | depends on (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210 || ARCH_EXYNOS) | 10 | depends on (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210 || ARCH_EXYNOS) |
11 | default y | 11 | default y |
12 | select ARM_VIC if !ARCH_EXYNOS4 | 12 | select ARM_VIC if !ARCH_EXYNOS |
13 | select ARM_GIC if ARCH_EXYNOS4 | 13 | select ARM_GIC if ARCH_EXYNOS |
14 | select GIC_NON_BANKED if ARCH_EXYNOS4 | 14 | select GIC_NON_BANKED if ARCH_EXYNOS4 |
15 | select NO_IOPORT | 15 | select NO_IOPORT |
16 | select ARCH_REQUIRE_GPIOLIB | 16 | select ARCH_REQUIRE_GPIOLIB |
@@ -40,6 +40,10 @@ config S5P_HRT | |||
40 | help | 40 | help |
41 | Use the High Resolution timer support | 41 | Use the High Resolution timer support |
42 | 42 | ||
43 | config S5P_DEV_UART | ||
44 | def_bool y | ||
45 | depends on (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210) | ||
46 | |||
43 | config S5P_PM | 47 | config S5P_PM |
44 | bool | 48 | bool |
45 | help | 49 | help |
@@ -80,6 +84,16 @@ config S5P_DEV_FIMC3 | |||
80 | help | 84 | help |
81 | Compile in platform device definitions for FIMC controller 3 | 85 | Compile in platform device definitions for FIMC controller 3 |
82 | 86 | ||
87 | config S5P_DEV_JPEG | ||
88 | bool | ||
89 | help | ||
90 | Compile in platform device definitions for JPEG codec | ||
91 | |||
92 | config S5P_DEV_G2D | ||
93 | bool | ||
94 | help | ||
95 | Compile in platform device definitions for G2D device | ||
96 | |||
83 | config S5P_DEV_FIMD0 | 97 | config S5P_DEV_FIMD0 |
84 | bool | 98 | bool |
85 | help | 99 | help |
diff --git a/arch/arm/plat-s5p/Makefile b/arch/arm/plat-s5p/Makefile index 30d8c3016e6b..4bd824136659 100644 --- a/arch/arm/plat-s5p/Makefile +++ b/arch/arm/plat-s5p/Makefile | |||
@@ -12,7 +12,6 @@ obj- := | |||
12 | 12 | ||
13 | # Core files | 13 | # Core files |
14 | 14 | ||
15 | obj-y += dev-uart.o | ||
16 | obj-y += clock.o | 15 | obj-y += clock.o |
17 | obj-y += irq.o | 16 | obj-y += irq.o |
18 | obj-$(CONFIG_S5P_EXT_INT) += irq-eint.o | 17 | obj-$(CONFIG_S5P_EXT_INT) += irq-eint.o |
@@ -23,5 +22,7 @@ obj-$(CONFIG_S5P_SLEEP) += sleep.o | |||
23 | obj-$(CONFIG_S5P_HRT) += s5p-time.o | 22 | obj-$(CONFIG_S5P_HRT) += s5p-time.o |
24 | 23 | ||
25 | # devices | 24 | # devices |
25 | |||
26 | obj-$(CONFIG_S5P_DEV_UART) += dev-uart.o | ||
26 | obj-$(CONFIG_S5P_DEV_MFC) += dev-mfc.o | 27 | obj-$(CONFIG_S5P_DEV_MFC) += dev-mfc.o |
27 | obj-$(CONFIG_S5P_SETUP_MIPIPHY) += setup-mipiphy.o | 28 | obj-$(CONFIG_S5P_SETUP_MIPIPHY) += setup-mipiphy.o |
diff --git a/arch/arm/plat-s5p/clock.c b/arch/arm/plat-s5p/clock.c index 963edea7f7e7..f68a9bb11948 100644 --- a/arch/arm/plat-s5p/clock.c +++ b/arch/arm/plat-s5p/clock.c | |||
@@ -61,6 +61,20 @@ struct clk clk_fout_apll = { | |||
61 | .id = -1, | 61 | .id = -1, |
62 | }; | 62 | }; |
63 | 63 | ||
64 | /* BPLL clock output */ | ||
65 | |||
66 | struct clk clk_fout_bpll = { | ||
67 | .name = "fout_bpll", | ||
68 | .id = -1, | ||
69 | }; | ||
70 | |||
71 | /* CPLL clock output */ | ||
72 | |||
73 | struct clk clk_fout_cpll = { | ||
74 | .name = "fout_cpll", | ||
75 | .id = -1, | ||
76 | }; | ||
77 | |||
64 | /* MPLL clock output | 78 | /* MPLL clock output |
65 | * No need .ctrlbit, this is always on | 79 | * No need .ctrlbit, this is always on |
66 | */ | 80 | */ |
@@ -101,6 +115,28 @@ struct clksrc_sources clk_src_apll = { | |||
101 | .nr_sources = ARRAY_SIZE(clk_src_apll_list), | 115 | .nr_sources = ARRAY_SIZE(clk_src_apll_list), |
102 | }; | 116 | }; |
103 | 117 | ||
118 | /* Possible clock sources for BPLL Mux */ | ||
119 | static struct clk *clk_src_bpll_list[] = { | ||
120 | [0] = &clk_fin_bpll, | ||
121 | [1] = &clk_fout_bpll, | ||
122 | }; | ||
123 | |||
124 | struct clksrc_sources clk_src_bpll = { | ||
125 | .sources = clk_src_bpll_list, | ||
126 | .nr_sources = ARRAY_SIZE(clk_src_bpll_list), | ||
127 | }; | ||
128 | |||
129 | /* Possible clock sources for CPLL Mux */ | ||
130 | static struct clk *clk_src_cpll_list[] = { | ||
131 | [0] = &clk_fin_cpll, | ||
132 | [1] = &clk_fout_cpll, | ||
133 | }; | ||
134 | |||
135 | struct clksrc_sources clk_src_cpll = { | ||
136 | .sources = clk_src_cpll_list, | ||
137 | .nr_sources = ARRAY_SIZE(clk_src_cpll_list), | ||
138 | }; | ||
139 | |||
104 | /* Possible clock sources for MPLL Mux */ | 140 | /* Possible clock sources for MPLL Mux */ |
105 | static struct clk *clk_src_mpll_list[] = { | 141 | static struct clk *clk_src_mpll_list[] = { |
106 | [0] = &clk_fin_mpll, | 142 | [0] = &clk_fin_mpll, |
diff --git a/arch/arm/plat-s5p/irq-eint.c b/arch/arm/plat-s5p/irq-eint.c index c496b359c371..139c050918c5 100644 --- a/arch/arm/plat-s5p/irq-eint.c +++ b/arch/arm/plat-s5p/irq-eint.c | |||
@@ -200,7 +200,7 @@ static struct irq_chip s5p_irq_vic_eint = { | |||
200 | #endif | 200 | #endif |
201 | }; | 201 | }; |
202 | 202 | ||
203 | int __init s5p_init_irq_eint(void) | 203 | static int __init s5p_init_irq_eint(void) |
204 | { | 204 | { |
205 | int irq; | 205 | int irq; |
206 | 206 | ||
diff --git a/arch/arm/plat-s5p/irq-gpioint.c b/arch/arm/plat-s5p/irq-gpioint.c index 1fdfaa4599ce..82c7311017a2 100644 --- a/arch/arm/plat-s5p/irq-gpioint.c +++ b/arch/arm/plat-s5p/irq-gpioint.c | |||
@@ -41,7 +41,7 @@ struct s5p_gpioint_bank { | |||
41 | void (*handler)(unsigned int, struct irq_desc *); | 41 | void (*handler)(unsigned int, struct irq_desc *); |
42 | }; | 42 | }; |
43 | 43 | ||
44 | LIST_HEAD(banks); | 44 | static LIST_HEAD(banks); |
45 | 45 | ||
46 | static int s5p_gpioint_set_type(struct irq_data *d, unsigned int type) | 46 | static int s5p_gpioint_set_type(struct irq_data *d, unsigned int type) |
47 | { | 47 | { |
diff --git a/arch/arm/plat-s5p/irq-pm.c b/arch/arm/plat-s5p/irq-pm.c index 327acb3a4464..d1bfecae6c9f 100644 --- a/arch/arm/plat-s5p/irq-pm.c +++ b/arch/arm/plat-s5p/irq-pm.c | |||
@@ -39,19 +39,32 @@ unsigned long s3c_irqwake_eintallow = 0xffffffffL; | |||
39 | int s3c_irq_wake(struct irq_data *data, unsigned int state) | 39 | int s3c_irq_wake(struct irq_data *data, unsigned int state) |
40 | { | 40 | { |
41 | unsigned long irqbit; | 41 | unsigned long irqbit; |
42 | unsigned int irq_rtc_tic, irq_rtc_alarm; | ||
43 | |||
44 | #ifdef CONFIG_ARCH_EXYNOS | ||
45 | if (soc_is_exynos5250()) { | ||
46 | irq_rtc_tic = EXYNOS5_IRQ_RTC_TIC; | ||
47 | irq_rtc_alarm = EXYNOS5_IRQ_RTC_ALARM; | ||
48 | } else { | ||
49 | irq_rtc_tic = EXYNOS4_IRQ_RTC_TIC; | ||
50 | irq_rtc_alarm = EXYNOS4_IRQ_RTC_ALARM; | ||
51 | } | ||
52 | #else | ||
53 | irq_rtc_tic = IRQ_RTC_TIC; | ||
54 | irq_rtc_alarm = IRQ_RTC_ALARM; | ||
55 | #endif | ||
56 | |||
57 | if (data->irq == irq_rtc_tic || data->irq == irq_rtc_alarm) { | ||
58 | irqbit = 1 << (data->irq + 1 - irq_rtc_alarm); | ||
42 | 59 | ||
43 | switch (data->irq) { | ||
44 | case IRQ_RTC_TIC: | ||
45 | case IRQ_RTC_ALARM: | ||
46 | irqbit = 1 << (data->irq + 1 - IRQ_RTC_ALARM); | ||
47 | if (!state) | 60 | if (!state) |
48 | s3c_irqwake_intmask |= irqbit; | 61 | s3c_irqwake_intmask |= irqbit; |
49 | else | 62 | else |
50 | s3c_irqwake_intmask &= ~irqbit; | 63 | s3c_irqwake_intmask &= ~irqbit; |
51 | break; | 64 | } else { |
52 | default: | ||
53 | return -ENOENT; | 65 | return -ENOENT; |
54 | } | 66 | } |
67 | |||
55 | return 0; | 68 | return 0; |
56 | } | 69 | } |
57 | 70 | ||
diff --git a/arch/arm/plat-s5p/sleep.S b/arch/arm/plat-s5p/sleep.S index 0fd591bfc9fd..006bd01eda02 100644 --- a/arch/arm/plat-s5p/sleep.S +++ b/arch/arm/plat-s5p/sleep.S | |||
@@ -23,9 +23,18 @@ | |||
23 | */ | 23 | */ |
24 | 24 | ||
25 | #include <linux/linkage.h> | 25 | #include <linux/linkage.h> |
26 | #include <asm/assembler.h> | 26 | #include <asm/asm-offsets.h> |
27 | #include <asm/hardware/cache-l2x0.h> | ||
27 | 28 | ||
28 | .text | 29 | /* |
30 | * The following code is located into the .data section. This is to | ||
31 | * allow l2x0_regs_phys to be accessed with a relative load while we | ||
32 | * can't rely on any MMU translation. We could have put l2x0_regs_phys | ||
33 | * in the .text section as well, but some setups might insist on it to | ||
34 | * be truly read-only. (Reference from: arch/arm/kernel/sleep.S) | ||
35 | */ | ||
36 | .data | ||
37 | .align | ||
29 | 38 | ||
30 | /* | 39 | /* |
31 | * sleep magic, to allow the bootloader to check for an valid | 40 | * sleep magic, to allow the bootloader to check for an valid |
@@ -39,11 +48,34 @@ | |||
39 | * s3c_cpu_resume | 48 | * s3c_cpu_resume |
40 | * | 49 | * |
41 | * resume code entry for bootloader to call | 50 | * resume code entry for bootloader to call |
42 | * | ||
43 | * we must put this code here in the data segment as we have no | ||
44 | * other way of restoring the stack pointer after sleep, and we | ||
45 | * must not write to the code segment (code is read-only) | ||
46 | */ | 51 | */ |
47 | 52 | ||
48 | ENTRY(s3c_cpu_resume) | 53 | ENTRY(s3c_cpu_resume) |
54 | #ifdef CONFIG_CACHE_L2X0 | ||
55 | adr r0, l2x0_regs_phys | ||
56 | ldr r0, [r0] | ||
57 | ldr r1, [r0, #L2X0_R_PHY_BASE] | ||
58 | ldr r2, [r1, #L2X0_CTRL] | ||
59 | tst r2, #0x1 | ||
60 | bne resume_l2on | ||
61 | ldr r2, [r0, #L2X0_R_AUX_CTRL] | ||
62 | str r2, [r1, #L2X0_AUX_CTRL] | ||
63 | ldr r2, [r0, #L2X0_R_TAG_LATENCY] | ||
64 | str r2, [r1, #L2X0_TAG_LATENCY_CTRL] | ||
65 | ldr r2, [r0, #L2X0_R_DATA_LATENCY] | ||
66 | str r2, [r1, #L2X0_DATA_LATENCY_CTRL] | ||
67 | ldr r2, [r0, #L2X0_R_PREFETCH_CTRL] | ||
68 | str r2, [r1, #L2X0_PREFETCH_CTRL] | ||
69 | ldr r2, [r0, #L2X0_R_PWR_CTRL] | ||
70 | str r2, [r1, #L2X0_POWER_CTRL] | ||
71 | mov r2, #1 | ||
72 | str r2, [r1, #L2X0_CTRL] | ||
73 | resume_l2on: | ||
74 | #endif | ||
49 | b cpu_resume | 75 | b cpu_resume |
76 | ENDPROC(s3c_cpu_resume) | ||
77 | #ifdef CONFIG_CACHE_L2X0 | ||
78 | .globl l2x0_regs_phys | ||
79 | l2x0_regs_phys: | ||
80 | .long 0 | ||
81 | #endif | ||