Commit 90bb28b0 authored by Russell King's avatar Russell King Committed by Russell King

Merge branches 'machtypes', 'core', 'ep93xx', 'ks8695', 'netdev' and 'sa1100' into devel

...@@ -148,7 +148,6 @@ config ARCH_MAY_HAVE_PC_FDC ...@@ -148,7 +148,6 @@ config ARCH_MAY_HAVE_PC_FDC
config ZONE_DMA config ZONE_DMA
bool bool
default y
config GENERIC_ISA_DMA config GENERIC_ISA_DMA
bool bool
...@@ -178,6 +177,11 @@ config OPROFILE_MPCORE ...@@ -178,6 +177,11 @@ config OPROFILE_MPCORE
config OPROFILE_ARM11_CORE config OPROFILE_ARM11_CORE
bool bool
config OPROFILE_ARMV7
def_bool y
depends on CPU_V7 && !SMP
bool
endif endif
config VECTORS_BASE config VECTORS_BASE
...@@ -245,6 +249,7 @@ config ARCH_CLPS7500 ...@@ -245,6 +249,7 @@ config ARCH_CLPS7500
select TIMER_ACORN select TIMER_ACORN
select ISA select ISA
select NO_IOPORT select NO_IOPORT
select ARCH_SPARSEMEM_ENABLE
help help
Support for the Cirrus Logic PS7500FE system-on-a-chip. Support for the Cirrus Logic PS7500FE system-on-a-chip.
...@@ -306,6 +311,7 @@ config ARCH_IOP13XX ...@@ -306,6 +311,7 @@ config ARCH_IOP13XX
select PLAT_IOP select PLAT_IOP
select PCI select PCI
select ARCH_SUPPORTS_MSI select ARCH_SUPPORTS_MSI
select VMSPLIT_1G
help help
Support for Intel's IOP13XX (XScale) family of processors. Support for Intel's IOP13XX (XScale) family of processors.
...@@ -350,6 +356,7 @@ config ARCH_IXP4XX ...@@ -350,6 +356,7 @@ config ARCH_IXP4XX
select GENERIC_GPIO select GENERIC_GPIO
select GENERIC_TIME select GENERIC_TIME
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select ZONE_DMA if PCI
help help
Support for Intel's IXP4XX (XScale) family of processors. Support for Intel's IXP4XX (XScale) family of processors.
...@@ -464,6 +471,7 @@ config ARCH_RPC ...@@ -464,6 +471,7 @@ config ARCH_RPC
select HAVE_PATA_PLATFORM select HAVE_PATA_PLATFORM
select ISA_DMA_API select ISA_DMA_API
select NO_IOPORT select NO_IOPORT
select ARCH_SPARSEMEM_ENABLE
help help
On the Acorn Risc-PC, Linux can support the internal IDE disk and On the Acorn Risc-PC, Linux can support the internal IDE disk and
CD-ROM interface, serial and parallel port, and the floppy drive. CD-ROM interface, serial and parallel port, and the floppy drive.
...@@ -471,9 +479,7 @@ config ARCH_RPC ...@@ -471,9 +479,7 @@ config ARCH_RPC
config ARCH_SA1100 config ARCH_SA1100
bool "SA1100-based" bool "SA1100-based"
select ISA select ISA
select ARCH_DISCONTIGMEM_ENABLE
select ARCH_SPARSEMEM_ENABLE select ARCH_SPARSEMEM_ENABLE
select ARCH_SELECT_MEMORY_MODEL
select ARCH_MTD_XIP select ARCH_MTD_XIP
select GENERIC_GPIO select GENERIC_GPIO
select GENERIC_TIME select GENERIC_TIME
...@@ -497,6 +503,7 @@ config ARCH_SHARK ...@@ -497,6 +503,7 @@ config ARCH_SHARK
bool "Shark" bool "Shark"
select ISA select ISA
select ISA_DMA select ISA_DMA
select ZONE_DMA
select PCI select PCI
help help
Support for the StrongARM based Digital DNARD machine, also known Support for the StrongARM based Digital DNARD machine, also known
...@@ -504,6 +511,8 @@ config ARCH_SHARK ...@@ -504,6 +511,8 @@ config ARCH_SHARK
config ARCH_LH7A40X config ARCH_LH7A40X
bool "Sharp LH7A40X" bool "Sharp LH7A40X"
select ARCH_DISCONTIGMEM_ENABLE if !LH7A40X_CONTIGMEM
select ARCH_SPARSEMEM_ENABLE if !LH7A40X_CONTIGMEM
help help
Say Y here for systems based on one of the Sharp LH7A40X Say Y here for systems based on one of the Sharp LH7A40X
System on a Chip processors. These CPUs include an ARM922T System on a Chip processors. These CPUs include an ARM922T
...@@ -516,6 +525,7 @@ config ARCH_DAVINCI ...@@ -516,6 +525,7 @@ config ARCH_DAVINCI
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
select GENERIC_GPIO select GENERIC_GPIO
select HAVE_CLK select HAVE_CLK
select ZONE_DMA
help help
Support for TI's DaVinci platform. Support for TI's DaVinci platform.
...@@ -734,6 +744,29 @@ config SMP ...@@ -734,6 +744,29 @@ config SMP
If you don't know what to do here, say N. If you don't know what to do here, say N.
choice
prompt "Memory split"
default VMSPLIT_3G
help
Select the desired split between kernel and user memory.
If you are not absolutely sure what you are doing, leave this
option alone!
config VMSPLIT_3G
bool "3G/1G user/kernel split"
config VMSPLIT_2G
bool "2G/2G user/kernel split"
config VMSPLIT_1G
bool "1G/3G user/kernel split"
endchoice
config PAGE_OFFSET
hex
default 0x40000000 if VMSPLIT_1G
default 0x80000000 if VMSPLIT_2G
default 0xC0000000
config NR_CPUS config NR_CPUS
int "Maximum number of CPUs (2-32)" int "Maximum number of CPUs (2-32)"
range 2 32 range 2 32
...@@ -810,20 +843,18 @@ config OABI_COMPAT ...@@ -810,20 +843,18 @@ config OABI_COMPAT
UNPREDICTABLE (in fact it can be predicted that it won't work UNPREDICTABLE (in fact it can be predicted that it won't work
at all). If in doubt say Y. at all). If in doubt say Y.
# Discontigmem is deprecated
config ARCH_DISCONTIGMEM_ENABLE config ARCH_DISCONTIGMEM_ENABLE
bool bool
default (ARCH_LH7A40X && !LH7A40X_CONTIGMEM)
help
Say Y to support efficient handling of discontiguous physical memory,
for architectures which are either NUMA (Non-Uniform Memory Access)
or have huge holes in the physical address space for other reasons.
See <file:Documentation/vm/numa> for more.
config ARCH_SPARSEMEM_ENABLE config ARCH_SPARSEMEM_ENABLE
bool bool
config ARCH_SPARSEMEM_DEFAULT
def_bool ARCH_SPARSEMEM_ENABLE
config ARCH_SELECT_MEMORY_MODEL config ARCH_SELECT_MEMORY_MODEL
bool def_bool ARCH_DISCONTIGMEM_ENABLE && ARCH_SPARSEMEM_ENABLE
config NODES_SHIFT config NODES_SHIFT
int int
...@@ -1000,9 +1031,9 @@ config ATAGS_PROC ...@@ -1000,9 +1031,9 @@ config ATAGS_PROC
endmenu endmenu
if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX || ARCH_PXA) menu "CPU Power Management"
menu "CPU Frequency scaling" if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX || ARCH_PXA)
source "drivers/cpufreq/Kconfig" source "drivers/cpufreq/Kconfig"
...@@ -1042,10 +1073,12 @@ config CPU_FREQ_PXA ...@@ -1042,10 +1073,12 @@ config CPU_FREQ_PXA
default y default y
select CPU_FREQ_DEFAULT_GOV_USERSPACE select CPU_FREQ_DEFAULT_GOV_USERSPACE
endmenu
endif endif
source "drivers/cpuidle/Kconfig"
endmenu
menu "Floating point emulation" menu "Floating point emulation"
comment "At least one emulation must be selected" comment "At least one emulation must be selected"
...@@ -1197,6 +1230,8 @@ source "drivers/power/Kconfig" ...@@ -1197,6 +1230,8 @@ source "drivers/power/Kconfig"
source "drivers/hwmon/Kconfig" source "drivers/hwmon/Kconfig"
source "drivers/thermal/Kconfig"
source "drivers/watchdog/Kconfig" source "drivers/watchdog/Kconfig"
source "drivers/ssb/Kconfig" source "drivers/ssb/Kconfig"
...@@ -1217,6 +1252,10 @@ source "drivers/usb/Kconfig" ...@@ -1217,6 +1252,10 @@ source "drivers/usb/Kconfig"
source "drivers/mmc/Kconfig" source "drivers/mmc/Kconfig"
source "drivers/memstick/Kconfig"
source "drivers/accessibility/Kconfig"
source "drivers/leds/Kconfig" source "drivers/leds/Kconfig"
source "drivers/rtc/Kconfig" source "drivers/rtc/Kconfig"
...@@ -1225,6 +1264,8 @@ source "drivers/dma/Kconfig" ...@@ -1225,6 +1264,8 @@ source "drivers/dma/Kconfig"
source "drivers/dca/Kconfig" source "drivers/dca/Kconfig"
source "drivers/auxdisplay/Kconfig"
source "drivers/regulator/Kconfig" source "drivers/regulator/Kconfig"
source "drivers/uio/Kconfig" source "drivers/uio/Kconfig"
......
...@@ -47,7 +47,7 @@ comma = , ...@@ -47,7 +47,7 @@ comma = ,
# Note that GCC does not numerically define an architecture version # Note that GCC does not numerically define an architecture version
# macro, but instead defines a whole series of macros which makes # macro, but instead defines a whole series of macros which makes
# testing for a specific architecture or later rather impossible. # testing for a specific architecture or later rather impossible.
arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7a,-march=armv5t -Wa$(comma)-march=armv7a) arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
arch-$(CONFIG_CPU_32v6) :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6) arch-$(CONFIG_CPU_32v6) :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
# Only override the compiler option if ARMv6. The ARMv6K extensions are # Only override the compiler option if ARMv6. The ARMv6K extensions are
# always available in ARMv7 # always available in ARMv7
......
...@@ -76,7 +76,7 @@ KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS)) ...@@ -76,7 +76,7 @@ KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS))
endif endif
EXTRA_CFLAGS := -fpic -fno-builtin EXTRA_CFLAGS := -fpic -fno-builtin
EXTRA_AFLAGS := EXTRA_AFLAGS := -Wa,-march=all
# Supply ZRELADDR, INITRD_PHYS and PARAMS_PHYS to the decompressor via # Supply ZRELADDR, INITRD_PHYS and PARAMS_PHYS to the decompressor via
# linker symbols. We only define initrd_phys and params_phys if the # linker symbols. We only define initrd_phys and params_phys if the
......
...@@ -421,6 +421,7 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size ...@@ -421,6 +421,7 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size
add r1, r1, #1048576 add r1, r1, #1048576
str r1, [r0] str r1, [r0]
mov pc, lr mov pc, lr
ENDPROC(__setup_mmu)
__armv4_mmu_cache_on: __armv4_mmu_cache_on:
mov r12, lr mov r12, lr
...@@ -801,7 +802,7 @@ loop1: ...@@ -801,7 +802,7 @@ loop1:
add r2, r2, #4 @ add 4 (line length offset) add r2, r2, #4 @ add 4 (line length offset)
ldr r4, =0x3ff ldr r4, =0x3ff
ands r4, r4, r1, lsr #3 @ find maximum number on the way size ands r4, r4, r1, lsr #3 @ find maximum number on the way size
.word 0xe16f5f14 @ clz r5, r4 - find bit position of way size increment clz r5, r4 @ find bit position of way size increment
ldr r7, =0x7fff ldr r7, =0x7fff
ands r7, r7, r1, lsr #13 @ extract max number of the index size ands r7, r7, r1, lsr #13 @ extract max number of the index size
loop2: loop2:
......
...@@ -12,7 +12,8 @@ config ICST307 ...@@ -12,7 +12,8 @@ config ICST307
config SA1111 config SA1111
bool bool
select DMABOUNCE select DMABOUNCE if !ARCH_PXA
select ZONE_DMA if !ARCH_PXA
config DMABOUNCE config DMABOUNCE
bool bool
......
This diff is collapsed.
...@@ -27,9 +27,9 @@ ...@@ -27,9 +27,9 @@
#include <linux/list.h> #include <linux/list.h>
#include <linux/smp.h> #include <linux/smp.h>
#include <linux/cpumask.h> #include <linux/cpumask.h>
#include <linux/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/io.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/hardware/gic.h> #include <asm/hardware/gic.h>
......
...@@ -24,9 +24,9 @@ ...@@ -24,9 +24,9 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/io.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
......
...@@ -25,10 +25,10 @@ ...@@ -25,10 +25,10 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/io.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/sizes.h> #include <asm/sizes.h>
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#include <linux/string.h> #include <linux/string.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <asm/io.h> #include <linux/io.h>
#include <asm/gpio.h> #include <asm/gpio.h>
#include <asm/hardware/scoop.h> #include <asm/hardware/scoop.h>
......
...@@ -17,9 +17,9 @@ ...@@ -17,9 +17,9 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/io.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/io.h>
#include <asm/hardware/ioc.h> #include <asm/hardware/ioc.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
......
...@@ -16,9 +16,9 @@ ...@@ -16,9 +16,9 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/io.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/hardware/uengine.h> #include <asm/hardware/uengine.h>
#include <asm/io.h>
#if defined(CONFIG_ARCH_IXP2000) #if defined(CONFIG_ARCH_IXP2000)
#define IXP_UENGINE_CSR_VIRT_BASE IXP2000_UENGINE_CSR_VIRT_BASE #define IXP_UENGINE_CSR_VIRT_BASE IXP2000_UENGINE_CSR_VIRT_BASE
......
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/io.h>
#include <asm/io.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/mach/pci.h> #include <asm/mach/pci.h>
......
...@@ -20,8 +20,8 @@ ...@@ -20,8 +20,8 @@
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <linux/list.h> #include <linux/list.h>
#include <linux/io.h>
#include <asm/io.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <asm/hardware/vic.h> #include <asm/hardware/vic.h>
......
This diff is collapsed.
...@@ -12,7 +12,7 @@ extern void __bug(const char *file, int line) __attribute__((noreturn)); ...@@ -12,7 +12,7 @@ extern void __bug(const char *file, int line) __attribute__((noreturn));
#else #else
/* this just causes an oops */ /* this just causes an oops */
#define BUG() (*(int *)0 = 0) #define BUG() do { *(int *)0 = 0; } while (1)
#endif #endif
......
...@@ -444,94 +444,4 @@ static inline void flush_ioremap_region(unsigned long phys, void __iomem *virt, ...@@ -444,94 +444,4 @@ static inline void flush_ioremap_region(unsigned long phys, void __iomem *virt,
dmac_inv_range(start, start + size); dmac_inv_range(start, start + size);
} }
#define __cacheid_present(val) (val != read_cpuid(CPUID_ID))
#define __cacheid_type_v7(val) ((val & (7 << 29)) == (4 << 29))
#define __cacheid_vivt_prev7(val) ((val & (15 << 25)) != (14 << 25))
#define __cacheid_vipt_prev7(val) ((val & (15 << 25)) == (14 << 25))
#define __cacheid_vipt_nonaliasing_prev7(val) ((val & (15 << 25 | 1 << 23)) == (14 << 25))
#define __cacheid_vipt_aliasing_prev7(val) ((val & (15 << 25 | 1 << 23)) == (14 << 25 | 1 << 23))
#define __cacheid_vivt(val) (__cacheid_type_v7(val) ? 0 : __cacheid_vivt_prev7(val))
#define __cacheid_vipt(val) (__cacheid_type_v7(val) ? 1 : __cacheid_vipt_prev7(val))
#define __cacheid_vipt_nonaliasing(val) (__cacheid_type_v7(val) ? 1 : __cacheid_vipt_nonaliasing_prev7(val))
#define __cacheid_vipt_aliasing(val) (__cacheid_type_v7(val) ? 0 : __cacheid_vipt_aliasing_prev7(val))
#define __cacheid_vivt_asid_tagged_instr(val) (__cacheid_type_v7(val) ? ((val & (3 << 14)) == (1 << 14)) : 0)
#if defined(CONFIG_CPU_CACHE_VIVT) && !defined(CONFIG_CPU_CACHE_VIPT)
/*
* VIVT caches only
*/
#define cache_is_vivt() 1
#define cache_is_vipt() 0
#define cache_is_vipt_nonaliasing() 0
#define cache_is_vipt_aliasing() 0
#define icache_is_vivt_asid_tagged() 0
#elif !defined(CONFIG_CPU_CACHE_VIVT) && defined(CONFIG_CPU_CACHE_VIPT)
/*
* VIPT caches only
*/
#define cache_is_vivt() 0
#define cache_is_vipt() 1
#define cache_is_vipt_nonaliasing() \
({ \
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
__cacheid_vipt_nonaliasing(__val); \
})
#define cache_is_vipt_aliasing() \
({ \
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
__cacheid_vipt_aliasing(__val); \
})
#define icache_is_vivt_asid_tagged() \
({ \
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
__cacheid_vivt_asid_tagged_instr(__val); \
})
#else
/*
* VIVT or VIPT caches. Note that this is unreliable since ARM926
* and V6 CPUs satisfy the "(val & (15 << 25)) == (14 << 25)" test.
* There's no way to tell from the CacheType register what type (!)
* the cache is.
*/
#define cache_is_vivt() \
({ \
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
(!__cacheid_present(__val)) || __cacheid_vivt(__val); \
})
#define cache_is_vipt() \
({ \
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
__cacheid_present(__val) && __cacheid_vipt(__val); \
})
#define cache_is_vipt_nonaliasing() \
({ \
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
__cacheid_present(__val) && \
__cacheid_vipt_nonaliasing(__val); \
})
#define cache_is_vipt_aliasing() \
({ \
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
__cacheid_present(__val) && \
__cacheid_vipt_aliasing(__val); \
})
#define icache_is_vivt_asid_tagged() \
({ \
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
__cacheid_present(__val) && \
__cacheid_vivt_asid_tagged_instr(__val); \
})
#endif
#endif #endif
#ifndef __ASM_ARM_CACHETYPE_H
#define __ASM_ARM_CACHETYPE_H
#define CACHEID_VIVT (1 << 0)
#define CACHEID_VIPT_NONALIASING (1 << 1)
#define CACHEID_VIPT_ALIASING (1 << 2)
#define CACHEID_VIPT (CACHEID_VIPT_ALIASING|CACHEID_VIPT_NONALIASING)
#define CACHEID_ASID_TAGGED (1 << 3)
extern unsigned int cacheid;
#define cache_is_vivt() cacheid_is(CACHEID_VIVT)
#define cache_is_vipt() cacheid_is(CACHEID_VIPT)
#define cache_is_vipt_nonaliasing() cacheid_is(CACHEID_VIPT_NONALIASING)
#define cache_is_vipt_aliasing() cacheid_is(CACHEID_VIPT_ALIASING)
#define icache_is_vivt_asid_tagged() cacheid_is(CACHEID_ASID_TAGGED)
/*
* __LINUX_ARM_ARCH__ is the minimum supported CPU architecture
* Mask out support which will never be present on newer CPUs.
* - v6+ is never VIVT
* - v7+ VIPT never aliases
*/
#if __LINUX_ARM_ARCH__ >= 7
#define __CACHEID_ARCH_MIN (CACHEID_VIPT_NONALIASING | CACHEID_ASID_TAGGED)
#elif __LINUX_ARM_ARCH__ >= 6
#define __CACHEID_ARCH_MIN (~CACHEID_VIVT)
#else
#define __CACHEID_ARCH_MIN (~0)
#endif
/*
* Mask out support which isn't configured
*/
#if defined(CONFIG_CPU_CACHE_VIVT) && !defined(CONFIG_CPU_CACHE_VIPT)
#define __CACHEID_ALWAYS (CACHEID_VIVT)
#define __CACHEID_NEVER (~CACHEID_VIVT)
#elif !defined(CONFIG_CPU_CACHE_VIVT) && defined(CONFIG_CPU_CACHE_VIPT)
#define __CACHEID_ALWAYS (0)
#define __CACHEID_NEVER (CACHEID_VIVT)
#else
#define __CACHEID_ALWAYS (0)
#define __CACHEID_NEVER (0)
#endif
static inline unsigned int __attribute__((pure)) cacheid_is(unsigned int mask)
{
return (__CACHEID_ALWAYS & mask) |
(~__CACHEID_NEVER & __CACHEID_ARCH_MIN & mask & cacheid);
}
#endif
#ifndef __ASM_ARM_CPUTYPE_H
#define __ASM_ARM_CPUTYPE_H
#include <linux/stringify.h>
#define CPUID_ID 0
#define CPUID_CACHETYPE 1
#define CPUID_TCM 2
#define CPUID_TLBTYPE 3
#ifdef CONFIG_CPU_CP15
#define read_cpuid(reg) \
({ \
unsigned int __val; \
asm("mrc p15, 0, %0, c0, c0, " __stringify(reg) \
: "=r" (__val) \
: \
: "cc"); \
__val; \
})
#else
extern unsigned int processor_id;
#define read_cpuid(reg) (processor_id)
#endif
/*
* The CPU ID never changes at run time, so we might as well tell the
* compiler that it's constant. Use this function to read the CPU ID
* rather than directly reading processor_id or read_cpuid() directly.
*/
static inline unsigned int __attribute_const__ read_cpuid_id(void)
{
return read_cpuid(CPUID_ID);
}
static inline unsigned int __attribute_const__ read_cpuid_cachetype(void)
{
return read_cpuid(CPUID_CACHETYPE);
}
/*
* Intel's XScale3 core supports some v6 features (supersections, L2)
* but advertises itself as v5 as it does not support the v6 ISA. For
* this reason, we need a way to explicitly test for this type of CPU.
*/
#ifndef CONFIG_CPU_XSC3
#define cpu_is_xsc3() 0
#else
static inline int cpu_is_xsc3(void)
{
if ((read_cpuid_id() & 0xffffe000) == 0x69056000)
return 1;
return 0;
}
#endif
#if !defined(CONFIG_CPU_XSCALE) && !defined(CONFIG_CPU_XSC3)
#define cpu_is_xscale() 0
#else
#define cpu_is_xscale() 1
#endif
#endif
This diff is collapsed.
#ifndef _ASM_FUTEX_H #ifndef _ASM_ARM_FUTEX_H
#define _ASM_FUTEX_H #define _ASM_ARM_FUTEX_H
#ifdef __KERNEL__
#ifdef CONFIG_SMP
#include <asm-generic/futex.h> #include <asm-generic/futex.h>
#endif #else /* !SMP, we can work around lack of atomic ops by disabling preemption */
#include <linux/futex.h>
#include <linux/preempt.h>
#include <linux/uaccess.h>
#include <asm/errno.h>
#define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \
__asm__ __volatile__( \
"1: ldrt %1, [%2]\n" \
" " insn "\n" \
"2: strt %0, [%2]\n" \
" mov %0, #0\n" \
"3:\n" \
" .section __ex_table,\"a\"\n" \
" .align 3\n" \
" .long 1b, 4f, 2b, 4f\n" \
" .previous\n" \
" .section .fixup,\"ax\"\n" \
"4: mov %0, %4\n" \
" b 3b\n" \
" .previous" \
: "=&r" (ret), "=&r" (oldval) \
: "r" (uaddr), "r" (oparg), "Ir" (-EFAULT) \
: "cc", "memory")
static inline int
futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
{
int op = (encoded_op >> 28) & 7;
int cmp = (encoded_op >> 24) & 15;
int oparg = (encoded_op << 8) >> 20;
int cmparg = (encoded_op << 20) >> 20;
int oldval = 0, ret;
if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
oparg = 1 << oparg;
if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int)))
return -EFAULT;
pagefault_disable(); /* implies preempt_disable() */
switch (op) {
case FUTEX_OP_SET:
__futex_atomic_op("mov %0, %3", ret, oldval, uaddr, oparg);
break;
case FUTEX_OP_ADD:
__futex_atomic_op("add %0, %1, %3", ret, oldval, uaddr, oparg);
break;
case FUTEX_OP_OR:
__futex_atomic_op("orr %0, %1, %3", ret, oldval, uaddr, oparg);
break;
case FUTEX_OP_ANDN:
__futex_atomic_op("and %0, %1, %3", ret, oldval, uaddr, ~oparg);
break;
case FUTEX_OP_XOR:
__futex_atomic_op("eor %0, %1, %3", ret, oldval, uaddr, oparg);
break;
default:
ret = -ENOSYS;
}
pagefault_enable(); /* subsumes preempt_enable() */
if (!ret) {
switch (cmp) {
case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
default: ret = -ENOSYS;
}
}
return ret;
}
static inline int
futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
{
int val;
if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int)))
return -EFAULT;
pagefault_disable(); /* implies preempt_disable() */
__asm__ __volatile__("@futex_atomic_cmpxchg_inatomic\n"
"1: ldrt %0, [%3]\n"
" teq %0, %1\n"
"2: streqt %2, [%3]\n"
"3:\n"
" .section __ex_table,\"a\"\n"
" .align 3\n"
" .long 1b, 4f, 2b, 4f\n"
" .previous\n"
" .section .fixup,\"ax\"\n"
"4: mov %0, %4\n"
" b 3b\n"
" .previous"
: "=&r" (val)
: "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT)
: "cc", "memory");
pagefault_enable(); /* subsumes preempt_enable() */
return val;
}
#endif /* !SMP */
#endif /* __KERNEL__ */
#endif /* _ASM_ARM_FUTEX_H */
...@@ -22,6 +22,10 @@ ...@@ -22,6 +22,10 @@
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
struct irqaction; struct irqaction;
extern void migrate_irqs(void); extern void migrate_irqs(void);
extern void asm_do_IRQ(unsigned int, struct pt_regs *);
void init_IRQ(void);
#endif #endif
#endif #endif
......
...@@ -61,7 +61,6 @@ struct kprobe_ctlblk { ...@@ -61,7 +61,6 @@ struct kprobe_ctlblk {
void arch_remove_kprobe(struct kprobe *); void arch_remove_kprobe(struct kprobe *);
void kretprobe_trampoline(void); void kretprobe_trampoline(void);
int kprobe_trap_handler(struct pt_regs *regs, unsigned int instr);
int kprobe_fault_handler(struct pt_regs *regs, unsigned int fsr); int kprobe_fault_handler(struct pt_regs *regs, unsigned int fsr);
int kprobe_exceptions_notify(struct notifier_block *self, int kprobe_exceptions_notify(struct notifier_block *self,
unsigned long val, void *data); unsigned long val, void *data);
......
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
#ifndef _ASM_MC146818RTC_H #ifndef _ASM_MC146818RTC_H
#define _ASM_MC146818RTC_H #define _ASM_MC146818RTC_H
#include <linux/io.h>
#include <mach/irqs.h> #include <mach/irqs.h>
#include <asm/io.h>
#ifndef RTC_PORT #ifndef RTC_PORT
#define RTC_PORT(x) (0x70 + (x)) #define RTC_PORT(x) (0x70 + (x))
......
...@@ -13,43 +13,33 @@ ...@@ -13,43 +13,33 @@
#ifndef __ASM_ARM_MEMORY_H #ifndef __ASM_ARM_MEMORY_H
#define __ASM_ARM_MEMORY_H #define __ASM_ARM_MEMORY_H
#include <linux/compiler.h>
#include <linux/const.h>
#include <mach/memory.h>
#include <asm/sizes.h>
/* /*
* Allow for constants defined here to be used from assembly code * Allow for constants defined here to be used from assembly code
* by prepending the UL suffix only with actual C code compilation. * by prepending the UL suffix only with actual C code compilation.
*/ */
#ifndef __ASSEMBLY__ #define UL(x) _AC(x, UL)
#define UL(x) (x##UL)
#else
#define UL(x) (x)
#endif
#include <linux/compiler.h>
#include <mach/memory.h>
#include <asm/sizes.h>
#ifdef CONFIG_MMU #ifdef CONFIG_MMU
#ifndef TASK_SIZE
/* /*
* PAGE_OFFSET - the virtual address of the start of the kernel image
* TASK_SIZE - the maximum size of a user space task. * TASK_SIZE - the maximum size of a user space task.
* TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area * TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area
*/ */
#define TASK_SIZE UL(0xbf000000) #define PAGE_OFFSET UL(CONFIG_PAGE_OFFSET)
#define TASK_UNMAPPED_BASE UL(0x40000000) #define TASK_SIZE (UL(CONFIG_PAGE_OFFSET) - UL(0x01000000))
#endif #define TASK_UNMAPPED_BASE (UL(CONFIG_PAGE_OFFSET) / 3)
/* /*
* The maximum size of a 26-bit user space task. * The maximum size of a 26-bit user space task.
*/ */
#define TASK_SIZE_26 UL(0x04000000) #define TASK_SIZE_26 UL(0x04000000)
/*
* Page offset: 3GB
*/
#ifndef PAGE_OFFSET
#define PAGE_OFFSET UL(0xc0000000)
#endif
/* /*
* The module space lives between the addresses given by TASK_SIZE * The module space lives between the addresses given by TASK_SIZE
* and PAGE_OFFSET - it must be within 32MB of the kernel text. * and PAGE_OFFSET - it must be within 32MB of the kernel text.
...@@ -147,16 +137,10 @@ ...@@ -147,16 +137,10 @@
#ifndef arch_adjust_zones #ifndef arch_adjust_zones
#define arch_adjust_zones(node,size,holes) do { } while (0) #define arch_adjust_zones(node,size,holes) do { } while (0)
#elif !defined(CONFIG_ZONE_DMA)
#error "custom arch_adjust_zones() requires CONFIG_ZONE_DMA"
#endif #endif
/*
* Amount of memory reserved for the vmalloc() area, and minimum
* address for vmalloc mappings.
*/
extern unsigned long vmalloc_reserve;
#define VMALLOC_MIN (void *)(VMALLOC_END - vmalloc_reserve)
/* /*
* PFNs are used to describe any physical page; this means * PFNs are used to describe any physical page; this means
* PFN 0 == physical address 0. * PFN 0 == physical address 0.
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <linux/compiler.h> #include <linux/compiler.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/cachetype.h>
#include <asm/proc-fns.h> #include <asm/proc-fns.h>
#include <asm-generic/mm_hooks.h> #include <asm-generic/mm_hooks.h>
......
...@@ -319,11 +319,6 @@ static inline pte_t *pmd_page_vaddr(pmd_t pmd) ...@@ -319,11 +319,6 @@ static inline pte_t *pmd_page_vaddr(pmd_t pmd)
#define pmd_page(pmd) virt_to_page(__va(pmd_val(pmd))) #define pmd_page(pmd) virt_to_page(__va(pmd_val(pmd)))
/*
* Permanent address of a page. We never have highmem, so this is trivial.
*/
#define pages_to_mb(x) ((x) >> (20 - PAGE_SHIFT))
/* /*
* Conversion functions: convert a page and protection to a page entry, * Conversion functions: convert a page and protection to a page entry,
* and a page entry and page directory to the page they refer to. * and a page entry and page directory to the page they refer to.
......
...@@ -54,7 +54,6 @@ ...@@ -54,7 +54,6 @@
#define PSR_C_BIT 0x20000000 #define PSR_C_BIT 0x20000000
#define PSR_Z_BIT 0x40000000 #define PSR_Z_BIT 0x40000000
#define PSR_N_BIT 0x80000000 #define PSR_N_BIT 0x80000000
#define PCMASK 0
/* /*
* Groups of PSR bits * Groups of PSR bits
...@@ -139,11 +138,7 @@ static inline int valid_user_regs(struct pt_regs *regs) ...@@ -139,11 +138,7 @@ static inline int valid_user_regs(struct pt_regs *regs)
return 0; return 0;
} }
#define pc_pointer(v) \ #define instruction_pointer(regs) (regs)->ARM_pc
((v) & ~PCMASK)
#define instruction_pointer(regs) \
(pc_pointer((regs)->ARM_pc))
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
extern unsigned long profile_pc(struct pt_regs *regs); extern unsigned long profile_pc(struct pt_regs *regs);
......
...@@ -209,6 +209,17 @@ struct meminfo { ...@@ -209,6 +209,17 @@ struct meminfo {
struct membank bank[NR_BANKS]; struct membank bank[NR_BANKS];
}; };
#define for_each_nodebank(iter,mi,no) \
for (iter = 0; iter < mi->nr_banks; iter++) \
if (mi->bank[iter].node == no)
#define bank_pfn_start(bank) __phys_to_pfn((bank)->start)
#define bank_pfn_end(bank) __phys_to_pfn((bank)->start + (bank)->size)
#define bank_pfn_size(bank) ((bank)->size >> PAGE_SHIFT)
#define bank_phys_start(bank) (bank)->start
#define bank_phys_end(bank) ((bank)->start + (bank)->size)
#define bank_phys_size(bank) (bank)->size
/* /*
* Early command line parameters. * Early command line parameters.
*/ */
......
...@@ -3,8 +3,22 @@ ...@@ -3,8 +3,22 @@
#include <asm/memory.h> #include <asm/memory.h>
#define MAX_PHYSADDR_BITS 32 /*
#define MAX_PHYSMEM_BITS 32 * Two definitions are required for sparsemem:
#define SECTION_SIZE_BITS NODE_MEM_SIZE_BITS *
* MAX_PHYSMEM_BITS: The number of physical address bits required
* to address the last byte of memory.
*
* SECTION_SIZE_BITS: The number of physical address bits to cover
* the maximum amount of memory in a section.
*
* Eg, if you have 2 banks of up to 64MB at 0x80000000, 0x84000000,
* then MAX_PHYSMEM_BITS is 32, SECTION_SIZE_BITS is 26.
*
* Define these in your mach/memory.h.
*/
#if !defined(SECTION_SIZE_BITS) || !defined(MAX_PHYSMEM_BITS)
#error Sparsemem is not supported on this platform
#endif
#endif #endif
...@@ -43,11 +43,6 @@ ...@@ -43,11 +43,6 @@
#define CR_XP (1 << 23) /* Extended page tables */ #define CR_XP (1 << 23) /* Extended page tables */
#define CR_VE (1 << 24) /* Vectored interrupts */ #define CR_VE (1 << 24) /* Vectored interrupts */
#define CPUID_ID 0
#define CPUID_CACHETYPE 1
#define CPUID_TCM 2
#define CPUID_TLBTYPE 3
/* /*
* This is used to ensure the compiler did actually allocate the register we * This is used to ensure the compiler did actually allocate the register we
* asked it for some inline assembly sequences. Apparently we can't trust * asked it for some inline assembly sequences. Apparently we can't trust
...@@ -61,36 +56,8 @@ ...@@ -61,36 +56,8 @@
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#include <linux/linkage.h> #include <linux/linkage.h>
#include <linux/stringify.h>
#include <linux/irqflags.h> #include <linux/irqflags.h>
#ifdef CONFIG_CPU_CP15
#define read_cpuid(reg) \
({ \
unsigned int __val; \
asm("mrc p15, 0, %0, c0, c0, " __stringify(reg) \
: "=r" (__val) \
: \
: "cc"); \
__val; \
})
#else
extern unsigned int processor_id;
#define read_cpuid(reg) (processor_id)
#endif
/*
* The CPU ID never changes at run time, so we might as well tell the
* compiler that it's constant. Use this function to read the CPU ID
* rather than directly reading processor_id or read_cpuid() directly.
*/
static inline unsigned int read_cpuid_id(void) __attribute_const__;
static inline unsigned int read_cpuid_id(void)
{
return read_cpuid(CPUID_ID);
}
#define __exception __attribute__((section(".exception.text"))) #define __exception __attribute__((section(".exception.text")))
struct thread_info; struct thread_info;
...@@ -131,31 +98,6 @@ extern void cpu_init(void); ...@@ -131,31 +98,6 @@ extern void cpu_init(void);
void arm_machine_restart(char mode); void arm_machine_restart(char mode);
extern void (*arm_pm_restart)(char str); extern void (*arm_pm_restart)(char str);
/*
* Intel's XScale3 core supports some v6 features (supersections, L2)
* but advertises itself as v5 as it does not support the v6 ISA. For
* this reason, we need a way to explicitly test for this type of CPU.
*/
#ifndef CONFIG_CPU_XSC3
#define cpu_is_xsc3() 0
#else
static inline int cpu_is_xsc3(void)
{
extern unsigned int processor_id;
if ((processor_id & 0xffffe000) == 0x69056000)
return 1;
return 0;
}
#endif
#if !defined(CONFIG_CPU_XSCALE) && !defined(CONFIG_CPU_XSC3)
#define cpu_is_xscale() 0
#else
#define cpu_is_xscale() 1
#endif
#define UDBG_UNDEFINED (1 << 0) #define UDBG_UNDEFINED (1 << 0)
#define UDBG_SYSCALL (1 << 1) #define UDBG_SYSCALL (1 << 1)
#define UDBG_BADABORT (1 << 2) #define UDBG_BADABORT (1 << 2)
......
...@@ -98,7 +98,7 @@ static inline struct thread_info *current_thread_info(void) ...@@ -98,7 +98,7 @@ static inline struct thread_info *current_thread_info(void)
} }
#define thread_saved_pc(tsk) \ #define thread_saved_pc(tsk) \
((unsigned long)(pc_pointer(task_thread_info(tsk)->cpu_context.pc))) ((unsigned long)(task_thread_info(tsk)->cpu_context.pc))
#define thread_saved_fp(tsk) \ #define thread_saved_fp(tsk) \
((unsigned long)(task_thread_info(tsk)->cpu_context.fp)) ((unsigned long)(task_thread_info(tsk)->cpu_context.fp))
......
...@@ -225,7 +225,7 @@ do { \ ...@@ -225,7 +225,7 @@ do { \
#define __get_user_asm_byte(x,addr,err) \ #define __get_user_asm_byte(x,addr,err) \
__asm__ __volatile__( \ __asm__ __volatile__( \
"1: ldrbt %1,[%2],#0\n" \ "1: ldrbt %1,[%2]\n" \
"2:\n" \ "2:\n" \
" .section .fixup,\"ax\"\n" \ " .section .fixup,\"ax\"\n" \
" .align 2\n" \ " .align 2\n" \
...@@ -261,7 +261,7 @@ do { \ ...@@ -261,7 +261,7 @@ do { \
#define __get_user_asm_word(x,addr,err) \ #define __get_user_asm_word(x,addr,err) \
__asm__ __volatile__( \ __asm__ __volatile__( \
"1: ldrt %1,[%2],#0\n" \ "1: ldrt %1,[%2]\n" \
"2:\n" \ "2:\n" \
" .section .fixup,\"ax\"\n" \ " .section .fixup,\"ax\"\n" \
" .align 2\n" \ " .align 2\n" \
...@@ -306,7 +306,7 @@ do { \ ...@@ -306,7 +306,7 @@ do { \
#define __put_user_asm_byte(x,__pu_addr,err) \ #define __put_user_asm_byte(x,__pu_addr,err) \
__asm__ __volatile__( \ __asm__ __volatile__( \
"1: strbt %1,[%2],#0\n" \ "1: strbt %1,[%2]\n" \
"2:\n" \ "2:\n" \
" .section .fixup,\"ax\"\n" \ " .section .fixup,\"ax\"\n" \
" .align 2\n" \ " .align 2\n" \
...@@ -339,7 +339,7 @@ do { \ ...@@ -339,7 +339,7 @@ do { \
#define __put_user_asm_word(x,__pu_addr,err) \ #define __put_user_asm_word(x,__pu_addr,err) \
__asm__ __volatile__( \ __asm__ __volatile__( \
"1: strt %1,[%2],#0\n" \ "1: strt %1,[%2]\n" \
"2:\n" \ "2:\n" \
" .section .fixup,\"ax\"\n" \ " .section .fixup,\"ax\"\n" \
" .align 2\n" \ " .align 2\n" \
...@@ -365,7 +365,7 @@ do { \ ...@@ -365,7 +365,7 @@ do { \
#define __put_user_asm_dword(x,__pu_addr,err) \ #define __put_user_asm_dword(x,__pu_addr,err) \
__asm__ __volatile__( \ __asm__ __volatile__( \
"1: strt " __reg_oper1 ", [%1], #4\n" \ "1: strt " __reg_oper1 ", [%1], #4\n" \
"2: strt " __reg_oper0 ", [%1], #0\n" \ "2: strt " __reg_oper0 ", [%1]\n" \
"3:\n" \ "3:\n" \
" .section .fixup,\"ax\"\n" \ " .section .fixup,\"ax\"\n" \
" .align 2\n" \ " .align 2\n" \
......
#ifndef ASMARM_VGA_H #ifndef ASMARM_VGA_H
#define ASMARM_VGA_H #define ASMARM_VGA_H
#include <linux/io.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/io.h>
#define VGA_MAP_MEM(x,s) (PCIMEM_BASE + (x)) #define VGA_MAP_MEM(x,s) (PCIMEM_BASE + (x))
......
...@@ -13,11 +13,11 @@ ...@@ -13,11 +13,11 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/in6.h> #include <linux/in6.h>
#include <linux/syscalls.h> #include <linux/syscalls.h>
#include <linux/uaccess.h>
#include <linux/io.h>
#include <asm/checksum.h> #include <asm/checksum.h>
#include <asm/io.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/uaccess.h>
#include <asm/ftrace.h> #include <asm/ftrace.h>
/* /*
......
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/io.h>
#include <asm/io.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/pci.h> #include <asm/mach/pci.h>
......
...@@ -15,9 +15,9 @@ ...@@ -15,9 +15,9 @@
#include <linux/signal.h> #include <linux/signal.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/io.h>
#include <mach/ep93xx-regs.h> #include <mach/ep93xx-regs.h>
#include <asm/thread_notify.h> #include <asm/thread_notify.h>
#include <asm/io.h>
struct crunch_state *crunch_owner; struct crunch_state *crunch_owner;
......
...@@ -89,10 +89,12 @@ ...@@ -89,10 +89,12 @@
ENTRY(printhex8) ENTRY(printhex8)
mov r1, #8 mov r1, #8
b printhex b printhex
ENDPROC(printhex8)
ENTRY(printhex4) ENTRY(printhex4)
mov r1, #4 mov r1, #4
b printhex b printhex
ENDPROC(printhex4)
ENTRY(printhex2) ENTRY(printhex2)
mov r1, #2 mov r1, #2
...@@ -110,6 +112,7 @@ printhex: adr r2, hexbuf ...@@ -110,6 +112,7 @@ printhex: adr r2, hexbuf
bne 1b bne 1b
mov r0, r2 mov r0, r2
b printascii b printascii
ENDPROC(printhex2)
.ltorg .ltorg
...@@ -127,11 +130,13 @@ ENTRY(printascii) ...@@ -127,11 +130,13 @@ ENTRY(printascii)
teqne r1, #0 teqne r1, #0
bne 1b bne 1b
mov pc, lr mov pc, lr
ENDPROC(printascii)
ENTRY(printch) ENTRY(printch)
addruart r3 addruart r3
mov r1, r0 mov r1, r0
mov r0, #0 mov r0, #0
b 1b b 1b
ENDPROC(printch)
hexbuf: .space 16 hexbuf: .space 16
...@@ -19,10 +19,9 @@ ...@@ -19,10 +19,9 @@
#include <linux/ioport.h> #include <linux/ioport.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/io.h>
#include <asm/dma.h> #include <asm/dma.h>
#include <asm/io.h>
#include <asm/mach/dma.h> #include <asm/mach/dma.h>
#define ISA_DMA_MODE_READ 0x44 #define ISA_DMA_MODE_READ 0x44
......
...@@ -76,14 +76,17 @@ ...@@ -76,14 +76,17 @@
__pabt_invalid: __pabt_invalid:
inv_entry BAD_PREFETCH inv_entry BAD_PREFETCH
b common_invalid b common_invalid
ENDPROC(__pabt_invalid)
__dabt_invalid: __dabt_invalid:
inv_entry BAD_DATA inv_entry BAD_DATA
b common_invalid b common_invalid
ENDPROC(__dabt_invalid)
__irq_invalid: __irq_invalid:
inv_entry BAD_IRQ inv_entry BAD_IRQ
b common_invalid b common_invalid
ENDPROC(__irq_invalid)
__und_invalid: __und_invalid:
inv_entry BAD_UNDEFINSTR inv_entry BAD_UNDEFINSTR
...@@ -107,6 +110,7 @@ common_invalid: ...@@ -107,6 +110,7 @@ common_invalid:
mov r0, sp mov r0, sp
b bad_mode b bad_mode
ENDPROC(__und_invalid)
/* /*
* SVC mode handlers * SVC mode handlers
...@@ -192,6 +196,7 @@ __dabt_svc: ...@@ -192,6 +196,7 @@ __dabt_svc:
ldr r0, [sp, #S_PSR] ldr r0, [sp, #S_PSR]
msr spsr_cxsf, r0 msr spsr_cxsf, r0
ldmia sp, {r0 - pc}^ @ load r0 - pc, cpsr ldmia sp, {r0 - pc}^ @ load r0 - pc, cpsr
ENDPROC(__dabt_svc)
.align 5 .align 5
__irq_svc: __irq_svc:
...@@ -223,6 +228,7 @@ __irq_svc: ...@@ -223,6 +228,7 @@ __irq_svc:
bleq trace_hardirqs_on bleq trace_hardirqs_on
#endif #endif
ldmia sp, {r0 - pc}^ @ load r0 - pc, cpsr ldmia sp, {r0 - pc}^ @ load r0 - pc, cpsr
ENDPROC(__irq_svc)
.ltorg .ltorg
...@@ -272,6 +278,7 @@ __und_svc: ...@@ -272,6 +278,7 @@ __und_svc:
ldr lr, [sp, #S_PSR] @ Get SVC cpsr ldr lr, [sp, #S_PSR] @ Get SVC cpsr
msr spsr_cxsf, lr msr spsr_cxsf, lr
ldmia sp, {r0 - pc}^ @ Restore SVC registers ldmia sp, {r0 - pc}^ @ Restore SVC registers
ENDPROC(__und_svc)
.align 5 .align 5
__pabt_svc: __pabt_svc:
...@@ -313,6 +320,7 @@ __pabt_svc: ...@@ -313,6 +320,7 @@ __pabt_svc:
ldr r0, [sp, #S_PSR] ldr r0, [sp, #S_PSR]
msr spsr_cxsf, r0 msr spsr_cxsf, r0
ldmia sp, {r0 - pc}^ @ load r0 - pc, cpsr ldmia sp, {r0 - pc}^ @ load r0 - pc, cpsr
ENDPROC(__pabt_svc)
.align 5 .align 5
.LCcralign: .LCcralign:
...@@ -412,6 +420,7 @@ __dabt_usr: ...@@ -412,6 +420,7 @@ __dabt_usr:
mov r2, sp mov r2, sp
adr lr, ret_from_exception adr lr, ret_from_exception
b do_DataAbort b do_DataAbort
ENDPROC(__dabt_usr)
.align 5 .align 5
__irq_usr: __irq_usr:
...@@ -441,6 +450,7 @@ __irq_usr: ...@@ -441,6 +450,7 @@ __irq_usr:
mov why, #0 mov why, #0
b ret_to_user b ret_to_user
ENDPROC(__irq_usr)
.ltorg .ltorg
...@@ -474,6 +484,7 @@ __und_usr: ...@@ -474,6 +484,7 @@ __und_usr:
#else #else
b __und_usr_unknown b __und_usr_unknown
#endif #endif
ENDPROC(__und_usr)
@ @
@ fallthrough to call_fpe @ fallthrough to call_fpe
...@@ -642,6 +653,7 @@ __und_usr_unknown: ...@@ -642,6 +653,7 @@ __und_usr_unknown:
mov r0, sp mov r0, sp
adr lr, ret_from_exception adr lr, ret_from_exception
b do_undefinstr b do_undefinstr
ENDPROC(__und_usr_unknown)
.align 5 .align 5
__pabt_usr: __pabt_usr:
...@@ -666,6 +678,8 @@ ENTRY(ret_from_exception) ...@@ -666,6 +678,8 @@ ENTRY(ret_from_exception)
get_thread_info tsk get_thread_info tsk
mov why, #0 mov why, #0
b ret_to_user b ret_to_user
ENDPROC(__pabt_usr)
ENDPROC(ret_from_exception)
/* /*
* Register switch for ARMv3 and ARMv4 processors * Register switch for ARMv3 and ARMv4 processors
...@@ -702,6 +716,7 @@ ENTRY(__switch_to) ...@@ -702,6 +716,7 @@ ENTRY(__switch_to)
bl atomic_notifier_call_chain bl atomic_notifier_call_chain
mov r0, r5 mov r0, r5
ldmia r4, {r4 - sl, fp, sp, pc} @ Load all regs saved previously ldmia r4, {r4 - sl, fp, sp, pc} @ Load all regs saved previously
ENDPROC(__switch_to)
__INIT __INIT
...@@ -1029,6 +1044,7 @@ vector_\name: ...@@ -1029,6 +1044,7 @@ vector_\name:
mov r0, sp mov r0, sp
ldr lr, [pc, lr, lsl #2] ldr lr, [pc, lr, lsl #2]
movs pc, lr @ branch to handler in SVC mode movs pc, lr @ branch to handler in SVC mode
ENDPROC(vector_\name)
.endm .endm
.globl __stubs_start .globl __stubs_start
......
...@@ -77,6 +77,7 @@ no_work_pending: ...@@ -77,6 +77,7 @@ no_work_pending:
mov r0, r0 mov r0, r0
add sp, sp, #S_FRAME_SIZE - S_PC add sp, sp, #S_FRAME_SIZE - S_PC
movs pc, lr @ return & move spsr_svc into cpsr movs pc, lr @ return & move spsr_svc into cpsr
ENDPROC(ret_to_user)
/* /*
* This is how we return from a fork. * This is how we return from a fork.
...@@ -92,7 +93,7 @@ ENTRY(ret_from_fork) ...@@ -92,7 +93,7 @@ ENTRY(ret_from_fork)
mov r0, #1 @ trace exit [IP = 1] mov r0, #1 @ trace exit [IP = 1]
bl syscall_trace bl syscall_trace
b ret_slow_syscall b ret_slow_syscall
ENDPROC(ret_from_fork)
.equ NR_syscalls,0 .equ NR_syscalls,0
#define CALL(x) .equ NR_syscalls,NR_syscalls+1 #define CALL(x) .equ NR_syscalls,NR_syscalls+1
...@@ -269,6 +270,7 @@ ENTRY(vector_swi) ...@@ -269,6 +270,7 @@ ENTRY(vector_swi)
eor r0, scno, #__NR_SYSCALL_BASE @ put OS number back eor r0, scno, #__NR_SYSCALL_BASE @ put OS number back
bcs arm_syscall bcs arm_syscall
b sys_ni_syscall @ not private func b sys_ni_syscall @ not private func
ENDPROC(vector_swi)
/* /*
* This is the really slow path. We're going to be doing * This is the really slow path. We're going to be doing
...@@ -326,7 +328,6 @@ ENTRY(sys_call_table) ...@@ -326,7 +328,6 @@ ENTRY(sys_call_table)
*/ */
@ r0 = syscall number @ r0 = syscall number
@ r8 = syscall table @ r8 = syscall table
.type sys_syscall, #function
sys_syscall: sys_syscall:
bic scno, r0, #__NR_OABI_SYSCALL_BASE bic scno, r0, #__NR_OABI_SYSCALL_BASE
cmp scno, #__NR_syscall - __NR_SYSCALL_BASE cmp scno, #__NR_syscall - __NR_SYSCALL_BASE
...@@ -338,53 +339,65 @@ sys_syscall: ...@@ -338,53 +339,65 @@ sys_syscall:
movlo r3, r4 movlo r3, r4
ldrlo pc, [tbl, scno, lsl #2] ldrlo pc, [tbl, scno, lsl #2]
b sys_ni_syscall b sys_ni_syscall
ENDPROC(sys_syscall)
sys_fork_wrapper: sys_fork_wrapper:
add r0, sp, #S_OFF add r0, sp, #S_OFF
b sys_fork b sys_fork
ENDPROC(sys_fork_wrapper)
sys_vfork_wrapper: sys_vfork_wrapper:
add r0, sp, #S_OFF add r0, sp, #S_OFF
b sys_vfork b sys_vfork
ENDPROC(sys_vfork_wrapper)
sys_execve_wrapper: sys_execve_wrapper:
add r3, sp, #S_OFF add r3, sp, #S_OFF
b sys_execve b sys_execve
ENDPROC(sys_execve_wrapper)
sys_clone_wrapper: sys_clone_wrapper:
add ip, sp, #S_OFF add ip, sp, #S_OFF
str ip, [sp, #4] str ip, [sp, #4]
b sys_clone b sys_clone
ENDPROC(sys_clone_wrapper)
sys_sigsuspend_wrapper: sys_sigsuspend_wrapper:
add r3, sp, #S_OFF add r3, sp, #S_OFF
b sys_sigsuspend b sys_sigsuspend
ENDPROC(sys_sigsuspend_wrapper)
sys_rt_sigsuspend_wrapper: sys_rt_sigsuspend_wrapper:
add r2, sp, #S_OFF add r2, sp, #S_OFF
b sys_rt_sigsuspend b sys_rt_sigsuspend
ENDPROC(sys_rt_sigsuspend_wrapper)
sys_sigreturn_wrapper: sys_sigreturn_wrapper:
add r0, sp, #S_OFF add r0, sp, #S_OFF
b sys_sigreturn b sys_sigreturn
ENDPROC(sys_sigreturn_wrapper)
sys_rt_sigreturn_wrapper: sys_rt_sigreturn_wrapper:
add r0, sp, #S_OFF add r0, sp, #S_OFF
b sys_rt_sigreturn b sys_rt_sigreturn
ENDPROC(sys_rt_sigreturn_wrapper)
sys_sigaltstack_wrapper: sys_sigaltstack_wrapper:
ldr r2, [sp, #S_OFF + S_SP] ldr r2, [sp, #S_OFF + S_SP]
b do_sigaltstack b do_sigaltstack
ENDPROC(sys_sigaltstack_wrapper)
sys_statfs64_wrapper: sys_statfs64_wrapper:
teq r1, #88 teq r1, #88
moveq r1, #84 moveq r1, #84
b sys_statfs64 b sys_statfs64
ENDPROC(sys_statfs64_wrapper)
sys_fstatfs64_wrapper: sys_fstatfs64_wrapper:
teq r1, #88 teq r1, #88
moveq r1, #84 moveq r1, #84
b sys_fstatfs64 b sys_fstatfs64
ENDPROC(sys_fstatfs64_wrapper)
/* /*
* Note: off_4k (r5) is always units of 4K. If we can't do the requested * Note: off_4k (r5) is always units of 4K. If we can't do the requested
...@@ -402,11 +415,14 @@ sys_mmap2: ...@@ -402,11 +415,14 @@ sys_mmap2:
str r5, [sp, #4] str r5, [sp, #4]
b do_mmap2 b do_mmap2
#endif #endif
ENDPROC(sys_mmap2)
ENTRY(pabort_ifar) ENTRY(pabort_ifar)
mrc p15, 0, r0, cr6, cr0, 2 mrc p15, 0, r0, cr6, cr0, 2
ENTRY(pabort_noifar) ENTRY(pabort_noifar)
mov pc, lr mov pc, lr
ENDPROC(pabort_ifar)
ENDPROC(pabort_noifar)
#ifdef CONFIG_OABI_COMPAT #ifdef CONFIG_OABI_COMPAT
...@@ -417,26 +433,31 @@ ENTRY(pabort_noifar) ...@@ -417,26 +433,31 @@ ENTRY(pabort_noifar)
sys_oabi_pread64: sys_oabi_pread64:
stmia sp, {r3, r4} stmia sp, {r3, r4}
b sys_pread64 b sys_pread64
ENDPROC(sys_oabi_pread64)
sys_oabi_pwrite64: sys_oabi_pwrite64:
stmia sp, {r3, r4} stmia sp, {r3, r4}
b sys_pwrite64 b sys_pwrite64
ENDPROC(sys_oabi_pwrite64)
sys_oabi_truncate64: sys_oabi_truncate64:
mov r3, r2 mov r3, r2
mov r2, r1 mov r2, r1
b sys_truncate64 b sys_truncate64
ENDPROC(sys_oabi_truncate64)
sys_oabi_ftruncate64: sys_oabi_ftruncate64:
mov r3, r2 mov r3, r2
mov r2, r1 mov r2, r1
b sys_ftruncate64 b sys_ftruncate64
ENDPROC(sys_oabi_ftruncate64)
sys_oabi_readahead: sys_oabi_readahead:
str r3, [sp] str r3, [sp]
mov r3, r2 mov r3, r2
mov r2, r1 mov r2, r1
b sys_readahead b sys_readahead
ENDPROC(sys_oabi_readahead)
/* /*
* Let's declare a second syscall table for old ABI binaries * Let's declare a second syscall table for old ABI binaries
......
...@@ -45,7 +45,6 @@ ...@@ -45,7 +45,6 @@
#include <asm/fiq.h> #include <asm/fiq.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/uaccess.h>
static unsigned long no_fiq_insn; static unsigned long no_fiq_insn;
......
...@@ -36,7 +36,6 @@ __switch_data: ...@@ -36,7 +36,6 @@ __switch_data:
* r2 = atags pointer * r2 = atags pointer
* r9 = processor ID * r9 = processor ID
*/ */
.type __mmap_switched, %function
__mmap_switched: __mmap_switched:
adr r3, __switch_data + 4 adr r3, __switch_data + 4
...@@ -59,6 +58,7 @@ __mmap_switched: ...@@ -59,6 +58,7 @@ __mmap_switched:
bic r4, r0, #CR_A @ Clear 'A' bit bic r4, r0, #CR_A @ Clear 'A' bit
stmia r7, {r0, r4} @ Save control register values stmia r7, {r0, r4} @ Save control register values
b start_kernel b start_kernel
ENDPROC(__mmap_switched)
/* /*
* Exception handling. Something went wrong and we can't proceed. We * Exception handling. Something went wrong and we can't proceed. We
...@@ -69,8 +69,6 @@ __mmap_switched: ...@@ -69,8 +69,6 @@ __mmap_switched:
* and hope for the best (useful if bootloader fails to pass a proper * and hope for the best (useful if bootloader fails to pass a proper
* machine ID for example). * machine ID for example).
*/ */
.type __error_p, %function
__error_p: __error_p:
#ifdef CONFIG_DEBUG_LL #ifdef CONFIG_DEBUG_LL
adr r0, str_p1 adr r0, str_p1
...@@ -84,8 +82,8 @@ str_p1: .asciz "\nError: unrecognized/unsupported processor variant (0x" ...@@ -84,8 +82,8 @@ str_p1: .asciz "\nError: unrecognized/unsupported processor variant (0x"
str_p2: .asciz ").\n" str_p2: .asciz ").\n"
.align .align
#endif #endif
ENDPROC(__error_p)
.type __error_a, %function
__error_a: __error_a:
#ifdef CONFIG_DEBUG_LL #ifdef CONFIG_DEBUG_LL
mov r4, r1 @ preserve machine ID mov r4, r1 @ preserve machine ID
...@@ -115,13 +113,14 @@ __error_a: ...@@ -115,13 +113,14 @@ __error_a:
adr r0, str_a3 adr r0, str_a3
bl printascii bl printascii
b __error b __error
ENDPROC(__error_a)
str_a1: .asciz "\nError: unrecognized/unsupported machine ID (r1 = 0x" str_a1: .asciz "\nError: unrecognized/unsupported machine ID (r1 = 0x"
str_a2: .asciz ").\n\nAvailable machine support:\n\nID (hex)\tNAME\n" str_a2: .asciz ").\n\nAvailable machine support:\n\nID (hex)\tNAME\n"
str_a3: .asciz "\nPlease check your kernel config and/or bootloader.\n" str_a3: .asciz "\nPlease check your kernel config and/or bootloader.\n"
.align .align
#endif #endif
.type __error, %function
__error: __error:
#ifdef CONFIG_ARCH_RPC #ifdef CONFIG_ARCH_RPC
/* /*
...@@ -138,6 +137,7 @@ __error: ...@@ -138,6 +137,7 @@ __error:
#endif #endif
1: mov r0, r0 1: mov r0, r0
b 1b b 1b
ENDPROC(__error)
/* /*
...@@ -153,7 +153,6 @@ __error: ...@@ -153,7 +153,6 @@ __error:
* r5 = proc_info pointer in physical address space * r5 = proc_info pointer in physical address space
* r9 = cpuid (preserved) * r9 = cpuid (preserved)
*/ */
.type __lookup_processor_type, %function
__lookup_processor_type: __lookup_processor_type:
adr r3, 3f adr r3, 3f
ldmda r3, {r5 - r7} ldmda r3, {r5 - r7}
...@@ -169,6 +168,7 @@ __lookup_processor_type: ...@@ -169,6 +168,7 @@ __lookup_processor_type:
blo 1b blo 1b
mov r5, #0 @ unknown processor mov r5, #0 @ unknown processor
2: mov pc, lr 2: mov pc, lr
ENDPROC(__lookup_processor_type)
/* /*
* This provides a C-API version of the above function. * This provides a C-API version of the above function.
...@@ -179,6 +179,7 @@ ENTRY(lookup_processor_type) ...@@ -179,6 +179,7 @@ ENTRY(lookup_processor_type)
bl __lookup_processor_type bl __lookup_processor_type
mov r0, r5 mov r0, r5
ldmfd sp!, {r4 - r7, r9, pc} ldmfd sp!, {r4 - r7, r9, pc}
ENDPROC(lookup_processor_type)
/* /*
* Look in <asm/procinfo.h> and arch/arm/kernel/arch.[ch] for * Look in <asm/procinfo.h> and arch/arm/kernel/arch.[ch] for
...@@ -201,7 +202,6 @@ ENTRY(lookup_processor_type) ...@@ -201,7 +202,6 @@ ENTRY(lookup_processor_type)
* r3, r4, r6 corrupted * r3, r4, r6 corrupted
* r5 = mach_info pointer in physical address space * r5 = mach_info pointer in physical address space
*/ */
.type __lookup_machine_type, %function
__lookup_machine_type: __lookup_machine_type:
adr r3, 3b adr r3, 3b
ldmia r3, {r4, r5, r6} ldmia r3, {r4, r5, r6}
...@@ -216,6 +216,7 @@ __lookup_machine_type: ...@@ -216,6 +216,7 @@ __lookup_machine_type:
blo 1b blo 1b
mov r5, #0 @ unknown machine mov r5, #0 @ unknown machine
2: mov pc, lr 2: mov pc, lr
ENDPROC(__lookup_machine_type)
/* /*
* This provides a C-API version of the above function. * This provides a C-API version of the above function.
...@@ -226,6 +227,7 @@ ENTRY(lookup_machine_type) ...@@ -226,6 +227,7 @@ ENTRY(lookup_machine_type)
bl __lookup_machine_type bl __lookup_machine_type
mov r0, r5 mov r0, r5
ldmfd sp!, {r4 - r6, pc} ldmfd sp!, {r4 - r6, pc}
ENDPROC(lookup_machine_type)
/* Determine validity of the r2 atags pointer. The heuristic requires /* Determine validity of the r2 atags pointer. The heuristic requires
* that the pointer be aligned, in the first 16k of physical RAM and * that the pointer be aligned, in the first 16k of physical RAM and
...@@ -239,8 +241,6 @@ ENTRY(lookup_machine_type) ...@@ -239,8 +241,6 @@ ENTRY(lookup_machine_type)
* r2 either valid atags pointer, or zero * r2 either valid atags pointer, or zero
* r5, r6 corrupted * r5, r6 corrupted
*/ */
.type __vet_atags, %function
__vet_atags: __vet_atags:
tst r2, #0x3 @ aligned? tst r2, #0x3 @ aligned?
bne 1f bne 1f
...@@ -257,3 +257,4 @@ __vet_atags: ...@@ -257,3 +257,4 @@ __vet_atags:
1: mov r2, #0 1: mov r2, #0
mov pc, lr mov pc, lr
ENDPROC(__vet_atags)
...@@ -33,7 +33,6 @@ ...@@ -33,7 +33,6 @@
* *
*/ */
.section ".text.head", "ax" .section ".text.head", "ax"
.type stext, %function
ENTRY(stext) ENTRY(stext)
msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode
@ and irqs disabled @ and irqs disabled
...@@ -53,11 +52,11 @@ ENTRY(stext) ...@@ -53,11 +52,11 @@ ENTRY(stext)
@ the initialization is done @ the initialization is done
adr lr, __after_proc_init @ return (PIC) address adr lr, __after_proc_init @ return (PIC) address
add pc, r10, #PROCINFO_INITFUNC add pc, r10, #PROCINFO_INITFUNC
ENDPROC(stext)
/* /*
* Set the Control Register and Read the process ID. * Set the Control Register and Read the process ID.
*/ */
.type __after_proc_init, %function
__after_proc_init: __after_proc_init:
#ifdef CONFIG_CPU_CP15 #ifdef CONFIG_CPU_CP15
mrc p15, 0, r0, c1, c0, 0 @ read control reg mrc p15, 0, r0, c1, c0, 0 @ read control reg
...@@ -85,6 +84,7 @@ __after_proc_init: ...@@ -85,6 +84,7 @@ __after_proc_init:
mov pc, r13 @ clear the BSS and jump mov pc, r13 @ clear the BSS and jump
@ to start_kernel @ to start_kernel
ENDPROC(__after_proc_init)
.ltorg .ltorg
#include "head-common.S" #include "head-common.S"
...@@ -75,7 +75,6 @@ ...@@ -75,7 +75,6 @@
* circumstances, zImage) is for. * circumstances, zImage) is for.
*/ */
.section ".text.head", "ax" .section ".text.head", "ax"
.type stext, %function
ENTRY(stext) ENTRY(stext)
msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode
@ and irqs disabled @ and irqs disabled
...@@ -100,9 +99,9 @@ ENTRY(stext) ...@@ -100,9 +99,9 @@ ENTRY(stext)
@ mmu has been enabled @ mmu has been enabled
adr lr, __enable_mmu @ return (PIC) address adr lr, __enable_mmu @ return (PIC) address
add pc, r10, #PROCINFO_INITFUNC add pc, r10, #PROCINFO_INITFUNC
ENDPROC(stext)
#if defined(CONFIG_SMP) #if defined(CONFIG_SMP)
.type secondary_startup, #function
ENTRY(secondary_startup) ENTRY(secondary_startup)
/* /*
* Common entry point for secondary CPUs. * Common entry point for secondary CPUs.
...@@ -128,6 +127,7 @@ ENTRY(secondary_startup) ...@@ -128,6 +127,7 @@ ENTRY(secondary_startup)
adr lr, __enable_mmu @ return address adr lr, __enable_mmu @ return address
add pc, r10, #PROCINFO_INITFUNC @ initialise processor add pc, r10, #PROCINFO_INITFUNC @ initialise processor
@ (return control reg) @ (return control reg)
ENDPROC(secondary_startup)
/* /*
* r6 = &secondary_data * r6 = &secondary_data
...@@ -136,6 +136,7 @@ ENTRY(__secondary_switched) ...@@ -136,6 +136,7 @@ ENTRY(__secondary_switched)
ldr sp, [r7, #4] @ get secondary_data.stack ldr sp, [r7, #4] @ get secondary_data.stack
mov fp, #0 mov fp, #0
b secondary_start_kernel b secondary_start_kernel
ENDPROC(__secondary_switched)
.type __secondary_data, %object .type __secondary_data, %object
__secondary_data: __secondary_data:
...@@ -151,7 +152,6 @@ __secondary_data: ...@@ -151,7 +152,6 @@ __secondary_data:
* this is just loading the page table pointer and domain access * this is just loading the page table pointer and domain access
* registers. * registers.
*/ */
.type __enable_mmu, %function
__enable_mmu: __enable_mmu:
#ifdef CONFIG_ALIGNMENT_TRAP #ifdef CONFIG_ALIGNMENT_TRAP
orr r0, r0, #CR_A orr r0, r0, #CR_A
...@@ -174,6 +174,7 @@ __enable_mmu: ...@@ -174,6 +174,7 @@ __enable_mmu:
mcr p15, 0, r5, c3, c0, 0 @ load domain access register mcr p15, 0, r5, c3, c0, 0 @ load domain access register
mcr p15, 0, r4, c2, c0, 0 @ load page table pointer mcr p15, 0, r4, c2, c0, 0 @ load page table pointer
b __turn_mmu_on b __turn_mmu_on
ENDPROC(__enable_mmu)
/* /*
* Enable the MMU. This completely changes the structure of the visible * Enable the MMU. This completely changes the structure of the visible
...@@ -187,7 +188,6 @@ __enable_mmu: ...@@ -187,7 +188,6 @@ __enable_mmu:
* other registers depend on the function called upon completion * other registers depend on the function called upon completion
*/ */
.align 5 .align 5
.type __turn_mmu_on, %function
__turn_mmu_on: __turn_mmu_on:
mov r0, r0 mov r0, r0
mcr p15, 0, r0, c1, c0, 0 @ write control reg mcr p15, 0, r0, c1, c0, 0 @ write control reg
...@@ -195,7 +195,7 @@ __turn_mmu_on: ...@@ -195,7 +195,7 @@ __turn_mmu_on:
mov r3, r3 mov r3, r3
mov r3, r3 mov r3, r3
mov pc, r13 mov pc, r13
ENDPROC(__turn_mmu_on)
/* /*
...@@ -211,7 +211,6 @@ __turn_mmu_on: ...@@ -211,7 +211,6 @@ __turn_mmu_on:
* r0, r3, r6, r7 corrupted * r0, r3, r6, r7 corrupted
* r4 = physical page table address * r4 = physical page table address
*/ */
.type __create_page_tables, %function
__create_page_tables: __create_page_tables:
pgtbl r4 @ page table address pgtbl r4 @ page table address
...@@ -325,6 +324,7 @@ __create_page_tables: ...@@ -325,6 +324,7 @@ __create_page_tables:
#endif #endif
#endif #endif
mov pc, lr mov pc, lr
ENDPROC(__create_page_tables)
.ltorg .ltorg
#include "head-common.S" #include "head-common.S"
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/init_task.h> #include <linux/init_task.h>
#include <linux/mqueue.h> #include <linux/mqueue.h>
#include <linux/uaccess.h>
#include <asm/uaccess.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
static struct fs_struct init_fs = INIT_FS; static struct fs_struct init_fs = INIT_FS;
......
#include <linux/module.h> #include <linux/module.h>
#include <linux/types.h> #include <linux/types.h>
#include <linux/io.h>
#include <asm/io.h>
/* /*
* Copy data from IO memory space to "real" memory space. * Copy data from IO memory space to "real" memory space.
......
...@@ -488,7 +488,7 @@ static void __kprobes simulate_ldm1stm1(struct kprobe *p, struct pt_regs *regs) ...@@ -488,7 +488,7 @@ static void __kprobes simulate_ldm1stm1(struct kprobe *p, struct pt_regs *regs)
if (!ubit) if (!ubit)
addr -= reg_count; addr -= reg_count;
addr += (!pbit ^ !ubit); addr += (!pbit == !ubit);
reg_bit_vector = insn & 0xffff; reg_bit_vector = insn & 0xffff;
while (reg_bit_vector) { while (reg_bit_vector) {
...@@ -503,7 +503,7 @@ static void __kprobes simulate_ldm1stm1(struct kprobe *p, struct pt_regs *regs) ...@@ -503,7 +503,7 @@ static void __kprobes simulate_ldm1stm1(struct kprobe *p, struct pt_regs *regs)
if (wbit) { if (wbit) {
if (!ubit) if (!ubit)
addr -= reg_count; addr -= reg_count;
addr -= (!pbit ^ !ubit); addr -= (!pbit == !ubit);
regs->uregs[rn] = (long)addr; regs->uregs[rn] = (long)addr;
} }
} }
......
...@@ -200,9 +200,12 @@ void __kprobes kprobe_handler(struct pt_regs *regs) ...@@ -200,9 +200,12 @@ void __kprobes kprobe_handler(struct pt_regs *regs)
} }
} }
int kprobe_trap_handler(struct pt_regs *regs, unsigned int instr) static int __kprobes kprobe_trap_handler(struct pt_regs *regs, unsigned int instr)
{ {
unsigned long flags;
local_irq_save(flags);
kprobe_handler(regs); kprobe_handler(regs);
local_irq_restore(flags);
return 0; return 0;
} }
......
...@@ -6,10 +6,10 @@ ...@@ -6,10 +6,10 @@
#include <linux/kexec.h> #include <linux/kexec.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/reboot.h> #include <linux/reboot.h>
#include <linux/io.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/pgalloc.h> #include <asm/pgalloc.h>
#include <asm/mmu_context.h> #include <asm/mmu_context.h>
#include <asm/io.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
......
...@@ -28,12 +28,12 @@ ...@@ -28,12 +28,12 @@
#include <linux/pm.h> #include <linux/pm.h>
#include <linux/tick.h> #include <linux/tick.h>
#include <linux/utsname.h> #include <linux/utsname.h>
#include <linux/uaccess.h>
#include <asm/leds.h> #include <asm/leds.h>
#include <asm/processor.h> #include <asm/processor.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/thread_notify.h> #include <asm/thread_notify.h>
#include <asm/uaccess.h>
#include <asm/mach/time.h> #include <asm/mach/time.h>
static const char *processor_modes[] = { static const char *processor_modes[] = {
...@@ -267,35 +267,6 @@ void show_regs(struct pt_regs * regs) ...@@ -267,35 +267,6 @@ void show_regs(struct pt_regs * regs)
__backtrace(); __backtrace();
} }
void show_fpregs(struct user_fp *regs)
{
int i;
for (i = 0; i < 8; i++) {
unsigned long *p;
char type;
p = (unsigned long *)(regs->fpregs + i);
switch (regs->ftype[i]) {
case 1: type = 'f'; break;
case 2: type = 'd'; break;
case 3: type = 'e'; break;
default: type = '?'; break;
}
if (regs->init_flag)
type = '?';
printk(" f%d(%c): %08lx %08lx %08lx%c",
i, type, p[0], p[1], p[2], i & 1 ? '\n' : ' ');
}
printk("FPSR: %08lx FPCR: %08lx\n",
(unsigned long)regs->fpsr,
(unsigned long)regs->fpcr);
}
/* /*
* Free current thread data structures etc.. * Free current thread data structures etc..
*/ */
...@@ -414,7 +385,7 @@ unsigned long get_wchan(struct task_struct *p) ...@@ -414,7 +385,7 @@ unsigned long get_wchan(struct task_struct *p)
do { do {
if (fp < stack_start || fp > stack_end) if (fp < stack_start || fp > stack_end)
return 0; return 0;
lr = pc_pointer (((unsigned long *)fp)[-1]); lr = ((unsigned long *)fp)[-1];
if (!in_sched_functions(lr)) if (!in_sched_functions(lr))
return lr; return lr;
fp = *(unsigned long *) (fp - 12); fp = *(unsigned long *) (fp - 12);
......
...@@ -18,8 +18,8 @@ ...@@ -18,8 +18,8 @@
#include <linux/security.h> #include <linux/security.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/signal.h> #include <linux/signal.h>
#include <linux/uaccess.h>
#include <asm/uaccess.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/traps.h> #include <asm/traps.h>
...@@ -126,7 +126,7 @@ ptrace_getrn(struct task_struct *child, unsigned long insn) ...@@ -126,7 +126,7 @@ ptrace_getrn(struct task_struct *child, unsigned long insn)
val = get_user_reg(child, reg); val = get_user_reg(child, reg);
if (reg == 15) if (reg == 15)
val = pc_pointer(val + 8); val += 8;
return val; return val;
} }
...@@ -278,8 +278,7 @@ get_branch_address(struct task_struct *child, unsigned long pc, unsigned long in ...@@ -278,8 +278,7 @@ get_branch_address(struct task_struct *child, unsigned long pc, unsigned long in
else else
base -= aluop2; base -= aluop2;
} }
if (read_u32(child, base, &alt) == 0) read_u32(child, base, &alt);
alt = pc_pointer(alt);
} }
break; break;
...@@ -305,8 +304,7 @@ get_branch_address(struct task_struct *child, unsigned long pc, unsigned long in ...@@ -305,8 +304,7 @@ get_branch_address(struct task_struct *child, unsigned long pc, unsigned long in
base = ptrace_getrn(child, insn); base = ptrace_getrn(child, insn);
if (read_u32(child, base + nr_regs, &alt) == 0) read_u32(child, base + nr_regs, &alt);
alt = pc_pointer(alt);
break; break;
} }
break; break;
......
This diff is collapsed.
...@@ -11,11 +11,11 @@ ...@@ -11,11 +11,11 @@
#include <linux/signal.h> #include <linux/signal.h>
#include <linux/personality.h> #include <linux/personality.h>
#include <linux/freezer.h> #include <linux/freezer.h>
#include <linux/uaccess.h>
#include <asm/elf.h> #include <asm/elf.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/ucontext.h> #include <asm/ucontext.h>
#include <asm/uaccess.h>
#include <asm/unistd.h> #include <asm/unistd.h>
#include "ptrace.h" #include "ptrace.h"
......
...@@ -27,8 +27,7 @@ ...@@ -27,8 +27,7 @@
#include <linux/file.h> #include <linux/file.h>
#include <linux/utsname.h> #include <linux/utsname.h>
#include <linux/ipc.h> #include <linux/ipc.h>
#include <linux/uaccess.h>
#include <asm/uaccess.h>
extern unsigned long do_mremap(unsigned long addr, unsigned long old_len, extern unsigned long do_mremap(unsigned long addr, unsigned long old_len,
unsigned long new_len, unsigned long flags, unsigned long new_len, unsigned long flags,
......
...@@ -82,7 +82,7 @@ ...@@ -82,7 +82,7 @@
#include <linux/socket.h> #include <linux/socket.h>
#include <linux/net.h> #include <linux/net.h>
#include <linux/ipc.h> #include <linux/ipc.h>
#include <asm/uaccess.h> #include <linux/uaccess.h>
struct oldabi_stat64 { struct oldabi_stat64 {
unsigned long long st_dev; unsigned long long st_dev;
......
...@@ -59,7 +59,7 @@ unsigned long profile_pc(struct pt_regs *regs) ...@@ -59,7 +59,7 @@ unsigned long profile_pc(struct pt_regs *regs)
if (in_lock_functions(pc)) { if (in_lock_functions(pc)) {
fp = regs->ARM_fp; fp = regs->ARM_fp;
pc = pc_pointer(((unsigned long *)fp)[-1]); pc = ((unsigned long *)fp)[-1];
} }
return pc; return pc;
......
...@@ -19,15 +19,13 @@ ...@@ -19,15 +19,13 @@
#include <linux/kallsyms.h> #include <linux/kallsyms.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/kprobes.h> #include <linux/uaccess.h>
#include <asm/atomic.h> #include <asm/atomic.h>
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/uaccess.h>
#include <asm/unistd.h> #include <asm/unistd.h>
#include <asm/traps.h> #include <asm/traps.h>
#include <asm/io.h>
#include "ptrace.h" #include "ptrace.h"
#include "signal.h" #include "signal.h"
...@@ -69,7 +67,8 @@ void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long ...@@ -69,7 +67,8 @@ void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long
*/ */
static int verify_stack(unsigned long sp) static int verify_stack(unsigned long sp)
{ {
if (sp < PAGE_OFFSET || (sp > (unsigned long)high_memory && high_memory != 0)) if (sp < PAGE_OFFSET ||
(sp > (unsigned long)high_memory && high_memory != NULL))
return -EFAULT; return -EFAULT;
return 0; return 0;
...@@ -328,17 +327,6 @@ asmlinkage void __exception do_undefinstr(struct pt_regs *regs) ...@@ -328,17 +327,6 @@ asmlinkage void __exception do_undefinstr(struct pt_regs *regs)
get_user(instr, (u32 __user *)pc); get_user(instr, (u32 __user *)pc);
} }
#ifdef CONFIG_KPROBES
/*
* It is possible to have recursive kprobes, so we can't call
* the kprobe trap handler with the undef_lock held.
*/
if (instr == KPROBE_BREAKPOINT_INSTRUCTION && !user_mode(regs)) {
kprobe_trap_handler(regs, instr);
return;
}
#endif
if (call_undef_hook(regs, instr) == 0) if (call_undef_hook(regs, instr) == 0)
return; return;
......
...@@ -14,8 +14,8 @@ ...@@ -14,8 +14,8 @@
#include <linux/signal.h> #include <linux/signal.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/io.h>
#include <asm/thread_notify.h> #include <asm/thread_notify.h>
#include <asm/io.h>
static inline void dsp_save_state(u32 *state) static inline void dsp_save_state(u32 *state)
{ {
......
...@@ -47,3 +47,5 @@ ENTRY(__aeabi_llsl) ...@@ -47,3 +47,5 @@ ENTRY(__aeabi_llsl)
mov al, al, lsl r2 mov al, al, lsl r2
mov pc, lr mov pc, lr
ENDPROC(__ashldi3)
ENDPROC(__aeabi_llsl)
...@@ -47,3 +47,5 @@ ENTRY(__aeabi_lasr) ...@@ -47,3 +47,5 @@ ENTRY(__aeabi_lasr)
mov ah, ah, asr r2 mov ah, ah, asr r2
mov pc, lr mov pc, lr
ENDPROC(__ashrdi3)
ENDPROC(__aeabi_lasr)
...@@ -30,6 +30,8 @@ ENTRY(c_backtrace) ...@@ -30,6 +30,8 @@ ENTRY(c_backtrace)
#if !defined(CONFIG_FRAME_POINTER) || !defined(CONFIG_PRINTK) #if !defined(CONFIG_FRAME_POINTER) || !defined(CONFIG_PRINTK)
mov pc, lr mov pc, lr
ENDPROC(__backtrace)
ENDPROC(c_backtrace)
#else #else
stmfd sp!, {r4 - r8, lr} @ Save an extra register so we have a location... stmfd sp!, {r4 - r8, lr} @ Save an extra register so we have a location...
movs frame, r0 @ if frame pointer is zero movs frame, r0 @ if frame pointer is zero
...@@ -103,6 +105,8 @@ for_each_frame: tst frame, mask @ Check for address exceptions ...@@ -103,6 +105,8 @@ for_each_frame: tst frame, mask @ Check for address exceptions
mov r1, frame mov r1, frame
bl printk bl printk
no_frame: ldmfd sp!, {r4 - r8, pc} no_frame: ldmfd sp!, {r4 - r8, pc}
ENDPROC(__backtrace)
ENDPROC(c_backtrace)
.section __ex_table,"a" .section __ex_table,"a"
.align 3 .align 3
......
...@@ -19,3 +19,5 @@ ENTRY(_change_bit_be) ...@@ -19,3 +19,5 @@ ENTRY(_change_bit_be)
eor r0, r0, #0x18 @ big endian byte ordering eor r0, r0, #0x18 @ big endian byte ordering
ENTRY(_change_bit_le) ENTRY(_change_bit_le)
bitop eor bitop eor
ENDPROC(_change_bit_be)
ENDPROC(_change_bit_le)
...@@ -41,9 +41,10 @@ USER( strplt r2, [r0], #4) ...@@ -41,9 +41,10 @@ USER( strplt r2, [r0], #4)
USER( strnebt r2, [r0], #1) USER( strnebt r2, [r0], #1)
USER( strnebt r2, [r0], #1) USER( strnebt r2, [r0], #1)
tst r1, #1 @ x1 x0 x1 x0 x1 x0 x1 tst r1, #1 @ x1 x0 x1 x0 x1 x0 x1
USER( strnebt r2, [r0], #1) USER( strnebt r2, [r0])
mov r0, #0 mov r0, #0
ldmfd sp!, {r1, pc} ldmfd sp!, {r1, pc}
ENDPROC(__clear_user)
.section .fixup,"ax" .section .fixup,"ax"
.align 0 .align 0
......
...@@ -20,3 +20,5 @@ ENTRY(_clear_bit_be) ...@@ -20,3 +20,5 @@ ENTRY(_clear_bit_be)
eor r0, r0, #0x18 @ big endian byte ordering eor r0, r0, #0x18 @ big endian byte ordering
ENTRY(_clear_bit_le) ENTRY(_clear_bit_le)
bitop bic bitop bic
ENDPROC(_clear_bit_be)
ENDPROC(_clear_bit_le)
...@@ -87,6 +87,8 @@ ENTRY(__copy_from_user) ...@@ -87,6 +87,8 @@ ENTRY(__copy_from_user)
#include "copy_template.S" #include "copy_template.S"
ENDPROC(__copy_from_user)
.section .fixup,"ax" .section .fixup,"ax"
.align 0 .align 0
copy_abort_preamble copy_abort_preamble
......
...@@ -44,3 +44,4 @@ ENTRY(copy_page) ...@@ -44,3 +44,4 @@ ENTRY(copy_page)
PLD( ldmeqia r1!, {r3, r4, ip, lr} ) PLD( ldmeqia r1!, {r3, r4, ip, lr} )
PLD( beq 2b ) PLD( beq 2b )
ldmfd sp!, {r4, pc} @ 3 ldmfd sp!, {r4, pc} @ 3
ENDPROC(copy_page)
...@@ -90,6 +90,8 @@ ENTRY(__copy_to_user) ...@@ -90,6 +90,8 @@ ENTRY(__copy_to_user)
#include "copy_template.S" #include "copy_template.S"
ENDPROC(__copy_to_user)
.section .fixup,"ax" .section .fixup,"ax"
.align 0 .align 0
copy_abort_preamble copy_abort_preamble
......
...@@ -29,4 +29,5 @@ ENTRY(__csum_ipv6_magic) ...@@ -29,4 +29,5 @@ ENTRY(__csum_ipv6_magic)
adcs r0, r0, r2 adcs r0, r0, r2
adcs r0, r0, #0 adcs r0, r0, #0
ldmfd sp!, {pc} ldmfd sp!, {pc}
ENDPROC(__csum_ipv6_magic)
...@@ -139,3 +139,4 @@ ENTRY(csum_partial) ...@@ -139,3 +139,4 @@ ENTRY(csum_partial)
tst len, #0x1c tst len, #0x1c
bne 4b bne 4b
b .Lless4 b .Lless4
ENDPROC(csum_partial)
...@@ -18,13 +18,11 @@ ...@@ -18,13 +18,11 @@
*/ */
.macro save_regs .macro save_regs
mov ip, sp stmfd sp!, {r1, r4 - r8, lr}
stmfd sp!, {r1, r4 - r8, fp, ip, lr, pc}
sub fp, ip, #4
.endm .endm
.macro load_regs .macro load_regs
ldmfd sp, {r1, r4 - r8, fp, sp, pc} ldmfd sp!, {r1, r4 - r8, pc}
.endm .endm
.macro load1b, reg1 .macro load1b, reg1
...@@ -50,5 +48,6 @@ ...@@ -50,5 +48,6 @@
.endm .endm
#define FN_ENTRY ENTRY(csum_partial_copy_nocheck) #define FN_ENTRY ENTRY(csum_partial_copy_nocheck)
#define FN_EXIT ENDPROC(csum_partial_copy_nocheck)
#include "csumpartialcopygeneric.S" #include "csumpartialcopygeneric.S"
...@@ -329,3 +329,4 @@ FN_ENTRY ...@@ -329,3 +329,4 @@ FN_ENTRY
adcs sum, sum, r4, push #24 adcs sum, sum, r4, push #24
mov r5, r4, get_byte_1 mov r5, r4, get_byte_1
b .Lexit b .Lexit
FN_EXIT
...@@ -18,13 +18,11 @@ ...@@ -18,13 +18,11 @@
.text .text
.macro save_regs .macro save_regs
mov ip, sp stmfd sp!, {r1, r2, r4 - r8, lr}
stmfd sp!, {r1 - r2, r4 - r8, fp, ip, lr, pc}
sub fp, ip, #4
.endm .endm
.macro load_regs .macro load_regs
ldmfd sp, {r1, r2, r4-r8, fp, sp, pc} ldmfd sp!, {r1, r2, r4 - r8, pc}
.endm .endm
.macro load1b, reg1 .macro load1b, reg1
...@@ -82,6 +80,7 @@ ...@@ -82,6 +80,7 @@
*/ */
#define FN_ENTRY ENTRY(csum_partial_copy_from_user) #define FN_ENTRY ENTRY(csum_partial_copy_from_user)
#define FN_EXIT ENDPROC(csum_partial_copy_from_user)
#include "csumpartialcopygeneric.S" #include "csumpartialcopygeneric.S"
......
...@@ -60,3 +60,6 @@ ENTRY(__delay) ...@@ -60,3 +60,6 @@ ENTRY(__delay)
#endif #endif
bhi __delay bhi __delay
mov pc, lr mov pc, lr
ENDPROC(__udelay)
ENDPROC(__const_udelay)
ENDPROC(__delay)
...@@ -198,3 +198,4 @@ ENTRY(__do_div64) ...@@ -198,3 +198,4 @@ ENTRY(__do_div64)
mov xh, #0 mov xh, #0
ldr pc, [sp], #8 ldr pc, [sp], #8
ENDPROC(__do_div64)
...@@ -33,6 +33,7 @@ ENTRY(_find_first_zero_bit_le) ...@@ -33,6 +33,7 @@ ENTRY(_find_first_zero_bit_le)
blo 1b blo 1b
3: mov r0, r1 @ no free bits 3: mov r0, r1 @ no free bits
mov pc, lr mov pc, lr
ENDPROC(_find_first_zero_bit_le)
/* /*
* Purpose : Find next 'zero' bit * Purpose : Find next 'zero' bit
...@@ -50,6 +51,7 @@ ENTRY(_find_next_zero_bit_le) ...@@ -50,6 +51,7 @@ ENTRY(_find_next_zero_bit_le)
orr r2, r2, #7 @ if zero, then no bits here orr r2, r2, #7 @ if zero, then no bits here
add r2, r2, #1 @ align bit pointer add r2, r2, #1 @ align bit pointer
b 2b @ loop for next bit b 2b @ loop for next bit
ENDPROC(_find_next_zero_bit_le)
/* /*
* Purpose : Find a 'one' bit * Purpose : Find a 'one' bit
...@@ -67,6 +69,7 @@ ENTRY(_find_first_bit_le) ...@@ -67,6 +69,7 @@ ENTRY(_find_first_bit_le)
blo 1b blo 1b
3: mov r0, r1 @ no free bits 3: mov r0, r1 @ no free bits
mov pc, lr mov pc, lr
ENDPROC(_find_first_bit_le)
/* /*
* Purpose : Find next 'one' bit * Purpose : Find next 'one' bit
...@@ -83,6 +86,7 @@ ENTRY(_find_next_bit_le) ...@@ -83,6 +86,7 @@ ENTRY(_find_next_bit_le)
orr r2, r2, #7 @ if zero, then no bits here orr r2, r2, #7 @ if zero, then no bits here
add r2, r2, #1 @ align bit pointer add r2, r2, #1 @ align bit pointer
b 2b @ loop for next bit b 2b @ loop for next bit
ENDPROC(_find_next_bit_le)
#ifdef __ARMEB__ #ifdef __ARMEB__
...@@ -99,6 +103,7 @@ ENTRY(_find_first_zero_bit_be) ...@@ -99,6 +103,7 @@ ENTRY(_find_first_zero_bit_be)
blo 1b blo 1b
3: mov r0, r1 @ no free bits 3: mov r0, r1 @ no free bits
mov pc, lr mov pc, lr
ENDPROC(_find_first_zero_bit_be)
ENTRY(_find_next_zero_bit_be) ENTRY(_find_next_zero_bit_be)
teq r1, #0 teq r1, #0
...@@ -113,6 +118,7 @@ ENTRY(_find_next_zero_bit_be) ...@@ -113,6 +118,7 @@ ENTRY(_find_next_zero_bit_be)
orr r2, r2, #7 @ if zero, then no bits here orr r2, r2, #7 @ if zero, then no bits here
add r2, r2, #1 @ align bit pointer add r2, r2, #1 @ align bit pointer
b 2b @ loop for next bit b 2b @ loop for next bit
ENDPROC(_find_next_zero_bit_be)
ENTRY(_find_first_bit_be) ENTRY(_find_first_bit_be)
teq r1, #0 teq r1, #0
...@@ -127,6 +133,7 @@ ENTRY(_find_first_bit_be) ...@@ -127,6 +133,7 @@ ENTRY(_find_first_bit_be)
blo 1b blo 1b
3: mov r0, r1 @ no free bits 3: mov r0, r1 @ no free bits
mov pc, lr mov pc, lr
ENDPROC(_find_first_bit_be)
ENTRY(_find_next_bit_be) ENTRY(_find_next_bit_be)
teq r1, #0 teq r1, #0
...@@ -140,6 +147,7 @@ ENTRY(_find_next_bit_be) ...@@ -140,6 +147,7 @@ ENTRY(_find_next_bit_be)
orr r2, r2, #7 @ if zero, then no bits here orr r2, r2, #7 @ if zero, then no bits here
add r2, r2, #1 @ align bit pointer add r2, r2, #1 @ align bit pointer
b 2b @ loop for next bit b 2b @ loop for next bit
ENDPROC(_find_next_bit_be)
#endif #endif
......
...@@ -26,16 +26,16 @@ ...@@ -26,16 +26,16 @@
* Note that ADDR_LIMIT is either 0 or 0xc0000000. * Note that ADDR_LIMIT is either 0 or 0xc0000000.
* Note also that it is intended that __get_user_bad is not global. * Note also that it is intended that __get_user_bad is not global.
*/ */
#include <linux/linkage.h>
#include <asm/errno.h> #include <asm/errno.h>
.global __get_user_1 ENTRY(__get_user_1)
__get_user_1:
1: ldrbt r2, [r0] 1: ldrbt r2, [r0]
mov r0, #0 mov r0, #0
mov pc, lr mov pc, lr
ENDPROC(__get_user_1)
.global __get_user_2 ENTRY(__get_user_2)
__get_user_2:
2: ldrbt r2, [r0], #1 2: ldrbt r2, [r0], #1
3: ldrbt r3, [r0] 3: ldrbt r3, [r0]
#ifndef __ARMEB__ #ifndef __ARMEB__
...@@ -45,17 +45,19 @@ __get_user_2: ...@@ -45,17 +45,19 @@ __get_user_2:
#endif #endif
mov r0, #0 mov r0, #0
mov pc, lr mov pc, lr
ENDPROC(__get_user_2)
.global __get_user_4 ENTRY(__get_user_4)
__get_user_4:
4: ldrt r2, [r0] 4: ldrt r2, [r0]
mov r0, #0 mov r0, #0
mov pc, lr mov pc, lr
ENDPROC(__get_user_4)
__get_user_bad: __get_user_bad:
mov r2, #0 mov r2, #0
mov r0, #-EFAULT mov r0, #-EFAULT
mov pc, lr mov pc, lr
ENDPROC(__get_user_bad)
.section __ex_table, "a" .section __ex_table, "a"
.long 1b, __get_user_bad .long 1b, __get_user_bad
......
...@@ -120,3 +120,4 @@ ENTRY(__raw_readsb) ...@@ -120,3 +120,4 @@ ENTRY(__raw_readsb)
strgtb r3, [r1] strgtb r3, [r1]
ldmfd sp!, {r4 - r6, pc} ldmfd sp!, {r4 - r6, pc}
ENDPROC(__raw_readsb)
...@@ -76,3 +76,4 @@ ENTRY(__raw_readsl) ...@@ -76,3 +76,4 @@ ENTRY(__raw_readsl)
8: mov r3, ip, get_byte_0 8: mov r3, ip, get_byte_0
strb r3, [r1, #0] strb r3, [r1, #0]
mov pc, lr mov pc, lr
ENDPROC(__raw_readsl)
...@@ -128,3 +128,4 @@ ENTRY(__raw_readsw) ...@@ -128,3 +128,4 @@ ENTRY(__raw_readsw)
_BE_ONLY_( movne ip, ip, lsr #24 ) _BE_ONLY_( movne ip, ip, lsr #24 )
strneb ip, [r1] strneb ip, [r1]
ldmfd sp!, {r4, pc} ldmfd sp!, {r4, pc}
ENDPROC(__raw_readsw)
...@@ -91,3 +91,4 @@ ENTRY(__raw_writesb) ...@@ -91,3 +91,4 @@ ENTRY(__raw_writesb)
strgtb r3, [r0] strgtb r3, [r0]
ldmfd sp!, {r4, r5, pc} ldmfd sp!, {r4, r5, pc}
ENDPROC(__raw_writesb)
...@@ -64,3 +64,4 @@ ENTRY(__raw_writesl) ...@@ -64,3 +64,4 @@ ENTRY(__raw_writesl)
str ip, [r0] str ip, [r0]
bne 6b bne 6b
mov pc, lr mov pc, lr
ENDPROC(__raw_writesl)
...@@ -94,3 +94,4 @@ ENTRY(__raw_writesw) ...@@ -94,3 +94,4 @@ ENTRY(__raw_writesw)
3: movne ip, r3, lsr #8 3: movne ip, r3, lsr #8
strneh ip, [r0] strneh ip, [r0]
mov pc, lr mov pc, lr
ENDPROC(__raw_writesw)
...@@ -230,6 +230,8 @@ ENTRY(__aeabi_uidiv) ...@@ -230,6 +230,8 @@ ENTRY(__aeabi_uidiv)
mov r0, r0, lsr r2 mov r0, r0, lsr r2
mov pc, lr mov pc, lr
ENDPROC(__udivsi3)
ENDPROC(__aeabi_uidiv)
ENTRY(__umodsi3) ENTRY(__umodsi3)
...@@ -245,6 +247,7 @@ ENTRY(__umodsi3) ...@@ -245,6 +247,7 @@ ENTRY(__umodsi3)
mov pc, lr mov pc, lr
ENDPROC(__umodsi3)
ENTRY(__divsi3) ENTRY(__divsi3)
ENTRY(__aeabi_idiv) ENTRY(__aeabi_idiv)
...@@ -284,6 +287,8 @@ ENTRY(__aeabi_idiv) ...@@ -284,6 +287,8 @@ ENTRY(__aeabi_idiv)
rsbmi r0, r0, #0 rsbmi r0, r0, #0
mov pc, lr mov pc, lr
ENDPROC(__divsi3)
ENDPROC(__aeabi_idiv)
ENTRY(__modsi3) ENTRY(__modsi3)
...@@ -305,6 +310,8 @@ ENTRY(__modsi3) ...@@ -305,6 +310,8 @@ ENTRY(__modsi3)
rsbmi r0, r0, #0 rsbmi r0, r0, #0
mov pc, lr mov pc, lr
ENDPROC(__modsi3)
#ifdef CONFIG_AEABI #ifdef CONFIG_AEABI
ENTRY(__aeabi_uidivmod) ENTRY(__aeabi_uidivmod)
...@@ -316,6 +323,8 @@ ENTRY(__aeabi_uidivmod) ...@@ -316,6 +323,8 @@ ENTRY(__aeabi_uidivmod)
sub r1, r1, r3 sub r1, r1, r3
mov pc, lr mov pc, lr
ENDPROC(__aeabi_uidivmod)
ENTRY(__aeabi_idivmod) ENTRY(__aeabi_idivmod)
stmfd sp!, {r0, r1, ip, lr} stmfd sp!, {r0, r1, ip, lr}
...@@ -325,6 +334,8 @@ ENTRY(__aeabi_idivmod) ...@@ -325,6 +334,8 @@ ENTRY(__aeabi_idivmod)
sub r1, r1, r3 sub r1, r1, r3
mov pc, lr mov pc, lr
ENDPROC(__aeabi_idivmod)
#endif #endif
Ldiv0: Ldiv0:
......
...@@ -47,3 +47,5 @@ ENTRY(__aeabi_llsr) ...@@ -47,3 +47,5 @@ ENTRY(__aeabi_llsr)
mov ah, ah, lsr r2 mov ah, ah, lsr r2
mov pc, lr mov pc, lr
ENDPROC(__lshrdi3)
ENDPROC(__aeabi_llsr)
...@@ -23,3 +23,4 @@ ENTRY(memchr) ...@@ -23,3 +23,4 @@ ENTRY(memchr)
sub r0, r0, #1 sub r0, r0, #1
2: movne r0, #0 2: movne r0, #0
mov pc, lr mov pc, lr
ENDPROC(memchr)
...@@ -57,3 +57,4 @@ ENTRY(memcpy) ...@@ -57,3 +57,4 @@ ENTRY(memcpy)
#include "copy_template.S" #include "copy_template.S"
ENDPROC(memcpy)
...@@ -196,3 +196,4 @@ ENTRY(memmove) ...@@ -196,3 +196,4 @@ ENTRY(memmove)
18: backward_copy_shift push=24 pull=8 18: backward_copy_shift push=24 pull=8
ENDPROC(memmove)
...@@ -124,3 +124,4 @@ ENTRY(memset) ...@@ -124,3 +124,4 @@ ENTRY(memset)
tst r2, #1 tst r2, #1
strneb r1, [r0], #1 strneb r1, [r0], #1
mov pc, lr mov pc, lr
ENDPROC(memset)
...@@ -122,3 +122,4 @@ ENTRY(__memzero) ...@@ -122,3 +122,4 @@ ENTRY(__memzero)
tst r1, #1 @ 1 a byte left over tst r1, #1 @ 1 a byte left over
strneb r2, [r0], #1 @ 1 strneb r2, [r0], #1 @ 1
mov pc, lr @ 1 mov pc, lr @ 1
ENDPROC(__memzero)
...@@ -43,3 +43,5 @@ ENTRY(__aeabi_lmul) ...@@ -43,3 +43,5 @@ ENTRY(__aeabi_lmul)
adc xh, xh, ip, lsr #16 adc xh, xh, ip, lsr #16
mov pc, lr mov pc, lr
ENDPROC(__muldi3)
ENDPROC(__aeabi_lmul)
...@@ -26,16 +26,16 @@ ...@@ -26,16 +26,16 @@
* Note that ADDR_LIMIT is either 0 or 0xc0000000 * Note that ADDR_LIMIT is either 0 or 0xc0000000
* Note also that it is intended that __put_user_bad is not global. * Note also that it is intended that __put_user_bad is not global.
*/ */
#include <linux/linkage.h>
#include <asm/errno.h> #include <asm/errno.h>
.global __put_user_1 ENTRY(__put_user_1)
__put_user_1:
1: strbt r2, [r0] 1: strbt r2, [r0]
mov r0, #0 mov r0, #0
mov pc, lr mov pc, lr
ENDPROC(__put_user_1)
.global __put_user_2 ENTRY(__put_user_2)
__put_user_2:
mov ip, r2, lsr #8 mov ip, r2, lsr #8
#ifndef __ARMEB__ #ifndef __ARMEB__
2: strbt r2, [r0], #1 2: strbt r2, [r0], #1
...@@ -46,23 +46,25 @@ __put_user_2: ...@@ -46,23 +46,25 @@ __put_user_2:
#endif #endif
mov r0, #0 mov r0, #0
mov pc, lr mov pc, lr
ENDPROC(__put_user_2)
.global __put_user_4 ENTRY(__put_user_4)
__put_user_4:
4: strt r2, [r0] 4: strt r2, [r0]
mov r0, #0 mov r0, #0
mov pc, lr mov pc, lr
ENDPROC(__put_user_4)
.global __put_user_8 ENTRY(__put_user_8)
__put_user_8:
5: strt r2, [r0], #4 5: strt r2, [r0], #4
6: strt r3, [r0] 6: strt r3, [r0]
mov r0, #0 mov r0, #0
mov pc, lr mov pc, lr
ENDPROC(__put_user_8)
__put_user_bad: __put_user_bad:
mov r0, #-EFAULT mov r0, #-EFAULT
mov pc, lr mov pc, lr
ENDPROC(__put_user_bad)
.section __ex_table, "a" .section __ex_table, "a"
.long 1b, __put_user_bad .long 1b, __put_user_bad
......
...@@ -20,3 +20,5 @@ ENTRY(_set_bit_be) ...@@ -20,3 +20,5 @@ ENTRY(_set_bit_be)
eor r0, r0, #0x18 @ big endian byte ordering eor r0, r0, #0x18 @ big endian byte ordering
ENTRY(_set_bit_le) ENTRY(_set_bit_le)
bitop orr bitop orr
ENDPROC(_set_bit_be)
ENDPROC(_set_bit_le)
...@@ -185,6 +185,8 @@ ENTRY(sha_transform) ...@@ -185,6 +185,8 @@ ENTRY(sha_transform)
ldmfd sp!, {r4 - r8, pc} ldmfd sp!, {r4 - r8, pc}
ENDPROC(sha_transform)
.L_sha_K: .L_sha_K:
.word 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6 .word 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6
...@@ -204,3 +206,4 @@ ENTRY(sha_init) ...@@ -204,3 +206,4 @@ ENTRY(sha_init)
stmia r0, {r1, r2, r3, ip, lr} stmia r0, {r1, r2, r3, ip, lr}
ldr pc, [sp], #4 ldr pc, [sp], #4
ENDPROC(sha_init)
...@@ -24,3 +24,4 @@ ENTRY(strchr) ...@@ -24,3 +24,4 @@ ENTRY(strchr)
movne r0, #0 movne r0, #0
subeq r0, r0, #1 subeq r0, r0, #1
mov pc, lr mov pc, lr
ENDPROC(strchr)
...@@ -31,6 +31,7 @@ USER( ldrplbt r3, [r1], #1) ...@@ -31,6 +31,7 @@ USER( ldrplbt r3, [r1], #1)
sub r1, r1, #1 @ take NUL character out of count sub r1, r1, #1 @ take NUL character out of count
2: sub r0, r1, ip 2: sub r0, r1, ip
mov pc, lr mov pc, lr
ENDPROC(__strncpy_from_user)
.section .fixup,"ax" .section .fixup,"ax"
.align 0 .align 0
......
...@@ -31,6 +31,7 @@ USER( ldrbt r3, [r0], #1) ...@@ -31,6 +31,7 @@ USER( ldrbt r3, [r0], #1)
add r0, r0, #1 add r0, r0, #1
2: sub r0, r0, r2 2: sub r0, r0, r2
mov pc, lr mov pc, lr
ENDPROC(__strnlen_user)
.section .fixup,"ax" .section .fixup,"ax"
.align 0 .align 0
......
...@@ -23,3 +23,4 @@ ENTRY(strrchr) ...@@ -23,3 +23,4 @@ ENTRY(strrchr)
bne 1b bne 1b
mov r0, r3 mov r0, r3
mov pc, lr mov pc, lr
ENDPROC(strrchr)
...@@ -16,3 +16,5 @@ ENTRY(_test_and_change_bit_be) ...@@ -16,3 +16,5 @@ ENTRY(_test_and_change_bit_be)
eor r0, r0, #0x18 @ big endian byte ordering eor r0, r0, #0x18 @ big endian byte ordering
ENTRY(_test_and_change_bit_le) ENTRY(_test_and_change_bit_le)
testop eor, strb testop eor, strb
ENDPROC(_test_and_change_bit_be)
ENDPROC(_test_and_change_bit_le)
...@@ -16,3 +16,5 @@ ENTRY(_test_and_clear_bit_be) ...@@ -16,3 +16,5 @@ ENTRY(_test_and_clear_bit_be)
eor r0, r0, #0x18 @ big endian byte ordering eor r0, r0, #0x18 @ big endian byte ordering
ENTRY(_test_and_clear_bit_le) ENTRY(_test_and_clear_bit_le)
testop bicne, strneb testop bicne, strneb
ENDPROC(_test_and_clear_bit_be)
ENDPROC(_test_and_clear_bit_le)
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment