Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
4c2741ac
Commit
4c2741ac
authored
Mar 15, 2019
by
Russell King
Browse files
Options
Browse Files
Download
Plain Diff
Merge branches 'fixes', 'misc' and 'smp-hotplug' into for-next
parents
d410a8a4
9db043d3
6213f70e
Changes
89
Hide whitespace changes
Inline
Side-by-side
Showing
89 changed files
with
414 additions
and
596 deletions
+414
-596
Documentation/arm/kernel_mode_neon.txt
Documentation/arm/kernel_mode_neon.txt
+2
-2
arch/arm/Kconfig
arch/arm/Kconfig
+1
-2
arch/arm/Kconfig-nommu
arch/arm/Kconfig-nommu
+2
-0
arch/arm/Makefile
arch/arm/Makefile
+1
-1
arch/arm/boot/bootp/Makefile
arch/arm/boot/bootp/Makefile
+1
-1
arch/arm/boot/bootp/init.S
arch/arm/boot/bootp/init.S
+1
-1
arch/arm/boot/compressed/Makefile
arch/arm/boot/compressed/Makefile
+0
-2
arch/arm/boot/compressed/ll_char_wr.S
arch/arm/boot/compressed/ll_char_wr.S
+2
-2
arch/arm/include/asm/assembler.h
arch/arm/include/asm/assembler.h
+6
-6
arch/arm/include/asm/barrier.h
arch/arm/include/asm/barrier.h
+2
-0
arch/arm/include/asm/hardware/entry-macro-iomd.S
arch/arm/include/asm/hardware/entry-macro-iomd.S
+5
-5
arch/arm/include/asm/pgtable.h
arch/arm/include/asm/pgtable.h
+3
-0
arch/arm/include/asm/processor.h
arch/arm/include/asm/processor.h
+5
-1
arch/arm/include/asm/smp.h
arch/arm/include/asm/smp.h
+0
-1
arch/arm/include/asm/smp_twd.h
arch/arm/include/asm/smp_twd.h
+0
-16
arch/arm/include/asm/spinlock.h
arch/arm/include/asm/spinlock.h
+2
-1
arch/arm/include/asm/uaccess.h
arch/arm/include/asm/uaccess.h
+2
-1
arch/arm/include/asm/v7m.h
arch/arm/include/asm/v7m.h
+1
-1
arch/arm/include/asm/vfpmacros.h
arch/arm/include/asm/vfpmacros.h
+4
-4
arch/arm/include/debug/tegra.S
arch/arm/include/debug/tegra.S
+1
-1
arch/arm/kernel/debug.S
arch/arm/kernel/debug.S
+1
-1
arch/arm/kernel/entry-armv.S
arch/arm/kernel/entry-armv.S
+6
-6
arch/arm/kernel/entry-common.S
arch/arm/kernel/entry-common.S
+1
-1
arch/arm/kernel/entry-header.S
arch/arm/kernel/entry-header.S
+6
-5
arch/arm/kernel/entry-v7m.S
arch/arm/kernel/entry-v7m.S
+4
-0
arch/arm/kernel/hyp-stub.S
arch/arm/kernel/hyp-stub.S
+2
-2
arch/arm/kernel/machine_kexec.c
arch/arm/kernel/machine_kexec.c
+4
-1
arch/arm/kernel/smp.c
arch/arm/kernel/smp.c
+3
-7
arch/arm/kernel/smp_twd.c
arch/arm/kernel/smp_twd.c
+0
-66
arch/arm/lib/Makefile
arch/arm/lib/Makefile
+1
-1
arch/arm/lib/bitops.h
arch/arm/lib/bitops.h
+4
-4
arch/arm/lib/clear_user.S
arch/arm/lib/clear_user.S
+1
-1
arch/arm/lib/copy_from_user.S
arch/arm/lib/copy_from_user.S
+1
-1
arch/arm/lib/copy_page.S
arch/arm/lib/copy_page.S
+2
-2
arch/arm/lib/copy_template.S
arch/arm/lib/copy_template.S
+3
-3
arch/arm/lib/copy_to_user.S
arch/arm/lib/copy_to_user.S
+1
-1
arch/arm/lib/csumpartial.S
arch/arm/lib/csumpartial.S
+10
-10
arch/arm/lib/csumpartialcopygeneric.S
arch/arm/lib/csumpartialcopygeneric.S
+2
-2
arch/arm/lib/csumpartialcopyuser.S
arch/arm/lib/csumpartialcopyuser.S
+1
-1
arch/arm/lib/div64.S
arch/arm/lib/div64.S
+2
-2
arch/arm/lib/floppydma.S
arch/arm/lib/floppydma.S
+5
-5
arch/arm/lib/io-readsb.S
arch/arm/lib/io-readsb.S
+10
-10
arch/arm/lib/io-readsl.S
arch/arm/lib/io-readsl.S
+1
-1
arch/arm/lib/io-readsw-armv3.S
arch/arm/lib/io-readsw-armv3.S
+3
-3
arch/arm/lib/io-readsw-armv4.S
arch/arm/lib/io-readsw-armv4.S
+6
-6
arch/arm/lib/io-writesb.S
arch/arm/lib/io-writesb.S
+10
-10
arch/arm/lib/io-writesl.S
arch/arm/lib/io-writesl.S
+1
-1
arch/arm/lib/io-writesw-armv3.S
arch/arm/lib/io-writesw-armv3.S
+1
-1
arch/arm/lib/io-writesw-armv4.S
arch/arm/lib/io-writesw-armv4.S
+3
-3
arch/arm/lib/lib1funcs.S
arch/arm/lib/lib1funcs.S
+2
-2
arch/arm/lib/memcpy.S
arch/arm/lib/memcpy.S
+2
-2
arch/arm/lib/memmove.S
arch/arm/lib/memmove.S
+12
-12
arch/arm/lib/memset.S
arch/arm/lib/memset.S
+21
-21
arch/arm/lib/xor-neon.c
arch/arm/lib/xor-neon.c
+1
-1
arch/arm/mach-actions/platsmp.c
arch/arm/mach-actions/platsmp.c
+0
-15
arch/arm/mach-exynos/headsmp.S
arch/arm/mach-exynos/headsmp.S
+1
-1
arch/arm/mach-exynos/platsmp.c
arch/arm/mach-exynos/platsmp.c
+18
-13
arch/arm/mach-ks8695/include/mach/entry-macro.S
arch/arm/mach-ks8695/include/mach/entry-macro.S
+1
-1
arch/arm/mach-omap2/prm_common.c
arch/arm/mach-omap2/prm_common.c
+3
-1
arch/arm/mach-oxnas/Makefile
arch/arm/mach-oxnas/Makefile
+0
-1
arch/arm/mach-oxnas/hotplug.c
arch/arm/mach-oxnas/hotplug.c
+0
-109
arch/arm/mach-oxnas/platsmp.c
arch/arm/mach-oxnas/platsmp.c
+0
-4
arch/arm/mach-prima2/common.h
arch/arm/mach-prima2/common.h
+2
-0
arch/arm/mach-prima2/headsmp.S
arch/arm/mach-prima2/headsmp.S
+1
-1
arch/arm/mach-prima2/hotplug.c
arch/arm/mach-prima2/hotplug.c
+2
-1
arch/arm/mach-prima2/platsmp.c
arch/arm/mach-prima2/platsmp.c
+10
-7
arch/arm/mach-qcom/platsmp.c
arch/arm/mach-qcom/platsmp.c
+0
-26
arch/arm/mach-spear/generic.h
arch/arm/mach-spear/generic.h
+2
-0
arch/arm/mach-spear/headsmp.S
arch/arm/mach-spear/headsmp.S
+1
-1
arch/arm/mach-spear/hotplug.c
arch/arm/mach-spear/hotplug.c
+3
-1
arch/arm/mach-spear/platsmp.c
arch/arm/mach-spear/platsmp.c
+16
-11
arch/arm/mach-tegra/reset-handler.S
arch/arm/mach-tegra/reset-handler.S
+1
-1
arch/arm/mm/cache-v6.S
arch/arm/mm/cache-v6.S
+4
-4
arch/arm/mm/copypage-v4mc.c
arch/arm/mm/copypage-v4mc.c
+2
-1
arch/arm/mm/copypage-v4wb.c
arch/arm/mm/copypage-v4wb.c
+2
-1
arch/arm/mm/copypage-v4wt.c
arch/arm/mm/copypage-v4wt.c
+2
-1
arch/arm/mm/dma-mapping.c
arch/arm/mm/dma-mapping.c
+1
-1
arch/arm/mm/idmap.c
arch/arm/mm/idmap.c
+3
-1
arch/arm/mm/init.c
arch/arm/mm/init.c
+4
-65
arch/arm/mm/pmsa-v8.c
arch/arm/mm/pmsa-v8.c
+2
-2
arch/arm/mm/proc-v7m.S
arch/arm/mm/proc-v7m.S
+5
-2
drivers/amba/bus.c
drivers/amba/bus.c
+37
-8
drivers/hwtracing/coresight/coresight-etm3x.c
drivers/hwtracing/coresight/coresight-etm3x.c
+13
-31
drivers/hwtracing/coresight/coresight-etm4x.c
drivers/hwtracing/coresight/coresight-etm4x.c
+12
-9
drivers/hwtracing/coresight/coresight-priv.h
drivers/hwtracing/coresight/coresight-priv.h
+40
-0
drivers/hwtracing/coresight/coresight-stm.c
drivers/hwtracing/coresight/coresight-stm.c
+3
-11
drivers/hwtracing/coresight/coresight-tmc.c
drivers/hwtracing/coresight/coresight-tmc.c
+9
-21
include/linux/amba/bus.h
include/linux/amba/bus.h
+39
-0
lib/raid6/Makefile
lib/raid6/Makefile
+1
-1
No files found.
Documentation/arm/kernel_mode_neon.txt
View file @
4c2741ac
...
...
@@ -6,7 +6,7 @@ TL;DR summary
* Use only NEON instructions, or VFP instructions that don't rely on support
code
* Isolate your NEON code in a separate compilation unit, and compile it with
'-mfpu=neon -mfloat-abi=softfp'
'-m
arch=armv7-a -m
fpu=neon -mfloat-abi=softfp'
* Put kernel_neon_begin() and kernel_neon_end() calls around the calls into your
NEON code
* Don't sleep in your NEON code, and be aware that it will be executed with
...
...
@@ -87,7 +87,7 @@ instructions appearing in unexpected places if no special care is taken.
Therefore, the recommended and only supported way of using NEON/VFP in the
kernel is by adhering to the following rules:
* isolate the NEON code in a separate compilation unit and compile it with
'-mfpu=neon -mfloat-abi=softfp';
'-m
arch=armv7-a -m
fpu=neon -mfloat-abi=softfp';
* issue the calls to kernel_neon_begin(), kernel_neon_end() as well as the calls
into the unit containing the NEON code from a compilation unit which is *not*
built with the GCC flag '-mfpu=neon' set.
...
...
arch/arm/Kconfig
View file @
4c2741ac
...
...
@@ -1304,7 +1304,7 @@ config SCHED_SMT
config HAVE_ARM_SCU
bool
help
This option enables support for the ARM s
ystem coherency
unit
This option enables support for the ARM s
noop control
unit
config HAVE_ARM_ARCH_TIMER
bool "Architected timer support"
...
...
@@ -1316,7 +1316,6 @@ config HAVE_ARM_ARCH_TIMER
config HAVE_ARM_TWD
bool
select TIMER_OF if OF
help
This options enables support for the ARM timer and watchdog unit
...
...
arch/arm/Kconfig-nommu
View file @
4c2741ac
...
...
@@ -20,10 +20,12 @@ config DRAM_SIZE
config FLASH_MEM_BASE
hex 'FLASH Base Address' if SET_MEM_PARAM
depends on CPU_ARM740T || CPU_ARM946E || CPU_ARM940T
default 0x00400000
config FLASH_SIZE
hex 'FLASH Size' if SET_MEM_PARAM
depends on CPU_ARM740T || CPU_ARM946E || CPU_ARM940T
default 0x00400000
config PROCESSOR_ID
...
...
arch/arm/Makefile
View file @
4c2741ac
...
...
@@ -10,7 +10,7 @@
#
# Copyright (C) 1995-2001 by Russell King
LDFLAGS_vmlinux
:=
-p
--no-undefined
-X
--pic-veneer
LDFLAGS_vmlinux
:=
--no-undefined
-X
--pic-veneer
ifeq
($(CONFIG_CPU_ENDIAN_BE8),y)
LDFLAGS_vmlinux
+=
--be8
KBUILD_LDFLAGS_MODULE
+=
--be8
...
...
arch/arm/boot/bootp/Makefile
View file @
4c2741ac
...
...
@@ -8,7 +8,7 @@
GCOV_PROFILE
:=
n
LDFLAGS_bootp
:=
-p
--no-undefined
-X
\
LDFLAGS_bootp
:=
--no-undefined
-X
\
--defsym
initrd_phys
=
$(INITRD_PHYS)
\
--defsym
params_phys
=
$(PARAMS_PHYS)
-T
AFLAGS_initrd.o
:=
-DINITRD
=
\"
$(INITRD)
\"
...
...
arch/arm/boot/bootp/init.S
View file @
4c2741ac
...
...
@@ -44,7 +44,7 @@ _start: add lr, pc, #-0x8 @ lr = current load addr
*/
movne
r10
,
#
0
@
terminator
movne
r4
,
#
2
@
Size
of
this
entry
(
2
words
)
stm
neia
r9
,
{
r4
,
r5
,
r10
}
@
Size
,
ATAG_CORE
,
terminator
stm
iane
r9
,
{
r4
,
r5
,
r10
}
@
Size
,
ATAG_CORE
,
terminator
/*
*
find
the
end
of
the
tag
list
,
and
then
add
an
INITRD
tag
on
the
end
.
...
...
arch/arm/boot/compressed/Makefile
View file @
4c2741ac
...
...
@@ -132,8 +132,6 @@ endif
ifeq
($(CONFIG_CPU_ENDIAN_BE8),y)
LDFLAGS_vmlinux
+=
--be8
endif
# ?
LDFLAGS_vmlinux
+=
-p
# Report unresolved symbol references
LDFLAGS_vmlinux
+=
--no-undefined
# Delete all temporary local symbols
...
...
arch/arm/boot/compressed/ll_char_wr.S
View file @
4c2741ac
...
...
@@ -75,7 +75,7 @@ Lrow4bpplp:
tst
r1
,
#
7
@
avoid
using
r7
directly
after
str
r7
,
[
r0
,
-
r5
]!
subne
r1
,
r1
,
#
1
ldr
neb
r7
,
[
r6
,
r1
]
ldr
bne
r7
,
[
r6
,
r1
]
bne
Lrow4bpplp
ldmfd
sp
!,
{
r4
-
r7
,
pc
}
...
...
@@ -103,7 +103,7 @@ Lrow8bpplp:
sub
r0
,
r0
,
r5
@
avoid
ip
stmia
r0
,
{
r4
,
ip
}
subne
r1
,
r1
,
#
1
ldr
neb
r7
,
[
r6
,
r1
]
ldr
bne
r7
,
[
r6
,
r1
]
bne
Lrow8bpplp
ldmfd
sp
!,
{
r4
-
r7
,
pc
}
...
...
arch/arm/include/asm/assembler.h
View file @
4c2741ac
...
...
@@ -376,9 +376,9 @@ THUMB( orr \reg , \reg , #PSR_T_BIT )
.
macro
usraccoff
,
instr
,
reg
,
ptr
,
inc
,
off
,
cond
,
abort
,
t
=
TUSER
()
9999
:
.
if
\
inc
==
1
\
instr
\
cond
\
()
b
\
()
\
t
\
().
w
\
reg
,
[
\
ptr
,
#\
off
]
\
instr
\
()
b
\
t
\
cond
\
().
w
\
reg
,
[
\
ptr
,
#\
off
]
.
elseif
\
inc
==
4
\
instr
\
cond
\
()
\
t
\
().
w
\
reg
,
[
\
ptr
,
#\
off
]
\
instr
\
t
\
cond
\
().
w
\
reg
,
[
\
ptr
,
#\
off
]
.
else
.
error
"Unsupported inc macro argument"
.
endif
...
...
@@ -417,9 +417,9 @@ THUMB( orr \reg , \reg , #PSR_T_BIT )
.
rept
\
rept
9999
:
.
if
\
inc
==
1
\
instr
\
cond
\
()
b
\
()
\
t
\
reg
,
[
\
ptr
],
#\
inc
\
instr
\
()
b
\
t
\
cond
\
reg
,
[
\
ptr
],
#\
inc
.
elseif
\
inc
==
4
\
instr
\
cond
\
()
\
t
\
reg
,
[
\
ptr
],
#\
inc
\
instr
\
t
\
cond
\
reg
,
[
\
ptr
],
#\
inc
.
else
.
error
"Unsupported inc macro argument"
.
endif
...
...
@@ -460,7 +460,7 @@ THUMB( orr \reg , \reg , #PSR_T_BIT )
.
macro
check_uaccess
,
addr
:
req
,
size
:
req
,
limit
:
req
,
tmp
:
req
,
bad
:
req
#ifndef CONFIG_CPU_USE_DOMAINS
adds
\
tmp
,
\
addr
,
#\
size
-
1
sbc
ccs
\
tmp
,
\
tmp
,
\
limit
sbc
scc
\
tmp
,
\
tmp
,
\
limit
bcs
\
bad
#ifdef CONFIG_CPU_SPECTRE
movcs
\
addr
,
#
0
...
...
@@ -474,7 +474,7 @@ THUMB( orr \reg , \reg , #PSR_T_BIT )
sub
\
tmp
,
\
limit
,
#
1
subs
\
tmp
,
\
tmp
,
\
addr
@
tmp
=
limit
-
1
-
addr
addhs
\
tmp
,
\
tmp
,
#
1
@
if
(
tmp
>=
0
)
{
sub
hs
s
\
tmp
,
\
tmp
,
\
size
@
tmp
=
limit
-
(
addr
+
size
)
}
sub
sh
s
\
tmp
,
\
tmp
,
\
size
@
tmp
=
limit
-
(
addr
+
size
)
}
movlo
\
addr
,
#
0
@
if
(
tmp
<
0
)
addr
=
NULL
csdb
#endif
...
...
arch/arm/include/asm/barrier.h
View file @
4c2741ac
...
...
@@ -11,6 +11,8 @@
#define sev() __asm__ __volatile__ ("sev" : : : "memory")
#define wfe() __asm__ __volatile__ ("wfe" : : : "memory")
#define wfi() __asm__ __volatile__ ("wfi" : : : "memory")
#else
#define wfe() do { } while (0)
#endif
#if __LINUX_ARM_ARCH__ >= 7
...
...
arch/arm/include/asm/hardware/entry-macro-iomd.S
View file @
4c2741ac
...
...
@@ -16,25 +16,25 @@
ldr
\
tmp
,
=
irq_prio_h
teq
\
irqstat
,
#
0
#ifdef IOMD_BASE
ldr
eqb
\
irqstat
,
[
\
base
,
#
IOMD_DMAREQ
]
@
get
dma
ldr
beq
\
irqstat
,
[
\
base
,
#
IOMD_DMAREQ
]
@
get
dma
addeq
\
tmp
,
\
tmp
,
#
256
@
irq_prio_h
table
size
teqeq
\
irqstat
,
#
0
bne
2406
f
#endif
ldr
eqb
\
irqstat
,
[
\
base
,
#
IOMD_IRQREQA
]
@
get
low
priority
ldr
beq
\
irqstat
,
[
\
base
,
#
IOMD_IRQREQA
]
@
get
low
priority
addeq
\
tmp
,
\
tmp
,
#
256
@
irq_prio_d
table
size
teqeq
\
irqstat
,
#
0
#ifdef IOMD_IRQREQC
ldr
eqb
\
irqstat
,
[
\
base
,
#
IOMD_IRQREQC
]
ldr
beq
\
irqstat
,
[
\
base
,
#
IOMD_IRQREQC
]
addeq
\
tmp
,
\
tmp
,
#
256
@
irq_prio_l
table
size
teqeq
\
irqstat
,
#
0
#endif
#ifdef IOMD_IRQREQD
ldr
eqb
\
irqstat
,
[
\
base
,
#
IOMD_IRQREQD
]
ldr
beq
\
irqstat
,
[
\
base
,
#
IOMD_IRQREQD
]
addeq
\
tmp
,
\
tmp
,
#
256
@
irq_prio_lc
table
size
teqeq
\
irqstat
,
#
0
#endif
2406
:
ldr
neb
\
irqnr
,
[
\
tmp
,
\
irqstat
]
@
get
IRQ
number
2406
:
ldr
bne
\
irqnr
,
[
\
tmp
,
\
irqstat
]
@
get
IRQ
number
.
endm
/*
...
...
arch/arm/include/asm/pgtable.h
View file @
4c2741ac
...
...
@@ -125,6 +125,9 @@ extern pgprot_t pgprot_s2_device;
#define pgprot_stronglyordered(prot) \
__pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_UNCACHED)
#define pgprot_device(prot) \
__pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_DEV_SHARED | L_PTE_SHARED | L_PTE_DIRTY | L_PTE_XN)
#ifdef CONFIG_ARM_DMA_MEM_BUFFERABLE
#define pgprot_dmacoherent(prot) \
__pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_BUFFERABLE | L_PTE_XN)
...
...
arch/arm/include/asm/processor.h
View file @
4c2741ac
...
...
@@ -89,7 +89,11 @@ extern void release_thread(struct task_struct *);
unsigned
long
get_wchan
(
struct
task_struct
*
p
);
#if __LINUX_ARM_ARCH__ == 6 || defined(CONFIG_ARM_ERRATA_754327)
#define cpu_relax() smp_mb()
#define cpu_relax() \
do { \
smp_mb(); \
__asm__ __volatile__("nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;"); \
} while (0)
#else
#define cpu_relax() barrier()
#endif
...
...
arch/arm/include/asm/smp.h
View file @
4c2741ac
...
...
@@ -67,7 +67,6 @@ struct secondary_data {
void
*
stack
;
};
extern
struct
secondary_data
secondary_data
;
extern
volatile
int
pen_release
;
extern
void
secondary_startup
(
void
);
extern
void
secondary_startup_arm
(
void
);
...
...
arch/arm/include/asm/smp_twd.h
View file @
4c2741ac
...
...
@@ -19,20 +19,4 @@
#define TWD_TIMER_CONTROL_PERIODIC (1 << 1)
#define TWD_TIMER_CONTROL_IT_ENABLE (1 << 2)
#include <linux/ioport.h>
struct
twd_local_timer
{
struct
resource
res
[
2
];
};
#define DEFINE_TWD_LOCAL_TIMER(name,base,irq) \
struct twd_local_timer name __initdata = { \
.res = { \
DEFINE_RES_MEM(base, 0x10), \
DEFINE_RES_IRQ(irq), \
}, \
};
int
twd_local_timer_register
(
struct
twd_local_timer
*
);
#endif
arch/arm/include/asm/spinlock.h
View file @
4c2741ac
...
...
@@ -210,11 +210,12 @@ static inline void arch_read_lock(arch_rwlock_t *rw)
prefetchw
(
&
rw
->
lock
);
__asm__
__volatile__
(
" .syntax unified
\n
"
"1: ldrex %0, [%2]
\n
"
" adds %0, %0, #1
\n
"
" strexpl %1, %0, [%2]
\n
"
WFE
(
"mi"
)
" rsb
pls
%0, %1, #0
\n
"
" rsb
spl
%0, %1, #0
\n
"
" bmi 1b"
:
"=&r"
(
tmp
),
"=&r"
(
tmp2
)
:
"r"
(
&
rw
->
lock
)
...
...
arch/arm/include/asm/uaccess.h
View file @
4c2741ac
...
...
@@ -86,7 +86,8 @@ static inline void set_fs(mm_segment_t fs)
#define __range_ok(addr, size) ({ \
unsigned long flag, roksum; \
__chk_user_ptr(addr); \
__asm__("adds %1, %2, %3; sbcccs %1, %1, %0; movcc %0, #0" \
__asm__(".syntax unified\n" \
"adds %1, %2, %3; sbcscc %1, %1, %0; movcc %0, #0" \
: "=&r" (flag), "=&r" (roksum) \
: "r" (addr), "Ir" (size), "0" (current_thread_info()->addr_limit) \
: "cc"); \
...
...
arch/arm/include/asm/v7m.h
View file @
4c2741ac
...
...
@@ -49,7 +49,7 @@
* (0 -> msp; 1 -> psp). Bits [1:0] are fixed to 0b01.
*/
#define EXC_RET_STACK_MASK 0x00000004
#define EXC_RET_THREADMODE_PROCESSSTACK
0xfffffffd
#define EXC_RET_THREADMODE_PROCESSSTACK
(3 << 2)
/* Cache related definitions */
...
...
arch/arm/include/asm/vfpmacros.h
View file @
4c2741ac
...
...
@@ -29,13 +29,13 @@
ldr
\
tmp
,
=
elf_hwcap
@
may
not
have
MVFR
regs
ldr
\
tmp
,
[
\
tmp
,
#
0
]
tst
\
tmp
,
#
HWCAP_VFPD32
ldc
nel
p11
,
cr0
,
[
\
base
],
#
32
*
4
@
FLDMIAD
\
base
!
,
{
d16
-
d31
}
ldc
lne
p11
,
cr0
,
[
\
base
],
#
32
*
4
@
FLDMIAD
\
base
!
,
{
d16
-
d31
}
addeq
\
base
,
\
base
,
#
32
*
4
@
step
over
unused
register
space
#else
VFPFMRX
\
tmp
,
MVFR0
@
Media
and
VFP
Feature
Register
0
and
\
tmp
,
\
tmp
,
#
MVFR0_A_SIMD_MASK
@
A_SIMD
field
cmp
\
tmp
,
#
2
@
32
x
64
bit
registers
?
ldc
eql
p11
,
cr0
,
[
\
base
],
#
32
*
4
@
FLDMIAD
\
base
!
,
{
d16
-
d31
}
ldc
leq
p11
,
cr0
,
[
\
base
],
#
32
*
4
@
FLDMIAD
\
base
!
,
{
d16
-
d31
}
addne
\
base
,
\
base
,
#
32
*
4
@
step
over
unused
register
space
#endif
#endif
...
...
@@ -53,13 +53,13 @@
ldr
\
tmp
,
=
elf_hwcap
@
may
not
have
MVFR
regs
ldr
\
tmp
,
[
\
tmp
,
#
0
]
tst
\
tmp
,
#
HWCAP_VFPD32
stc
nel
p11
,
cr0
,
[
\
base
],
#
32
*
4
@
FSTMIAD
\
base
!
,
{
d16
-
d31
}
stc
lne
p11
,
cr0
,
[
\
base
],
#
32
*
4
@
FSTMIAD
\
base
!
,
{
d16
-
d31
}
addeq
\
base
,
\
base
,
#
32
*
4
@
step
over
unused
register
space
#else
VFPFMRX
\
tmp
,
MVFR0
@
Media
and
VFP
Feature
Register
0
and
\
tmp
,
\
tmp
,
#
MVFR0_A_SIMD_MASK
@
A_SIMD
field
cmp
\
tmp
,
#
2
@
32
x
64
bit
registers
?
stc
eql
p11
,
cr0
,
[
\
base
],
#
32
*
4
@
FSTMIAD
\
base
!
,
{
d16
-
d31
}
stc
leq
p11
,
cr0
,
[
\
base
],
#
32
*
4
@
FSTMIAD
\
base
!
,
{
d16
-
d31
}
addne
\
base
,
\
base
,
#
32
*
4
@
step
over
unused
register
space
#endif
#endif
...
...
arch/arm/include/debug/tegra.S
View file @
4c2741ac
...
...
@@ -173,7 +173,7 @@
.
macro
senduart
,
rd
,
rx
cmp
\
rx
,
#
0
str
neb
\
rd
,
[
\
rx
,
#
UART_TX
<<
UART_SHIFT
]
str
bne
\
rd
,
[
\
rx
,
#
UART_TX
<<
UART_SHIFT
]
1001
:
.
endm
...
...
arch/arm/kernel/debug.S
View file @
4c2741ac
...
...
@@ -86,7 +86,7 @@ hexbuf_rel: .long hexbuf_addr - .
ENTRY
(
printascii
)
addruart_current
r3
,
r1
,
r2
1
:
teq
r0
,
#
0
ldr
neb
r1
,
[
r0
],
#
1
ldr
bne
r1
,
[
r0
],
#
1
teqne
r1
,
#
0
reteq
lr
2
:
teq
r1
,
#
'\n'
...
...
arch/arm/kernel/entry-armv.S
View file @
4c2741ac
...
...
@@ -636,7 +636,7 @@ call_fpe:
@
Test
if
we
need
to
give
access
to
iWMMXt
coprocessors
ldr
r5
,
[
r10
,
#
TI_FLAGS
]
rsbs
r7
,
r8
,
#(
1
<<
8
)
@
CP
0
or
1
only
mov
cs
s
r7
,
r5
,
lsr
#(
TIF_USING_IWMMXT
+
1
)
mov
sc
s
r7
,
r5
,
lsr
#(
TIF_USING_IWMMXT
+
1
)
bcs
iwmmxt_task_enable
#endif
ARM
(
add
pc
,
pc
,
r8
,
lsr
#
6
)
...
...
@@ -872,7 +872,7 @@ __kuser_cmpxchg64: @ 0xffff0f60
smp_dmb
arm
1
:
ldrexd
r0
,
r1
,
[
r2
]
@
load
current
val
eors
r3
,
r0
,
r4
@
compare
with
oldval
(
1
)
eor
eqs
r3
,
r1
,
r5
@
compare
with
oldval
(
2
)
eor
seq
r3
,
r1
,
r5
@
compare
with
oldval
(
2
)
strexdeq
r3
,
r6
,
r7
,
[
r2
]
@
store
newval
if
eq
teqeq
r3
,
#
1
@
success
?
beq
1
b
@
if
no
then
retry
...
...
@@ -896,8 +896,8 @@ __kuser_cmpxchg64: @ 0xffff0f60
ldmia
r1
,
{
r6
,
lr
}
@
load
new
val
1
:
ldmia
r2
,
{
r0
,
r1
}
@
load
current
val
eors
r3
,
r0
,
r4
@
compare
with
oldval
(
1
)
eor
eqs
r3
,
r1
,
r5
@
compare
with
oldval
(
2
)
2
:
stm
eqia
r2
,
{
r6
,
lr
}
@
store
newval
if
eq
eor
seq
r3
,
r1
,
r5
@
compare
with
oldval
(
2
)
2
:
stm
iaeq
r2
,
{
r6
,
lr
}
@
store
newval
if
eq
rsbs
r0
,
r3
,
#
0
@
set
return
val
and
C
flag
ldmfd
sp
!,
{
r4
,
r5
,
r6
,
pc
}
...
...
@@ -911,7 +911,7 @@ kuser_cmpxchg64_fixup:
mov
r7
,
#
0xffff0fff
sub
r7
,
r7
,
#(
0xffff0fff
-
(
0xffff0f60
+
(
1
b
-
__kuser_cmpxchg64
)))
subs
r8
,
r4
,
r7
rsb
cs
s
r8
,
r8
,
#(
2
b
-
1
b
)
rsb
sc
s
r8
,
r8
,
#(
2
b
-
1
b
)
strcs
r7
,
[
sp
,
#
S_PC
]
#if __LINUX_ARM_ARCH__ < 6
bcc
kuser_cmpxchg32_fixup
...
...
@@ -969,7 +969,7 @@ kuser_cmpxchg32_fixup:
mov
r7
,
#
0xffff0fff
sub
r7
,
r7
,
#(
0xffff0fff
-
(
0xffff0fc0
+
(
1
b
-
__kuser_cmpxchg
)))
subs
r8
,
r4
,
r7
rsb
cs
s
r8
,
r8
,
#(
2
b
-
1
b
)
rsb
sc
s
r8
,
r8
,
#(
2
b
-
1
b
)
strcs
r7
,
[
sp
,
#
S_PC
]
ret
lr
.
previous
...
...
arch/arm/kernel/entry-common.S
View file @
4c2741ac
...
...
@@ -373,7 +373,7 @@ sys_syscall:
movhs
scno
,
#
0
csdb
#endif
stm
loia
sp
,
{
r5
,
r6
}
@
shuffle
args
stm
ialo
sp
,
{
r5
,
r6
}
@
shuffle
args
movlo
r0
,
r1
movlo
r1
,
r2
movlo
r2
,
r3
...
...
arch/arm/kernel/entry-header.S
View file @
4c2741ac
...
...
@@ -127,7 +127,8 @@
*/
.
macro
v7m_exception_slow_exit
ret_r0
cpsid
i
ldr
lr
,
=
EXC_RET_THREADMODE_PROCESSSTACK
ldr
lr
,
=
exc_ret
ldr
lr
,
[
lr
]
@
read
original
r12
,
sp
,
lr
,
pc
and
xPSR
add
r12
,
sp
,
#
S_IP
...
...
@@ -387,8 +388,8 @@
badr
lr
,
\
ret
@
return
address
.
if
\
reload
add
r1
,
sp
,
#
S_R0
+
S_OFF
@
pointer
to
regs
ldm
ccia
r1
,
{
r0
-
r6
}
@
reload
r0
-
r6
stm
ccia
sp
,
{
r4
,
r5
}
@
update
stack
arguments
ldm
iacc
r1
,
{
r0
-
r6
}
@
reload
r0
-
r6
stm
iacc
sp
,
{
r4
,
r5
}
@
update
stack
arguments
.
endif
ldrcc
pc
,
[
\
table
,
\
tmp
,
lsl
#
2
]
@
call
sys_
*
routine
#else
...
...
@@ -396,8 +397,8 @@
badr
lr
,
\
ret
@
return
address
.
if
\
reload
add
r1
,
sp
,
#
S_R0
+
S_OFF
@
pointer
to
regs
ldm
ccia
r1
,
{
r0
-
r6
}
@
reload
r0
-
r6
stm
ccia
sp
,
{
r4
,
r5
}
@
update
stack
arguments
ldm
iacc
r1
,
{
r0
-
r6
}
@
reload
r0
-
r6
stm
iacc
sp
,
{
r4
,
r5
}
@
update
stack
arguments
.
endif
ldrcc
pc
,
[
\
table
,
\
nr
,
lsl
#
2
]
@
call
sys_
*
routine
#endif
...
...
arch/arm/kernel/entry-v7m.S
View file @
4c2741ac
...
...
@@ -146,3 +146,7 @@ ENTRY(vector_table)
.
rept
CONFIG_CPU_V7M_NUM_IRQ
.
long
__irq_entry
@
External
Interrupts
.
endr
.
align
2
.
globl
exc_ret
exc_ret
:
.
space
4
arch/arm/kernel/hyp-stub.S
View file @
4c2741ac
...
...
@@ -180,8 +180,8 @@ ARM_BE8(orr r7, r7, #(1 << 25)) @ HSCTLR.EE
@
Check
whether
GICv3
system
registers
are
available
mrc
p15
,
0
,
r7
,
c0
,
c1
,
1
@
ID_PFR1
ubfx
r7
,
r7
,
#
28
,
#
4
cmp
r7
,
#
1
b
ne
2
f
teq
r7
,
#
0
b
eq
2
f
@
Enable
system
register
accesses
mrc
p15
,
4
,
r7
,
c12
,
c9
,
5
@
ICC_HSRE
...
...
arch/arm/kernel/machine_kexec.c
View file @
4c2741ac
...
...
@@ -91,8 +91,11 @@ void machine_crash_nonpanic_core(void *unused)
set_cpu_online
(
smp_processor_id
(),
false
);
atomic_dec
(
&
waiting_for_crash_ipi
);
while
(
1
)
while
(
1
)
{
cpu_relax
();
wfe
();
}
}
void
crash_smp_send_stop
(
void
)
...
...
arch/arm/kernel/smp.c
View file @
4c2741ac
...
...
@@ -62,12 +62,6 @@
*/
struct
secondary_data
secondary_data
;
/*
* control for which core is the next to come out of the secondary
* boot "holding pen"
*/
volatile
int
pen_release
=
-
1
;
enum
ipi_msg_type
{
IPI_WAKEUP
,
IPI_TIMER
,
...
...
@@ -604,8 +598,10 @@ static void ipi_cpu_stop(unsigned int cpu)
local_fiq_disable
();
local_irq_disable
();
while
(
1
)
while
(
1
)
{
cpu_relax
();
wfe
();
}
}
static
DEFINE_PER_CPU
(
struct
completion
*
,
cpu_completion
);
...
...
arch/arm/kernel/smp_twd.c
View file @
4c2741ac
...
...
@@ -100,8 +100,6 @@ static void twd_timer_stop(void)
disable_percpu_irq
(
clk
->
irq
);
}
#ifdef CONFIG_COMMON_CLK
/*
* Updates clockevent frequency when the cpu frequency changes.
* Called on the cpu that is changing frequency with interrupts disabled.
...
...
@@ -143,54 +141,6 @@ static int twd_clk_init(void)
}
core_initcall
(
twd_clk_init
);
#elif defined (CONFIG_CPU_FREQ)
#include <linux/cpufreq.h>
/*
* Updates clockevent frequency when the cpu frequency changes.
* Called on the cpu that is changing frequency with interrupts disabled.
*/
static
void
twd_update_frequency
(
void
*
data
)
{
twd_timer_rate
=
clk_get_rate
(
twd_clk
);
clockevents_update_freq
(
raw_cpu_ptr
(
twd_evt
),
twd_timer_rate
);
}
static
int
twd_cpufreq_transition
(
struct
notifier_block
*
nb
,
unsigned
long
state
,
void
*
data
)
{
struct
cpufreq_freqs
*
freqs
=
data
;
/*
* The twd clock events must be reprogrammed to account for the new
* frequency. The timer is local to a cpu, so cross-call to the
* changing cpu.
*/
if
(
state
==
CPUFREQ_POSTCHANGE
)
smp_call_function_single
(
freqs
->
cpu
,
twd_update_frequency
,
NULL
,
1
);
return
NOTIFY_OK
;
}
static
struct
notifier_block
twd_cpufreq_nb
=
{
.
notifier_call
=
twd_cpufreq_transition
,
};
static
int
twd_cpufreq_init
(
void
)
{
if
(
twd_evt
&&
raw_cpu_ptr
(
twd_evt
)
&&
!
IS_ERR
(
twd_clk
))
return
cpufreq_register_notifier
(
&
twd_cpufreq_nb
,
CPUFREQ_TRANSITION_NOTIFIER
);
return
0
;
}
core_initcall
(
twd_cpufreq_init
);
#endif
static
void
twd_calibrate_rate
(
void
)
{
unsigned
long
count
;
...
...
@@ -366,21 +316,6 @@ static int __init twd_local_timer_common_register(struct device_node *np)
return
err
;
}
int
__init
twd_local_timer_register
(
struct
twd_local_timer
*
tlt
)
{
if
(
twd_base
||
twd_evt
)
return
-
EBUSY
;
twd_ppi
=
tlt
->
res
[
1
].
start
;
twd_base
=
ioremap
(
tlt
->
res
[
0
].
start
,
resource_size
(
&
tlt
->
res
[
0
]));
if
(
!
twd_base
)
return
-
ENOMEM
;
return
twd_local_timer_common_register
(
NULL
);
}
#ifdef CONFIG_OF
static
int
__init
twd_local_timer_of_register
(
struct
device_node
*
np
)
{
int
err
;
...
...
@@ -406,4 +341,3 @@ static int __init twd_local_timer_of_register(struct device_node *np)
TIMER_OF_DECLARE
(
arm_twd_a9
,
"arm,cortex-a9-twd-timer"
,
twd_local_timer_of_register
);
TIMER_OF_DECLARE
(
arm_twd_a5
,
"arm,cortex-a5-twd-timer"
,
twd_local_timer_of_register
);
TIMER_OF_DECLARE
(
arm_twd_11mp
,
"arm,arm11mp-twd-timer"
,
twd_local_timer_of_register
);
#endif
arch/arm/lib/Makefile
View file @
4c2741ac
...
...
@@ -39,7 +39,7 @@ $(obj)/csumpartialcopy.o: $(obj)/csumpartialcopygeneric.S
$(obj)/csumpartialcopyuser.o
:
$(obj)/csumpartialcopygeneric.S
ifeq
($(CONFIG_KERNEL_MODE_NEON),y)
NEON_FLAGS
:=
-mfloat-abi
=
softfp
-mfpu
=
neon
NEON_FLAGS
:=
-m
arch
=
armv7-a
-m
float-abi
=
softfp
-mfpu
=
neon
CFLAGS_xor-neon.o
+=
$(NEON_FLAGS)
obj-$(CONFIG_XOR_BLOCKS)
+=
xor-neon.o
endif
arch/arm/lib/bitops.h
View file @
4c2741ac
...
...
@@ -7,7 +7,7 @@
ENTRY
(
\
name
)
UNWIND
(
.
fnstart
)
ands
ip
,
r1
,
#
3
str
neb
r1
,
[
ip
]
@
assert
word
-
aligned
str
bne
r1
,
[
ip
]
@
assert
word
-
aligned
mov
r2
,
#
1
and
r3
,
r0
,
#
31
@
Get
bit
offset
mov
r0
,
r0
,
lsr
#
5
...
...
@@ -32,7 +32,7 @@ ENDPROC(\name )
ENTRY
(
\
name
)
UNWIND
(
.
fnstart
)
ands
ip
,
r1
,
#
3
str
neb
r1
,
[
ip
]
@
assert
word
-
aligned
str
bne
r1
,
[
ip
]
@
assert
word
-
aligned
mov
r2
,
#
1
and
r3
,
r0
,
#
31
@
Get
bit
offset
mov
r0
,
r0
,
lsr
#
5
...
...
@@ -62,7 +62,7 @@ ENDPROC(\name )
ENTRY
(
\
name
)
UNWIND
(
.
fnstart
)
ands
ip
,
r1
,
#
3
str
neb
r1
,
[
ip
]
@
assert
word
-
aligned
str
bne
r1
,
[
ip
]
@
assert
word
-
aligned
and
r2
,
r0
,
#
31
mov
r0
,
r0
,
lsr
#
5
mov
r3
,
#
1
...
...
@@ -89,7 +89,7 @@ ENDPROC(\name )
ENTRY
(
\
name
)
UNWIND
(
.
fnstart
)
ands
ip
,
r1
,
#
3
str
neb
r1
,
[
ip
]
@
assert
word
-
aligned
str
bne
r1
,
[
ip
]
@
assert
word
-
aligned
and
r3
,
r0
,
#
31
mov
r0
,
r0
,
lsr
#
5
save_and_disable_irqs
ip
...
...
arch/arm/lib/clear_user.S
View file @
4c2741ac
...
...
@@ -44,7 +44,7 @@ UNWIND(.save {r1, lr})
strusr
r2
,
r0
,
1
,
ne
,
rept
=
2
tst
r1
,
#
1
@
x1
x0
x1
x0
x1
x0
x1
it
ne
@
explicit
IT
needed
for
the
label
USER
(
str
nebt
r2
,
[
r0
])
USER
(
str
btne
r2
,
[
r0
])
mov
r0
,
#
0
ldmfd
sp
!,
{
r1
,
pc
}
UNWIND
(.
fnend
)
...
...
arch/arm/lib/copy_from_user.S
View file @
4c2741ac
...
...
@@ -91,7 +91,7 @@
.
endm
.
macro
str1b
ptr
reg
cond
=
al
abort
str
\
cond
\()
b
\
reg
,
[
\
ptr
],
#
1
str
b
\
cond
\
reg
,
[
\
ptr
],
#
1
.
endm
.
macro
enter
reg1
reg2
...
...
arch/arm/lib/copy_page.S
View file @
4c2741ac
...
...
@@ -39,9 +39,9 @@ ENTRY(copy_page)
.
endr
subs
r2
,
r2
,
#
1
@
1
stmia
r0
!,
{
r3
,
r4
,
ip
,
lr
}
@
4
ldm
gtia
r1
!,
{
r3
,
r4
,
ip
,
lr
}
@
4
ldm
iagt
r1
!,
{
r3
,
r4
,
ip
,
lr
}
@
4
bgt
1
b
@
1
PLD
(
ldm
eqia
r1
!,
{
r3
,
r4
,
ip
,
lr
}
)
PLD
(
ldm
iaeq
r1
!,
{
r3
,
r4
,
ip
,
lr
}
)
PLD
(
beq
2
b
)
ldmfd
sp
!,
{
r4
,
pc
}
@
3
ENDPROC
(
copy_page
)
arch/arm/lib/copy_template.S
View file @
4c2741ac
...
...
@@ -99,7 +99,7 @@
CALGN
(
ands
ip
,
r0
,
#
31
)
CALGN
(
rsb
r3
,
ip
,
#
32
)
CALGN
(
sbc
nes
r4
,
r3
,
r2
)
@
C
is
always
set
here
CALGN
(
sbc
sne
r4
,
r3
,
r2
)
@
C
is
always
set
here
CALGN
(
bcs
2
f
)
CALGN
(
adr
r4
,
6
f
)
CALGN
(
subs
r2
,
r2
,
r3
)
@
C
gets
set
...
...
@@ -204,7 +204,7 @@
CALGN
(
ands
ip
,
r0
,
#
31
)
CALGN
(
rsb
ip
,
ip
,
#
32
)
CALGN
(
sbc
nes
r4
,
ip
,
r2
)
@
C
is
always
set
here
CALGN
(
sbc
sne
r4
,
ip
,
r2
)
@
C
is
always
set
here
CALGN
(
subcc
r2
,
r2
,
ip
)
CALGN
(
bcc
15
f
)
...
...
@@ -241,7 +241,7 @@
orr
r9
,
r9
,
ip
,
lspush
#
\
push
mov
ip
,
ip
,
lspull
#
\
pull
orr
ip
,
ip
,
lr
,
lspush
#
\
push
str8w
r0
,
r3
,
r4
,
r5
,
r6
,
r7
,
r8
,
r9
,
ip
,
,
abort
=
19
f
str8w
r0
,
r3
,
r4
,
r5
,
r6
,
r7
,
r8
,
r9
,
ip
,
abort
=
19
f
bge
12
b
PLD
(
cmn
r2
,
#
96
)
PLD
(
bge
13
b
)
...
...
arch/arm/lib/copy_to_user.S
View file @
4c2741ac
...
...
@@ -49,7 +49,7 @@
.
endm
.
macro
ldr1b
ptr
reg
cond
=
al
abort
ldr
\
cond
\()
b
\
reg
,
[
\
ptr
],
#
1
ldr
b
\
cond
\
reg
,
[
\
ptr
],
#
1
.
endm
#ifdef CONFIG_CPU_USE_DOMAINS
...
...
arch/arm/lib/csumpartial.S
View file @
4c2741ac
...
...
@@ -40,9 +40,9 @@ td3 .req lr
/
*
we
must
have
at
least
one
byte
.
*/
tst
buf
,
#
1
@
odd
address
?
movne
sum
,
sum
,
ror
#
8
ldr
neb
td0
,
[
buf
],
#
1
ldr
bne
td0
,
[
buf
],
#
1
subne
len
,
len
,
#
1
adc
nes
sum
,
sum
,
td0
,
put_byte_1
adc
sne
sum
,
sum
,
td0
,
put_byte_1
.
Lless4
:
tst
len
,
#
6
beq
.
Lless8_byte
...
...
@@ -68,8 +68,8 @@ td3 .req lr
bne
.
Lless8_wordlp
.
Lless8_byte
:
tst
len
,
#
1
@
odd
number
of
bytes
ldr
neb
td0
,
[
buf
],
#
1
@
include
last
byte
adc
nes
sum
,
sum
,
td0
,
put_byte_0
@
update
checksum
ldr
bne
td0
,
[
buf
],
#
1
@
include
last
byte
adc
sne
sum
,
sum
,
td0
,
put_byte_0
@
update
checksum
.
Ldone
:
adc
r0
,
sum
,
#
0
@
collect
up
the
last
carry
ldr
td0
,
[
sp
],
#
4
...
...
@@ -78,17 +78,17 @@ td3 .req lr
ldr
pc
,
[
sp
],
#
4
@
return
.
Lnot_aligned
:
tst
buf
,
#
1
@
odd
address
ldr
neb
td0
,
[
buf
],
#
1
@
make
even
ldr
bne
td0
,
[
buf
],
#
1
@
make
even
subne
len
,
len
,
#
1
adc
nes
sum
,
sum
,
td0
,
put_byte_1
@
update
checksum
adc
sne
sum
,
sum
,
td0
,
put_byte_1
@
update
checksum
tst
buf
,
#
2
@
32
-
bit
aligned
?
#if __LINUX_ARM_ARCH__ >= 4
ldr
neh
td0
,
[
buf
],
#
2
@
make
32
-
bit
aligned
ldr
hne
td0
,
[
buf
],
#
2
@
make
32
-
bit
aligned
subne
len
,
len
,
#
2
#else
ldr
neb
td0
,
[
buf
],
#
1
ldr
neb
ip
,
[
buf
],
#
1
ldr
bne
td0
,
[
buf
],
#
1
ldr
bne
ip
,
[
buf
],
#
1
subne
len
,
len
,
#
2
#ifndef __ARMEB__
orrne
td0
,
td0
,
ip
,
lsl
#
8
...
...
@@ -96,7 +96,7 @@ td3 .req lr
orrne
td0
,
ip
,
td0
,
lsl
#
8
#endif
#endif
adc
nes
sum
,
sum
,
td0
@
update
checksum
adc
sne
sum
,
sum
,
td0
@
update
checksum
ret
lr
ENTRY
(
csum_partial
)
...
...
arch/arm/lib/csumpartialcopygeneric.S
View file @
4c2741ac
...
...
@@ -148,9 +148,9 @@ FN_ENTRY
strb
r5
,
[
dst
],
#
1
mov
r5
,
r4
,
get_byte_2
.
Lexit
:
tst
len
,
#
1
str
neb
r5
,
[
dst
],
#
1
str
bne
r5
,
[
dst
],
#
1
andne
r5
,
r5
,
#
255
adc
nes
sum
,
sum
,
r5
,
put_byte_0
adc
sne
sum
,
sum
,
r5
,
put_byte_0
/
*
*
If
the
dst
pointer
was
not
16
-
bit
aligned
,
we
...
...
arch/arm/lib/csumpartialcopyuser.S
View file @
4c2741ac
...
...
@@ -95,7 +95,7 @@
add
r2
,
r2
,
r1
mov
r0
,
#
0
@
zero
the
buffer
9002
:
teq
r2
,
r1
str
neb
r0
,
[
r1
],
#
1
str
bne
r0
,
[
r1
],
#
1
bne
9002
b
load_regs
.
popsection
arch/arm/lib/div64.S
View file @
4c2741ac
...
...
@@ -88,8 +88,8 @@ UNWIND(.fnstart)
@
Break
out
early
if
dividend
reaches
0
.
2
:
cmp
xh
,
yl
orrcs
yh
,
yh
,
ip
sub
cs
s
xh
,
xh
,
yl
mov
nes
ip
,
ip
,
lsr
#
1
sub
sc
s
xh
,
xh
,
yl
mov
sne
ip
,
ip
,
lsr
#
1
mov
yl
,
yl
,
lsr
#
1
bne
2
b
...
...
arch/arm/lib/floppydma.S
View file @
4c2741ac
...
...
@@ -14,8 +14,8 @@
.
global
floppy_fiqin_end
ENTRY
(
floppy_fiqin_start
)
subs
r9
,
r9
,
#
1
ldr
gtb
r12
,
[
r11
,
#-
4
]
ldr
leb
r12
,
[
r11
],
#
0
ldr
bgt
r12
,
[
r11
,
#-
4
]
ldr
ble
r12
,
[
r11
],
#
0
strb
r12
,
[
r10
],
#
1
subs
pc
,
lr
,
#
4
floppy_fiqin_end
:
...
...
@@ -23,10 +23,10 @@ floppy_fiqin_end:
.
global
floppy_fiqout_end
ENTRY
(
floppy_fiqout_start
)
subs
r9
,
r9
,
#
1
ldr
geb
r12
,
[
r10
],
#
1
ldr
bge
r12
,
[
r10
],
#
1
movlt
r12
,
#
0
str
leb
r12
,
[
r11
],
#
0
sub
les
pc
,
lr
,
#
4
str
ble
r12
,
[
r11
],
#
0
sub
sle
pc
,
lr
,
#
4
strb
r12
,
[
r11
,
#-
4
]
subs
pc
,
lr
,
#
4
floppy_fiqout_end
:
arch/arm/lib/io-readsb.S
View file @
4c2741ac
...
...
@@ -16,10 +16,10 @@
cmp
ip
,
#
2
ldrb
r3
,
[
r0
]
strb
r3
,
[
r1
],
#
1
ldr
geb
r3
,
[
r0
]
str
geb
r3
,
[
r1
],
#
1
ldr
gtb
r3
,
[
r0
]
str
gtb
r3
,
[
r1
],
#
1
ldr
bge
r3
,
[
r0
]
str
bge
r3
,
[
r1
],
#
1
ldr
bgt
r3
,
[
r0
]
str
bgt
r3
,
[
r1
],
#
1
subs
r2
,
r2
,
ip
bne
.
Linsb_aligned
...
...
@@ -72,7 +72,7 @@ ENTRY(__raw_readsb)
bpl
.
Linsb_16_lp
tst
r2
,
#
15
ldm
eqfd
sp
!,
{
r4
-
r6
,
pc
}
ldm
fdeq
sp
!,
{
r4
-
r6
,
pc
}
.
Linsb_no_16
:
tst
r2
,
#
8
beq
.
Linsb_no_8
...
...
@@ -109,15 +109,15 @@ ENTRY(__raw_readsb)
str
r3
,
[
r1
],
#
4
.
Linsb_no_4
:
ands
r2
,
r2
,
#
3
ldm
eqfd
sp
!,
{
r4
-
r6
,
pc
}
ldm
fdeq
sp
!,
{
r4
-
r6
,
pc
}
cmp
r2
,
#
2
ldrb
r3
,
[
r0
]
strb
r3
,
[
r1
],
#
1
ldr
geb
r3
,
[
r0
]
str
geb
r3
,
[
r1
],
#
1
ldr
gtb
r3
,
[
r0
]
str
gtb
r3
,
[
r1
]
ldr
bge
r3
,
[
r0
]
str
bge
r3
,
[
r1
],
#
1
ldr
bgt
r3
,
[
r0
]
str
bgt
r3
,
[
r1
]
ldmfd
sp
!,
{
r4
-
r6
,
pc
}
ENDPROC
(
__raw_readsb
)
arch/arm/lib/io-readsl.S
View file @
4c2741ac
...
...
@@ -30,7 +30,7 @@ ENTRY(__raw_readsl)
2
:
movs
r2
,
r2
,
lsl
#
31
ldrcs
r3
,
[
r0
,
#
0
]
ldrcs
ip
,
[
r0
,
#
0
]
stm
csia
r1
!,
{
r3
,
ip
}
stm
iacs
r1
!,
{
r3
,
ip
}
ldrne
r3
,
[
r0
,
#
0
]
strne
r3
,
[
r1
,
#
0
]
ret
lr
...
...
arch/arm/lib/io-readsw-armv3.S
View file @
4c2741ac
...
...
@@ -68,7 +68,7 @@ ENTRY(__raw_readsw)
bpl
.
Linsw_8_lp
tst
r2
,
#
7
ldm
eqfd
sp
!,
{
r4
,
r5
,
r6
,
pc
}
ldm
fdeq
sp
!,
{
r4
,
r5
,
r6
,
pc
}
.
Lno_insw_8
:
tst
r2
,
#
4
beq
.
Lno_insw_4
...
...
@@ -97,9 +97,9 @@ ENTRY(__raw_readsw)
.
Lno_insw_2
:
tst
r2
,
#
1
ldrne
r3
,
[
r0
]
str
neb
r3
,
[
r1
],
#
1
str
bne
r3
,
[
r1
],
#
1
movne
r3
,
r3
,
lsr
#
8
str
neb
r3
,
[
r1
]
str
bne
r3
,
[
r1
]
ldmfd
sp
!,
{
r4
,
r5
,
r6
,
pc
}
...
...
arch/arm/lib/io-readsw-armv4.S
View file @
4c2741ac
...
...
@@ -76,8 +76,8 @@ ENTRY(__raw_readsw)
pack
r3
,
r3
,
ip
str
r3
,
[
r1
],
#
4
.
Lno_insw_2
:
ldr
neh
r3
,
[
r0
]
str
neh
r3
,
[
r1
]
.
Lno_insw_2
:
ldr
hne
r3
,
[
r0
]
str
hne
r3
,
[
r1
]
ldmfd
sp
!,
{
r4
,
r5
,
pc
}
...
...
@@ -94,7 +94,7 @@ ENTRY(__raw_readsw)
#endif
.
Linsw_noalign
:
stmfd
sp
!,
{
r4
,
lr
}
ldr
ccb
ip
,
[
r1
,
#-
1
]!
ldr
bcc
ip
,
[
r1
,
#-
1
]!
bcc
1
f
ldrh
ip
,
[
r0
]
...
...
@@ -121,11 +121,11 @@ ENTRY(__raw_readsw)
3
:
tst
r2
,
#
1
strb
ip
,
[
r1
],
#
1
ldr
neh
ip
,
[
r0
]
ldr
hne
ip
,
[
r0
]
_BE_ONLY_
(
movne
ip
,
ip
,
ror
#
8
)
str
neb
ip
,
[
r1
],
#
1
str
bne
ip
,
[
r1
],
#
1
_LE_ONLY_
(
movne
ip
,
ip
,
lsr
#
8
)
_BE_ONLY_
(
movne
ip
,
ip
,
lsr
#
24
)
str
neb
ip
,
[
r1
]
str
bne
ip
,
[
r1
]
ldmfd
sp
!,
{
r4
,
pc
}
ENDPROC
(
__raw_readsw
)
arch/arm/lib/io-writesb.S
View file @
4c2741ac
...
...
@@ -36,10 +36,10 @@
cmp
ip
,
#
2
ldrb
r3
,
[
r1
],
#
1
strb
r3
,
[
r0
]
ldr
geb
r3
,
[
r1
],
#
1
str
geb
r3
,
[
r0
]
ldr
gtb
r3
,
[
r1
],
#
1
str
gtb
r3
,
[
r0
]
ldr
bge
r3
,
[
r1
],
#
1
str
bge
r3
,
[
r0
]
ldr
bgt
r3
,
[
r1
],
#
1
str
bgt
r3
,
[
r0
]
subs
r2
,
r2
,
ip
bne
.
Loutsb_aligned
...
...
@@ -64,7 +64,7 @@ ENTRY(__raw_writesb)
bpl
.
Loutsb_16_lp
tst
r2
,
#
15
ldm
eqfd
sp
!,
{
r4
,
r5
,
pc
}
ldm
fdeq
sp
!,
{
r4
,
r5
,
pc
}
.
Loutsb_no_16
:
tst
r2
,
#
8
beq
.
Loutsb_no_8
...
...
@@ -80,15 +80,15 @@ ENTRY(__raw_writesb)
outword
r3
.
Loutsb_no_4
:
ands
r2
,
r2
,
#
3
ldm
eqfd
sp
!,
{
r4
,
r5
,
pc
}
ldm
fdeq
sp
!,
{
r4
,
r5
,
pc
}
cmp
r2
,
#
2
ldrb
r3
,
[
r1
],
#
1
strb
r3
,
[
r0
]
ldr
geb
r3
,
[
r1
],
#
1
str
geb
r3
,
[
r0
]
ldr
gtb
r3
,
[
r1
]
str
gtb
r3
,
[
r0
]
ldr
bge
r3
,
[
r1
],
#
1
str
bge
r3
,
[
r0
]
ldr
bgt
r3
,
[
r1
]
str
bgt
r3
,
[
r0
]
ldmfd
sp
!,
{
r4
,
r5
,
pc
}
ENDPROC
(
__raw_writesb
)
arch/arm/lib/io-writesl.S
View file @
4c2741ac
...
...
@@ -28,7 +28,7 @@ ENTRY(__raw_writesl)
bpl
1
b
ldmfd
sp
!,
{
r4
,
lr
}
2
:
movs
r2
,
r2
,
lsl
#
31
ldm
csia
r1
!,
{
r3
,
ip
}
ldm
iacs
r1
!,
{
r3
,
ip
}
strcs
r3
,
[
r0
,
#
0
]
ldrne
r3
,
[
r1
,
#
0
]
strcs
ip
,
[
r0
,
#
0
]
...
...
arch/arm/lib/io-writesw-armv3.S
View file @
4c2741ac
...
...
@@ -79,7 +79,7 @@ ENTRY(__raw_writesw)
bpl
.
Loutsw_8_lp
tst
r2
,
#
7
ldm
eqfd
sp
!,
{
r4
,
r5
,
r6
,
pc
}
ldm
fdeq
sp
!,
{
r4
,
r5
,
r6
,
pc
}
.
Lno_outsw_8
:
tst
r2
,
#
4
beq
.
Lno_outsw_4
...
...
arch/arm/lib/io-writesw-armv4.S
View file @
4c2741ac
...
...
@@ -61,8 +61,8 @@ ENTRY(__raw_writesw)
ldr
r3
,
[
r1
],
#
4
outword
r3
.
Lno_outsw_2
:
ldr
neh
r3
,
[
r1
]
str
neh
r3
,
[
r0
]
.
Lno_outsw_2
:
ldr
hne
r3
,
[
r1
]
str
hne
r3
,
[
r0
]
ldmfd
sp
!,
{
r4
,
r5
,
pc
}
...
...
@@ -95,6 +95,6 @@ ENTRY(__raw_writesw)
tst
r2
,
#
1
3
:
movne
ip
,
r3
,
lsr
#
8
str
neh
ip
,
[
r0
]
str
hne
ip
,
[
r0
]
ret
lr
ENDPROC
(
__raw_writesw
)
arch/arm/lib/lib1funcs.S
View file @
4c2741ac
...
...
@@ -96,7 +96,7 @@ Boston, MA 02111-1307, USA. */
subhs
\
dividend
,
\
dividend
,
\
divisor
,
lsr
#
3
orrhs
\
result
,
\
result
,
\
curbit
,
lsr
#
3
cmp
\
dividend
,
#
0
@
Early
termination
?
mov
nes
\
curbit
,
\
curbit
,
lsr
#
4
@
No
,
any
more
bits
to
do
?
mov
sne
\
curbit
,
\
curbit
,
lsr
#
4
@
No
,
any
more
bits
to
do
?
movne
\
divisor
,
\
divisor
,
lsr
#
4
bne
1
b
...
...
@@ -182,7 +182,7 @@ Boston, MA 02111-1307, USA. */
subhs
\
dividend
,
\
dividend
,
\
divisor
,
lsr
#
3
cmp
\
dividend
,
#
1
mov
\
divisor
,
\
divisor
,
lsr
#
4
sub
ges
\
order
,
\
order
,
#
4
sub
sge
\
order
,
\
order
,
#
4
bge
1
b
tst
\
order
,
#
3
...
...
arch/arm/lib/memcpy.S
View file @
4c2741ac
...
...
@@ -30,7 +30,7 @@
.
endm
.
macro
ldr1b
ptr
reg
cond
=
al
abort
ldr
\
cond
\()
b
\
reg
,
[
\
ptr
],
#
1
ldr
b
\
cond
\
reg
,
[
\
ptr
],
#
1
.
endm
.
macro
str1w
ptr
reg
abort
...
...
@@ -42,7 +42,7 @@
.
endm
.
macro
str1b
ptr
reg
cond
=
al
abort
str
\
cond
\()
b
\
reg
,
[
\
ptr
],
#
1
str
b
\
cond
\
reg
,
[
\
ptr
],
#
1
.
endm
.
macro
enter
reg1
reg2
...
...
arch/arm/lib/memmove.S
View file @
4c2741ac
...
...
@@ -59,7 +59,7 @@ ENTRY(memmove)
blt
5
f
CALGN
(
ands
ip
,
r0
,
#
31
)
CALGN
(
sbc
nes
r4
,
ip
,
r2
)
@
C
is
always
set
here
CALGN
(
sbc
sne
r4
,
ip
,
r2
)
@
C
is
always
set
here
CALGN
(
bcs
2
f
)
CALGN
(
adr
r4
,
6
f
)
CALGN
(
subs
r2
,
r2
,
ip
)
@
C
is
set
here
...
...
@@ -114,20 +114,20 @@ ENTRY(memmove)
UNWIND
(
.
save
{
r0
,
r4
,
lr
}
)
@
still
in
first
stmfd
block
8
:
movs
r2
,
r2
,
lsl
#
31
ldr
neb
r3
,
[
r1
,
#-
1
]!
ldr
csb
r4
,
[
r1
,
#-
1
]!
ldr
csb
ip
,
[
r1
,
#-
1
]
str
neb
r3
,
[
r0
,
#-
1
]!
str
csb
r4
,
[
r0
,
#-
1
]!
str
csb
ip
,
[
r0
,
#-
1
]
ldr
bne
r3
,
[
r1
,
#-
1
]!
ldr
bcs
r4
,
[
r1
,
#-
1
]!
ldr
bcs
ip
,
[
r1
,
#-
1
]
str
bne
r3
,
[
r0
,
#-
1
]!
str
bcs
r4
,
[
r0
,
#-
1
]!
str
bcs
ip
,
[
r0
,
#-
1
]
ldmfd
sp
!,
{
r0
,
r4
,
pc
}
9
:
cmp
ip
,
#
2
ldr
gtb
r3
,
[
r1
,
#-
1
]!
ldr
geb
r4
,
[
r1
,
#-
1
]!
ldr
bgt
r3
,
[
r1
,
#-
1
]!
ldr
bge
r4
,
[
r1
,
#-
1
]!
ldrb
lr
,
[
r1
,
#-
1
]!
str
gtb
r3
,
[
r0
,
#-
1
]!
str
geb
r4
,
[
r0
,
#-
1
]!
str
bgt
r3
,
[
r0
,
#-
1
]!
str
bge
r4
,
[
r0
,
#-
1
]!
subs
r2
,
r2
,
ip
strb
lr
,
[
r0
,
#-
1
]!
blt
8
b
...
...
@@ -150,7 +150,7 @@ ENTRY(memmove)
blt
14
f
CALGN
(
ands
ip
,
r0
,
#
31
)
CALGN
(
sbc
nes
r4
,
ip
,
r2
)
@
C
is
always
set
here
CALGN
(
sbc
sne
r4
,
ip
,
r2
)
@
C
is
always
set
here
CALGN
(
subcc
r2
,
r2
,
ip
)
CALGN
(
bcc
15
f
)
...
...
arch/arm/lib/memset.S
View file @
4c2741ac
...
...
@@ -44,20 +44,20 @@ UNWIND( .save {r8, lr} )
mov
lr
,
r3
2
:
subs
r2
,
r2
,
#
64
stm
geia
ip
!,
{
r1
,
r3
,
r8
,
lr
}
@
64
bytes
at
a
time
.
stm
geia
ip
!,
{
r1
,
r3
,
r8
,
lr
}
stm
geia
ip
!,
{
r1
,
r3
,
r8
,
lr
}
stm
geia
ip
!,
{
r1
,
r3
,
r8
,
lr
}
stm
iage
ip
!,
{
r1
,
r3
,
r8
,
lr
}
@
64
bytes
at
a
time
.
stm
iage
ip
!,
{
r1
,
r3
,
r8
,
lr
}
stm
iage
ip
!,
{
r1
,
r3
,
r8
,
lr
}
stm
iage
ip
!,
{
r1
,
r3
,
r8
,
lr
}
bgt
2
b
ldm
eqfd
sp
!,
{
r8
,
pc
}
@
Now
<
64
bytes
to
go
.
ldm
fdeq
sp
!,
{
r8
,
pc
}
@
Now
<
64
bytes
to
go
.
/*
*
No
need
to
correct
the
count
; we're only testing bits from now on
*/
tst
r2
,
#
32
stm
neia
ip
!,
{
r1
,
r3
,
r8
,
lr
}
stm
neia
ip
!,
{
r1
,
r3
,
r8
,
lr
}
stm
iane
ip
!,
{
r1
,
r3
,
r8
,
lr
}
stm
iane
ip
!,
{
r1
,
r3
,
r8
,
lr
}
tst
r2
,
#
16
stm
neia
ip
!,
{
r1
,
r3
,
r8
,
lr
}
stm
iane
ip
!,
{
r1
,
r3
,
r8
,
lr
}
ldmfd
sp
!,
{
r8
,
lr
}
UNWIND
(
.
fnend
)
...
...
@@ -87,22 +87,22 @@ UNWIND( .save {r4-r8, lr} )
rsb
r8
,
r8
,
#
32
sub
r2
,
r2
,
r8
movs
r8
,
r8
,
lsl
#(
32
-
4
)
stm
csia
ip
!,
{
r4
,
r5
,
r6
,
r7
}
stm
miia
ip
!,
{
r4
,
r5
}
stm
iacs
ip
!,
{
r4
,
r5
,
r6
,
r7
}
stm
iami
ip
!,
{
r4
,
r5
}
tst
r8
,
#(
1
<<
30
)
mov
r8
,
r1
strne
r1
,
[
ip
],
#
4
3
:
subs
r2
,
r2
,
#
64
stm
geia
ip
!,
{
r1
,
r3
-
r8
,
lr
}
stm
geia
ip
!,
{
r1
,
r3
-
r8
,
lr
}
stm
iage
ip
!,
{
r1
,
r3
-
r8
,
lr
}
stm
iage
ip
!,
{
r1
,
r3
-
r8
,
lr
}
bgt
3
b
ldm
eqfd
sp
!,
{
r4
-
r8
,
pc
}
ldm
fdeq
sp
!,
{
r4
-
r8
,
pc
}
tst
r2
,
#
32
stm
neia
ip
!,
{
r1
,
r3
-
r8
,
lr
}
stm
iane
ip
!,
{
r1
,
r3
-
r8
,
lr
}
tst
r2
,
#
16
stm
neia
ip
!,
{
r4
-
r7
}
stm
iane
ip
!,
{
r4
-
r7
}
ldmfd
sp
!,
{
r4
-
r8
,
lr
}
UNWIND
(
.
fnend
)
...
...
@@ -110,7 +110,7 @@ UNWIND( .fnend )
UNWIND
(
.
fnstart
)
4
:
tst
r2
,
#
8
stm
neia
ip
!,
{
r1
,
r3
}
stm
iane
ip
!,
{
r1
,
r3
}
tst
r2
,
#
4
strne
r1
,
[
ip
],
#
4
/*
...
...
@@ -118,17 +118,17 @@ UNWIND( .fnstart )
*
may
have
an
unaligned
pointer
as
well
.
*/
5
:
tst
r2
,
#
2
str
neb
r1
,
[
ip
],
#
1
str
neb
r1
,
[
ip
],
#
1
str
bne
r1
,
[
ip
],
#
1
str
bne
r1
,
[
ip
],
#
1
tst
r2
,
#
1
str
neb
r1
,
[
ip
],
#
1
str
bne
r1
,
[
ip
],
#
1
ret
lr
6
:
subs
r2
,
r2
,
#
4
@
1
do
we
have
enough
blt
5
b
@
1
bytes
to
align
with
?
cmp
r3
,
#
2
@
1
str
ltb
r1
,
[
ip
],
#
1
@
1
str
leb
r1
,
[
ip
],
#
1
@
1
str
blt
r1
,
[
ip
],
#
1
@
1
str
ble
r1
,
[
ip
],
#
1
@
1
strb
r1
,
[
ip
],
#
1
@
1
add
r2
,
r2
,
r3
@
1
(
r2
=
r2
-
(
4
-
r3
))
b
1
b
...
...
arch/arm/lib/xor-neon.c
View file @
4c2741ac
...
...
@@ -14,7 +14,7 @@
MODULE_LICENSE
(
"GPL"
);
#ifndef __ARM_NEON__
#error You should compile this file with '-mfloat-abi=softfp -mfpu=neon'
#error You should compile this file with '-m
arch=armv7-a -m
float-abi=softfp -mfpu=neon'
#endif
/*
...
...
arch/arm/mach-actions/platsmp.c
View file @
4c2741ac
...
...
@@ -39,10 +39,6 @@ static void __iomem *sps_base_addr;
static
void
__iomem
*
timer_base_addr
;
static
int
ncores
;
static
DEFINE_SPINLOCK
(
boot_lock
);
void
owl_secondary_startup
(
void
);
static
int
s500_wakeup_secondary
(
unsigned
int
cpu
)
{
int
ret
;
...
...
@@ -84,7 +80,6 @@ static int s500_wakeup_secondary(unsigned int cpu)
static
int
s500_smp_boot_secondary
(
unsigned
int
cpu
,
struct
task_struct
*
idle
)
{
unsigned
long
timeout
;
int
ret
;
ret
=
s500_wakeup_secondary
(
cpu
);
...
...
@@ -93,21 +88,11 @@ static int s500_smp_boot_secondary(unsigned int cpu, struct task_struct *idle)
udelay
(
10
);
spin_lock
(
&
boot_lock
);
smp_send_reschedule
(
cpu
);
timeout
=
jiffies
+
(
1
*
HZ
);
while
(
time_before
(
jiffies
,
timeout
))
{
if
(
pen_release
==
-
1
)
break
;
}
writel
(
0
,
timer_base_addr
+
OWL_CPU1_ADDR
+
(
cpu
-
1
)
*
4
);
writel
(
0
,
timer_base_addr
+
OWL_CPU1_FLAG
+
(
cpu
-
1
)
*
4
);
spin_unlock
(
&
boot_lock
);
return
0
;
}
...
...
arch/arm/mach-exynos/headsmp.S
View file @
4c2741ac
...
...
@@ -36,4 +36,4 @@ ENDPROC(exynos4_secondary_startup)
.
align
2
1
:
.
long
.
.
long
pen_release
.
long
exynos_
pen_release
arch/arm/mach-exynos/platsmp.c
View file @
4c2741ac
...
...
@@ -28,6 +28,9 @@
extern
void
exynos4_secondary_startup
(
void
);
/* XXX exynos_pen_release is cargo culted code - DO NOT COPY XXX */
volatile
int
exynos_pen_release
=
-
1
;
#ifdef CONFIG_HOTPLUG_CPU
static
inline
void
cpu_leave_lowpower
(
u32
core_id
)
{
...
...
@@ -57,7 +60,7 @@ static inline void platform_do_lowpower(unsigned int cpu, int *spurious)
wfi
();
if
(
pen_release
==
core_id
)
{
if
(
exynos_
pen_release
==
core_id
)
{
/*
* OK, proper wakeup, we're done
*/
...
...
@@ -228,15 +231,17 @@ void exynos_core_restart(u32 core_id)
}
/*
* Write pen_release in a way that is guaranteed to be visible to all
* observers, irrespective of whether they're taking part in coherency
* XXX CARGO CULTED CODE - DO NOT COPY XXX
*
* Write exynos_pen_release in a way that is guaranteed to be visible to
* all observers, irrespective of whether they're taking part in coherency
* or not. This is necessary for the hotplug code to work reliably.
*/
static
void
write_pen_release
(
int
val
)
static
void
exynos_
write_pen_release
(
int
val
)
{
pen_release
=
val
;
exynos_
pen_release
=
val
;
smp_wmb
();
sync_cache_w
(
&
pen_release
);
sync_cache_w
(
&
exynos_
pen_release
);
}
static
DEFINE_SPINLOCK
(
boot_lock
);
...
...
@@ -247,7 +252,7 @@ static void exynos_secondary_init(unsigned int cpu)
* let the primary processor know we're out of the
* pen, then head off into the C entry point
*/
write_pen_release
(
-
1
);
exynos_
write_pen_release
(
-
1
);
/*
* Synchronise with the boot thread.
...
...
@@ -322,12 +327,12 @@ static int exynos_boot_secondary(unsigned int cpu, struct task_struct *idle)
/*
* The secondary processor is waiting to be released from
* the holding pen - release it, then wait for it to flag
* that it has been released by resetting pen_release.
* that it has been released by resetting
exynos_
pen_release.
*
* Note that "pen_release" is the hardware CPU core ID, whereas
* Note that "
exynos_
pen_release" is the hardware CPU core ID, whereas
* "cpu" is Linux's internal ID.
*/
write_pen_release
(
core_id
);
exynos_
write_pen_release
(
core_id
);
if
(
!
exynos_cpu_power_state
(
core_id
))
{
exynos_cpu_power_up
(
core_id
);
...
...
@@ -376,13 +381,13 @@ static int exynos_boot_secondary(unsigned int cpu, struct task_struct *idle)
else
arch_send_wakeup_ipi_mask
(
cpumask_of
(
cpu
));
if
(
pen_release
==
-
1
)
if
(
exynos_
pen_release
==
-
1
)
break
;
udelay
(
10
);
}
if
(
pen_release
!=
-
1
)
if
(
exynos_
pen_release
!=
-
1
)
ret
=
-
ETIMEDOUT
;
/*
...
...
@@ -392,7 +397,7 @@ static int exynos_boot_secondary(unsigned int cpu, struct task_struct *idle)
fail:
spin_unlock
(
&
boot_lock
);
return
pen_release
!=
-
1
?
ret
:
0
;
return
exynos_
pen_release
!=
-
1
?
ret
:
0
;
}
static
void
__init
exynos_smp_prepare_cpus
(
unsigned
int
max_cpus
)
...
...
arch/arm/mach-ks8695/include/mach/entry-macro.S
View file @
4c2741ac
...
...
@@ -42,6 +42,6 @@
moveq
\
irqstat
,
\
irqstat
,
lsr
#
2
addeq
\
irqnr
,
\
irqnr
,
#
2
tst
\
irqstat
,
#
0x01
add
eqs
\
irqnr
,
\
irqnr
,
#
1
add
seq
\
irqnr
,
\
irqnr
,
#
1
1001
:
.
endm
arch/arm/mach-omap2/prm_common.c
View file @
4c2741ac
...
...
@@ -523,8 +523,10 @@ void omap_prm_reset_system(void)
prm_ll_data
->
reset_system
();
while
(
1
)
while
(
1
)
{
cpu_relax
();
wfe
();
}
}
/**
...
...
arch/arm/mach-oxnas/Makefile
View file @
4c2741ac
obj-$(CONFIG_SMP)
+=
platsmp.o headsmp.o
obj-$(CONFIG_HOTPLUG_CPU)
+=
hotplug.o
arch/arm/mach-oxnas/hotplug.c
deleted
100644 → 0
View file @
d410a8a4
/*
* Copyright (C) 2002 ARM Ltd.
* All Rights Reserved
*
* 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.
*/
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/smp.h>
#include <asm/cp15.h>
#include <asm/smp_plat.h>
static
inline
void
cpu_enter_lowpower
(
void
)
{
unsigned
int
v
;
asm
volatile
(
" mcr p15, 0, %1, c7, c5, 0
\n
"
" mcr p15, 0, %1, c7, c10, 4
\n
"
/*
* Turn off coherency
*/
" mrc p15, 0, %0, c1, c0, 1
\n
"
" bic %0, %0, #0x20
\n
"
" mcr p15, 0, %0, c1, c0, 1
\n
"
" mrc p15, 0, %0, c1, c0, 0
\n
"
" bic %0, %0, %2
\n
"
" mcr p15, 0, %0, c1, c0, 0
\n
"
:
"=&r"
(
v
)
:
"r"
(
0
),
"Ir"
(
CR_C
)
:
"cc"
);
}
static
inline
void
cpu_leave_lowpower
(
void
)
{
unsigned
int
v
;
asm
volatile
(
"mrc p15, 0, %0, c1, c0, 0
\n
"
" orr %0, %0, %1
\n
"
" mcr p15, 0, %0, c1, c0, 0
\n
"
" mrc p15, 0, %0, c1, c0, 1
\n
"
" orr %0, %0, #0x20
\n
"
" mcr p15, 0, %0, c1, c0, 1
\n
"
:
"=&r"
(
v
)
:
"Ir"
(
CR_C
)
:
"cc"
);
}
static
inline
void
platform_do_lowpower
(
unsigned
int
cpu
,
int
*
spurious
)
{
/*
* there is no power-control hardware on this platform, so all
* we can do is put the core into WFI; this is safe as the calling
* code will have already disabled interrupts
*/
for
(;;)
{
/*
* here's the WFI
*/
asm
(
".word 0xe320f003
\n
"
:
:
:
"memory"
,
"cc"
);
if
(
pen_release
==
cpu_logical_map
(
cpu
))
{
/*
* OK, proper wakeup, we're done
*/
break
;
}
/*
* Getting here, means that we have come out of WFI without
* having been woken up - this shouldn't happen
*
* Just note it happening - when we're woken, we can report
* its occurrence.
*/
(
*
spurious
)
++
;
}
}
/*
* platform-specific code to shutdown a CPU
*
* Called with IRQs disabled
*/
void
ox820_cpu_die
(
unsigned
int
cpu
)
{
int
spurious
=
0
;
/*
* we're ready for shutdown now, so do it
*/
cpu_enter_lowpower
();
platform_do_lowpower
(
cpu
,
&
spurious
);
/*
* bring this CPU back into the world of cache
* coherency, and then restore interrupts
*/
cpu_leave_lowpower
();
if
(
spurious
)
pr_warn
(
"CPU%u: %u spurious wakeup calls
\n
"
,
cpu
,
spurious
);
}
arch/arm/mach-oxnas/platsmp.c
View file @
4c2741ac
...
...
@@ -19,7 +19,6 @@
#include <asm/smp_scu.h>
extern
void
ox820_secondary_startup
(
void
);
extern
void
ox820_cpu_die
(
unsigned
int
cpu
);
static
void
__iomem
*
cpu_ctrl
;
static
void
__iomem
*
gic_cpu_ctrl
;
...
...
@@ -94,9 +93,6 @@ static void __init ox820_smp_prepare_cpus(unsigned int max_cpus)
static
const
struct
smp_operations
ox820_smp_ops
__initconst
=
{
.
smp_prepare_cpus
=
ox820_smp_prepare_cpus
,
.
smp_boot_secondary
=
ox820_boot_secondary
,
#ifdef CONFIG_HOTPLUG_CPU
.
cpu_die
=
ox820_cpu_die
,
#endif
};
CPU_METHOD_OF_DECLARE
(
ox820_smp
,
"oxsemi,ox820-smp"
,
&
ox820_smp_ops
);
arch/arm/mach-prima2/common.h
View file @
4c2741ac
...
...
@@ -15,6 +15,8 @@
#include <asm/mach/time.h>
#include <asm/exception.h>
extern
volatile
int
prima2_pen_release
;
extern
const
struct
smp_operations
sirfsoc_smp_ops
;
extern
void
sirfsoc_secondary_startup
(
void
);
extern
void
sirfsoc_cpu_die
(
unsigned
int
cpu
);
...
...
arch/arm/mach-prima2/headsmp.S
View file @
4c2741ac
...
...
@@ -34,4 +34,4 @@ ENDPROC(sirfsoc_secondary_startup)
.
align
1
:
.
long
.
.
long
pen_release
.
long
p
rima2_p
en_release
arch/arm/mach-prima2/hotplug.c
View file @
4c2741ac
...
...
@@ -11,6 +11,7 @@
#include <linux/smp.h>
#include <asm/smp_plat.h>
#include "common.h"
static
inline
void
platform_do_lowpower
(
unsigned
int
cpu
)
{
...
...
@@ -18,7 +19,7 @@ static inline void platform_do_lowpower(unsigned int cpu)
for
(;;)
{
__asm__
__volatile__
(
"dsb
\n\t
"
"wfi
\n\t
"
:
:
:
"memory"
);
if
(
pen_release
==
cpu_logical_map
(
cpu
))
{
if
(
p
rima2_p
en_release
==
cpu_logical_map
(
cpu
))
{
/*
* OK, proper wakeup, we're done
*/
...
...
arch/arm/mach-prima2/platsmp.c
View file @
4c2741ac
...
...
@@ -24,13 +24,16 @@ static void __iomem *clk_base;
static
DEFINE_SPINLOCK
(
boot_lock
);
/* XXX prima2_pen_release is cargo culted code - DO NOT COPY XXX */
volatile
int
prima2_pen_release
=
-
1
;
static
void
sirfsoc_secondary_init
(
unsigned
int
cpu
)
{
/*
* let the primary processor know we're out of the
* pen, then head off into the C entry point
*/
pen_release
=
-
1
;
p
rima2_p
en_release
=
-
1
;
smp_wmb
();
/*
...
...
@@ -80,13 +83,13 @@ static int sirfsoc_boot_secondary(unsigned int cpu, struct task_struct *idle)
/*
* The secondary processor is waiting to be released from
* the holding pen - release it, then wait for it to flag
* that it has been released by resetting pen_release.
* that it has been released by resetting p
rima2_p
en_release.
*
* Note that "pen_release" is the hardware CPU ID, whereas
* Note that "p
rima2_p
en_release" is the hardware CPU ID, whereas
* "cpu" is Linux's internal ID.
*/
pen_release
=
cpu_logical_map
(
cpu
);
sync_cache_w
(
&
pen_release
);
p
rima2_p
en_release
=
cpu_logical_map
(
cpu
);
sync_cache_w
(
&
p
rima2_p
en_release
);
/*
* Send the secondary CPU SEV, thereby causing the boot monitor to read
...
...
@@ -97,7 +100,7 @@ static int sirfsoc_boot_secondary(unsigned int cpu, struct task_struct *idle)
timeout
=
jiffies
+
(
1
*
HZ
);
while
(
time_before
(
jiffies
,
timeout
))
{
smp_rmb
();
if
(
pen_release
==
-
1
)
if
(
p
rima2_p
en_release
==
-
1
)
break
;
udelay
(
10
);
...
...
@@ -109,7 +112,7 @@ static int sirfsoc_boot_secondary(unsigned int cpu, struct task_struct *idle)
*/
spin_unlock
(
&
boot_lock
);
return
pen_release
!=
-
1
?
-
ENOSYS
:
0
;
return
p
rima2_p
en_release
!=
-
1
?
-
ENOSYS
:
0
;
}
const
struct
smp_operations
sirfsoc_smp_ops
__initconst
=
{
...
...
arch/arm/mach-qcom/platsmp.c
View file @
4c2741ac
...
...
@@ -46,8 +46,6 @@
extern
void
secondary_startup_arm
(
void
);
static
DEFINE_SPINLOCK
(
boot_lock
);
#ifdef CONFIG_HOTPLUG_CPU
static
void
qcom_cpu_die
(
unsigned
int
cpu
)
{
...
...
@@ -55,15 +53,6 @@ static void qcom_cpu_die(unsigned int cpu)
}
#endif
static
void
qcom_secondary_init
(
unsigned
int
cpu
)
{
/*
* Synchronise with the boot thread.
*/
spin_lock
(
&
boot_lock
);
spin_unlock
(
&
boot_lock
);
}
static
int
scss_release_secondary
(
unsigned
int
cpu
)
{
struct
device_node
*
node
;
...
...
@@ -280,12 +269,6 @@ static int qcom_boot_secondary(unsigned int cpu, int (*func)(unsigned int))
per_cpu
(
cold_boot_done
,
cpu
)
=
true
;
}
/*
* set synchronisation state between this boot processor
* and the secondary one
*/
spin_lock
(
&
boot_lock
);
/*
* Send the secondary CPU a soft interrupt, thereby causing
* the boot monitor to read the system wide flags register,
...
...
@@ -293,12 +276,6 @@ static int qcom_boot_secondary(unsigned int cpu, int (*func)(unsigned int))
*/
arch_send_wakeup_ipi_mask
(
cpumask_of
(
cpu
));
/*
* now the secondary core is starting up let it run its
* calibrations, then wait for it to finish
*/
spin_unlock
(
&
boot_lock
);
return
ret
;
}
...
...
@@ -334,7 +311,6 @@ static void __init qcom_smp_prepare_cpus(unsigned int max_cpus)
static
const
struct
smp_operations
smp_msm8660_ops
__initconst
=
{
.
smp_prepare_cpus
=
qcom_smp_prepare_cpus
,
.
smp_secondary_init
=
qcom_secondary_init
,
.
smp_boot_secondary
=
msm8660_boot_secondary
,
#ifdef CONFIG_HOTPLUG_CPU
.
cpu_die
=
qcom_cpu_die
,
...
...
@@ -344,7 +320,6 @@ CPU_METHOD_OF_DECLARE(qcom_smp, "qcom,gcc-msm8660", &smp_msm8660_ops);
static
const
struct
smp_operations
qcom_smp_kpssv1_ops
__initconst
=
{
.
smp_prepare_cpus
=
qcom_smp_prepare_cpus
,
.
smp_secondary_init
=
qcom_secondary_init
,
.
smp_boot_secondary
=
kpssv1_boot_secondary
,
#ifdef CONFIG_HOTPLUG_CPU
.
cpu_die
=
qcom_cpu_die
,
...
...
@@ -354,7 +329,6 @@ CPU_METHOD_OF_DECLARE(qcom_smp_kpssv1, "qcom,kpss-acc-v1", &qcom_smp_kpssv1_ops)
static
const
struct
smp_operations
qcom_smp_kpssv2_ops
__initconst
=
{
.
smp_prepare_cpus
=
qcom_smp_prepare_cpus
,
.
smp_secondary_init
=
qcom_secondary_init
,
.
smp_boot_secondary
=
kpssv2_boot_secondary
,
#ifdef CONFIG_HOTPLUG_CPU
.
cpu_die
=
qcom_cpu_die
,
...
...
arch/arm/mach-spear/generic.h
View file @
4c2741ac
...
...
@@ -20,6 +20,8 @@
#include <asm/mach/time.h>
extern
volatile
int
spear_pen_release
;
extern
void
spear13xx_timer_init
(
void
);
extern
void
spear3xx_timer_init
(
void
);
extern
struct
pl022_ssp_controller
pl022_plat_data
;
...
...
arch/arm/mach-spear/headsmp.S
View file @
4c2741ac
...
...
@@ -43,5 +43,5 @@ pen: ldr r7, [r6]
.
align
1
:
.
long
.
.
long
pen_release
.
long
spear_
pen_release
ENDPROC
(
spear13xx_secondary_startup
)
arch/arm/mach-spear/hotplug.c
View file @
4c2741ac
...
...
@@ -16,6 +16,8 @@
#include <asm/cp15.h>
#include <asm/smp_plat.h>
#include "generic.h"
static
inline
void
cpu_enter_lowpower
(
void
)
{
unsigned
int
v
;
...
...
@@ -57,7 +59,7 @@ static inline void spear13xx_do_lowpower(unsigned int cpu, int *spurious)
for
(;;)
{
wfi
();
if
(
pen_release
==
cpu
)
{
if
(
spear_
pen_release
==
cpu
)
{
/*
* OK, proper wakeup, we're done
*/
...
...
arch/arm/mach-spear/platsmp.c
View file @
4c2741ac
...
...
@@ -20,16 +20,21 @@
#include <mach/spear.h>
#include "generic.h"
/* XXX spear_pen_release is cargo culted code - DO NOT COPY XXX */
volatile
int
spear_pen_release
=
-
1
;
/*
* Write pen_release in a way that is guaranteed to be visible to all
* observers, irrespective of whether they're taking part in coherency
* XXX CARGO CULTED CODE - DO NOT COPY XXX
*
* Write spear_pen_release in a way that is guaranteed to be visible to
* all observers, irrespective of whether they're taking part in coherency
* or not. This is necessary for the hotplug code to work reliably.
*/
static
void
write_pen_release
(
int
val
)
static
void
spear_
write_pen_release
(
int
val
)
{
pen_release
=
val
;
spear_
pen_release
=
val
;
smp_wmb
();
sync_cache_w
(
&
pen_release
);
sync_cache_w
(
&
spear_
pen_release
);
}
static
DEFINE_SPINLOCK
(
boot_lock
);
...
...
@@ -42,7 +47,7 @@ static void spear13xx_secondary_init(unsigned int cpu)
* let the primary processor know we're out of the
* pen, then head off into the C entry point
*/
write_pen_release
(
-
1
);
spear_
write_pen_release
(
-
1
);
/*
* Synchronise with the boot thread.
...
...
@@ -64,17 +69,17 @@ static int spear13xx_boot_secondary(unsigned int cpu, struct task_struct *idle)
/*
* The secondary processor is waiting to be released from
* the holding pen - release it, then wait for it to flag
* that it has been released by resetting pen_release.
* that it has been released by resetting
spear_
pen_release.
*
* Note that "pen_release" is the hardware CPU ID, whereas
* Note that "
spear_
pen_release" is the hardware CPU ID, whereas
* "cpu" is Linux's internal ID.
*/
write_pen_release
(
cpu
);
spear_
write_pen_release
(
cpu
);
timeout
=
jiffies
+
(
1
*
HZ
);
while
(
time_before
(
jiffies
,
timeout
))
{
smp_rmb
();
if
(
pen_release
==
-
1
)
if
(
spear_
pen_release
==
-
1
)
break
;
udelay
(
10
);
...
...
@@ -86,7 +91,7 @@ static int spear13xx_boot_secondary(unsigned int cpu, struct task_struct *idle)
*/
spin_unlock
(
&
boot_lock
);
return
pen_release
!=
-
1
?
-
ENOSYS
:
0
;
return
spear_
pen_release
!=
-
1
?
-
ENOSYS
:
0
;
}
/*
...
...
arch/arm/mach-tegra/reset-handler.S
View file @
4c2741ac
...
...
@@ -172,7 +172,7 @@ after_errata:
mov32
r5
,
TEGRA_IRAM_BASE
+
TEGRA_IRAM_RESET_HANDLER_OFFSET
mov
r0
,
#
CPU_NOT_RESETTABLE
cmp
r10
,
#
0
str
neb
r0
,
[
r5
,
#
__tegra20_cpu1_resettable_status_offset
]
str
bne
r0
,
[
r5
,
#
__tegra20_cpu1_resettable_status_offset
]
1
:
#endif
...
...
arch/arm/mm/cache-v6.S
View file @
4c2741ac
...
...
@@ -215,8 +215,8 @@ v6_dma_inv_range:
#endif
tst
r1
,
#
D_CACHE_LINE_SIZE
-
1
#ifdef CONFIG_DMA_CACHE_RWFO
ldr
neb
r2
,
[
r1
,
#-
1
]
@
read
for
ownership
str
neb
r2
,
[
r1
,
#-
1
]
@
write
for
ownership
ldr
bne
r2
,
[
r1
,
#-
1
]
@
read
for
ownership
str
bne
r2
,
[
r1
,
#-
1
]
@
write
for
ownership
#endif
bic
r1
,
r1
,
#
D_CACHE_LINE_SIZE
-
1
#ifdef HARVARD_CACHE
...
...
@@ -284,8 +284,8 @@ ENTRY(v6_dma_flush_range)
add
r0
,
r0
,
#
D_CACHE_LINE_SIZE
cmp
r0
,
r1
#ifdef CONFIG_DMA_CACHE_RWFO
ldr
lob
r2
,
[
r0
]
@
read
for
ownership
str
lob
r2
,
[
r0
]
@
write
for
ownership
ldr
blo
r2
,
[
r0
]
@
read
for
ownership
str
blo
r2
,
[
r0
]
@
write
for
ownership
#endif
blo
1
b
mov
r0
,
#
0
...
...
arch/arm/mm/copypage-v4mc.c
View file @
4c2741ac
...
...
@@ -45,6 +45,7 @@ static void mc_copy_user_page(void *from, void *to)
int
tmp
;
asm
volatile
(
"\
.syntax unified
\n
\
ldmia %0!, {r2, r3, ip, lr} @ 4
\n
\
1: mcr p15, 0, %1, c7, c6, 1 @ 1 invalidate D line
\n
\
stmia %1!, {r2, r3, ip, lr} @ 4
\n
\
...
...
@@ -56,7 +57,7 @@ static void mc_copy_user_page(void *from, void *to)
ldmia %0!, {r2, r3, ip, lr} @ 4
\n
\
subs %2, %2, #1 @ 1
\n
\
stmia %1!, {r2, r3, ip, lr} @ 4
\n
\
ldm
neia
%0!, {r2, r3, ip, lr} @ 4
\n
\
ldm
iane
%0!, {r2, r3, ip, lr} @ 4
\n
\
bne 1b @ "
:
"+&r"
(
from
),
"+&r"
(
to
),
"=&r"
(
tmp
)
:
"2"
(
PAGE_SIZE
/
64
)
...
...
arch/arm/mm/copypage-v4wb.c
View file @
4c2741ac
...
...
@@ -27,6 +27,7 @@ static void v4wb_copy_user_page(void *kto, const void *kfrom)
int
tmp
;
asm
volatile
(
"\
.syntax unified
\n
\
ldmia %1!, {r3, r4, ip, lr} @ 4
\n
\
1: mcr p15, 0, %0, c7, c6, 1 @ 1 invalidate D line
\n
\
stmia %0!, {r3, r4, ip, lr} @ 4
\n
\
...
...
@@ -38,7 +39,7 @@ static void v4wb_copy_user_page(void *kto, const void *kfrom)
ldmia %1!, {r3, r4, ip, lr} @ 4
\n
\
subs %2, %2, #1 @ 1
\n
\
stmia %0!, {r3, r4, ip, lr} @ 4
\n
\
ldm
neia
%1!, {r3, r4, ip, lr} @ 4
\n
\
ldm
iane
%1!, {r3, r4, ip, lr} @ 4
\n
\
bne 1b @ 1
\n
\
mcr p15, 0, %1, c7, c10, 4 @ 1 drain WB"
:
"+&r"
(
kto
),
"+&r"
(
kfrom
),
"=&r"
(
tmp
)
...
...
arch/arm/mm/copypage-v4wt.c
View file @
4c2741ac
...
...
@@ -25,6 +25,7 @@ static void v4wt_copy_user_page(void *kto, const void *kfrom)
int
tmp
;
asm
volatile
(
"\
.syntax unified
\n
\
ldmia %1!, {r3, r4, ip, lr} @ 4
\n
\
1: stmia %0!, {r3, r4, ip, lr} @ 4
\n
\
ldmia %1!, {r3, r4, ip, lr} @ 4+1
\n
\
...
...
@@ -34,7 +35,7 @@ static void v4wt_copy_user_page(void *kto, const void *kfrom)
ldmia %1!, {r3, r4, ip, lr} @ 4
\n
\
subs %2, %2, #1 @ 1
\n
\
stmia %0!, {r3, r4, ip, lr} @ 4
\n
\
ldm
neia
%1!, {r3, r4, ip, lr} @ 4
\n
\
ldm
iane
%1!, {r3, r4, ip, lr} @ 4
\n
\
bne 1b @ 1
\n
\
mcr p15, 0, %2, c7, c7, 0 @ flush ID cache"
:
"+&r"
(
kto
),
"+&r"
(
kfrom
),
"=&r"
(
tmp
)
...
...
arch/arm/mm/dma-mapping.c
View file @
4c2741ac
...
...
@@ -2277,7 +2277,7 @@ EXPORT_SYMBOL_GPL(arm_iommu_attach_device);
* @dev: valid struct device pointer
*
* Detaches the provided device from a previously attached map.
* This
voids the dma operations (dma_map_ops pointer)
* This
overwrites the dma_ops pointer with appropriate non-IOMMU ops.
*/
void
arm_iommu_detach_device
(
struct
device
*
dev
)
{
...
...
arch/arm/mm/idmap.c
View file @
4c2741ac
...
...
@@ -6,6 +6,7 @@
#include <asm/cputype.h>
#include <asm/idmap.h>
#include <asm/hwcap.h>
#include <asm/pgalloc.h>
#include <asm/pgtable.h>
#include <asm/sections.h>
...
...
@@ -110,7 +111,8 @@ static int __init init_static_idmap(void)
__idmap_text_end
,
0
);
/* Flush L1 for the hardware to see this page table content */
flush_cache_louis
();
if
(
!
(
elf_hwcap
&
HWCAP_LPAE
))
flush_cache_louis
();
return
0
;
}
...
...
arch/arm/mm/init.c
View file @
4c2741ac
...
...
@@ -278,15 +278,12 @@ void __init arm_memblock_init(const struct machine_desc *mdesc)
void
__init
bootmem_init
(
void
)
{
unsigned
long
min
,
max_low
,
max_high
;
memblock_allow_resize
();
max_low
=
max_high
=
0
;
find_limits
(
&
min
,
&
max_low
,
&
max_high
);
find_limits
(
&
min
_low_pfn
,
&
max_low_pfn
,
&
max_pfn
);
early_memtest
((
phys_addr_t
)
min
<<
PAGE_SHIFT
,
(
phys_addr_t
)
max_low
<<
PAGE_SHIFT
);
early_memtest
((
phys_addr_t
)
min
_low_pfn
<<
PAGE_SHIFT
,
(
phys_addr_t
)
max_low
_pfn
<<
PAGE_SHIFT
);
/*
* Sparsemem tries to allocate bootmem in memory_present(),
...
...
@@ -304,16 +301,7 @@ void __init bootmem_init(void)
* the sparse mem_map arrays initialized by sparse_init()
* for memmap_init_zone(), otherwise all PFNs are invalid.
*/
zone_sizes_init
(
min
,
max_low
,
max_high
);
/*
* This doesn't seem to be used by the Linux memory manager any
* more, but is used by ll_rw_block. If we can get rid of it, we
* also get rid of some of the stuff above as well.
*/
min_low_pfn
=
min
;
max_low_pfn
=
max_low
;
max_pfn
=
max_high
;
zone_sizes_init
(
min_low_pfn
,
max_low_pfn
,
max_pfn
);
}
/*
...
...
@@ -494,55 +482,6 @@ void __init mem_init(void)
mem_init_print_info
(
NULL
);
#define MLK(b, t) b, t, ((t) - (b)) >> 10
#define MLM(b, t) b, t, ((t) - (b)) >> 20
#define MLK_ROUNDUP(b, t) b, t, DIV_ROUND_UP(((t) - (b)), SZ_1K)
pr_notice
(
"Virtual kernel memory layout:
\n
"
" vector : 0x%08lx - 0x%08lx (%4ld kB)
\n
"
#ifdef CONFIG_HAVE_TCM
" DTCM : 0x%08lx - 0x%08lx (%4ld kB)
\n
"
" ITCM : 0x%08lx - 0x%08lx (%4ld kB)
\n
"
#endif
" fixmap : 0x%08lx - 0x%08lx (%4ld kB)
\n
"
" vmalloc : 0x%08lx - 0x%08lx (%4ld MB)
\n
"
" lowmem : 0x%08lx - 0x%08lx (%4ld MB)
\n
"
#ifdef CONFIG_HIGHMEM
" pkmap : 0x%08lx - 0x%08lx (%4ld MB)
\n
"
#endif
#ifdef CONFIG_MODULES
" modules : 0x%08lx - 0x%08lx (%4ld MB)
\n
"
#endif
" .text : 0x%p"
" - 0x%p"
" (%4td kB)
\n
"
" .init : 0x%p"
" - 0x%p"
" (%4td kB)
\n
"
" .data : 0x%p"
" - 0x%p"
" (%4td kB)
\n
"
" .bss : 0x%p"
" - 0x%p"
" (%4td kB)
\n
"
,
MLK
(
VECTORS_BASE
,
VECTORS_BASE
+
PAGE_SIZE
),
#ifdef CONFIG_HAVE_TCM
MLK
(
DTCM_OFFSET
,
(
unsigned
long
)
dtcm_end
),
MLK
(
ITCM_OFFSET
,
(
unsigned
long
)
itcm_end
),
#endif
MLK
(
FIXADDR_START
,
FIXADDR_END
),
MLM
(
VMALLOC_START
,
VMALLOC_END
),
MLM
(
PAGE_OFFSET
,
(
unsigned
long
)
high_memory
),
#ifdef CONFIG_HIGHMEM
MLM
(
PKMAP_BASE
,
(
PKMAP_BASE
)
+
(
LAST_PKMAP
)
*
(
PAGE_SIZE
)),
#endif
#ifdef CONFIG_MODULES
MLM
(
MODULES_VADDR
,
MODULES_END
),
#endif
MLK_ROUNDUP
(
_text
,
_etext
),
MLK_ROUNDUP
(
__init_begin
,
__init_end
),
MLK_ROUNDUP
(
_sdata
,
_edata
),
MLK_ROUNDUP
(
__bss_start
,
__bss_stop
));
#undef MLK
#undef MLM
#undef MLK_ROUNDUP
/*
* Check boundaries twice: Some fundamental inconsistencies can
* be detected at build time already.
...
...
arch/arm/mm/pmsa-v8.c
View file @
4c2741ac
...
...
@@ -165,7 +165,7 @@ static int __init pmsav8_setup_ram(unsigned int number, phys_addr_t start,phys_a
return
-
EINVAL
;
bar
=
start
;
lar
=
(
end
-
1
)
&
~
(
PMSAv8_MINALIGN
-
1
);
;
lar
=
(
end
-
1
)
&
~
(
PMSAv8_MINALIGN
-
1
);
bar
|=
PMSAv8_AP_PL1RW_PL0RW
|
PMSAv8_RGN_SHARED
;
lar
|=
PMSAv8_LAR_IDX
(
PMSAv8_RGN_NORMAL
)
|
PMSAv8_LAR_EN
;
...
...
@@ -181,7 +181,7 @@ static int __init pmsav8_setup_io(unsigned int number, phys_addr_t start,phys_ad
return
-
EINVAL
;
bar
=
start
;
lar
=
(
end
-
1
)
&
~
(
PMSAv8_MINALIGN
-
1
);
;
lar
=
(
end
-
1
)
&
~
(
PMSAv8_MINALIGN
-
1
);
bar
|=
PMSAv8_AP_PL1RW_PL0RW
|
PMSAv8_RGN_SHARED
|
PMSAv8_BAR_XN
;
lar
|=
PMSAv8_LAR_IDX
(
PMSAv8_RGN_DEVICE_nGnRnE
)
|
PMSAv8_LAR_EN
;
...
...
arch/arm/mm/proc-v7m.S
View file @
4c2741ac
...
...
@@ -139,6 +139,9 @@ __v7m_setup_cont:
cpsie
i
svc
#
0
1
:
cpsid
i
ldr
r0
,
=
exc_ret
orr
lr
,
lr
,
#
EXC_RET_THREADMODE_PROCESSSTACK
str
lr
,
[
r0
]
ldmia
sp
,
{
r0
-
r3
,
r12
}
str
r5
,
[
r12
,
#
11
*
4
]
@
restore
the
original
SVC
vector
entry
mov
lr
,
r6
@
restore
LR
...
...
@@ -149,10 +152,10 @@ __v7m_setup_cont:
@
Configure
caches
(
if
implemented
)
teq
r8
,
#
0
stm
neia
sp
,
{
r0
-
r6
,
lr
}
@
v7m_invalidate_l1
touches
r0
-
r6
stm
iane
sp
,
{
r0
-
r6
,
lr
}
@
v7m_invalidate_l1
touches
r0
-
r6
blne
v7m_invalidate_l1
teq
r8
,
#
0
@
re
-
evalutae
condition
ldm
neia
sp
,
{
r0
-
r6
,
lr
}
ldm
iane
sp
,
{
r0
-
r6
,
lr
}
@
Configure
the
System
Control
Register
to
ensure
8
-
byte
stack
alignment
@
Note
the
STKALIGN
bit
is
either
RW
or
RAO
.
...
...
drivers/amba/bus.c
View file @
4c2741ac
...
...
@@ -26,19 +26,36 @@
#define to_amba_driver(d) container_of(d, struct amba_driver, drv)
static
const
struct
amba_id
*
amba_lookup
(
const
struct
amba_id
*
table
,
struct
amba_device
*
dev
)
/* called on periphid match and class 0x9 coresight device. */
static
int
amba_cs_uci_id_match
(
const
struct
amba_id
*
table
,
struct
amba_device
*
dev
)
{
int
ret
=
0
;
struct
amba_cs_uci_id
*
uci
;
uci
=
table
->
data
;
/* no table data or zero mask - return match on periphid */
if
(
!
uci
||
(
uci
->
devarch_mask
==
0
))
return
1
;
/* test against read devtype and masked devarch value */
ret
=
(
dev
->
uci
.
devtype
==
uci
->
devtype
)
&&
((
dev
->
uci
.
devarch
&
uci
->
devarch_mask
)
==
uci
->
devarch
);
return
ret
;
}
static
const
struct
amba_id
*
amba_lookup
(
const
struct
amba_id
*
table
,
struct
amba_device
*
dev
)
{
while
(
table
->
mask
)
{
ret
=
(
dev
->
periphid
&
table
->
mask
)
==
table
->
id
;
if
(
ret
)
break
;
if
(((
dev
->
periphid
&
table
->
mask
)
==
table
->
id
)
&&
((
dev
->
cid
!=
CORESIGHT_CID
)
||
(
amba_cs_uci_id_match
(
table
,
dev
))))
return
table
;
table
++
;
}
return
ret
?
table
:
NULL
;
return
NULL
;
}
static
int
amba_match
(
struct
device
*
dev
,
struct
device_driver
*
drv
)
...
...
@@ -399,10 +416,22 @@ static int amba_device_try_add(struct amba_device *dev, struct resource *parent)
cid
|=
(
readl
(
tmp
+
size
-
0x10
+
4
*
i
)
&
255
)
<<
(
i
*
8
);
if
(
cid
==
CORESIGHT_CID
)
{
/* set the base to the start of the last 4k block */
void
__iomem
*
csbase
=
tmp
+
size
-
4096
;
dev
->
uci
.
devarch
=
readl
(
csbase
+
UCI_REG_DEVARCH_OFFSET
);
dev
->
uci
.
devtype
=
readl
(
csbase
+
UCI_REG_DEVTYPE_OFFSET
)
&
0xff
;
}
amba_put_disable_pclk
(
dev
);
if
(
cid
==
AMBA_CID
||
cid
==
CORESIGHT_CID
)
if
(
cid
==
AMBA_CID
||
cid
==
CORESIGHT_CID
)
{
dev
->
periphid
=
pid
;
dev
->
cid
=
cid
;
}
if
(
!
dev
->
periphid
)
ret
=
-
ENODEV
;
...
...
drivers/hwtracing/coresight/coresight-etm3x.c
View file @
4c2741ac
...
...
@@ -871,7 +871,7 @@ static int etm_probe(struct amba_device *adev, const struct amba_id *id)
}
pm_runtime_put
(
&
adev
->
dev
);
dev_info
(
dev
,
"%s initialized
\n
"
,
(
char
*
)
id
->
data
);
dev_info
(
dev
,
"%s initialized
\n
"
,
(
char
*
)
coresight_get_uci_data
(
id
)
);
if
(
boot_enable
)
{
coresight_enable
(
drvdata
->
csdev
);
drvdata
->
boot_enable
=
true
;
...
...
@@ -915,36 +915,18 @@ static const struct dev_pm_ops etm_dev_pm_ops = {
};
static
const
struct
amba_id
etm_ids
[]
=
{
{
/* ETM 3.3 */
.
id
=
0x000bb921
,
.
mask
=
0x000fffff
,
.
data
=
"ETM 3.3"
,
},
{
/* ETM 3.5 - Cortex-A5 */
.
id
=
0x000bb955
,
.
mask
=
0x000fffff
,
.
data
=
"ETM 3.5"
,
},
{
/* ETM 3.5 */
.
id
=
0x000bb956
,
.
mask
=
0x000fffff
,
.
data
=
"ETM 3.5"
,
},
{
/* PTM 1.0 */
.
id
=
0x000bb950
,
.
mask
=
0x000fffff
,
.
data
=
"PTM 1.0"
,
},
{
/* PTM 1.1 */
.
id
=
0x000bb95f
,
.
mask
=
0x000fffff
,
.
data
=
"PTM 1.1"
,
},
{
/* PTM 1.1 Qualcomm */
.
id
=
0x000b006f
,
.
mask
=
0x000fffff
,
.
data
=
"PTM 1.1"
,
},
/* ETM 3.3 */
CS_AMBA_ID_DATA
(
0x000bb921
,
"ETM 3.3"
),
/* ETM 3.5 - Cortex-A5 */
CS_AMBA_ID_DATA
(
0x000bb955
,
"ETM 3.5"
),
/* ETM 3.5 */
CS_AMBA_ID_DATA
(
0x000bb956
,
"ETM 3.5"
),
/* PTM 1.0 */
CS_AMBA_ID_DATA
(
0x000bb950
,
"PTM 1.0"
),
/* PTM 1.1 */
CS_AMBA_ID_DATA
(
0x000bb95f
,
"PTM 1.1"
),
/* PTM 1.1 Qualcomm */
CS_AMBA_ID_DATA
(
0x000b006f
,
"PTM 1.1"
),
{
0
,
0
},
};
...
...
drivers/hwtracing/coresight/coresight-etm4x.c
View file @
4c2741ac
...
...
@@ -1067,18 +1067,21 @@ static int etm4_probe(struct amba_device *adev, const struct amba_id *id)
return
ret
;
}
#define ETM4x_AMBA_ID(pid) \
{ \
.id = pid, \
.mask = 0x000fffff, \
static
struct
amba_cs_uci_id
uci_id_etm4
[]
=
{
{
/* ETMv4 UCI data */
.
devarch
=
0x47704a13
,
.
devarch_mask
=
0xfff0ffff
,
.
devtype
=
0x00000013
,
}
};
static
const
struct
amba_id
etm4_ids
[]
=
{
ETM4x
_AMBA_ID
(
0x000bb95d
),
/* Cortex-A53 */
ETM4x
_AMBA_ID
(
0x000bb95e
),
/* Cortex-A57 */
ETM4x
_AMBA_ID
(
0x000bb95a
),
/* Cortex-A72 */
ETM4x
_AMBA_ID
(
0x000bb959
),
/* Cortex-A73 */
ETM4x_AMBA_ID
(
0x000bb9da
),
/* Cortex-A35 */
CS
_AMBA_ID
(
0x000bb95d
),
/* Cortex-A53 */
CS
_AMBA_ID
(
0x000bb95e
),
/* Cortex-A57 */
CS
_AMBA_ID
(
0x000bb95a
),
/* Cortex-A72 */
CS
_AMBA_ID
(
0x000bb959
),
/* Cortex-A73 */
CS_AMBA_UCI_ID
(
0x000bb9da
,
uci_id_etm4
),
/* Cortex-A35 */
{},
};
...
...
drivers/hwtracing/coresight/coresight-priv.h
View file @
4c2741ac
...
...
@@ -6,6 +6,7 @@
#ifndef _CORESIGHT_PRIV_H
#define _CORESIGHT_PRIV_H
#include <linux/amba/bus.h>
#include <linux/bitops.h>
#include <linux/io.h>
#include <linux/coresight.h>
...
...
@@ -159,4 +160,43 @@ static inline int etm_readl_cp14(u32 off, unsigned int *val) { return 0; }
static
inline
int
etm_writel_cp14
(
u32
off
,
u32
val
)
{
return
0
;
}
#endif
/*
* Macros and inline functions to handle CoreSight UCI data and driver
* private data in AMBA ID table entries, and extract data values.
*/
/* coresight AMBA ID, no UCI, no driver data: id table entry */
#define CS_AMBA_ID(pid) \
{ \
.id = pid, \
.mask = 0x000fffff, \
}
/* coresight AMBA ID, UCI with driver data only: id table entry. */
#define CS_AMBA_ID_DATA(pid, dval) \
{ \
.id = pid, \
.mask = 0x000fffff, \
.data = (void *)&(struct amba_cs_uci_id) \
{ \
.data = (void *)dval, \
} \
}
/* coresight AMBA ID, full UCI structure: id table entry. */
#define CS_AMBA_UCI_ID(pid, uci_ptr) \
{ \
.id = pid, \
.mask = 0x000fffff, \
.data = uci_ptr \
}
/* extract the data value from a UCI structure given amba_id pointer. */
static
inline
void
*
coresight_get_uci_data
(
const
struct
amba_id
*
id
)
{
if
(
id
->
data
)
return
((
struct
amba_cs_uci_id
*
)(
id
->
data
))
->
data
;
return
0
;
}
#endif
drivers/hwtracing/coresight/coresight-stm.c
View file @
4c2741ac
...
...
@@ -874,7 +874,7 @@ static int stm_probe(struct amba_device *adev, const struct amba_id *id)
pm_runtime_put
(
&
adev
->
dev
);
dev_info
(
dev
,
"%s initialized
\n
"
,
(
char
*
)
id
->
data
);
dev_info
(
dev
,
"%s initialized
\n
"
,
(
char
*
)
coresight_get_uci_data
(
id
)
);
return
0
;
stm_unregister:
...
...
@@ -909,16 +909,8 @@ static const struct dev_pm_ops stm_dev_pm_ops = {
};
static
const
struct
amba_id
stm_ids
[]
=
{
{
.
id
=
0x000bb962
,
.
mask
=
0x000fffff
,
.
data
=
"STM32"
,
},
{
.
id
=
0x000bb963
,
.
mask
=
0x000fffff
,
.
data
=
"STM500"
,
},
CS_AMBA_ID_DATA
(
0x000bb962
,
"STM32"
),
CS_AMBA_ID_DATA
(
0x000bb963
,
"STM500"
),
{
0
,
0
},
};
...
...
drivers/hwtracing/coresight/coresight-tmc.c
View file @
4c2741ac
...
...
@@ -443,7 +443,8 @@ static int tmc_probe(struct amba_device *adev, const struct amba_id *id)
desc
.
type
=
CORESIGHT_DEV_TYPE_SINK
;
desc
.
subtype
.
sink_subtype
=
CORESIGHT_DEV_SUBTYPE_SINK_BUFFER
;
desc
.
ops
=
&
tmc_etr_cs_ops
;
ret
=
tmc_etr_setup_caps
(
drvdata
,
devid
,
id
->
data
);
ret
=
tmc_etr_setup_caps
(
drvdata
,
devid
,
coresight_get_uci_data
(
id
));
if
(
ret
)
goto
out
;
break
;
...
...
@@ -475,26 +476,13 @@ static int tmc_probe(struct amba_device *adev, const struct amba_id *id)
}
static
const
struct
amba_id
tmc_ids
[]
=
{
{
.
id
=
0x000bb961
,
.
mask
=
0x000fffff
,
},
{
/* Coresight SoC 600 TMC-ETR/ETS */
.
id
=
0x000bb9e8
,
.
mask
=
0x000fffff
,
.
data
=
(
void
*
)(
unsigned
long
)
CORESIGHT_SOC_600_ETR_CAPS
,
},
{
/* Coresight SoC 600 TMC-ETB */
.
id
=
0x000bb9e9
,
.
mask
=
0x000fffff
,
},
{
/* Coresight SoC 600 TMC-ETF */
.
id
=
0x000bb9ea
,
.
mask
=
0x000fffff
,
},
CS_AMBA_ID
(
0x000bb961
),
/* Coresight SoC 600 TMC-ETR/ETS */
CS_AMBA_ID_DATA
(
0x000bb9e8
,
(
unsigned
long
)
CORESIGHT_SOC_600_ETR_CAPS
),
/* Coresight SoC 600 TMC-ETB */
CS_AMBA_ID
(
0x000bb9e9
),
/* Coresight SoC 600 TMC-ETF */
CS_AMBA_ID
(
0x000bb9ea
),
{
0
,
0
},
};
...
...
include/linux/amba/bus.h
View file @
4c2741ac
...
...
@@ -25,6 +25,43 @@
#define AMBA_CID 0xb105f00d
#define CORESIGHT_CID 0xb105900d
/*
* CoreSight Architecture specification updates the ID specification
* for components on the AMBA bus. (ARM IHI 0029E)
*
* Bits 15:12 of the CID are the device class.
*
* Class 0xF remains for PrimeCell and legacy components. (AMBA_CID above)
* Class 0x9 defines the component as CoreSight (CORESIGHT_CID above)
* Class 0x0, 0x1, 0xB, 0xE define components that do not have driver support
* at present.
* Class 0x2-0x8,0xA and 0xD-0xD are presently reserved.
*
* Remaining CID bits stay as 0xb105-00d
*/
/**
* Class 0x9 components use additional values to form a Unique Component
* Identifier (UCI), where peripheral ID values are identical for different
* components. Passed to the amba bus code from the component driver via
* the amba_id->data pointer.
* @devarch : coresight devarch register value
* @devarch_mask: mask bits used for matching. 0 indicates UCI not used.
* @devtype : coresight device type value
* @data : additional driver data. As we have usurped the original
* pointer some devices may still need additional data
*/
struct
amba_cs_uci_id
{
unsigned
int
devarch
;
unsigned
int
devarch_mask
;
unsigned
int
devtype
;
void
*
data
;
};
/* define offsets for registers used by UCI */
#define UCI_REG_DEVTYPE_OFFSET 0xFCC
#define UCI_REG_DEVARCH_OFFSET 0xFBC
struct
clk
;
struct
amba_device
{
...
...
@@ -32,6 +69,8 @@ struct amba_device {
struct
resource
res
;
struct
clk
*
pclk
;
unsigned
int
periphid
;
unsigned
int
cid
;
struct
amba_cs_uci_id
uci
;
unsigned
int
irq
[
AMBA_NR_IRQS
];
char
*
driver_override
;
};
...
...
lib/raid6/Makefile
View file @
4c2741ac
...
...
@@ -39,7 +39,7 @@ endif
ifeq
($(CONFIG_KERNEL_MODE_NEON),y)
NEON_FLAGS
:=
-ffreestanding
ifeq
($(ARCH),arm)
NEON_FLAGS
+=
-mfloat-abi
=
softfp
-mfpu
=
neon
NEON_FLAGS
+=
-m
arch
=
armv7-a
-m
float-abi
=
softfp
-mfpu
=
neon
endif
CFLAGS_recov_neon_inner.o
+=
$(NEON_FLAGS)
ifeq
($(ARCH),arm64)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment