Loading Documentation/arm/memory.txt +5 −1 Original line number Diff line number Diff line Loading @@ -59,7 +59,11 @@ PAGE_OFFSET high_memory-1 Kernel direct-mapped RAM region. This maps the platforms RAM, and typically maps all platform RAM in a 1:1 relationship. TASK_SIZE PAGE_OFFSET-1 Kernel module space PKMAP_BASE PAGE_OFFSET-1 Permanent kernel mappings One way of mapping HIGHMEM pages into kernel space. MODULES_VADDR MODULES_END-1 Kernel module space Kernel modules inserted via insmod are placed here using dynamic mappings. Loading arch/arm/Kconfig +24 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ config ARM select HAVE_IDE select RTC_LIB select SYS_SUPPORTS_APM_EMULATION select GENERIC_ATOMIC64 if (!CPU_32v6K) select HAVE_OPROFILE select HAVE_ARCH_KGDB select HAVE_KPROBES if (!XIP_KERNEL) Loading Loading @@ -54,6 +55,9 @@ config HAVE_TCM bool select GENERIC_ALLOCATOR config HAVE_PROC_CPU bool config NO_IOPORT bool Loading Loading @@ -163,6 +167,11 @@ config ARCH_MTD_XIP config GENERIC_HARDIRQS_NO__DO_IRQ def_bool y config ARM_L1_CACHE_SHIFT_6 bool help Setting ARM L1 cache line size to 64 Bytes. if OPROFILE config OPROFILE_ARMV6 Loading Loading @@ -649,6 +658,7 @@ config ARCH_S5PC1XX select GENERIC_GPIO select HAVE_CLK select CPU_V7 select ARM_L1_CACHE_SHIFT_6 help Samsung S5PC1XX series based systems Loading Loading @@ -938,6 +948,19 @@ config ARM_ERRATA_460075 ACTLR register. Note that setting specific bits in the ACTLR register may not be available in non-secure mode. config PL310_ERRATA_588369 bool "Clean & Invalidate maintenance operations do not invalidate clean lines" depends on CACHE_L2X0 && ARCH_OMAP4 help The PL310 L2 cache controller implements three types of Clean & Invalidate maintenance operations: by Physical Address (offset 0x7F0), by Index/Way (0x7F8) and by Way (0x7FC). They are architecturally defined to behave as the execution of a clean operation followed immediately by an invalidate operation, both performing to the same memory location. This functionality is not correctly implemented in PL310 as clean lines are not invalidated as a result of these operations. Note that this errata uses Texas Instrument's secure monitor api. endmenu source "arch/arm/common/Kconfig" Loading Loading @@ -1255,6 +1278,7 @@ config ALIGNMENT_TRAP bool depends on CPU_CP15_MMU default y if !ARCH_EBSA110 select HAVE_PROC_CPU if PROC_FS help ARM processors cannot fetch/store information which is not naturally aligned on the bus, i.e., a 4 byte fetch must start at an Loading arch/arm/boot/compressed/Makefile +1 −5 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ # HEAD = head.o OBJS = misc.o OBJS = misc.o decompress.o FONTC = $(srctree)/drivers/video/console/font_acorn_8x8.c # Loading Loading @@ -106,10 +106,6 @@ lib1funcs = $(obj)/lib1funcs.o $(obj)/lib1funcs.S: $(srctree)/arch/$(SRCARCH)/lib/lib1funcs.S FORCE $(call cmd,shipped) # Don't allow any static data in misc.o, which # would otherwise mess up our GOT table CFLAGS_misc.o := -Dstatic= $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \ $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE $(call if_changed,ld) Loading arch/arm/boot/compressed/decompress.c 0 → 100644 +45 −0 Original line number Diff line number Diff line #define _LINUX_STRING_H_ #include <linux/compiler.h> /* for inline */ #include <linux/types.h> /* for size_t */ #include <linux/stddef.h> /* for NULL */ #include <linux/linkage.h> #include <asm/string.h> extern unsigned long free_mem_ptr; extern unsigned long free_mem_end_ptr; extern void error(char *); #define STATIC static #define ARCH_HAS_DECOMP_WDOG /* Diagnostic functions */ #ifdef DEBUG # define Assert(cond,msg) {if(!(cond)) error(msg);} # define Trace(x) fprintf x # define Tracev(x) {if (verbose) fprintf x ;} # define Tracevv(x) {if (verbose>1) fprintf x ;} # define Tracec(c,x) {if (verbose && (c)) fprintf x ;} # define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;} #else # define Assert(cond,msg) # define Trace(x) # define Tracev(x) # define Tracevv(x) # define Tracec(c,x) # define Tracecv(c,x) #endif #ifdef CONFIG_KERNEL_GZIP #include "../../../../lib/decompress_inflate.c" #endif #ifdef CONFIG_KERNEL_LZO #include "../../../../lib/decompress_unlzo.c" #endif void do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x)) { decompress(input, len, NULL, NULL, output, NULL, error); } arch/arm/boot/compressed/misc.c +11 −98 Original line number Diff line number Diff line Loading @@ -23,8 +23,8 @@ unsigned int __machine_arch_type; #include <linux/compiler.h> /* for inline */ #include <linux/types.h> /* for size_t */ #include <linux/stddef.h> /* for NULL */ #include <asm/string.h> #include <linux/linkage.h> #include <asm/string.h> #include <asm/unaligned.h> Loading Loading @@ -117,57 +117,7 @@ static void putstr(const char *ptr) #endif #define __ptr_t void * #define memzero(s,n) __memzero(s,n) /* * Optimised C version of memzero for the ARM. */ void __memzero (__ptr_t s, size_t n) { union { void *vp; unsigned long *ulp; unsigned char *ucp; } u; int i; u.vp = s; for (i = n >> 5; i > 0; i--) { *u.ulp++ = 0; *u.ulp++ = 0; *u.ulp++ = 0; *u.ulp++ = 0; *u.ulp++ = 0; *u.ulp++ = 0; *u.ulp++ = 0; *u.ulp++ = 0; } if (n & 1 << 4) { *u.ulp++ = 0; *u.ulp++ = 0; *u.ulp++ = 0; *u.ulp++ = 0; } if (n & 1 << 3) { *u.ulp++ = 0; *u.ulp++ = 0; } if (n & 1 << 2) *u.ulp++ = 0; if (n & 1 << 1) { *u.ucp++ = 0; *u.ucp++ = 0; } if (n & 1) *u.ucp++ = 0; } static inline __ptr_t memcpy(__ptr_t __dest, __const __ptr_t __src, size_t __n) void *memcpy(void *__dest, __const void *__src, size_t __n) { int i = 0; unsigned char *d = (unsigned char *)__dest, *s = (unsigned char *)__src; Loading Loading @@ -204,59 +154,20 @@ static inline __ptr_t memcpy(__ptr_t __dest, __const __ptr_t __src, /* * gzip delarations */ #define STATIC static /* Diagnostic functions */ #ifdef DEBUG # define Assert(cond,msg) {if(!(cond)) error(msg);} # define Trace(x) fprintf x # define Tracev(x) {if (verbose) fprintf x ;} # define Tracevv(x) {if (verbose>1) fprintf x ;} # define Tracec(c,x) {if (verbose && (c)) fprintf x ;} # define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;} #else # define Assert(cond,msg) # define Trace(x) # define Tracev(x) # define Tracevv(x) # define Tracec(c,x) # define Tracecv(c,x) #endif static void error(char *m); extern char input_data[]; extern char input_data_end[]; static unsigned char *output_data; static unsigned long output_ptr; static void error(char *m); unsigned char *output_data; unsigned long output_ptr; static void putstr(const char *); static unsigned long free_mem_ptr; static unsigned long free_mem_end_ptr; #ifdef STANDALONE_DEBUG #define NO_INFLATE_MALLOC #endif #define ARCH_HAS_DECOMP_WDOG #ifdef CONFIG_KERNEL_GZIP #include "../../../../lib/decompress_inflate.c" #endif #ifdef CONFIG_KERNEL_LZO #include "../../../../lib/decompress_unlzo.c" #endif unsigned long free_mem_ptr; unsigned long free_mem_end_ptr; #ifndef arch_error #define arch_error(x) #endif static void error(char *x) void error(char *x) { arch_error(x); Loading @@ -272,6 +183,8 @@ asmlinkage void __div0(void) error("Attempting division by 0!"); } extern void do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x)); #ifndef STANDALONE_DEBUG unsigned long Loading @@ -292,8 +205,8 @@ decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p, output_ptr = get_unaligned_le32(tmp); putstr("Uncompressing Linux..."); decompress(input_data, input_data_end - input_data, NULL, NULL, output_data, NULL, error); do_decompress(input_data, input_data_end - input_data, output_data, error); putstr(" done, booting the kernel.\n"); return output_ptr; } Loading Loading
Documentation/arm/memory.txt +5 −1 Original line number Diff line number Diff line Loading @@ -59,7 +59,11 @@ PAGE_OFFSET high_memory-1 Kernel direct-mapped RAM region. This maps the platforms RAM, and typically maps all platform RAM in a 1:1 relationship. TASK_SIZE PAGE_OFFSET-1 Kernel module space PKMAP_BASE PAGE_OFFSET-1 Permanent kernel mappings One way of mapping HIGHMEM pages into kernel space. MODULES_VADDR MODULES_END-1 Kernel module space Kernel modules inserted via insmod are placed here using dynamic mappings. Loading
arch/arm/Kconfig +24 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ config ARM select HAVE_IDE select RTC_LIB select SYS_SUPPORTS_APM_EMULATION select GENERIC_ATOMIC64 if (!CPU_32v6K) select HAVE_OPROFILE select HAVE_ARCH_KGDB select HAVE_KPROBES if (!XIP_KERNEL) Loading Loading @@ -54,6 +55,9 @@ config HAVE_TCM bool select GENERIC_ALLOCATOR config HAVE_PROC_CPU bool config NO_IOPORT bool Loading Loading @@ -163,6 +167,11 @@ config ARCH_MTD_XIP config GENERIC_HARDIRQS_NO__DO_IRQ def_bool y config ARM_L1_CACHE_SHIFT_6 bool help Setting ARM L1 cache line size to 64 Bytes. if OPROFILE config OPROFILE_ARMV6 Loading Loading @@ -649,6 +658,7 @@ config ARCH_S5PC1XX select GENERIC_GPIO select HAVE_CLK select CPU_V7 select ARM_L1_CACHE_SHIFT_6 help Samsung S5PC1XX series based systems Loading Loading @@ -938,6 +948,19 @@ config ARM_ERRATA_460075 ACTLR register. Note that setting specific bits in the ACTLR register may not be available in non-secure mode. config PL310_ERRATA_588369 bool "Clean & Invalidate maintenance operations do not invalidate clean lines" depends on CACHE_L2X0 && ARCH_OMAP4 help The PL310 L2 cache controller implements three types of Clean & Invalidate maintenance operations: by Physical Address (offset 0x7F0), by Index/Way (0x7F8) and by Way (0x7FC). They are architecturally defined to behave as the execution of a clean operation followed immediately by an invalidate operation, both performing to the same memory location. This functionality is not correctly implemented in PL310 as clean lines are not invalidated as a result of these operations. Note that this errata uses Texas Instrument's secure monitor api. endmenu source "arch/arm/common/Kconfig" Loading Loading @@ -1255,6 +1278,7 @@ config ALIGNMENT_TRAP bool depends on CPU_CP15_MMU default y if !ARCH_EBSA110 select HAVE_PROC_CPU if PROC_FS help ARM processors cannot fetch/store information which is not naturally aligned on the bus, i.e., a 4 byte fetch must start at an Loading
arch/arm/boot/compressed/Makefile +1 −5 Original line number Diff line number Diff line Loading @@ -5,7 +5,7 @@ # HEAD = head.o OBJS = misc.o OBJS = misc.o decompress.o FONTC = $(srctree)/drivers/video/console/font_acorn_8x8.c # Loading Loading @@ -106,10 +106,6 @@ lib1funcs = $(obj)/lib1funcs.o $(obj)/lib1funcs.S: $(srctree)/arch/$(SRCARCH)/lib/lib1funcs.S FORCE $(call cmd,shipped) # Don't allow any static data in misc.o, which # would otherwise mess up our GOT table CFLAGS_misc.o := -Dstatic= $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \ $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE $(call if_changed,ld) Loading
arch/arm/boot/compressed/decompress.c 0 → 100644 +45 −0 Original line number Diff line number Diff line #define _LINUX_STRING_H_ #include <linux/compiler.h> /* for inline */ #include <linux/types.h> /* for size_t */ #include <linux/stddef.h> /* for NULL */ #include <linux/linkage.h> #include <asm/string.h> extern unsigned long free_mem_ptr; extern unsigned long free_mem_end_ptr; extern void error(char *); #define STATIC static #define ARCH_HAS_DECOMP_WDOG /* Diagnostic functions */ #ifdef DEBUG # define Assert(cond,msg) {if(!(cond)) error(msg);} # define Trace(x) fprintf x # define Tracev(x) {if (verbose) fprintf x ;} # define Tracevv(x) {if (verbose>1) fprintf x ;} # define Tracec(c,x) {if (verbose && (c)) fprintf x ;} # define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;} #else # define Assert(cond,msg) # define Trace(x) # define Tracev(x) # define Tracevv(x) # define Tracec(c,x) # define Tracecv(c,x) #endif #ifdef CONFIG_KERNEL_GZIP #include "../../../../lib/decompress_inflate.c" #endif #ifdef CONFIG_KERNEL_LZO #include "../../../../lib/decompress_unlzo.c" #endif void do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x)) { decompress(input, len, NULL, NULL, output, NULL, error); }
arch/arm/boot/compressed/misc.c +11 −98 Original line number Diff line number Diff line Loading @@ -23,8 +23,8 @@ unsigned int __machine_arch_type; #include <linux/compiler.h> /* for inline */ #include <linux/types.h> /* for size_t */ #include <linux/stddef.h> /* for NULL */ #include <asm/string.h> #include <linux/linkage.h> #include <asm/string.h> #include <asm/unaligned.h> Loading Loading @@ -117,57 +117,7 @@ static void putstr(const char *ptr) #endif #define __ptr_t void * #define memzero(s,n) __memzero(s,n) /* * Optimised C version of memzero for the ARM. */ void __memzero (__ptr_t s, size_t n) { union { void *vp; unsigned long *ulp; unsigned char *ucp; } u; int i; u.vp = s; for (i = n >> 5; i > 0; i--) { *u.ulp++ = 0; *u.ulp++ = 0; *u.ulp++ = 0; *u.ulp++ = 0; *u.ulp++ = 0; *u.ulp++ = 0; *u.ulp++ = 0; *u.ulp++ = 0; } if (n & 1 << 4) { *u.ulp++ = 0; *u.ulp++ = 0; *u.ulp++ = 0; *u.ulp++ = 0; } if (n & 1 << 3) { *u.ulp++ = 0; *u.ulp++ = 0; } if (n & 1 << 2) *u.ulp++ = 0; if (n & 1 << 1) { *u.ucp++ = 0; *u.ucp++ = 0; } if (n & 1) *u.ucp++ = 0; } static inline __ptr_t memcpy(__ptr_t __dest, __const __ptr_t __src, size_t __n) void *memcpy(void *__dest, __const void *__src, size_t __n) { int i = 0; unsigned char *d = (unsigned char *)__dest, *s = (unsigned char *)__src; Loading Loading @@ -204,59 +154,20 @@ static inline __ptr_t memcpy(__ptr_t __dest, __const __ptr_t __src, /* * gzip delarations */ #define STATIC static /* Diagnostic functions */ #ifdef DEBUG # define Assert(cond,msg) {if(!(cond)) error(msg);} # define Trace(x) fprintf x # define Tracev(x) {if (verbose) fprintf x ;} # define Tracevv(x) {if (verbose>1) fprintf x ;} # define Tracec(c,x) {if (verbose && (c)) fprintf x ;} # define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;} #else # define Assert(cond,msg) # define Trace(x) # define Tracev(x) # define Tracevv(x) # define Tracec(c,x) # define Tracecv(c,x) #endif static void error(char *m); extern char input_data[]; extern char input_data_end[]; static unsigned char *output_data; static unsigned long output_ptr; static void error(char *m); unsigned char *output_data; unsigned long output_ptr; static void putstr(const char *); static unsigned long free_mem_ptr; static unsigned long free_mem_end_ptr; #ifdef STANDALONE_DEBUG #define NO_INFLATE_MALLOC #endif #define ARCH_HAS_DECOMP_WDOG #ifdef CONFIG_KERNEL_GZIP #include "../../../../lib/decompress_inflate.c" #endif #ifdef CONFIG_KERNEL_LZO #include "../../../../lib/decompress_unlzo.c" #endif unsigned long free_mem_ptr; unsigned long free_mem_end_ptr; #ifndef arch_error #define arch_error(x) #endif static void error(char *x) void error(char *x) { arch_error(x); Loading @@ -272,6 +183,8 @@ asmlinkage void __div0(void) error("Attempting division by 0!"); } extern void do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x)); #ifndef STANDALONE_DEBUG unsigned long Loading @@ -292,8 +205,8 @@ decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p, output_ptr = get_unaligned_le32(tmp); putstr("Uncompressing Linux..."); decompress(input_data, input_data_end - input_data, NULL, NULL, output_data, NULL, error); do_decompress(input_data, input_data_end - input_data, output_data, error); putstr(" done, booting the kernel.\n"); return output_ptr; } Loading