From a263622d7a61421d5a4332c27efc270f18631762 Mon Sep 17 00:00:00 2001 From: Robin Getz Date: Thu, 15 Nov 2007 15:10:48 +0800 Subject: [PATCH] --- yaml --- r: 74095 b: refs/heads/master c: 6a3f0b460cea79f08683cef1862d686a887efd8c h: refs/heads/master i: 74093: 67a5000e159045d827bdd6a15c75b3cc24692520 74091: 79b78a12d2fe2000d7235ec0eeb64803ee7d0452 74087: 6c48eb1d547e9c979345737099a64755684bb385 74079: 8585143db642666c7339a9d310685040953bb5e5 v: v3 --- [refs] | 2 +- trunk/arch/blackfin/kernel/cplbinit.c | 4 ++-- trunk/arch/blackfin/kernel/traps.c | 4 ++-- trunk/arch/blackfin/mach-common/cplbmgr.S | 25 ++++++++++++++++------- 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index b4a271522727..19f89319f704 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0954f70ab1ffd9ad945c88c11877a08baed311c7 +refs/heads/master: 6a3f0b460cea79f08683cef1862d686a887efd8c diff --git a/trunk/arch/blackfin/kernel/cplbinit.c b/trunk/arch/blackfin/kernel/cplbinit.c index f2db6a5e2b5b..7392ac2d2c29 100644 --- a/trunk/arch/blackfin/kernel/cplbinit.c +++ b/trunk/arch/blackfin/kernel/cplbinit.c @@ -163,8 +163,8 @@ static struct cplb_desc cplb_data[] = { static u16 __init lock_kernel_check(u32 start, u32 end) { - if ((start <= (u32) _stext && end >= (u32) _end) - || (start >= (u32) _stext && end <= (u32) _end)) + if ((end <= (u32) _end && end >= (u32)_stext) || + (start <= (u32) _end && start >= (u32)_stext)) return IN_KERNEL; return 0; } diff --git a/trunk/arch/blackfin/kernel/traps.c b/trunk/arch/blackfin/kernel/traps.c index ce9981b5339b..fbdf999bd2b5 100644 --- a/trunk/arch/blackfin/kernel/traps.c +++ b/trunk/arch/blackfin/kernel/traps.c @@ -670,8 +670,8 @@ void dump_bfin_regs(struct pt_regs *fp, void *retaddr) printk("\n"); } else printk("\n" KERN_NOTICE - "Cannot look at the [PC] for it is" - " in unreadable memory - sorry\n"); + "Cannot look at the [PC] <%p> for it is" + " in unreadable memory - sorry\n", retaddr); printk(KERN_NOTICE "\n" KERN_NOTICE "SEQUENCER STATUS:\n"); printk(KERN_NOTICE " SEQSTAT: %08lx IPEND: %04lx SYSCFG: %04lx\n", diff --git a/trunk/arch/blackfin/mach-common/cplbmgr.S b/trunk/arch/blackfin/mach-common/cplbmgr.S index 946703ef48ff..6f909cbfac7b 100644 --- a/trunk/arch/blackfin/mach-common/cplbmgr.S +++ b/trunk/arch/blackfin/mach-common/cplbmgr.S @@ -73,7 +73,7 @@ ENTRY(_cplb_mgr) /* ICPLB Miss Exception. We need to choose one of the * currently-installed CPLBs, and replace it with one * from the configuration table. - */ + */ P4.L = LO(ICPLB_FAULT_ADDR); P4.H = HI(ICPLB_FAULT_ADDR); @@ -222,7 +222,7 @@ ENTRY(_cplb_mgr) /* See if failed address > start address */ CC = R4 <= R0(IU); - IF !CC JUMP .Linext; + IF !CC JUMP .Linext; /* extract page size (17:16)*/ R3 = EXTRACT(R2, R1.L) (Z); @@ -271,16 +271,27 @@ ENTRY(_cplb_mgr) /* FAILED CASES*/ .Lno_page_in_table: - ( R7:4,P5:3 ) = [SP++]; R0 = CPLB_NO_ADDR_MATCH; - RTS; + JUMP .Lfail_ret; + .Lall_locked: - ( R7:4,P5:3 ) = [SP++]; R0 = CPLB_NO_UNLOCKED; - RTS; + JUMP .Lfail_ret; + .Lprot_violation: - ( R7:4,P5:3 ) = [SP++]; R0 = CPLB_PROT_VIOL; + +.Lfail_ret: + /* Make sure we turn protection/cache back on, even in the failing case */ + BITSET(R5,ENICPLB_P); + CLI R2; + SSYNC; /* SSYNC required before writing to IMEM_CONTROL. */ + .align 8; + [P4] = R5; + SSYNC; + STI R2; + + ( R7:4,P5:3 ) = [SP++]; RTS; .Ldcplb_write: