提交 def20529 编写于 作者: L Linus Torvalds

Merge master.kernel.org:/home/rmk/linux-2.6-arm

* master.kernel.org:/home/rmk/linux-2.6-arm:
  ARM: 5888/1: arm: Update comments in cacheflush.h and remove unnecessary V6 and V7 comments
  ARM: 5886/1: arm: Fix cpu_proc_fin() for proc-v7.S and make kexec work
  ARM: 5885/1: arm: Flush TLB entries in setup_mm_for_reboot()
  ARM: 5884/1: arm: Fix DCC console for v7
  ARM: 5883/1: Revert "disable NX support for OABI-supporting kernels"
  ARM: 5882/1: ARM: Fix uncompress code compile for different defines of flush(void)
  ARM: fix badly placed mach/plat entries in Kconfig & Makefile
...@@ -729,14 +729,26 @@ config ARCH_U8500 ...@@ -729,14 +729,26 @@ config ARCH_U8500
endchoice endchoice
source "arch/arm/mach-aaec2000/Kconfig"
source "arch/arm/mach-at91/Kconfig"
source "arch/arm/mach-bcmring/Kconfig"
source "arch/arm/mach-clps711x/Kconfig" source "arch/arm/mach-clps711x/Kconfig"
source "arch/arm/mach-davinci/Kconfig"
source "arch/arm/mach-dove/Kconfig"
source "arch/arm/mach-ep93xx/Kconfig" source "arch/arm/mach-ep93xx/Kconfig"
source "arch/arm/mach-footbridge/Kconfig" source "arch/arm/mach-footbridge/Kconfig"
source "arch/arm/mach-gemini/Kconfig" source "arch/arm/mach-gemini/Kconfig"
source "arch/arm/mach-h720x/Kconfig"
source "arch/arm/mach-integrator/Kconfig" source "arch/arm/mach-integrator/Kconfig"
source "arch/arm/mach-iop32x/Kconfig" source "arch/arm/mach-iop32x/Kconfig"
...@@ -751,16 +763,26 @@ source "arch/arm/mach-ixp2000/Kconfig" ...@@ -751,16 +763,26 @@ source "arch/arm/mach-ixp2000/Kconfig"
source "arch/arm/mach-ixp23xx/Kconfig" source "arch/arm/mach-ixp23xx/Kconfig"
source "arch/arm/mach-kirkwood/Kconfig"
source "arch/arm/mach-ks8695/Kconfig"
source "arch/arm/mach-lh7a40x/Kconfig"
source "arch/arm/mach-loki/Kconfig" source "arch/arm/mach-loki/Kconfig"
source "arch/arm/mach-msm/Kconfig"
source "arch/arm/mach-mv78xx0/Kconfig" source "arch/arm/mach-mv78xx0/Kconfig"
source "arch/arm/mach-pxa/Kconfig" source "arch/arm/plat-mxc/Kconfig"
source "arch/arm/plat-pxa/Kconfig"
source "arch/arm/mach-mmp/Kconfig" source "arch/arm/mach-netx/Kconfig"
source "arch/arm/mach-sa1100/Kconfig" source "arch/arm/mach-nomadik/Kconfig"
source "arch/arm/plat-nomadik/Kconfig"
source "arch/arm/mach-ns9xxx/Kconfig"
source "arch/arm/plat-omap/Kconfig" source "arch/arm/plat-omap/Kconfig"
...@@ -770,9 +792,14 @@ source "arch/arm/mach-omap2/Kconfig" ...@@ -770,9 +792,14 @@ source "arch/arm/mach-omap2/Kconfig"
source "arch/arm/mach-orion5x/Kconfig" source "arch/arm/mach-orion5x/Kconfig"
source "arch/arm/mach-kirkwood/Kconfig" source "arch/arm/mach-pxa/Kconfig"
source "arch/arm/plat-pxa/Kconfig"
source "arch/arm/mach-dove/Kconfig" source "arch/arm/mach-mmp/Kconfig"
source "arch/arm/mach-realview/Kconfig"
source "arch/arm/mach-sa1100/Kconfig"
source "arch/arm/plat-samsung/Kconfig" source "arch/arm/plat-samsung/Kconfig"
source "arch/arm/plat-s3c24xx/Kconfig" source "arch/arm/plat-s3c24xx/Kconfig"
...@@ -800,41 +827,14 @@ if ARCH_S5PC1XX ...@@ -800,41 +827,14 @@ if ARCH_S5PC1XX
source "arch/arm/mach-s5pc100/Kconfig" source "arch/arm/mach-s5pc100/Kconfig"
endif endif
source "arch/arm/mach-lh7a40x/Kconfig" source "arch/arm/mach-u300/Kconfig"
source "arch/arm/mach-h720x/Kconfig" source "arch/arm/mach-ux500/Kconfig"
source "arch/arm/mach-versatile/Kconfig" source "arch/arm/mach-versatile/Kconfig"
source "arch/arm/mach-aaec2000/Kconfig"
source "arch/arm/mach-realview/Kconfig"
source "arch/arm/mach-at91/Kconfig"
source "arch/arm/plat-mxc/Kconfig"
source "arch/arm/mach-nomadik/Kconfig"
source "arch/arm/plat-nomadik/Kconfig"
source "arch/arm/mach-netx/Kconfig"
source "arch/arm/mach-ns9xxx/Kconfig"
source "arch/arm/mach-davinci/Kconfig"
source "arch/arm/mach-ks8695/Kconfig"
source "arch/arm/mach-msm/Kconfig"
source "arch/arm/mach-u300/Kconfig"
source "arch/arm/mach-w90x900/Kconfig" source "arch/arm/mach-w90x900/Kconfig"
source "arch/arm/mach-bcmring/Kconfig"
source "arch/arm/mach-ux500/Kconfig"
# Definitions to make life easier # Definitions to make life easier
config ARCH_ACORN config ARCH_ACORN
bool bool
......
...@@ -146,6 +146,7 @@ machine-$(CONFIG_ARCH_MX1) := mx1 ...@@ -146,6 +146,7 @@ machine-$(CONFIG_ARCH_MX1) := mx1
machine-$(CONFIG_ARCH_MX2) := mx2 machine-$(CONFIG_ARCH_MX2) := mx2
machine-$(CONFIG_ARCH_MX25) := mx25 machine-$(CONFIG_ARCH_MX25) := mx25
machine-$(CONFIG_ARCH_MX3) := mx3 machine-$(CONFIG_ARCH_MX3) := mx3
machine-$(CONFIG_ARCH_MXC91231) := mxc91231
machine-$(CONFIG_ARCH_NETX) := netx machine-$(CONFIG_ARCH_NETX) := netx
machine-$(CONFIG_ARCH_NOMADIK) := nomadik machine-$(CONFIG_ARCH_NOMADIK) := nomadik
machine-$(CONFIG_ARCH_NS9XXX) := ns9xxx machine-$(CONFIG_ARCH_NS9XXX) := ns9xxx
...@@ -171,12 +172,12 @@ machine-$(CONFIG_ARCH_U8500) := ux500 ...@@ -171,12 +172,12 @@ machine-$(CONFIG_ARCH_U8500) := ux500
machine-$(CONFIG_ARCH_VERSATILE) := versatile machine-$(CONFIG_ARCH_VERSATILE) := versatile
machine-$(CONFIG_ARCH_W90X900) := w90x900 machine-$(CONFIG_ARCH_W90X900) := w90x900
machine-$(CONFIG_FOOTBRIDGE) := footbridge machine-$(CONFIG_FOOTBRIDGE) := footbridge
machine-$(CONFIG_ARCH_MXC91231) := mxc91231
# Platform directory name. This list is sorted alphanumerically # Platform directory name. This list is sorted alphanumerically
# by CONFIG_* macro name. # by CONFIG_* macro name.
plat-$(CONFIG_ARCH_MXC) := mxc plat-$(CONFIG_ARCH_MXC) := mxc
plat-$(CONFIG_ARCH_OMAP) := omap plat-$(CONFIG_ARCH_OMAP) := omap
plat-$(CONFIG_ARCH_STMP3XXX) := stmp3xxx
plat-$(CONFIG_PLAT_IOP) := iop plat-$(CONFIG_PLAT_IOP) := iop
plat-$(CONFIG_PLAT_NOMADIK) := nomadik plat-$(CONFIG_PLAT_NOMADIK) := nomadik
plat-$(CONFIG_PLAT_ORION) := orion plat-$(CONFIG_PLAT_ORION) := orion
...@@ -184,7 +185,6 @@ plat-$(CONFIG_PLAT_PXA) := pxa ...@@ -184,7 +185,6 @@ plat-$(CONFIG_PLAT_PXA) := pxa
plat-$(CONFIG_PLAT_S3C24XX) := s3c24xx s3c samsung plat-$(CONFIG_PLAT_S3C24XX) := s3c24xx s3c samsung
plat-$(CONFIG_PLAT_S3C64XX) := s3c64xx s3c samsung plat-$(CONFIG_PLAT_S3C64XX) := s3c64xx s3c samsung
plat-$(CONFIG_PLAT_S5PC1XX) := s5pc1xx s3c samsung plat-$(CONFIG_PLAT_S5PC1XX) := s5pc1xx s3c samsung
plat-$(CONFIG_ARCH_STMP3XXX) := stmp3xxx
ifeq ($(CONFIG_ARCH_EBSA110),y) ifeq ($(CONFIG_ARCH_EBSA110),y)
# This is what happens if you forget the IOCS16 line. # This is what happens if you forget the IOCS16 line.
......
...@@ -27,6 +27,14 @@ ...@@ -27,6 +27,14 @@
.macro writeb, ch, rb .macro writeb, ch, rb
mcr p14, 0, \ch, c0, c5, 0 mcr p14, 0, \ch, c0, c5, 0
.endm .endm
#elif defined(CONFIG_CPU_V7)
.macro loadsp, rb
.endm
.macro writeb, ch, rb
wait: mrc p14, 0, pc, c0, c1, 0
bcs wait
mcr p14, 0, \ch, c0, c5, 0
.endm
#elif defined(CONFIG_CPU_XSCALE) #elif defined(CONFIG_CPU_XSCALE)
.macro loadsp, rb .macro loadsp, rb
.endm .endm
......
...@@ -53,6 +53,18 @@ static void icedcc_putc(int ch) ...@@ -53,6 +53,18 @@ static void icedcc_putc(int ch)
asm("mcr p14, 0, %0, c0, c5, 0" : : "r" (ch)); asm("mcr p14, 0, %0, c0, c5, 0" : : "r" (ch));
} }
#elif defined(CONFIG_CPU_V7)
static void icedcc_putc(int ch)
{
asm(
"wait: mrc p14, 0, pc, c0, c1, 0 \n\
bcs wait \n\
mcr p14, 0, %0, c0, c5, 0 "
: : "r" (ch));
}
#elif defined(CONFIG_CPU_XSCALE) #elif defined(CONFIG_CPU_XSCALE)
static void icedcc_putc(int ch) static void icedcc_putc(int ch)
...@@ -88,7 +100,6 @@ static void icedcc_putc(int ch) ...@@ -88,7 +100,6 @@ static void icedcc_putc(int ch)
#endif #endif
#define putc(ch) icedcc_putc(ch) #define putc(ch) icedcc_putc(ch)
#define flush() do { } while (0)
#endif #endif
static void putstr(const char *ptr) static void putstr(const char *ptr)
......
...@@ -154,16 +154,16 @@ ...@@ -154,16 +154,16 @@
* Please note that the implementation of these, and the required * Please note that the implementation of these, and the required
* effects are cache-type (VIVT/VIPT/PIPT) specific. * effects are cache-type (VIVT/VIPT/PIPT) specific.
* *
* flush_cache_kern_all() * flush_kern_all()
* *
* Unconditionally clean and invalidate the entire cache. * Unconditionally clean and invalidate the entire cache.
* *
* flush_cache_user_mm(mm) * flush_user_all()
* *
* Clean and invalidate all user space cache entries * Clean and invalidate all user space cache entries
* before a change of page tables. * before a change of page tables.
* *
* flush_cache_user_range(start, end, flags) * flush_user_range(start, end, flags)
* *
* Clean and invalidate a range of cache entries in the * Clean and invalidate a range of cache entries in the
* specified address space before a change of page tables. * specified address space before a change of page tables.
...@@ -179,6 +179,20 @@ ...@@ -179,6 +179,20 @@
* - start - virtual start address * - start - virtual start address
* - end - virtual end address * - end - virtual end address
* *
* coherent_user_range(start, end)
*
* Ensure coherency between the Icache and the Dcache in the
* region described by start, end. If you have non-snooping
* Harvard caches, you need to implement this function.
* - start - virtual start address
* - end - virtual end address
*
* flush_kern_dcache_area(kaddr, size)
*
* Ensure that the data held in page is written back.
* - kaddr - page address
* - size - region size
*
* DMA Cache Coherency * DMA Cache Coherency
* =================== * ===================
* *
......
...@@ -49,6 +49,26 @@ ...@@ -49,6 +49,26 @@
1002: 1002:
.endm .endm
#elif defined(CONFIG_CPU_V7)
.macro addruart, rx
.endm
.macro senduart, rd, rx
mcr p14, 0, \rd, c0, c5, 0
.endm
.macro busyuart, rd, rx
busy: mrc p14, 0, pc, c0, c1, 0
bcs busy
.endm
.macro waituart, rd, rx
wait: mrc p14, 0, pc, c0, c1, 0
bcs wait
.endm
#elif defined(CONFIG_CPU_XSCALE) #elif defined(CONFIG_CPU_XSCALE)
.macro addruart, rx .macro addruart, rx
......
...@@ -78,15 +78,6 @@ int arm_elf_read_implies_exec(const struct elf32_hdr *x, int executable_stack) ...@@ -78,15 +78,6 @@ int arm_elf_read_implies_exec(const struct elf32_hdr *x, int executable_stack)
return 1; return 1;
if (cpu_architecture() < CPU_ARCH_ARMv6) if (cpu_architecture() < CPU_ARCH_ARMv6)
return 1; return 1;
#if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT)
/*
* If we have support for OABI programs, we can never allow NX
* support - our signal syscall restart mechanism relies upon
* being able to execute code placed on the user stack.
*/
return 1;
#else
return 0; return 0;
#endif
} }
EXPORT_SYMBOL(arm_elf_read_implies_exec); EXPORT_SYMBOL(arm_elf_read_implies_exec);
...@@ -30,7 +30,9 @@ static inline void putc(char c) ...@@ -30,7 +30,9 @@ static inline void putc(char c)
UART[UART_TX] = c; UART[UART_TX] = c;
} }
#define flush() do { } while (0) static inline void flush(void)
{
}
/* /*
* nothing to do * nothing to do
......
...@@ -1067,4 +1067,6 @@ void setup_mm_for_reboot(char mode) ...@@ -1067,4 +1067,6 @@ void setup_mm_for_reboot(char mode)
pmd[1] = __pmd(pmdval + (1 << (PGDIR_SHIFT - 1))); pmd[1] = __pmd(pmdval + (1 << (PGDIR_SHIFT - 1)));
flush_pmd_entry(pmd); flush_pmd_entry(pmd);
} }
local_flush_tlb_all();
} }
...@@ -59,8 +59,6 @@ ENTRY(cpu_v6_proc_fin) ...@@ -59,8 +59,6 @@ ENTRY(cpu_v6_proc_fin)
* to what would be the reset vector. * to what would be the reset vector.
* *
* - loc - location to jump to for soft reset * - loc - location to jump to for soft reset
*
* It is assumed that:
*/ */
.align 5 .align 5
ENTRY(cpu_v6_reset) ENTRY(cpu_v6_reset)
......
...@@ -45,7 +45,14 @@ ENTRY(cpu_v7_proc_init) ...@@ -45,7 +45,14 @@ ENTRY(cpu_v7_proc_init)
ENDPROC(cpu_v7_proc_init) ENDPROC(cpu_v7_proc_init)
ENTRY(cpu_v7_proc_fin) ENTRY(cpu_v7_proc_fin)
mov pc, lr stmfd sp!, {lr}
cpsid if @ disable interrupts
bl v7_flush_kern_cache_all
mrc p15, 0, r0, c1, c0, 0 @ ctrl register
bic r0, r0, #0x1000 @ ...i............
bic r0, r0, #0x0006 @ .............ca.
mcr p15, 0, r0, c1, c0, 0 @ disable caches
ldmfd sp!, {pc}
ENDPROC(cpu_v7_proc_fin) ENDPROC(cpu_v7_proc_fin)
/* /*
...@@ -56,8 +63,6 @@ ENDPROC(cpu_v7_proc_fin) ...@@ -56,8 +63,6 @@ ENDPROC(cpu_v7_proc_fin)
* to what would be the reset vector. * to what would be the reset vector.
* *
* - loc - location to jump to for soft reset * - loc - location to jump to for soft reset
*
* It is assumed that:
*/ */
.align 5 .align 5
ENTRY(cpu_v7_reset) ENTRY(cpu_v7_reset)
......
...@@ -60,7 +60,9 @@ static void putc(int ch) ...@@ -60,7 +60,9 @@ static void putc(int ch)
UART(TXR) = ch; UART(TXR) = ch;
} }
#define flush() do { } while (0) static inline void flush(void)
{
}
#define MX1_UART1_BASE_ADDR 0x00206000 #define MX1_UART1_BASE_ADDR 0x00206000
#define MX25_UART1_BASE_ADDR 0x43f90000 #define MX25_UART1_BASE_ADDR 0x43f90000
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册