aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/Kconfig4
-rw-r--r--arch/arm/Kconfig.instrumentation52
-rw-r--r--arch/arm/mach-at91/board-ek.c9
-rw-r--r--arch/arm/mach-omap1/board-fsample.c14
-rw-r--r--arch/arm/mach-omap1/board-nokia770.c4
-rw-r--r--arch/arm/mach-omap1/board-perseus2.c14
-rw-r--r--arch/arm/mach-pxa/pxa25x.c13
-rw-r--r--arch/arm/mach-pxa/sleep.S6
-rw-r--r--arch/arm/vfp/vfp.h2
-rw-r--r--arch/arm/vfp/vfpdouble.c14
10 files changed, 105 insertions, 27 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index c4de2d4664d7..a04f507e7f2c 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1072,11 +1072,13 @@ source "drivers/rtc/Kconfig"
1072 1072
1073source "drivers/dma/Kconfig" 1073source "drivers/dma/Kconfig"
1074 1074
1075source "drivers/dca/Kconfig"
1076
1075endmenu 1077endmenu
1076 1078
1077source "fs/Kconfig" 1079source "fs/Kconfig"
1078 1080
1079source "kernel/Kconfig.instrumentation" 1081source "arch/arm/Kconfig.instrumentation"
1080 1082
1081source "arch/arm/Kconfig.debug" 1083source "arch/arm/Kconfig.debug"
1082 1084
diff --git a/arch/arm/Kconfig.instrumentation b/arch/arm/Kconfig.instrumentation
new file mode 100644
index 000000000000..63b8c6d5606a
--- /dev/null
+++ b/arch/arm/Kconfig.instrumentation
@@ -0,0 +1,52 @@
1menuconfig INSTRUMENTATION
2 bool "Instrumentation Support"
3 default y
4 ---help---
5 Say Y here to get to see options related to performance measurement,
6 system-wide debugging, and testing. This option alone does not add any
7 kernel code.
8
9 If you say N, all options in this submenu will be skipped and
10 disabled. If you're trying to debug the kernel itself, go see the
11 Kernel Hacking menu.
12
13if INSTRUMENTATION
14
15config PROFILING
16 bool "Profiling support (EXPERIMENTAL)"
17 help
18 Say Y here to enable the extended profiling support mechanisms used
19 by profilers such as OProfile.
20
21config OPROFILE
22 tristate "OProfile system profiling (EXPERIMENTAL)"
23 depends on PROFILING && !UML
24 help
25 OProfile is a profiling system capable of profiling the
26 whole system, include the kernel, kernel modules, libraries,
27 and applications.
28
29 If unsure, say N.
30
31config OPROFILE_ARMV6
32 bool
33 depends on OPROFILE && CPU_V6 && !SMP
34 default y
35 select OPROFILE_ARM11_CORE
36
37config OPROFILE_MPCORE
38 bool
39 depends on OPROFILE && CPU_V6 && SMP
40 default y
41 select OPROFILE_ARM11_CORE
42
43config OPROFILE_ARM11_CORE
44 bool
45
46config MARKERS
47 bool "Activate markers"
48 help
49 Place an empty function call at each marker site. Can be
50 dynamically changed for a probe function.
51
52endif # INSTRUMENTATION
diff --git a/arch/arm/mach-at91/board-ek.c b/arch/arm/mach-at91/board-ek.c
index d05b1b2be9fb..53a5ef9e72ee 100644
--- a/arch/arm/mach-at91/board-ek.c
+++ b/arch/arm/mach-at91/board-ek.c
@@ -109,6 +109,15 @@ static struct spi_board_info ek_spi_devices[] = {
109#endif 109#endif
110}; 110};
111 111
112static struct i2c_board_info __initdata ek_i2c_devices[] = {
113 {
114 I2C_BOARD_INFO("ics1523", 0x26),
115 },
116 {
117 I2C_BOARD_INFO("dac3550", 0x4d),
118 }
119};
120
112#define EK_FLASH_BASE AT91_CHIPSELECT_0 121#define EK_FLASH_BASE AT91_CHIPSELECT_0
113#define EK_FLASH_SIZE 0x200000 122#define EK_FLASH_SIZE 0x200000
114 123
diff --git a/arch/arm/mach-omap1/board-fsample.c b/arch/arm/mach-omap1/board-fsample.c
index f65baa95986e..d5f6ea14fc7b 100644
--- a/arch/arm/mach-omap1/board-fsample.c
+++ b/arch/arm/mach-omap1/board-fsample.c
@@ -40,31 +40,29 @@ static int fsample_keymap[] = {
40 KEY(0,1,KEY_RIGHT), 40 KEY(0,1,KEY_RIGHT),
41 KEY(0,2,KEY_LEFT), 41 KEY(0,2,KEY_LEFT),
42 KEY(0,3,KEY_DOWN), 42 KEY(0,3,KEY_DOWN),
43 KEY(0,4,KEY_CENTER), 43 KEY(0,4,KEY_ENTER),
44 KEY(0,5,KEY_0_5), 44 KEY(1,0,KEY_F10),
45 KEY(1,0,KEY_SOFT2),
46 KEY(1,1,KEY_SEND), 45 KEY(1,1,KEY_SEND),
47 KEY(1,2,KEY_END), 46 KEY(1,2,KEY_END),
48 KEY(1,3,KEY_VOLUMEDOWN), 47 KEY(1,3,KEY_VOLUMEDOWN),
49 KEY(1,4,KEY_VOLUMEUP), 48 KEY(1,4,KEY_VOLUMEUP),
50 KEY(1,5,KEY_RECORD), 49 KEY(1,5,KEY_RECORD),
51 KEY(2,0,KEY_SOFT1), 50 KEY(2,0,KEY_F9),
52 KEY(2,1,KEY_3), 51 KEY(2,1,KEY_3),
53 KEY(2,2,KEY_6), 52 KEY(2,2,KEY_6),
54 KEY(2,3,KEY_9), 53 KEY(2,3,KEY_9),
55 KEY(2,4,KEY_SHARP), 54 KEY(2,4,KEY_KPDOT),
56 KEY(2,5,KEY_2_5),
57 KEY(3,0,KEY_BACK), 55 KEY(3,0,KEY_BACK),
58 KEY(3,1,KEY_2), 56 KEY(3,1,KEY_2),
59 KEY(3,2,KEY_5), 57 KEY(3,2,KEY_5),
60 KEY(3,3,KEY_8), 58 KEY(3,3,KEY_8),
61 KEY(3,4,KEY_0), 59 KEY(3,4,KEY_0),
62 KEY(3,5,KEY_HEADSETHOOK), 60 KEY(3,5,KEY_KPSLASH),
63 KEY(4,0,KEY_HOME), 61 KEY(4,0,KEY_HOME),
64 KEY(4,1,KEY_1), 62 KEY(4,1,KEY_1),
65 KEY(4,2,KEY_4), 63 KEY(4,2,KEY_4),
66 KEY(4,3,KEY_7), 64 KEY(4,3,KEY_7),
67 KEY(4,4,KEY_STAR), 65 KEY(4,4,KEY_KPASTERISK),
68 KEY(4,5,KEY_POWER), 66 KEY(4,5,KEY_POWER),
69 0 67 0
70}; 68};
diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c
index 22db19a53647..182a98a9df4c 100644
--- a/arch/arm/mach-omap1/board-nokia770.c
+++ b/arch/arm/mach-omap1/board-nokia770.c
@@ -36,8 +36,6 @@
36#include <asm/arch/omapfb.h> 36#include <asm/arch/omapfb.h>
37#include <asm/arch/lcd_mipid.h> 37#include <asm/arch/lcd_mipid.h>
38 38
39#include "../plat-omap/dsp/dsp_common.h"
40
41#define ADS7846_PENDOWN_GPIO 15 39#define ADS7846_PENDOWN_GPIO 15
42 40
43static void __init omap_nokia770_init_irq(void) 41static void __init omap_nokia770_init_irq(void)
@@ -318,6 +316,8 @@ static __init int omap_dsp_init(void)
318 out: 316 out:
319 return ret; 317 return ret;
320} 318}
319#else
320#define omap_dsp_init() do {} while (0)
321#endif /* CONFIG_OMAP_DSP */ 321#endif /* CONFIG_OMAP_DSP */
322 322
323static void __init omap_nokia770_init(void) 323static void __init omap_nokia770_init(void)
diff --git a/arch/arm/mach-omap1/board-perseus2.c b/arch/arm/mach-omap1/board-perseus2.c
index 1d5c8d509722..e44437e10eef 100644
--- a/arch/arm/mach-omap1/board-perseus2.c
+++ b/arch/arm/mach-omap1/board-perseus2.c
@@ -39,31 +39,29 @@ static int p2_keymap[] = {
39 KEY(0,1,KEY_RIGHT), 39 KEY(0,1,KEY_RIGHT),
40 KEY(0,2,KEY_LEFT), 40 KEY(0,2,KEY_LEFT),
41 KEY(0,3,KEY_DOWN), 41 KEY(0,3,KEY_DOWN),
42 KEY(0,4,KEY_CENTER), 42 KEY(0,4,KEY_ENTER),
43 KEY(0,5,KEY_0_5), 43 KEY(1,0,KEY_F10),
44 KEY(1,0,KEY_SOFT2),
45 KEY(1,1,KEY_SEND), 44 KEY(1,1,KEY_SEND),
46 KEY(1,2,KEY_END), 45 KEY(1,2,KEY_END),
47 KEY(1,3,KEY_VOLUMEDOWN), 46 KEY(1,3,KEY_VOLUMEDOWN),
48 KEY(1,4,KEY_VOLUMEUP), 47 KEY(1,4,KEY_VOLUMEUP),
49 KEY(1,5,KEY_RECORD), 48 KEY(1,5,KEY_RECORD),
50 KEY(2,0,KEY_SOFT1), 49 KEY(2,0,KEY_F9),
51 KEY(2,1,KEY_3), 50 KEY(2,1,KEY_3),
52 KEY(2,2,KEY_6), 51 KEY(2,2,KEY_6),
53 KEY(2,3,KEY_9), 52 KEY(2,3,KEY_9),
54 KEY(2,4,KEY_SHARP), 53 KEY(2,4,KEY_KPDOT),
55 KEY(2,5,KEY_2_5),
56 KEY(3,0,KEY_BACK), 54 KEY(3,0,KEY_BACK),
57 KEY(3,1,KEY_2), 55 KEY(3,1,KEY_2),
58 KEY(3,2,KEY_5), 56 KEY(3,2,KEY_5),
59 KEY(3,3,KEY_8), 57 KEY(3,3,KEY_8),
60 KEY(3,4,KEY_0), 58 KEY(3,4,KEY_0),
61 KEY(3,5,KEY_HEADSETHOOK), 59 KEY(3,5,KEY_KPSLASH),
62 KEY(4,0,KEY_HOME), 60 KEY(4,0,KEY_HOME),
63 KEY(4,1,KEY_1), 61 KEY(4,1,KEY_1),
64 KEY(4,2,KEY_4), 62 KEY(4,2,KEY_4),
65 KEY(4,3,KEY_7), 63 KEY(4,3,KEY_7),
66 KEY(4,4,KEY_STAR), 64 KEY(4,4,KEY_KPASTERISK),
67 KEY(4,5,KEY_POWER), 65 KEY(4,5,KEY_POWER),
68 0 66 0
69}; 67};
diff --git a/arch/arm/mach-pxa/pxa25x.c b/arch/arm/mach-pxa/pxa25x.c
index dcd81f8d0833..9732d5d9466b 100644
--- a/arch/arm/mach-pxa/pxa25x.c
+++ b/arch/arm/mach-pxa/pxa25x.c
@@ -178,13 +178,19 @@ static void pxa25x_cpu_pm_save(unsigned long *sleep_save)
178 SAVE(GAFR1_L); SAVE(GAFR1_U); 178 SAVE(GAFR1_L); SAVE(GAFR1_U);
179 SAVE(GAFR2_L); SAVE(GAFR2_U); 179 SAVE(GAFR2_L); SAVE(GAFR2_U);
180 180
181 SAVE(ICMR); 181 SAVE(ICMR); ICMR = 0;
182 SAVE(CKEN); 182 SAVE(CKEN);
183 SAVE(PSTR); 183 SAVE(PSTR);
184
185 /* Clear GPIO transition detect bits */
186 GEDR0 = GEDR0; GEDR1 = GEDR1; GEDR2 = GEDR2;
184} 187}
185 188
186static void pxa25x_cpu_pm_restore(unsigned long *sleep_save) 189static void pxa25x_cpu_pm_restore(unsigned long *sleep_save)
187{ 190{
191 /* ensure not to come back here if it wasn't intended */
192 PSPR = 0;
193
188 /* restore registers */ 194 /* restore registers */
189 RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); RESTORE_GPLEVEL(2); 195 RESTORE_GPLEVEL(0); RESTORE_GPLEVEL(1); RESTORE_GPLEVEL(2);
190 RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2); 196 RESTORE(GPDR0); RESTORE(GPDR1); RESTORE(GPDR2);
@@ -195,7 +201,12 @@ static void pxa25x_cpu_pm_restore(unsigned long *sleep_save)
195 RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2); 201 RESTORE(GFER0); RESTORE(GFER1); RESTORE(GFER2);
196 RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2); 202 RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2);
197 203
204 PSSR = PSSR_RDH | PSSR_PH;
205
198 RESTORE(CKEN); 206 RESTORE(CKEN);
207
208 ICLR = 0;
209 ICCR = 1;
199 RESTORE(ICMR); 210 RESTORE(ICMR);
200 RESTORE(PSTR); 211 RESTORE(PSTR);
201} 212}
diff --git a/arch/arm/mach-pxa/sleep.S b/arch/arm/mach-pxa/sleep.S
index aff71fec618a..d0447723b73a 100644
--- a/arch/arm/mach-pxa/sleep.S
+++ b/arch/arm/mach-pxa/sleep.S
@@ -43,11 +43,11 @@ pxa_cpu_save_cp:
43pxa_cpu_save_sp: 43pxa_cpu_save_sp:
44 @ preserve phys address of stack 44 @ preserve phys address of stack
45 mov r0, sp 45 mov r0, sp
46 mov r2, lr 46 str lr, [sp, #-4]!
47 bl sleep_phys_sp 47 bl sleep_phys_sp
48 ldr r1, =sleep_save_sp 48 ldr r1, =sleep_save_sp
49 str r0, [r1] 49 str r0, [r1]
50 mov pc, r2 50 ldr pc, [sp], #4
51 51
52/* 52/*
53 * pxa27x_cpu_suspend() 53 * pxa27x_cpu_suspend()
@@ -270,5 +270,3 @@ resume_after_mmu:
270 mar acc0, r2, r3 270 mar acc0, r2, r3
271#endif 271#endif
272 ldmfd sp!, {r4 - r12, pc} @ return to caller 272 ldmfd sp!, {r4 - r12, pc} @ return to caller
273
274
diff --git a/arch/arm/vfp/vfp.h b/arch/arm/vfp/vfp.h
index 54a2ad6d9ca2..791d0238c68f 100644
--- a/arch/arm/vfp/vfp.h
+++ b/arch/arm/vfp/vfp.h
@@ -361,10 +361,12 @@ u32 vfp_estimate_sqrt_significand(u32 exponent, u32 significand);
361 * OP_SCALAR - this operation always operates in scalar mode 361 * OP_SCALAR - this operation always operates in scalar mode
362 * OP_SD - the instruction exceptionally writes to a single precision result. 362 * OP_SD - the instruction exceptionally writes to a single precision result.
363 * OP_DD - the instruction exceptionally writes to a double precision result. 363 * OP_DD - the instruction exceptionally writes to a double precision result.
364 * OP_SM - the instruction exceptionally reads from a single precision operand.
364 */ 365 */
365#define OP_SCALAR (1 << 0) 366#define OP_SCALAR (1 << 0)
366#define OP_SD (1 << 1) 367#define OP_SD (1 << 1)
367#define OP_DD (1 << 1) 368#define OP_DD (1 << 1)
369#define OP_SM (1 << 2)
368 370
369struct op { 371struct op {
370 u32 (* const fn)(int dd, int dn, int dm, u32 fpscr); 372 u32 (* const fn)(int dd, int dn, int dm, u32 fpscr);
diff --git a/arch/arm/vfp/vfpdouble.c b/arch/arm/vfp/vfpdouble.c
index 190a09ad18eb..6cac43bd1d86 100644
--- a/arch/arm/vfp/vfpdouble.c
+++ b/arch/arm/vfp/vfpdouble.c
@@ -668,8 +668,8 @@ static struct op fops_ext[32] = {
668 [FEXT_TO_IDX(FEXT_FCMPZ)] = { vfp_double_fcmpz, OP_SCALAR }, 668 [FEXT_TO_IDX(FEXT_FCMPZ)] = { vfp_double_fcmpz, OP_SCALAR },
669 [FEXT_TO_IDX(FEXT_FCMPEZ)] = { vfp_double_fcmpez, OP_SCALAR }, 669 [FEXT_TO_IDX(FEXT_FCMPEZ)] = { vfp_double_fcmpez, OP_SCALAR },
670 [FEXT_TO_IDX(FEXT_FCVT)] = { vfp_double_fcvts, OP_SCALAR|OP_SD }, 670 [FEXT_TO_IDX(FEXT_FCVT)] = { vfp_double_fcvts, OP_SCALAR|OP_SD },
671 [FEXT_TO_IDX(FEXT_FUITO)] = { vfp_double_fuito, OP_SCALAR }, 671 [FEXT_TO_IDX(FEXT_FUITO)] = { vfp_double_fuito, OP_SCALAR|OP_SM },
672 [FEXT_TO_IDX(FEXT_FSITO)] = { vfp_double_fsito, OP_SCALAR }, 672 [FEXT_TO_IDX(FEXT_FSITO)] = { vfp_double_fsito, OP_SCALAR|OP_SM },
673 [FEXT_TO_IDX(FEXT_FTOUI)] = { vfp_double_ftoui, OP_SCALAR|OP_SD }, 673 [FEXT_TO_IDX(FEXT_FTOUI)] = { vfp_double_ftoui, OP_SCALAR|OP_SD },
674 [FEXT_TO_IDX(FEXT_FTOUIZ)] = { vfp_double_ftouiz, OP_SCALAR|OP_SD }, 674 [FEXT_TO_IDX(FEXT_FTOUIZ)] = { vfp_double_ftouiz, OP_SCALAR|OP_SD },
675 [FEXT_TO_IDX(FEXT_FTOSI)] = { vfp_double_ftosi, OP_SCALAR|OP_SD }, 675 [FEXT_TO_IDX(FEXT_FTOSI)] = { vfp_double_ftosi, OP_SCALAR|OP_SD },
@@ -1128,7 +1128,7 @@ u32 vfp_double_cpdo(u32 inst, u32 fpscr)
1128 u32 exceptions = 0; 1128 u32 exceptions = 0;
1129 unsigned int dest; 1129 unsigned int dest;
1130 unsigned int dn = vfp_get_dn(inst); 1130 unsigned int dn = vfp_get_dn(inst);
1131 unsigned int dm = vfp_get_dm(inst); 1131 unsigned int dm;
1132 unsigned int vecitr, veclen, vecstride; 1132 unsigned int vecitr, veclen, vecstride;
1133 struct op *fop; 1133 struct op *fop;
1134 1134
@@ -1146,6 +1146,14 @@ u32 vfp_double_cpdo(u32 inst, u32 fpscr)
1146 dest = vfp_get_dd(inst); 1146 dest = vfp_get_dd(inst);
1147 1147
1148 /* 1148 /*
1149 * f[us]ito takes a sN operand, not a dN operand.
1150 */
1151 if (fop->flags & OP_SM)
1152 dm = vfp_get_sm(inst);
1153 else
1154 dm = vfp_get_dm(inst);
1155
1156 /*
1149 * If destination bank is zero, vector length is always '1'. 1157 * If destination bank is zero, vector length is always '1'.
1150 * ARM DDI0100F C5.1.3, C5.3.2. 1158 * ARM DDI0100F C5.1.3, C5.3.2.
1151 */ 1159 */