* [PATCH] powerpc: POWER7 optimised copy_to_user/copy_from_user using VMX
From: Anton Blanchard @ 2011-12-08 6:11 UTC (permalink / raw)
To: Michael Neuling; +Cc: paulus, sukadev, linuxppc-dev
In-Reply-To: <5188.1323323649@neuling.org>
Implement a POWER7 optimised copy_to_user/copy_from_user using VMX.
For large aligned copies this new loop is over 10% faster, and for
large unaligned copies it is over 200% faster.
If we take a fault we fall back to the old version, this keeps
things relatively simple and easy to verify.
On POWER7 unaligned stores rarely slow down - they only flush when
a store crosses a 4KB page boundary. Furthermore this flush is
handled completely in hardware and should be 20-30 cycles.
Unaligned loads on the other hand flush much more often - whenever
crossing a 128 byte cache line, or a 32 byte sector if either sector
is an L1 miss.
Considering this information we really want to get the loads aligned
and not worry about the alignment of the stores. Microbenchmarks
confirm that this approach is much faster than the current unaligned
copy loop that uses shifts and rotates to ensure both loads and
stores are aligned.
We also want to try and do the stores in cacheline aligned, cacheline
sized chunks. If the store queue is unable to merge an entire
cacheline of stores then the L2 cache will have to do a
read/modify/write. Even worse, we will serialise this with the stores
in the next iteration of the copy loop since both iterations hit
the same cacheline.
Based on this, the new loop does the following things:
1 - 127 bytes
Get the source 8 byte aligned and use 8 byte loads and stores. Pretty
boring and similar to how the current loop works.
128 - 4095 bytes
Get the source 8 byte aligned and use 8 byte loads and stores,
1 cacheline at a time. We aren't doing the stores in cacheline
aligned chunks so we will potentially serialise once per cacheline.
Even so it is much better than the loop we have today.
4096 - bytes
If both source and destination have the same alignment get them both
16 byte aligned, then get the destination cacheline aligned. Do
cacheline sized loads and stores using VMX.
If source and destination do not have the same alignment, we get the
destination cacheline aligned, and use permute to do aligned loads.
In both cases the VMX loop should be optimal - we always do aligned
loads and stores and are always doing stores in cacheline aligned,
cacheline sized chunks.
To be able to use VMX we must be careful about interrupts and
sleeping. We don't use the VMX loop when in an interrupt (which should
be rare anyway) and we wrap the VMX loop in disable/enable_pagefault
and fall back to the existing copy_tofrom_user loop if we do need to
sleep.
The VMX breakpoint of 4096 bytes was chosen using this microbenchmark:
http://ozlabs.org/~anton/junkcode/copy_to_user.c
Since we are using VMX and there is a cost to saving and restoring
the user VMX state there are two broad cases we need to benchmark:
- Best case - userspace never uses VMX
- Worst case - userspace always uses VMX
In reality a userspace process will sit somewhere between these two
extremes. Since we need to test both aligned and unaligned copies we
end up with 4 combinations. The point at which the VMX loop begins to
win is:
0% VMX
aligned 2048 bytes
unaligned 2048 bytes
100% VMX
aligned 16384 bytes
unaligned 8192 bytes
Considering this is a microbenchmark, the data is hot in cache and
the VMX loop has better store queue merging properties we set the
breakpoint to 4096 bytes, a little below the unaligned breakpoints.
Some future optimisations we can look at:
- Looking at the perf data, a significant part of the cost when a
task is always using VMX is the extra exception we take to restore
the VMX state. As such we should do something similar to the x86
optimisation that restores FPU state for heavy users. ie:
/*
* If the task has used fpu the last 5 timeslices, just do a full
* restore of the math state immediately to avoid the trap; the
* chances of needing FPU soon are obviously high now
*/
preload_fpu = tsk_used_math(next_p) && next_p->fpu_counter > 5;
and
/*
* fpu_counter contains the number of consecutive context switches
* that the FPU is used. If this is over a threshold, the lazy fpu
* saving becomes unlazy to save the trap. This is an unsigned char
* so that after 256 times the counter wraps and the behavior turns
* lazy again; this to deal with bursty apps that only use FPU for
* a short time
*/
- We could create a paca bit to mirror the VMX enabled MSR bit and check
that first, avoiding multiple calls to calling enable_kernel_altivec.
That should help with iovec based system calls like readv.
- We could have two VMX breakpoints, one for when we know the user VMX
state is loaded into the registers and one when it isn't. This could
be a second bit in the paca so we can calculate the break points quickly.
- One suggestion from Ben was to save and restore the VSX registers
we use inline instead of using enable_kernel_altivec.
Signed-off-by: Anton Blanchard <anton@samba.org>
---
Index: linux-build/arch/powerpc/include/asm/cputable.h
===================================================================
--- linux-build.orig/arch/powerpc/include/asm/cputable.h 2011-09-07 15:15:49.096458526 +1000
+++ linux-build/arch/powerpc/include/asm/cputable.h 2011-12-08 15:38:46.627313507 +1100
@@ -201,6 +201,7 @@ extern const char *powerpc_base_platform
#define CPU_FTR_POPCNTB LONG_ASM_CONST(0x0400000000000000)
#define CPU_FTR_POPCNTD LONG_ASM_CONST(0x0800000000000000)
#define CPU_FTR_ICSWX LONG_ASM_CONST(0x1000000000000000)
+#define CPU_FTR_VMX_COPY LONG_ASM_CONST(0x2000000000000000)
#ifndef __ASSEMBLY__
@@ -425,7 +426,7 @@ extern const char *powerpc_base_platform
CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \
CPU_FTR_DSCR | CPU_FTR_SAO | CPU_FTR_ASYM_SMT | \
CPU_FTR_STCX_CHECKS_ADDRESS | CPU_FTR_POPCNTB | CPU_FTR_POPCNTD | \
- CPU_FTR_ICSWX | CPU_FTR_CFAR | CPU_FTR_HVMODE)
+ CPU_FTR_ICSWX | CPU_FTR_CFAR | CPU_FTR_HVMODE | CPU_FTR_VMX_COPY)
#define CPU_FTRS_CELL (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \
CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \
Index: linux-build/arch/powerpc/lib/copyuser_64.S
===================================================================
--- linux-build.orig/arch/powerpc/lib/copyuser_64.S 2011-09-07 15:15:49.146459439 +1000
+++ linux-build/arch/powerpc/lib/copyuser_64.S 2011-12-08 15:38:42.491238635 +1100
@@ -11,6 +11,12 @@
.align 7
_GLOBAL(__copy_tofrom_user)
+BEGIN_FTR_SECTION
+ nop
+FTR_SECTION_ELSE
+ b __copy_tofrom_user_power7
+ALT_FTR_SECTION_END_IFCLR(CPU_FTR_VMX_COPY)
+_GLOBAL(__copy_tofrom_user_base)
/* first check for a whole page copy on a page boundary */
cmpldi cr1,r5,16
cmpdi cr6,r5,4096
Index: linux-build/arch/powerpc/lib/copyuser_power7.S
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-build/arch/powerpc/lib/copyuser_power7.S 2011-12-08 15:38:44.655277808 +1100
@@ -0,0 +1,669 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Copyright (C) IBM Corporation, 2011
+ *
+ * Author: Anton Blanchard <anton@au.ibm.com>
+ */
+#include <asm/ppc_asm.h>
+
+#define STACKFRAMESIZE 256
+#define STK_REG(i) (112 + ((i)-14)*8)
+
+ .macro err1
+100:
+ .section __ex_table,"a"
+ .align 3
+ .llong 100b,.Ldo_err1
+ .previous
+ .endm
+
+ .macro err2
+200:
+ .section __ex_table,"a"
+ .align 3
+ .llong 200b,.Ldo_err2
+ .previous
+ .endm
+
+ .macro err3
+300:
+ .section __ex_table,"a"
+ .align 3
+ .llong 300b,.Ldo_err3
+ .previous
+ .endm
+
+ .macro err4
+400:
+ .section __ex_table,"a"
+ .align 3
+ .llong 400b,.Ldo_err4
+ .previous
+ .endm
+
+
+.Ldo_err4:
+ ld r16,STK_REG(r16)(r1)
+ ld r15,STK_REG(r15)(r1)
+ ld r14,STK_REG(r14)(r1)
+.Ldo_err3:
+ bl .exit_vmx_copy
+ ld r0,STACKFRAMESIZE+16(r1)
+ mtlr r0
+ b .Lexit
+
+.Ldo_err2:
+ ld r22,STK_REG(r22)(r1)
+ ld r21,STK_REG(r21)(r1)
+ ld r20,STK_REG(r20)(r1)
+ ld r19,STK_REG(r19)(r1)
+ ld r18,STK_REG(r18)(r1)
+ ld r17,STK_REG(r17)(r1)
+ ld r16,STK_REG(r16)(r1)
+ ld r15,STK_REG(r15)(r1)
+ ld r14,STK_REG(r14)(r1)
+.Lexit:
+ addi r1,r1,STACKFRAMESIZE
+.Ldo_err1:
+ ld r3,48(r1)
+ ld r4,56(r1)
+ ld r5,64(r1)
+ b __copy_tofrom_user_base
+
+
+_GLOBAL(__copy_tofrom_user_power7)
+ cmpldi r5,16
+ cmpldi cr1,r5,4096
+
+ std r3,48(r1)
+ std r4,56(r1)
+ std r5,64(r1)
+
+ blt .Lshort_copy
+ bgt cr1,.Lvmx_copy
+
+.Lnonvmx_copy:
+ /* Get the source 8B aligned */
+ neg r6,r4
+ mtocrf 0x01,r6
+ clrldi r6,r6,(64-3)
+
+ bf cr7*4+3,1f
+err1; lbz r0,0(r4)
+ addi r4,r4,1
+err1; stb r0,0(r3)
+ addi r3,r3,1
+
+1: bf cr7*4+2,2f
+err1; lhz r0,0(r4)
+ addi r4,r4,2
+err1; sth r0,0(r3)
+ addi r3,r3,2
+
+2: bf cr7*4+1,3f
+err1; lwz r0,0(r4)
+ addi r4,r4,4
+err1; stw r0,0(r3)
+ addi r3,r3,4
+
+3: sub r5,r5,r6
+ cmpldi r5,128
+ blt 5f
+
+ mflr r0
+ stdu r1,-STACKFRAMESIZE(r1)
+ std r14,STK_REG(r14)(r1)
+ std r15,STK_REG(r15)(r1)
+ std r16,STK_REG(r16)(r1)
+ std r17,STK_REG(r17)(r1)
+ std r18,STK_REG(r18)(r1)
+ std r19,STK_REG(r19)(r1)
+ std r20,STK_REG(r20)(r1)
+ std r21,STK_REG(r21)(r1)
+ std r22,STK_REG(r22)(r1)
+ std r0,STACKFRAMESIZE+16(r1)
+
+ srdi r6,r5,7
+ mtctr r6
+
+ /* Now do cacheline (128B) sized loads and stores. */
+ .align 5
+4:
+err2; ld r0,0(r4)
+err2; ld r6,8(r4)
+err2; ld r7,16(r4)
+err2; ld r8,24(r4)
+err2; ld r9,32(r4)
+err2; ld r10,40(r4)
+err2; ld r11,48(r4)
+err2; ld r12,56(r4)
+err2; ld r14,64(r4)
+err2; ld r15,72(r4)
+err2; ld r16,80(r4)
+err2; ld r17,88(r4)
+err2; ld r18,96(r4)
+err2; ld r19,104(r4)
+err2; ld r20,112(r4)
+err2; ld r21,120(r4)
+ addi r4,r4,128
+err2; std r0,0(r3)
+err2; std r6,8(r3)
+err2; std r7,16(r3)
+err2; std r8,24(r3)
+err2; std r9,32(r3)
+err2; std r10,40(r3)
+err2; std r11,48(r3)
+err2; std r12,56(r3)
+err2; std r14,64(r3)
+err2; std r15,72(r3)
+err2; std r16,80(r3)
+err2; std r17,88(r3)
+err2; std r18,96(r3)
+err2; std r19,104(r3)
+err2; std r20,112(r3)
+err2; std r21,120(r3)
+ addi r3,r3,128
+ bdnz 4b
+
+ clrldi r5,r5,(64-7)
+
+ ld r14,STK_REG(r14)(r1)
+ ld r15,STK_REG(r15)(r1)
+ ld r16,STK_REG(r16)(r1)
+ ld r17,STK_REG(r17)(r1)
+ ld r18,STK_REG(r18)(r1)
+ ld r19,STK_REG(r19)(r1)
+ ld r20,STK_REG(r20)(r1)
+ ld r21,STK_REG(r21)(r1)
+ ld r22,STK_REG(r22)(r1)
+ addi r1,r1,STACKFRAMESIZE
+
+ /* Up to 127B to go */
+5: srdi r6,r5,4
+ mtocrf 0x01,r6
+
+6: bf cr7*4+1,7f
+err1; ld r0,0(r4)
+err1; ld r6,8(r4)
+err1; ld r7,16(r4)
+err1; ld r8,24(r4)
+err1; ld r9,32(r4)
+err1; ld r10,40(r4)
+err1; ld r11,48(r4)
+err1; ld r12,56(r4)
+ addi r4,r4,64
+err1; std r0,0(r3)
+err1; std r6,8(r3)
+err1; std r7,16(r3)
+err1; std r8,24(r3)
+err1; std r9,32(r3)
+err1; std r10,40(r3)
+err1; std r11,48(r3)
+err1; std r12,56(r3)
+ addi r3,r3,64
+
+ /* Up to 63B to go */
+7: bf cr7*4+2,8f
+err1; ld r0,0(r4)
+err1; ld r6,8(r4)
+err1; ld r7,16(r4)
+err1; ld r8,24(r4)
+ addi r4,r4,32
+err1; std r0,0(r3)
+err1; std r6,8(r3)
+err1; std r7,16(r3)
+err1; std r8,24(r3)
+ addi r3,r3,32
+
+ /* Up to 31B to go */
+8: bf cr7*4+3,9f
+err1; ld r0,0(r4)
+err1; ld r6,8(r4)
+ addi r4,r4,16
+err1; std r0,0(r3)
+err1; std r6,8(r3)
+ addi r3,r3,16
+
+9: clrldi r5,r5,(64-4)
+
+ /* Up to 15B to go */
+.Lshort_copy:
+ mtocrf 0x01,r5
+ bf cr7*4+0,12f
+err1; lwz r0,0(r4) /* Less chance of a reject with word ops */
+err1; lwz r6,4(r4)
+ addi r4,r4,8
+err1; stw r0,0(r3)
+err1; stw r6,4(r3)
+ addi r3,r3,8
+
+12: bf cr7*4+1,13f
+err1; lwz r0,0(r4)
+ addi r4,r4,4
+err1; stw r0,0(r3)
+ addi r3,r3,4
+
+13: bf cr7*4+2,14f
+err1; lhz r0,0(r4)
+ addi r4,r4,2
+err1; sth r0,0(r3)
+ addi r3,r3,2
+
+14: bf cr7*4+3,15f
+err1; lbz r0,0(r4)
+err1; stb r0,0(r3)
+
+15: li r3,0
+ blr
+
+.Lunwind_stack_nonvmx_copy:
+ addi r1,r1,STACKFRAMESIZE
+ b .Lnonvmx_copy
+
+.Lvmx_copy:
+ mflr r0
+ std r0,16(r1)
+ stdu r1,-STACKFRAMESIZE(r1)
+ bl .enter_vmx_copy
+ cmpwi r3,0
+ ld r0,STACKFRAMESIZE+16(r1)
+ ld r3,STACKFRAMESIZE+48(r1)
+ ld r4,STACKFRAMESIZE+56(r1)
+ ld r5,STACKFRAMESIZE+64(r1)
+ mtlr r0
+
+ beq .Lunwind_stack_nonvmx_copy
+
+ /*
+ * If source and destination are not relatively aligned we use a
+ * slower permute loop.
+ */
+ xor r6,r4,r3
+ rldicl. r6,r6,0,(64-4)
+ bne .Lvmx_unaligned_copy
+
+ /* Get the destination 16B aligned */
+ neg r6,r3
+ mtocrf 0x01,r6
+ clrldi r6,r6,(64-4)
+
+ bf cr7*4+3,1f
+err3; lbz r0,0(r4)
+ addi r4,r4,1
+err3; stb r0,0(r3)
+ addi r3,r3,1
+
+1: bf cr7*4+2,2f
+err3; lhz r0,0(r4)
+ addi r4,r4,2
+err3; sth r0,0(r3)
+ addi r3,r3,2
+
+2: bf cr7*4+1,3f
+err3; lwz r0,0(r4)
+ addi r4,r4,4
+err3; stw r0,0(r3)
+ addi r3,r3,4
+
+3: bf cr7*4+0,4f
+err3; ld r0,0(r4)
+ addi r4,r4,8
+err3; std r0,0(r3)
+ addi r3,r3,8
+
+4: sub r5,r5,r6
+
+ /* Get the desination 128B aligned */
+ neg r6,r3
+ srdi r7,r6,4
+ mtocrf 0x01,r7
+ clrldi r6,r6,(64-7)
+
+ li r9,16
+ li r10,32
+ li r11,48
+
+ bf cr7*4+3,5f
+err3; lvx vr1,r0,r4
+ addi r4,r4,16
+err3; stvx vr1,r0,r3
+ addi r3,r3,16
+
+5: bf cr7*4+2,6f
+err3; lvx vr1,r0,r4
+err3; lvx vr0,r4,r9
+ addi r4,r4,32
+err3; stvx vr1,r0,r3
+err3; stvx vr0,r3,r9
+ addi r3,r3,32
+
+6: bf cr7*4+1,7f
+err3; lvx vr3,r0,r4
+err3; lvx vr2,r4,r9
+err3; lvx vr1,r4,r10
+err3; lvx vr0,r4,r11
+ addi r4,r4,64
+err3; stvx vr3,r0,r3
+err3; stvx vr2,r3,r9
+err3; stvx vr1,r3,r10
+err3; stvx vr0,r3,r11
+ addi r3,r3,64
+
+7: sub r5,r5,r6
+ srdi r6,r5,7
+
+ std r14,STK_REG(r14)(r1)
+ std r15,STK_REG(r15)(r1)
+ std r16,STK_REG(r16)(r1)
+
+ li r12,64
+ li r14,80
+ li r15,96
+ li r16,112
+
+ mtctr r6
+
+ /*
+ * Now do cacheline sized loads and stores. By this stage the
+ * cacheline stores are also cacheline aligned.
+ */
+ .align 5
+8:
+err4; lvx vr7,r0,r4
+err4; lvx vr6,r4,r9
+err4; lvx vr5,r4,r10
+err4; lvx vr4,r4,r11
+err4; lvx vr3,r4,r12
+err4; lvx vr2,r4,r14
+err4; lvx vr1,r4,r15
+err4; lvx vr0,r4,r16
+ addi r4,r4,128
+err4; stvx vr7,r0,r3
+err4; stvx vr6,r3,r9
+err4; stvx vr5,r3,r10
+err4; stvx vr4,r3,r11
+err4; stvx vr3,r3,r12
+err4; stvx vr2,r3,r14
+err4; stvx vr1,r3,r15
+err4; stvx vr0,r3,r16
+ addi r3,r3,128
+ bdnz 8b
+
+ ld r14,STK_REG(r14)(r1)
+ ld r15,STK_REG(r15)(r1)
+ ld r16,STK_REG(r16)(r1)
+
+ /* Up to 127B to go */
+ clrldi r5,r5,(64-7)
+ srdi r6,r5,4
+ mtocrf 0x01,r6
+
+ bf cr7*4+1,9f
+err3; lvx vr3,r0,r4
+err3; lvx vr2,r4,r9
+err3; lvx vr1,r4,r10
+err3; lvx vr0,r4,r11
+ addi r4,r4,64
+err3; stvx vr3,r0,r3
+err3; stvx vr2,r3,r9
+err3; stvx vr1,r3,r10
+err3; stvx vr0,r3,r11
+ addi r3,r3,64
+
+9: bf cr7*4+2,10f
+err3; lvx vr1,r0,r4
+err3; lvx vr0,r4,r9
+ addi r4,r4,32
+err3; stvx vr1,r0,r3
+err3; stvx vr0,r3,r9
+ addi r3,r3,32
+
+10: bf cr7*4+3,11f
+err3; lvx vr1,r0,r4
+ addi r4,r4,16
+err3; stvx vr1,r0,r3
+ addi r3,r3,16
+
+ /* Up to 15B to go */
+11: clrldi r5,r5,(64-4)
+ mtocrf 0x01,r5
+ bf cr7*4+0,12f
+err3; ld r0,0(r4)
+ addi r4,r4,8
+err3; std r0,0(r3)
+ addi r3,r3,8
+
+12: bf cr7*4+1,13f
+err3; lwz r0,0(r4)
+ addi r4,r4,4
+err3; stw r0,0(r3)
+ addi r3,r3,4
+
+13: bf cr7*4+2,14f
+err3; lhz r0,0(r4)
+ addi r4,r4,2
+err3; sth r0,0(r3)
+ addi r3,r3,2
+
+14: bf cr7*4+3,15f
+err3; lbz r0,0(r4)
+err3; stb r0,0(r3)
+
+15: addi r1,r1,STACKFRAMESIZE
+ b .exit_vmx_copy /* tail call optimise */
+
+.Lvmx_unaligned_copy:
+ /* Get the destination 16B aligned */
+ neg r6,r3
+ mtocrf 0x01,r6
+ clrldi r6,r6,(64-4)
+
+ bf cr7*4+3,1f
+err3; lbz r0,0(r4)
+ addi r4,r4,1
+err3; stb r0,0(r3)
+ addi r3,r3,1
+
+1: bf cr7*4+2,2f
+err3; lhz r0,0(r4)
+ addi r4,r4,2
+err3; sth r0,0(r3)
+ addi r3,r3,2
+
+2: bf cr7*4+1,3f
+err3; lwz r0,0(r4)
+ addi r4,r4,4
+err3; stw r0,0(r3)
+ addi r3,r3,4
+
+3: bf cr7*4+0,4f
+err3; lwz r0,0(r4) /* Less chance of a reject with word ops */
+err3; lwz r7,4(r4)
+ addi r4,r4,8
+err3; stw r0,0(r3)
+err3; stw r7,4(r3)
+ addi r3,r3,8
+
+4: sub r5,r5,r6
+
+ /* Get the desination 128B aligned */
+ neg r6,r3
+ srdi r7,r6,4
+ mtocrf 0x01,r7
+ clrldi r6,r6,(64-7)
+
+ li r9,16
+ li r10,32
+ li r11,48
+
+ lvsl vr16,0,r4 /* Setup permute control vector */
+err3; lvx vr0,0,r4
+ addi r4,r4,16
+
+ bf cr7*4+3,5f
+err3; lvx vr1,r0,r4
+ vperm vr8,vr0,vr1,vr16
+ addi r4,r4,16
+err3; stvx vr8,r0,r3
+ addi r3,r3,16
+ vor vr0,vr1,vr1
+
+5: bf cr7*4+2,6f
+err3; lvx vr1,r0,r4
+ vperm vr8,vr0,vr1,vr16
+err3; lvx vr0,r4,r9
+ vperm vr9,vr1,vr0,vr16
+ addi r4,r4,32
+err3; stvx vr8,r0,r3
+err3; stvx vr9,r3,r9
+ addi r3,r3,32
+
+6: bf cr7*4+1,7f
+err3; lvx vr3,r0,r4
+ vperm vr8,vr0,vr3,vr16
+err3; lvx vr2,r4,r9
+ vperm vr9,vr3,vr2,vr16
+err3; lvx vr1,r4,r10
+ vperm vr10,vr2,vr1,vr16
+err3; lvx vr0,r4,r11
+ vperm vr11,vr1,vr0,vr16
+ addi r4,r4,64
+err3; stvx vr8,r0,r3
+err3; stvx vr9,r3,r9
+err3; stvx vr10,r3,r10
+err3; stvx vr11,r3,r11
+ addi r3,r3,64
+
+7: sub r5,r5,r6
+ srdi r6,r5,7
+
+ std r14,STK_REG(r14)(r1)
+ std r15,STK_REG(r15)(r1)
+ std r16,STK_REG(r16)(r1)
+
+ li r12,64
+ li r14,80
+ li r15,96
+ li r16,112
+
+ mtctr r6
+
+ /*
+ * Now do cacheline sized loads and stores. By this stage the
+ * cacheline stores are also cacheline aligned.
+ */
+ .align 5
+8:
+err4; lvx vr7,r0,r4
+ vperm vr8,vr0,vr7,vr16
+err4; lvx vr6,r4,r9
+ vperm vr9,vr7,vr6,vr16
+err4; lvx vr5,r4,r10
+ vperm vr10,vr6,vr5,vr16
+err4; lvx vr4,r4,r11
+ vperm vr11,vr5,vr4,vr16
+err4; lvx vr3,r4,r12
+ vperm vr12,vr4,vr3,vr16
+err4; lvx vr2,r4,r14
+ vperm vr13,vr3,vr2,vr16
+err4; lvx vr1,r4,r15
+ vperm vr14,vr2,vr1,vr16
+err4; lvx vr0,r4,r16
+ vperm vr15,vr1,vr0,vr16
+ addi r4,r4,128
+err4; stvx vr8,r0,r3
+err4; stvx vr9,r3,r9
+err4; stvx vr10,r3,r10
+err4; stvx vr11,r3,r11
+err4; stvx vr12,r3,r12
+err4; stvx vr13,r3,r14
+err4; stvx vr14,r3,r15
+err4; stvx vr15,r3,r16
+ addi r3,r3,128
+ bdnz 8b
+
+ ld r14,STK_REG(r14)(r1)
+ ld r15,STK_REG(r15)(r1)
+ ld r16,STK_REG(r16)(r1)
+
+ /* Up to 127B to go */
+ clrldi r5,r5,(64-7)
+ srdi r6,r5,4
+ mtocrf 0x01,r6
+
+ bf cr7*4+1,9f
+err3; lvx vr3,r0,r4
+ vperm vr8,vr0,vr3,vr16
+err3; lvx vr2,r4,r9
+ vperm vr9,vr3,vr2,vr16
+err3; lvx vr1,r4,r10
+ vperm vr10,vr2,vr1,vr16
+err3; lvx vr0,r4,r11
+ vperm vr11,vr1,vr0,vr16
+ addi r4,r4,64
+err3; stvx vr8,r0,r3
+err3; stvx vr9,r3,r9
+err3; stvx vr10,r3,r10
+err3; stvx vr11,r3,r11
+ addi r3,r3,64
+
+9: bf cr7*4+2,10f
+err3; lvx vr1,r0,r4
+ vperm vr8,vr0,vr1,vr16
+err3; lvx vr0,r4,r9
+ vperm vr9,vr1,vr0,vr16
+ addi r4,r4,32
+err3; stvx vr8,r0,r3
+err3; stvx vr9,r3,r9
+ addi r3,r3,32
+
+10: bf cr7*4+3,11f
+err3; lvx vr1,r0,r4
+ vperm vr8,vr0,vr1,vr16
+ addi r4,r4,16
+err3; stvx vr8,r0,r3
+ addi r3,r3,16
+
+ /* Up to 15B to go */
+11: clrldi r5,r5,(64-4)
+ addi r4,r4,-16 /* Unwind the +16 load offset */
+ mtocrf 0x01,r5
+ bf cr7*4+0,12f
+err3; lwz r0,0(r4) /* Less chance of a reject with word ops */
+err3; lwz r6,4(r4)
+ addi r4,r4,8
+err3; stw r0,0(r3)
+err3; stw r6,4(r3)
+ addi r3,r3,8
+
+12: bf cr7*4+1,13f
+err3; lwz r0,0(r4)
+ addi r4,r4,4
+err3; stw r0,0(r3)
+ addi r3,r3,4
+
+13: bf cr7*4+2,14f
+err3; lhz r0,0(r4)
+ addi r4,r4,2
+err3; sth r0,0(r3)
+ addi r3,r3,2
+
+14: bf cr7*4+3,15f
+err3; lbz r0,0(r4)
+err3; stb r0,0(r3)
+
+15: addi r1,r1,STACKFRAMESIZE
+ b .exit_vmx_copy /* tail call optimise */
Index: linux-build/arch/powerpc/lib/Makefile
===================================================================
--- linux-build.orig/arch/powerpc/lib/Makefile 2011-09-07 15:15:49.146459439 +1000
+++ linux-build/arch/powerpc/lib/Makefile 2011-12-08 15:17:29.000000000 +1100
@@ -16,7 +16,8 @@ obj-$(CONFIG_HAS_IOMEM) += devres.o
obj-$(CONFIG_PPC64) += copypage_64.o copyuser_64.o \
memcpy_64.o usercopy_64.o mem_64.o string.o \
- checksum_wrappers_64.o hweight_64.o
+ checksum_wrappers_64.o hweight_64.o \
+ copyuser_power7.o copyuser_power7_vmx.o
obj-$(CONFIG_XMON) += sstep.o ldstfp.o
obj-$(CONFIG_KPROBES) += sstep.o ldstfp.o
obj-$(CONFIG_HAVE_HW_BREAKPOINT) += sstep.o ldstfp.o
Index: linux-build/arch/powerpc/lib/copyuser_power7_vmx.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ linux-build/arch/powerpc/lib/copyuser_power7_vmx.c 2011-12-08 15:38:44.639277518 +1100
@@ -0,0 +1,44 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Copyright (C) IBM Corporation, 2011
+ *
+ * Authors: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
+ * Anton Blanchard <anton@au.ibm.com>
+ */
+#include <linux/uaccess.h>
+#include <linux/hardirq.h>
+
+int enter_vmx_copy(void)
+{
+ if (in_interrupt())
+ return 0;
+
+ enable_kernel_altivec();
+
+ pagefault_disable();
+
+ return 1;
+}
+
+/*
+ * This function must return 0 because we tail call optimise when calling
+ * from __copy_tofrom_user_power7 which returns 0 on success.
+ */
+int exit_vmx_copy(void)
+{
+ pagefault_enable();
+ return 0;
+}
^ permalink raw reply
* RE: Multi-OS on P1022RDK Failing
From: Arshad, Farrukh @ 2011-12-08 6:35 UTC (permalink / raw)
To: Scott Wood; +Cc: Linuxppc-dev@lists.ozlabs.org
In-Reply-To: <4EDFD98A.4070803@freescale.com>
Thanks Scott.=20
Fixing cpu 1 release address solved my problem. Also thanks for the CONFIG_=
LOWMEM_SIZE suggestions.
Regards,
Farrukh Arshad
-----Original Message-----
From: Scott Wood [mailto:scottwood@freescale.com]=20
Sent: Thursday, December 08, 2011 2:24 AM
To: Arshad, Farrukh
Cc: Linuxppc-dev@lists.ozlabs.org
Subject: Re: Multi-OS on P1022RDK Failing
On 12/07/2011 08:57 AM, Arshad, Farrukh wrote:
> Core 0 kernel
>=20
> CONFIG_LOWMEM_SIZE =3D 0x10000000
>=20
> CONFIG_PHYSICAL_START =3D 0x00000000
>=20
> =20
>=20
> Core 1 kernel
>=20
> CONFIG_LOWMEM_SIZE =3D 0x10000000
>=20
> CONFIG_PHYSICAL_START =3D 0x10000000
Why are you messing with CONFIG_LOWMEM_SIZE? That adjusts the lowmem/highm=
em split, not the total amount of memory that this instance of Linux will u=
se (though you may get that behavior as a side effect if highmem is disable=
d). U-boot should set the memory node in the device tree based on the boot=
m_low/bootm_size environment variables.
> # Boot from NFS
>=20
> setenv core0nfsbootargs root=3D/dev/nfs nfsroot=3D$serverip:/$core0rootfs=
=20
> ip=3D<dev_ip>::<nfs_server_ip>:::eth0:off rw debug=20
> console=3D$consoledev0,$baudrate maxcpus=3D1
>=20
> setenv core1nfsbootargs root=3D/dev/nfs nfsroot=3D$serverip:/$core1rootfs=
=20
> ip=3D<dev_ip_2>::<nfs_server_ip>:::eth0:off rw debug=20
> console=3D$consoledev0,$baudrate maxcpus=3D1
maxcpus should be unnecessary -- there will only be one cpu in the device t=
ree for each partition.
> My problem is Core 0 kernel is booting successfully but Core 1 kernel=20
> hangs after uncompressing kernel image, and after that I don't see=20
> anything on the console.
>=20
> =20
>=20
> Any thoughts on what I am missing or doing incorrect?
The "cpu 1 release" command should be using the address of the decompressed=
kernel (should be $bootm_low), not where the uImage was loaded.
Also, the two serial ports you're using share an interrupt -- this shouldn'=
t stop kernel message output, but it's going to be a problem for userspace =
usage of the port. You should remove the interrupts property from the seri=
al node in both partitions, so Linux will poll instead.
-Scott
^ permalink raw reply
* [PATCH] powerpc/fsl: update compatiable on fsl 16550 uart nodes
From: Kumar Gala @ 2011-12-08 6:45 UTC (permalink / raw)
To: linuxppc-dev
The Freescale serial port's are pretty much a 16550, however there are
some FSL specific bugs and features. Add a "fsl,ns16550" compatiable
string to allow code to handle those FSL specific issues.
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
---
arch/powerpc/boot/dts/asp834x-redboot.dts | 4 ++--
arch/powerpc/boot/dts/fsl/pq3-duart-0.dtsi | 4 ++--
arch/powerpc/boot/dts/fsl/qoriq-duart-0.dtsi | 4 ++--
arch/powerpc/boot/dts/fsl/qoriq-duart-1.dtsi | 4 ++--
arch/powerpc/boot/dts/gef_ppc9a.dts | 4 ++--
arch/powerpc/boot/dts/gef_sbc310.dts | 4 ++--
arch/powerpc/boot/dts/gef_sbc610.dts | 4 ++--
arch/powerpc/boot/dts/kmeter1.dts | 2 +-
arch/powerpc/boot/dts/kuroboxHD.dts | 4 ++--
arch/powerpc/boot/dts/kuroboxHG.dts | 4 ++--
arch/powerpc/boot/dts/mpc8308_p1m.dts | 4 ++--
arch/powerpc/boot/dts/mpc8308rdb.dts | 4 ++--
arch/powerpc/boot/dts/mpc8313erdb.dts | 4 ++--
arch/powerpc/boot/dts/mpc8315erdb.dts | 4 ++--
arch/powerpc/boot/dts/mpc832x_mds.dts | 4 ++--
arch/powerpc/boot/dts/mpc832x_rdb.dts | 4 ++--
arch/powerpc/boot/dts/mpc8349emitx.dts | 4 ++--
arch/powerpc/boot/dts/mpc8349emitxgp.dts | 4 ++--
arch/powerpc/boot/dts/mpc834x_mds.dts | 4 ++--
arch/powerpc/boot/dts/mpc836x_mds.dts | 4 ++--
arch/powerpc/boot/dts/mpc836x_rdk.dts | 4 ++--
arch/powerpc/boot/dts/mpc8377_mds.dts | 4 ++--
arch/powerpc/boot/dts/mpc8377_rdb.dts | 4 ++--
arch/powerpc/boot/dts/mpc8377_wlan.dts | 4 ++--
arch/powerpc/boot/dts/mpc8378_mds.dts | 4 ++--
arch/powerpc/boot/dts/mpc8378_rdb.dts | 4 ++--
arch/powerpc/boot/dts/mpc8379_mds.dts | 4 ++--
arch/powerpc/boot/dts/mpc8379_rdb.dts | 4 ++--
arch/powerpc/boot/dts/mpc8540ads.dts | 4 ++--
arch/powerpc/boot/dts/mpc8541cds.dts | 4 ++--
arch/powerpc/boot/dts/mpc8555cds.dts | 4 ++--
arch/powerpc/boot/dts/mpc8610_hpcd.dts | 4 ++--
arch/powerpc/boot/dts/mpc8641_hpcn.dts | 4 ++--
arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts | 4 ++--
arch/powerpc/boot/dts/sbc8349.dts | 4 ++--
arch/powerpc/boot/dts/sbc8548.dts | 4 ++--
arch/powerpc/boot/dts/sbc8641d.dts | 4 ++--
arch/powerpc/boot/dts/socrates.dts | 4 ++--
arch/powerpc/boot/dts/storcenter.dts | 4 ++--
arch/powerpc/boot/dts/stxssa8555.dts | 4 ++--
arch/powerpc/boot/dts/tqm8540.dts | 4 ++--
arch/powerpc/boot/dts/tqm8541.dts | 4 ++--
arch/powerpc/boot/dts/tqm8548-bigflash.dts | 4 ++--
arch/powerpc/boot/dts/tqm8548.dts | 4 ++--
arch/powerpc/boot/dts/tqm8555.dts | 4 ++--
arch/powerpc/boot/dts/xcalibur1501.dts | 4 ++--
arch/powerpc/boot/dts/xpedite5200.dts | 4 ++--
arch/powerpc/boot/dts/xpedite5200_xmon.dts | 4 ++--
arch/powerpc/boot/dts/xpedite5301.dts | 4 ++--
arch/powerpc/boot/dts/xpedite5330.dts | 4 ++--
arch/powerpc/boot/dts/xpedite5370.dts | 4 ++--
51 files changed, 101 insertions(+), 101 deletions(-)
diff --git a/arch/powerpc/boot/dts/asp834x-redboot.dts b/arch/powerpc/boot/dts/asp834x-redboot.dts
index 261d10c..227290d 100644
--- a/arch/powerpc/boot/dts/asp834x-redboot.dts
+++ b/arch/powerpc/boot/dts/asp834x-redboot.dts
@@ -256,7 +256,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <400000000>;
interrupts = <9 0x8>;
@@ -266,7 +266,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <400000000>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/fsl/pq3-duart-0.dtsi b/arch/powerpc/boot/dts/fsl/pq3-duart-0.dtsi
index 00fa1fd..5e268fd 100644
--- a/arch/powerpc/boot/dts/fsl/pq3-duart-0.dtsi
+++ b/arch/powerpc/boot/dts/fsl/pq3-duart-0.dtsi
@@ -35,7 +35,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2 0 0>;
@@ -44,7 +44,7 @@ serial0: serial@4500 {
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2 0 0>;
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-duart-0.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-duart-0.dtsi
index 66271e3..225c07b 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-duart-0.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-duart-0.dtsi
@@ -35,7 +35,7 @@
serial0: serial@11c500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x11c500 0x100>;
clock-frequency = <0>;
interrupts = <36 2 0 0>;
@@ -44,7 +44,7 @@ serial0: serial@11c500 {
serial1: serial@11c600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x11c600 0x100>;
clock-frequency = <0>;
interrupts = <36 2 0 0>;
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-duart-1.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-duart-1.dtsi
index cf1a0ac..d23233a 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-duart-1.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-duart-1.dtsi
@@ -35,7 +35,7 @@
serial2: serial@11d500 {
cell-index = <2>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x11d500 0x100>;
clock-frequency = <0>;
interrupts = <37 2 0 0>;
@@ -44,7 +44,7 @@ serial2: serial@11d500 {
serial3: serial@11d600 {
cell-index = <3>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x11d600 0x100>;
clock-frequency = <0>;
interrupts = <37 2 0 0>;
diff --git a/arch/powerpc/boot/dts/gef_ppc9a.dts b/arch/powerpc/boot/dts/gef_ppc9a.dts
index 2266bbb..38dcb96 100644
--- a/arch/powerpc/boot/dts/gef_ppc9a.dts
+++ b/arch/powerpc/boot/dts/gef_ppc9a.dts
@@ -339,7 +339,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <0x2a 0x2>;
@@ -349,7 +349,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <0x1c 0x2>;
diff --git a/arch/powerpc/boot/dts/gef_sbc310.dts b/arch/powerpc/boot/dts/gef_sbc310.dts
index 429e87d..5ab8932 100644
--- a/arch/powerpc/boot/dts/gef_sbc310.dts
+++ b/arch/powerpc/boot/dts/gef_sbc310.dts
@@ -337,7 +337,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <0x2a 0x2>;
@@ -347,7 +347,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <0x1c 0x2>;
diff --git a/arch/powerpc/boot/dts/gef_sbc610.dts b/arch/powerpc/boot/dts/gef_sbc610.dts
index d81201a..d5341f5 100644
--- a/arch/powerpc/boot/dts/gef_sbc610.dts
+++ b/arch/powerpc/boot/dts/gef_sbc610.dts
@@ -337,7 +337,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <0x2a 0x2>;
@@ -347,7 +347,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <0x1c 0x2>;
diff --git a/arch/powerpc/boot/dts/kmeter1.dts b/arch/powerpc/boot/dts/kmeter1.dts
index d16bae1..983aee1 100644
--- a/arch/powerpc/boot/dts/kmeter1.dts
+++ b/arch/powerpc/boot/dts/kmeter1.dts
@@ -80,7 +80,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <264000000>;
interrupts = <9 0x8>;
diff --git a/arch/powerpc/boot/dts/kuroboxHD.dts b/arch/powerpc/boot/dts/kuroboxHD.dts
index 8d725d1..0a45451 100644
--- a/arch/powerpc/boot/dts/kuroboxHD.dts
+++ b/arch/powerpc/boot/dts/kuroboxHD.dts
@@ -84,7 +84,7 @@ XXXX add flash parts, rtc, ??
serial0: serial@80004500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x80004500 0x8>;
clock-frequency = <97553800>;
current-speed = <9600>;
@@ -95,7 +95,7 @@ XXXX add flash parts, rtc, ??
serial1: serial@80004600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x80004600 0x8>;
clock-frequency = <97553800>;
current-speed = <57600>;
diff --git a/arch/powerpc/boot/dts/kuroboxHG.dts b/arch/powerpc/boot/dts/kuroboxHG.dts
index b13a11e..0e758b3 100644
--- a/arch/powerpc/boot/dts/kuroboxHG.dts
+++ b/arch/powerpc/boot/dts/kuroboxHG.dts
@@ -84,7 +84,7 @@ XXXX add flash parts, rtc, ??
serial0: serial@80004500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x80004500 0x8>;
clock-frequency = <130041000>;
current-speed = <9600>;
@@ -95,7 +95,7 @@ XXXX add flash parts, rtc, ??
serial1: serial@80004600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x80004600 0x8>;
clock-frequency = <130041000>;
current-speed = <57600>;
diff --git a/arch/powerpc/boot/dts/mpc8308_p1m.dts b/arch/powerpc/boot/dts/mpc8308_p1m.dts
index 697b3f6..22b0832 100644
--- a/arch/powerpc/boot/dts/mpc8308_p1m.dts
+++ b/arch/powerpc/boot/dts/mpc8308_p1m.dts
@@ -233,7 +233,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <133333333>;
interrupts = <9 0x8>;
@@ -243,7 +243,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <133333333>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8308rdb.dts b/arch/powerpc/boot/dts/mpc8308rdb.dts
index a0bd188..f66d10d 100644
--- a/arch/powerpc/boot/dts/mpc8308rdb.dts
+++ b/arch/powerpc/boot/dts/mpc8308rdb.dts
@@ -208,7 +208,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <133333333>;
interrupts = <9 0x8>;
@@ -218,7 +218,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <133333333>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8313erdb.dts b/arch/powerpc/boot/dts/mpc8313erdb.dts
index ac1eb32..1c836c6 100644
--- a/arch/powerpc/boot/dts/mpc8313erdb.dts
+++ b/arch/powerpc/boot/dts/mpc8313erdb.dts
@@ -261,7 +261,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -271,7 +271,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8315erdb.dts b/arch/powerpc/boot/dts/mpc8315erdb.dts
index 4dd08c3..811848e 100644
--- a/arch/powerpc/boot/dts/mpc8315erdb.dts
+++ b/arch/powerpc/boot/dts/mpc8315erdb.dts
@@ -265,7 +265,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <133333333>;
interrupts = <9 0x8>;
@@ -275,7 +275,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <133333333>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc832x_mds.dts b/arch/powerpc/boot/dts/mpc832x_mds.dts
index 05ad8c9..da9c72d 100644
--- a/arch/powerpc/boot/dts/mpc832x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc832x_mds.dts
@@ -105,7 +105,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -115,7 +115,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc832x_rdb.dts b/arch/powerpc/boot/dts/mpc832x_rdb.dts
index f4fadb23a..ff7b15b 100644
--- a/arch/powerpc/boot/dts/mpc832x_rdb.dts
+++ b/arch/powerpc/boot/dts/mpc832x_rdb.dts
@@ -83,7 +83,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -93,7 +93,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8349emitx.dts b/arch/powerpc/boot/dts/mpc8349emitx.dts
index 505dc84..2608679 100644
--- a/arch/powerpc/boot/dts/mpc8349emitx.dts
+++ b/arch/powerpc/boot/dts/mpc8349emitx.dts
@@ -283,7 +283,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>; // from bootloader
interrupts = <9 0x8>;
@@ -293,7 +293,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>; // from bootloader
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8349emitxgp.dts b/arch/powerpc/boot/dts/mpc8349emitxgp.dts
index eb73211..6cd044d 100644
--- a/arch/powerpc/boot/dts/mpc8349emitxgp.dts
+++ b/arch/powerpc/boot/dts/mpc8349emitxgp.dts
@@ -189,7 +189,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>; // from bootloader
interrupts = <9 0x8>;
@@ -199,7 +199,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>; // from bootloader
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc834x_mds.dts b/arch/powerpc/boot/dts/mpc834x_mds.dts
index 230febb..4552864 100644
--- a/arch/powerpc/boot/dts/mpc834x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc834x_mds.dts
@@ -242,7 +242,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -252,7 +252,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc836x_mds.dts b/arch/powerpc/boot/dts/mpc836x_mds.dts
index 45cfa1c5..c0e450a 100644
--- a/arch/powerpc/boot/dts/mpc836x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc836x_mds.dts
@@ -136,7 +136,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <264000000>;
interrupts = <9 0x8>;
@@ -146,7 +146,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <264000000>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc836x_rdk.dts b/arch/powerpc/boot/dts/mpc836x_rdk.dts
index bdf4459..b6e9aec 100644
--- a/arch/powerpc/boot/dts/mpc836x_rdk.dts
+++ b/arch/powerpc/boot/dts/mpc836x_rdk.dts
@@ -102,7 +102,7 @@
serial0: serial@4500 {
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
interrupts = <9 8>;
interrupt-parent = <&ipic>;
@@ -112,7 +112,7 @@
serial1: serial@4600 {
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
interrupts = <10 8>;
interrupt-parent = <&ipic>;
diff --git a/arch/powerpc/boot/dts/mpc8377_mds.dts b/arch/powerpc/boot/dts/mpc8377_mds.dts
index 855782c..cfccef5 100644
--- a/arch/powerpc/boot/dts/mpc8377_mds.dts
+++ b/arch/powerpc/boot/dts/mpc8377_mds.dts
@@ -276,7 +276,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -286,7 +286,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8377_rdb.dts b/arch/powerpc/boot/dts/mpc8377_rdb.dts
index dbc1b98..353deff 100644
--- a/arch/powerpc/boot/dts/mpc8377_rdb.dts
+++ b/arch/powerpc/boot/dts/mpc8377_rdb.dts
@@ -321,7 +321,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -331,7 +331,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8377_wlan.dts b/arch/powerpc/boot/dts/mpc8377_wlan.dts
index 9ea7830..ef4a305 100644
--- a/arch/powerpc/boot/dts/mpc8377_wlan.dts
+++ b/arch/powerpc/boot/dts/mpc8377_wlan.dts
@@ -304,7 +304,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -314,7 +314,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8378_mds.dts b/arch/powerpc/boot/dts/mpc8378_mds.dts
index f70cf60..538fcb9 100644
--- a/arch/powerpc/boot/dts/mpc8378_mds.dts
+++ b/arch/powerpc/boot/dts/mpc8378_mds.dts
@@ -315,7 +315,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -325,7 +325,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8378_rdb.dts b/arch/powerpc/boot/dts/mpc8378_rdb.dts
index 3447eb9..32333a9 100644
--- a/arch/powerpc/boot/dts/mpc8378_rdb.dts
+++ b/arch/powerpc/boot/dts/mpc8378_rdb.dts
@@ -321,7 +321,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -331,7 +331,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8379_mds.dts b/arch/powerpc/boot/dts/mpc8379_mds.dts
index 645ec51..5387092 100644
--- a/arch/powerpc/boot/dts/mpc8379_mds.dts
+++ b/arch/powerpc/boot/dts/mpc8379_mds.dts
@@ -313,7 +313,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -323,7 +323,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8379_rdb.dts b/arch/powerpc/boot/dts/mpc8379_rdb.dts
index 15560c6..46224c2 100644
--- a/arch/powerpc/boot/dts/mpc8379_rdb.dts
+++ b/arch/powerpc/boot/dts/mpc8379_rdb.dts
@@ -319,7 +319,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -329,7 +329,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8540ads.dts b/arch/powerpc/boot/dts/mpc8540ads.dts
index 8d1bf0f..f99fb11 100644
--- a/arch/powerpc/boot/dts/mpc8540ads.dts
+++ b/arch/powerpc/boot/dts/mpc8540ads.dts
@@ -243,7 +243,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
@@ -253,7 +253,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/mpc8541cds.dts b/arch/powerpc/boot/dts/mpc8541cds.dts
index 87ff965..0f5e939 100644
--- a/arch/powerpc/boot/dts/mpc8541cds.dts
+++ b/arch/powerpc/boot/dts/mpc8541cds.dts
@@ -209,7 +209,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
@@ -219,7 +219,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/mpc8555cds.dts b/arch/powerpc/boot/dts/mpc8555cds.dts
index 5c5614f..fe10438 100644
--- a/arch/powerpc/boot/dts/mpc8555cds.dts
+++ b/arch/powerpc/boot/dts/mpc8555cds.dts
@@ -209,7 +209,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
@@ -219,7 +219,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/mpc8610_hpcd.dts b/arch/powerpc/boot/dts/mpc8610_hpcd.dts
index 83c3218..6a109a0 100644
--- a/arch/powerpc/boot/dts/mpc8610_hpcd.dts
+++ b/arch/powerpc/boot/dts/mpc8610_hpcd.dts
@@ -175,7 +175,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -186,7 +186,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/mpc8641_hpcn.dts b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
index fb8640e..1e8666c 100644
--- a/arch/powerpc/boot/dts/mpc8641_hpcn.dts
+++ b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
@@ -328,7 +328,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -338,7 +338,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <28 2>;
diff --git a/arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts b/arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts
index 8be8e70..fd4cd4d 100644
--- a/arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts
+++ b/arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts
@@ -328,7 +328,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -338,7 +338,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <28 2>;
diff --git a/arch/powerpc/boot/dts/sbc8349.dts b/arch/powerpc/boot/dts/sbc8349.dts
index 0dc90f9..b1e45a8 100644
--- a/arch/powerpc/boot/dts/sbc8349.dts
+++ b/arch/powerpc/boot/dts/sbc8349.dts
@@ -222,7 +222,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -232,7 +232,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/sbc8548.dts b/arch/powerpc/boot/dts/sbc8548.dts
index 94a3322..77be771 100644
--- a/arch/powerpc/boot/dts/sbc8548.dts
+++ b/arch/powerpc/boot/dts/sbc8548.dts
@@ -316,7 +316,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <0x2a 0x2>;
@@ -326,7 +326,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <0x2a 0x2>;
diff --git a/arch/powerpc/boot/dts/sbc8641d.dts b/arch/powerpc/boot/dts/sbc8641d.dts
index ee5538f..56bebce 100644
--- a/arch/powerpc/boot/dts/sbc8641d.dts
+++ b/arch/powerpc/boot/dts/sbc8641d.dts
@@ -347,7 +347,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -357,7 +357,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <28 2>;
diff --git a/arch/powerpc/boot/dts/socrates.dts b/arch/powerpc/boot/dts/socrates.dts
index 38c3540..134a5ff 100644
--- a/arch/powerpc/boot/dts/socrates.dts
+++ b/arch/powerpc/boot/dts/socrates.dts
@@ -199,7 +199,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -209,7 +209,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/storcenter.dts b/arch/powerpc/boot/dts/storcenter.dts
index eab680c..2a55573 100644
--- a/arch/powerpc/boot/dts/storcenter.dts
+++ b/arch/powerpc/boot/dts/storcenter.dts
@@ -74,7 +74,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x20>;
clock-frequency = <97553800>; /* Hz */
current-speed = <115200>;
@@ -85,7 +85,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x20>;
clock-frequency = <97553800>; /* Hz */
current-speed = <9600>;
diff --git a/arch/powerpc/boot/dts/stxssa8555.dts b/arch/powerpc/boot/dts/stxssa8555.dts
index 49efd44..4f166b0 100644
--- a/arch/powerpc/boot/dts/stxssa8555.dts
+++ b/arch/powerpc/boot/dts/stxssa8555.dts
@@ -210,7 +210,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
@@ -220,7 +220,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/tqm8540.dts b/arch/powerpc/boot/dts/tqm8540.dts
index 0a4cedb..ed264d9 100644
--- a/arch/powerpc/boot/dts/tqm8540.dts
+++ b/arch/powerpc/boot/dts/tqm8540.dts
@@ -250,7 +250,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
@@ -260,7 +260,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/tqm8541.dts b/arch/powerpc/boot/dts/tqm8541.dts
index f49d091..9252421 100644
--- a/arch/powerpc/boot/dts/tqm8541.dts
+++ b/arch/powerpc/boot/dts/tqm8541.dts
@@ -224,7 +224,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
@@ -234,7 +234,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/tqm8548-bigflash.dts b/arch/powerpc/boot/dts/tqm8548-bigflash.dts
index 9452c3c..7adab94 100644
--- a/arch/powerpc/boot/dts/tqm8548-bigflash.dts
+++ b/arch/powerpc/boot/dts/tqm8548-bigflash.dts
@@ -305,7 +305,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
current-speed = <115200>;
@@ -316,7 +316,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
current-speed = <115200>;
diff --git a/arch/powerpc/boot/dts/tqm8548.dts b/arch/powerpc/boot/dts/tqm8548.dts
index 619776f..589860e 100644
--- a/arch/powerpc/boot/dts/tqm8548.dts
+++ b/arch/powerpc/boot/dts/tqm8548.dts
@@ -305,7 +305,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
current-speed = <115200>;
@@ -316,7 +316,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
current-speed = <115200>;
diff --git a/arch/powerpc/boot/dts/tqm8555.dts b/arch/powerpc/boot/dts/tqm8555.dts
index 81bad8c..aa6ff0d 100644
--- a/arch/powerpc/boot/dts/tqm8555.dts
+++ b/arch/powerpc/boot/dts/tqm8555.dts
@@ -224,7 +224,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
@@ -234,7 +234,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/xcalibur1501.dts b/arch/powerpc/boot/dts/xcalibur1501.dts
index ac0a617..cc00f4d 100644
--- a/arch/powerpc/boot/dts/xcalibur1501.dts
+++ b/arch/powerpc/boot/dts/xcalibur1501.dts
@@ -531,7 +531,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -542,7 +542,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/xpedite5200.dts b/arch/powerpc/boot/dts/xpedite5200.dts
index c41a80c..8fd7b70 100644
--- a/arch/powerpc/boot/dts/xpedite5200.dts
+++ b/arch/powerpc/boot/dts/xpedite5200.dts
@@ -333,7 +333,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
current-speed = <115200>;
@@ -344,7 +344,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
current-speed = <115200>;
diff --git a/arch/powerpc/boot/dts/xpedite5200_xmon.dts b/arch/powerpc/boot/dts/xpedite5200_xmon.dts
index c0efcbb..0baa828 100644
--- a/arch/powerpc/boot/dts/xpedite5200_xmon.dts
+++ b/arch/powerpc/boot/dts/xpedite5200_xmon.dts
@@ -337,7 +337,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
current-speed = <9600>;
@@ -348,7 +348,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
current-speed = <9600>;
diff --git a/arch/powerpc/boot/dts/xpedite5301.dts b/arch/powerpc/boot/dts/xpedite5301.dts
index db7faf5..53c1c6a 100644
--- a/arch/powerpc/boot/dts/xpedite5301.dts
+++ b/arch/powerpc/boot/dts/xpedite5301.dts
@@ -441,7 +441,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -452,7 +452,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/xpedite5330.dts b/arch/powerpc/boot/dts/xpedite5330.dts
index c364ca6..2152259 100644
--- a/arch/powerpc/boot/dts/xpedite5330.dts
+++ b/arch/powerpc/boot/dts/xpedite5330.dts
@@ -477,7 +477,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -488,7 +488,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/xpedite5370.dts b/arch/powerpc/boot/dts/xpedite5370.dts
index 7a8a4af..11dbda1 100644
--- a/arch/powerpc/boot/dts/xpedite5370.dts
+++ b/arch/powerpc/boot/dts/xpedite5370.dts
@@ -439,7 +439,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -450,7 +450,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
--
1.7.3.4
^ permalink raw reply related
* [PATCH] PPC: Add __SANE_USERSPACE_TYPES__ to asm/types.h for LL64
From: Matt Evans @ 2011-12-08 6:57 UTC (permalink / raw)
To: linuxppc-dev; +Cc: Ingo Molnar, Paul Mackerras
PPC64 uses long long for u64 in the kernel, but powerpc's asm/types.h
prevents 64-bit userland from seeing this definition, instead defaulting
to u64 == long in userspace. Some user programs (e.g. kvmtool) may actually
want LL64, so this patch adds a check for __SANE_USERSPACE_TYPES__ so that,
if defined, int-ll64.h is included instead.
Signed-off-by: Matt Evans <matt@ozlabs.org>
---
arch/powerpc/include/asm/types.h | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/arch/powerpc/include/asm/types.h b/arch/powerpc/include/asm/types.h
index 8947b98..d82e94e 100644
--- a/arch/powerpc/include/asm/types.h
+++ b/arch/powerpc/include/asm/types.h
@@ -5,8 +5,11 @@
* This is here because we used to use l64 for 64bit powerpc
* and we don't want to impact user mode with our change to ll64
* in the kernel.
+ *
+ * However, some user programs are fine with this. They can
+ * flag __SANE_USERSPACE_TYPES__ to get int-ll64.h here.
*/
-#if defined(__powerpc64__) && !defined(__KERNEL__)
+#if !defined(__SANE_USERSPACE_TYPES__) && defined(__powerpc64__) && !defined(__KERNEL__)
# include <asm-generic/int-l64.h>
#else
# include <asm-generic/int-ll64.h>
--
1.7.0.4
^ permalink raw reply related
* [PATCH] powerpc/fsl: Update defconfigs to enable some standard FSL HW features
From: Kumar Gala @ 2011-12-08 7:11 UTC (permalink / raw)
To: linuxppc-dev
corenet64_smp_defconfig:
- enabled rapidio
corenet32_smp_defconfig:
- enabled hugetlbfs, rapidio
mpc85xx_smp_defconfig:
- enabled P1010RDB, hugetlbfs, SPI, SDHC, Crypto/CAAM
mpc85xx_smp_defconfig:
- enabled hugetlbfs, SPI, SDHC, Crypto/CAAM
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
---
arch/powerpc/configs/corenet32_smp_defconfig | 10 ++++++----
arch/powerpc/configs/corenet64_smp_defconfig | 3 ++-
arch/powerpc/configs/mpc85xx_defconfig | 17 ++++++++++++-----
arch/powerpc/configs/mpc85xx_smp_defconfig | 18 +++++++++++++-----
4 files changed, 33 insertions(+), 15 deletions(-)
diff --git a/arch/powerpc/configs/corenet32_smp_defconfig b/arch/powerpc/configs/corenet32_smp_defconfig
index f087de6..c398779 100644
--- a/arch/powerpc/configs/corenet32_smp_defconfig
+++ b/arch/powerpc/configs/corenet32_smp_defconfig
@@ -37,6 +37,8 @@ CONFIG_FSL_LBC=y
CONFIG_PCI=y
CONFIG_PCIEPORTBUS=y
# CONFIG_PCIEASPM is not set
+CONFIG_RAPIDIO=y
+CONFIG_FSL_RIO=y
CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y
@@ -94,12 +96,11 @@ CONFIG_SATA_SIL24=y
CONFIG_SATA_SIL=y
CONFIG_PATA_SIL680=y
CONFIG_NETDEVICES=y
-CONFIG_VITESSE_PHY=y
-CONFIG_FIXED_PHY=y
-CONFIG_NET_ETHERNET=y
+CONFIG_FSL_PQ_MDIO=y
CONFIG_E1000=y
CONFIG_E1000E=y
-CONFIG_FSL_PQ_MDIO=y
+CONFIG_VITESSE_PHY=y
+CONFIG_FIXED_PHY=y
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_KEYBOARD is not set
# CONFIG_INPUT_MOUSE is not set
@@ -155,6 +156,7 @@ CONFIG_VFAT_FS=y
CONFIG_NTFS_FS=y
CONFIG_PROC_KCORE=y
CONFIG_TMPFS=y
+CONFIG_HUGETLBFS=y
CONFIG_JFFS2_FS=y
CONFIG_CRAMFS=y
CONFIG_NFS_FS=y
diff --git a/arch/powerpc/configs/corenet64_smp_defconfig b/arch/powerpc/configs/corenet64_smp_defconfig
index 782822c..006bd94 100644
--- a/arch/powerpc/configs/corenet64_smp_defconfig
+++ b/arch/powerpc/configs/corenet64_smp_defconfig
@@ -23,6 +23,8 @@ CONFIG_P5020_DS=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_BINFMT_MISC=m
+CONFIG_RAPIDIO=y
+CONFIG_FSL_RIO=y
CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y
@@ -57,7 +59,6 @@ CONFIG_MISC_DEVICES=y
CONFIG_EEPROM_LEGACY=y
CONFIG_NETDEVICES=y
CONFIG_DUMMY=y
-CONFIG_NET_ETHERNET=y
CONFIG_INPUT_FF_MEMLESS=m
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_KEYBOARD is not set
diff --git a/arch/powerpc/configs/mpc85xx_defconfig b/arch/powerpc/configs/mpc85xx_defconfig
index a1e5a17..f37a2ab 100644
--- a/arch/powerpc/configs/mpc85xx_defconfig
+++ b/arch/powerpc/configs/mpc85xx_defconfig
@@ -1,5 +1,4 @@
CONFIG_PPC_85xx=y
-CONFIG_PHYS_64BIT=y
CONFIG_EXPERIMENTAL=y
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
@@ -93,15 +92,14 @@ CONFIG_SATA_FSL=y
CONFIG_PATA_ALI=y
CONFIG_NETDEVICES=y
CONFIG_DUMMY=y
+CONFIG_FS_ENET=y
+CONFIG_UCC_GETH=y
+CONFIG_GIANFAR=y
CONFIG_MARVELL_PHY=y
CONFIG_DAVICOM_PHY=y
CONFIG_CICADA_PHY=y
CONFIG_VITESSE_PHY=y
CONFIG_FIXED_PHY=y
-CONFIG_NET_ETHERNET=y
-CONFIG_FS_ENET=y
-CONFIG_GIANFAR=y
-CONFIG_UCC_GETH=y
CONFIG_INPUT_FF_MEMLESS=m
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_KEYBOARD is not set
@@ -120,6 +118,9 @@ CONFIG_NVRAM=y
CONFIG_I2C=y
CONFIG_I2C_CPM=m
CONFIG_I2C_MPC=y
+CONFIG_SPI=y
+CONFIG_SPI_FSL_SPI=y
+CONFIG_SPI_FSL_ESPI=y
CONFIG_GPIO_MPC8XXX=y
# CONFIG_HWMON is not set
CONFIG_VIDEO_OUTPUT_CONTROL=y
@@ -163,6 +164,10 @@ CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
CONFIG_USB_STORAGE=y
+CONFIG_MMC=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_OF_ESDHC=y
CONFIG_EDAC=y
CONFIG_EDAC_MM_EDAC=y
CONFIG_RTC_CLASS=y
@@ -182,6 +187,7 @@ CONFIG_VFAT_FS=y
CONFIG_NTFS_FS=y
CONFIG_PROC_KCORE=y
CONFIG_TMPFS=y
+CONFIG_HUGETLBFS=y
CONFIG_ADFS_FS=m
CONFIG_AFFS_FS=m
CONFIG_HFS_FS=m
@@ -213,4 +219,5 @@ CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA512=y
CONFIG_CRYPTO_AES=y
# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_DEV_FSL_CAAM=y
CONFIG_CRYPTO_DEV_TALITOS=y
diff --git a/arch/powerpc/configs/mpc85xx_smp_defconfig b/arch/powerpc/configs/mpc85xx_smp_defconfig
index dd1e413..abdcd31 100644
--- a/arch/powerpc/configs/mpc85xx_smp_defconfig
+++ b/arch/powerpc/configs/mpc85xx_smp_defconfig
@@ -1,5 +1,4 @@
CONFIG_PPC_85xx=y
-CONFIG_PHYS_64BIT=y
CONFIG_SMP=y
CONFIG_NR_CPUS=8
CONFIG_EXPERIMENTAL=y
@@ -26,6 +25,7 @@ CONFIG_MPC85xx_MDS=y
CONFIG_MPC8536_DS=y
CONFIG_MPC85xx_DS=y
CONFIG_MPC85xx_RDB=y
+CONFIG_P1010_RDB=y
CONFIG_P1022_DS=y
CONFIG_P1023_RDS=y
CONFIG_SOCRATES=y
@@ -94,15 +94,14 @@ CONFIG_SATA_FSL=y
CONFIG_PATA_ALI=y
CONFIG_NETDEVICES=y
CONFIG_DUMMY=y
+CONFIG_FS_ENET=y
+CONFIG_UCC_GETH=y
+CONFIG_GIANFAR=y
CONFIG_MARVELL_PHY=y
CONFIG_DAVICOM_PHY=y
CONFIG_CICADA_PHY=y
CONFIG_VITESSE_PHY=y
CONFIG_FIXED_PHY=y
-CONFIG_NET_ETHERNET=y
-CONFIG_FS_ENET=y
-CONFIG_GIANFAR=y
-CONFIG_UCC_GETH=y
CONFIG_INPUT_FF_MEMLESS=m
# CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_KEYBOARD is not set
@@ -121,6 +120,9 @@ CONFIG_NVRAM=y
CONFIG_I2C=y
CONFIG_I2C_CPM=m
CONFIG_I2C_MPC=y
+CONFIG_SPI=y
+CONFIG_SPI_FSL_SPI=y
+CONFIG_SPI_FSL_ESPI=y
CONFIG_GPIO_MPC8XXX=y
# CONFIG_HWMON is not set
CONFIG_VIDEO_OUTPUT_CONTROL=y
@@ -164,6 +166,10 @@ CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
CONFIG_USB_STORAGE=y
+CONFIG_MMC=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_OF_ESDHC=y
CONFIG_EDAC=y
CONFIG_EDAC_MM_EDAC=y
CONFIG_RTC_CLASS=y
@@ -183,6 +189,7 @@ CONFIG_VFAT_FS=y
CONFIG_NTFS_FS=y
CONFIG_PROC_KCORE=y
CONFIG_TMPFS=y
+CONFIG_HUGETLBFS=y
CONFIG_ADFS_FS=m
CONFIG_AFFS_FS=m
CONFIG_HFS_FS=m
@@ -214,4 +221,5 @@ CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA512=y
CONFIG_CRYPTO_AES=y
# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_DEV_FSL_CAAM=y
CONFIG_CRYPTO_DEV_TALITOS=y
--
1.7.3.4
^ permalink raw reply related
* Re: [PATCH] powerpc: Add TBI PHY node to first MDIO bus
From: Kumar Gala @ 2011-12-08 7:23 UTC (permalink / raw)
To: Andy Fleming; +Cc: netdev, linuxppc-dev, David Miller
In-Reply-To: <1323287457-6085-1-git-send-email-afleming@freescale.com>
On Dec 7, 2011, at 1:50 PM, Andy Fleming wrote:
> Systems which use the fsl_pq_mdio driver need to specify an
> address for TBI PHY transactions such that the address does
> not conflict with any PHYs on the bus (all transactions to
> that address are directed to the onboard TBI PHY). The driver
> used to scan for a free address if no address was specified,
> however this ran into issues when the PHY Lib was fixed so
> that all MDIO transactions were protected by a mutex. As it
> is, the code was meant to serve as a transitional tool until
> the device trees were all updated to specify the TBI address.
>
> The best fix for the mutex issue was to remove the scanning code,
> but it turns out some of the newer SoCs have started to omit
> the tbi-phy node when SGMII is not being used. As such, these
> devices will now fail unless we add a tbi-phy node to the first
> mdio controller.
>
> Signed-off-by: Andy Fleming <afleming@freescale.com>
> ---
>
> This requires fsl_pq_mdio: Clean up tbi address configuration from
> the net tree in order to achieve its full effect.
>
> This needs to go into 3.2.
>
> arch/powerpc/boot/dts/p1010rdb.dts | 5 +++++
> arch/powerpc/boot/dts/p1020rdb.dts | 5 +++++
> arch/powerpc/boot/dts/p1020rdb_camp_core0.dts | 5 +++++
> arch/powerpc/boot/dts/p1021mds.dts | 4 ++++
> arch/powerpc/boot/dts/p1022ds.dts | 4 ++++
> arch/powerpc/boot/dts/p2020rdb.dts | 8 ++++++--
> arch/powerpc/boot/dts/p2020rdb_camp_core0.dts | 4 ++++
> 7 files changed, 33 insertions(+), 2 deletions(-)
applied to merge
- k
^ permalink raw reply
* Re: [PATCH] powerpc/fsl-pci: Allow 64-bit PCIe devices to DMA to any memory address
From: Kumar Gala @ 2011-12-08 7:23 UTC (permalink / raw)
To: Kumar Gala; +Cc: linuxppc-dev
In-Reply-To: <1322719394-24586-1-git-send-email-galak@kernel.crashing.org>
On Dec 1, 2011, at 12:03 AM, Kumar Gala wrote:
> There is an issue on FSL-BookE 64-bit devices (P5020) in which PCIe
> devices that are capable of doing 64-bit DMAs (like an Intel e1000) do
> not function and crash the kernel if we have >4G of memory in the =
system.
>=20
> The reason is that the existing code only sets up one inbound window =
for
> access to system memory across PCIe. That window is limited to a =
32-bit
> address space. So on systems we'll end up utilizing SWIOTLB for dma
> mappings. However SWIOTLB dma ops implement dma_alloc_coherent() as
> dma_direct_alloc_coherent(). Thus we can end up with dma addresses =
that
> are not accessible because of the inbound window limitation.
>=20
> We could possibly set the SWIOTLB alloc_coherent op to
> swiotlb_alloc_coherent() however that does not address the issue since
> the swiotlb_alloc_coherent() will behave almost identical to
> dma_direct_alloc_coherent() since the devices coherent_dma_mask will =
be
> greater than any address allocated by swiotlb_alloc_coherent() and =
thus
> we'll never bounce buffer it into a range that would be dma-able.
>=20
> The easiest and best solution is to just make it so that a 64-bit
> capable device is able to DMA to any internal system address.
>=20
> We accomplish this by opening up a second inbound window that maps all
> of memory above the internal SoC address width so we can set it up to
> access all of the internal SoC address space if needed.
>=20
> We than fixup the dma_ops and dma_offset for PCIe devices with a dma
> mask greater than the maximum internal SoC address.
>=20
> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
> ---
> arch/powerpc/sysdev/fsl_pci.c | 55 =
+++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 55 insertions(+), 0 deletions(-)
applied to merge
- k=
^ permalink raw reply
* Re: [PATCH] sbc834x: put full compat string in board match check
From: Kumar Gala @ 2011-12-08 7:23 UTC (permalink / raw)
To: Paul Gortmaker; +Cc: linuxppc-dev
In-Reply-To: <1323103267-22786-1-git-send-email-paul.gortmaker@windriver.com>
On Dec 5, 2011, at 10:41 AM, Paul Gortmaker wrote:
> The commit 883c2cfc8bcc0fd00c5d9f596fb8870f481b5bda:
>
> "fix of_flat_dt_is_compatible() to match the full compatible string"
>
> causes silent boot death on the sbc8349 board because it was
> just looking for 8349 and not 8349E -- as originally there
> were non-E (no SEC/encryption) chips available. Just add the
> E to the board detection string since all boards I've seen
> were manufactured with the E versions.
>
> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
applied to merge
- k
^ permalink raw reply
* Re: [PATCH] powerpc/fsl: Update defconfigs to enable some standard FSL HW features
From: Kumar Gala @ 2011-12-08 7:28 UTC (permalink / raw)
To: linuxppc-dev
In-Reply-To: <1323328285-11969-1-git-send-email-galak@kernel.crashing.org>
On Dec 8, 2011, at 1:11 AM, Kumar Gala wrote:
> corenet64_smp_defconfig:
> - enabled rapidio
>
> corenet32_smp_defconfig:
> - enabled hugetlbfs, rapidio
>
> mpc85xx_smp_defconfig:
> - enabled P1010RDB, hugetlbfs, SPI, SDHC, Crypto/CAAM
>
> mpc85xx_smp_defconfig:
> - enabled hugetlbfs, SPI, SDHC, Crypto/CAAM
>
> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
> ---
> arch/powerpc/configs/corenet32_smp_defconfig | 10 ++++++----
> arch/powerpc/configs/corenet64_smp_defconfig | 3 ++-
> arch/powerpc/configs/mpc85xx_defconfig | 17 ++++++++++++-----
> arch/powerpc/configs/mpc85xx_smp_defconfig | 18 +++++++++++++-----
> 4 files changed, 33 insertions(+), 15 deletions(-)
applied to merge
- k
^ permalink raw reply
* [git pull] Please pull powerpc.git merge branch
From: Kumar Gala @ 2011-12-08 7:29 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev
[ some bugfixes & defconfig updates for 3.2]
The following changes since commit 49e44064d7e3f24f874a51dd513b83ef9994aa8a:
powerpc/44x: Add mtd ndfc to the ppx44x defconfig (2011-11-25 10:06:00 +1100)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/galak/powerpc.git merge
Andy Fleming (1):
powerpc: Add TBI PHY node to first MDIO bus
Kumar Gala (2):
powerpc/fsl-pci: Allow 64-bit PCIe devices to DMA to any memory address
powerpc/fsl: Update defconfigs to enable some standard FSL HW features
Paul Gortmaker (1):
sbc834x: put full compat string in board match check
arch/powerpc/boot/dts/p1010rdb.dts | 5 ++
arch/powerpc/boot/dts/p1020rdb.dts | 5 ++
arch/powerpc/boot/dts/p1020rdb_camp_core0.dts | 5 ++
arch/powerpc/boot/dts/p1021mds.dts | 4 ++
arch/powerpc/boot/dts/p1022ds.dts | 4 ++
arch/powerpc/boot/dts/p2020rdb.dts | 8 +++-
arch/powerpc/boot/dts/p2020rdb_camp_core0.dts | 4 ++
arch/powerpc/configs/corenet32_smp_defconfig | 10 +++--
arch/powerpc/configs/corenet64_smp_defconfig | 3 +-
arch/powerpc/configs/mpc85xx_defconfig | 17 +++++--
arch/powerpc/configs/mpc85xx_smp_defconfig | 18 ++++++--
arch/powerpc/platforms/83xx/sbc834x.c | 4 +-
arch/powerpc/sysdev/fsl_pci.c | 55 +++++++++++++++++++++++++
13 files changed, 123 insertions(+), 19 deletions(-)
^ permalink raw reply
* Re: [linuxppc-release] [powerpc] boot up problem
From: Kumar Gala @ 2011-12-08 7:46 UTC (permalink / raw)
To: Timur Tabi
Cc: Fleming Andy-AFLEMING, linuxppc-dev@lists.ozlabs.org,
Li Yang-R58472, Jia Hongtao-B38951
In-Reply-To: <2870B32F-1A57-49DC-AD70-D3DB186F3DEA@freescale.com>
On Dec 7, 2011, at 9:13 AM, Timur Tabi wrote:
> On Dec 7, 2011, at 1:27 AM, Jia Hongtao-B38951 <B38951@freescale.com> =
wrote:
>=20
>> Is this the patch you mentioned?
>> http://patchwork.ozlabs.org/patch/128806/
>>=20
>> I applied this patch but the issue was still there.
>=20
> This is not the patch I am talking about. Unfortunately, I can't find =
the right patch in patchwork anywhere.
>=20
> Andy, what about patch "fsl_pq_mdio: Clean up tbi address =
configuration"? =20
I've pulled things into my 'test' branch of powerpc.git. This should =
have the fixes to allow things to boot again.
- k=
^ permalink raw reply
* Re: [PATCH 1/2] [hw-breakpoint] Use generic hw-breakpoint interfaces for new PPC ptrace flags
From: K.Prasad @ 2011-12-08 8:30 UTC (permalink / raw)
To: Thiago Jung Bauermann
Cc: linuxppc-dev, Edjunior Barbosa Machado, David Gibson
In-Reply-To: <1323284517.10808.7.camel@hactar>
On Wed, Dec 07, 2011 at 05:01:57PM -0200, Thiago Jung Bauermann wrote:
> On Thu, 2011-12-01 at 15:50 +0530, K.Prasad wrote:
> > On Mon, Nov 28, 2011 at 02:11:11PM +1100, David Gibson wrote:
> > > [snip]
> > > On Wed, Oct 12, 2011 at 11:09:48PM +0530, K.Prasad wrote:
> > > > diff --git a/Documentation/powerpc/ptrace.txt b/Documentation/powerpc/ptrace.txt
> > > > index f4a5499..f2a7a39 100644
> > > > --- a/Documentation/powerpc/ptrace.txt
> > > > +++ b/Documentation/powerpc/ptrace.txt
> > > > @@ -127,6 +127,22 @@ Some examples of using the structure to:
> > > > p.addr2 = (uint64_t) end_range;
> > > > p.condition_value = 0;
> > > >
> > > > +- set a watchpoint in server processors (BookS)
> > > > +
> > > > + p.version = 1;
> > > > + p.trigger_type = PPC_BREAKPOINT_TRIGGER_RW;
> > > > + p.addr_mode = PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE;
> > > > + or
> > > > + p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
> > > > +
> > > > + p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
> > > > + p.addr = (uint64_t) begin_range;
> > >
> > > You should probably document the alignment constraint on the address
> > > here, too.
> > >
> >
> > Alignment constraints will be learnt by the user-space during runtime.
> > We provide that as part of 'struct ppc_debug_info' in
> > 'data_bp_alignment' field.
> >
> > While the alignment is always 8-bytes for BookS, I think userspace
> > should be left to learn it through PTRACE_PPC_GETHWDEBUGINFO.
>
> Right. In particular, BookE doesn't have alignment constraints.
>
Okay.
> > > > + attr.bp_len = len;
> > > > + ret = modify_user_hw_breakpoint(bp, &attr);
> > > > + if (ret) {
> > > > + ptrace_put_breakpoints(child);
> > > > + return ret;
> > > > + }
> > >
> > > If a bp already exists, you're modifying it. I thought the semantics
> > > of the new interface meant that you shoul return ENOSPC in this case,
> > > and a DEL would be necessary before adding another breakpoint.
> > >
> >
> > I'm not too sure what would be the desired behaviour for this interface,
> > either way is fine with me. I'd like to hear from the GDB folks (copied
> > in this email) to know what would please them.
>
> ENOSPC should be returned. The interface doesn't have provisions for
> modifying breakpoints. The client should delete/create instead of trying
> to modify.
>
> Since PTRACE_PPC_GETHWDEBUGINFO returns the number of available
> breakpoint registers, the client shouldn't (and GDB doesn't) try to set
> more breakpoints than possible.
>
Okay, I will modify the code accordingly.
> > > > @@ -1426,10 +1488,24 @@ static long ppc_del_hwdebug(struct task_struct *child, long addr, long data)
> > > > #else
> > > > if (data != 1)
> > > > return -EINVAL;
> > > > +
> > > > +#ifdef CONFIG_HAVE_HW_BREAKPOINT
> > > > + if (ptrace_get_breakpoints(child) < 0)
> > > > + return -ESRCH;
> > > > +
> > > > + bp = thread->ptrace_bps[0];
> > > > + if (bp) {
> > > > + unregister_hw_breakpoint(bp);
> > > > + thread->ptrace_bps[0] = NULL;
> > > > + }
> > > > + ptrace_put_breakpoints(child);
> > > > + return 0;
> > >
> > > Shouldn't DEL return an error if there is no existing bp.
> > >
> >
> > Same comment as above. We'd like to know what behaviour would help the
> > GDB use this interface better as there's no right or wrong way here.
>
> GDB expects DEL to return ENOENT is there's no existing bp.
>
Fine, here too. We'll return a -ENOENT here.
Thanks for your comments.
-- K.Prasad
^ permalink raw reply
* Re: [PATCH] PPC: Add __SANE_USERSPACE_TYPES__ to asm/types.h for LL64
From: Ingo Molnar @ 2011-12-08 8:16 UTC (permalink / raw)
To: Matt Evans; +Cc: linuxppc-dev, Pekka Enberg, Paul Mackerras
In-Reply-To: <4EE05FC5.9000701@ozlabs.org>
* Matt Evans <matt@ozlabs.org> wrote:
> PPC64 uses long long for u64 in the kernel, but powerpc's asm/types.h
> prevents 64-bit userland from seeing this definition, instead defaulting
> to u64 == long in userspace. Some user programs (e.g. kvmtool) may actually
> want LL64, so this patch adds a check for __SANE_USERSPACE_TYPES__ so that,
> if defined, int-ll64.h is included instead.
>
> Signed-off-by: Matt Evans <matt@ozlabs.org>
> ---
> arch/powerpc/include/asm/types.h | 5 ++++-
> 1 files changed, 4 insertions(+), 1 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/types.h b/arch/powerpc/include/asm/types.h
> index 8947b98..d82e94e 100644
> --- a/arch/powerpc/include/asm/types.h
> +++ b/arch/powerpc/include/asm/types.h
> @@ -5,8 +5,11 @@
> * This is here because we used to use l64 for 64bit powerpc
> * and we don't want to impact user mode with our change to ll64
> * in the kernel.
> + *
> + * However, some user programs are fine with this. They can
> + * flag __SANE_USERSPACE_TYPES__ to get int-ll64.h here.
> */
> -#if defined(__powerpc64__) && !defined(__KERNEL__)
> +#if !defined(__SANE_USERSPACE_TYPES__) && defined(__powerpc64__) && !defined(__KERNEL__)
Acked-by: Ingo Molnar <mingo@elte.hu>
Any other name would work too i guess.
Thanks,
Ingo
^ permalink raw reply
* Re: [PATCH] powerpc/fsl: update compatiable on fsl 16550 uart nodes
From: Martyn Welch @ 2011-12-08 9:53 UTC (permalink / raw)
To: linuxppc-dev
In-Reply-To: <1323326750-6554-1-git-send-email-galak@kernel.crashing.org>
On 08/12/11 06:45, Kumar Gala wrote:
> The Freescale serial port's are pretty much a 16550, however there are
> some FSL specific bugs and features. Add a "fsl,ns16550" compatiable
> string to allow code to handle those FSL specific issues.
>
> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
For what it's worth, for the gef_ppc9a, gef_sbc310 & gef_sbc610:
Acked-by: Martyn Welch <martyn.welch@ge.com>
> ---
> arch/powerpc/boot/dts/asp834x-redboot.dts | 4 ++--
> arch/powerpc/boot/dts/fsl/pq3-duart-0.dtsi | 4 ++--
> arch/powerpc/boot/dts/fsl/qoriq-duart-0.dtsi | 4 ++--
> arch/powerpc/boot/dts/fsl/qoriq-duart-1.dtsi | 4 ++--
> arch/powerpc/boot/dts/gef_ppc9a.dts | 4 ++--
> arch/powerpc/boot/dts/gef_sbc310.dts | 4 ++--
> arch/powerpc/boot/dts/gef_sbc610.dts | 4 ++--
> arch/powerpc/boot/dts/kmeter1.dts | 2 +-
> arch/powerpc/boot/dts/kuroboxHD.dts | 4 ++--
> arch/powerpc/boot/dts/kuroboxHG.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8308_p1m.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8308rdb.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8313erdb.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8315erdb.dts | 4 ++--
> arch/powerpc/boot/dts/mpc832x_mds.dts | 4 ++--
> arch/powerpc/boot/dts/mpc832x_rdb.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8349emitx.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8349emitxgp.dts | 4 ++--
> arch/powerpc/boot/dts/mpc834x_mds.dts | 4 ++--
> arch/powerpc/boot/dts/mpc836x_mds.dts | 4 ++--
> arch/powerpc/boot/dts/mpc836x_rdk.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8377_mds.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8377_rdb.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8377_wlan.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8378_mds.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8378_rdb.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8379_mds.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8379_rdb.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8540ads.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8541cds.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8555cds.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8610_hpcd.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8641_hpcn.dts | 4 ++--
> arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts | 4 ++--
> arch/powerpc/boot/dts/sbc8349.dts | 4 ++--
> arch/powerpc/boot/dts/sbc8548.dts | 4 ++--
> arch/powerpc/boot/dts/sbc8641d.dts | 4 ++--
> arch/powerpc/boot/dts/socrates.dts | 4 ++--
> arch/powerpc/boot/dts/storcenter.dts | 4 ++--
> arch/powerpc/boot/dts/stxssa8555.dts | 4 ++--
> arch/powerpc/boot/dts/tqm8540.dts | 4 ++--
> arch/powerpc/boot/dts/tqm8541.dts | 4 ++--
> arch/powerpc/boot/dts/tqm8548-bigflash.dts | 4 ++--
> arch/powerpc/boot/dts/tqm8548.dts | 4 ++--
> arch/powerpc/boot/dts/tqm8555.dts | 4 ++--
> arch/powerpc/boot/dts/xcalibur1501.dts | 4 ++--
> arch/powerpc/boot/dts/xpedite5200.dts | 4 ++--
> arch/powerpc/boot/dts/xpedite5200_xmon.dts | 4 ++--
> arch/powerpc/boot/dts/xpedite5301.dts | 4 ++--
> arch/powerpc/boot/dts/xpedite5330.dts | 4 ++--
> arch/powerpc/boot/dts/xpedite5370.dts | 4 ++--
> 51 files changed, 101 insertions(+), 101 deletions(-)
>
> diff --git a/arch/powerpc/boot/dts/asp834x-redboot.dts b/arch/powerpc/boot/dts/asp834x-redboot.dts
> index 261d10c..227290d 100644
> --- a/arch/powerpc/boot/dts/asp834x-redboot.dts
> +++ b/arch/powerpc/boot/dts/asp834x-redboot.dts
> @@ -256,7 +256,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <400000000>;
> interrupts = <9 0x8>;
> @@ -266,7 +266,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <400000000>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/fsl/pq3-duart-0.dtsi b/arch/powerpc/boot/dts/fsl/pq3-duart-0.dtsi
> index 00fa1fd..5e268fd 100644
> --- a/arch/powerpc/boot/dts/fsl/pq3-duart-0.dtsi
> +++ b/arch/powerpc/boot/dts/fsl/pq3-duart-0.dtsi
> @@ -35,7 +35,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2 0 0>;
> @@ -44,7 +44,7 @@ serial0: serial@4500 {
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2 0 0>;
> diff --git a/arch/powerpc/boot/dts/fsl/qoriq-duart-0.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-duart-0.dtsi
> index 66271e3..225c07b 100644
> --- a/arch/powerpc/boot/dts/fsl/qoriq-duart-0.dtsi
> +++ b/arch/powerpc/boot/dts/fsl/qoriq-duart-0.dtsi
> @@ -35,7 +35,7 @@
> serial0: serial@11c500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x11c500 0x100>;
> clock-frequency = <0>;
> interrupts = <36 2 0 0>;
> @@ -44,7 +44,7 @@ serial0: serial@11c500 {
> serial1: serial@11c600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x11c600 0x100>;
> clock-frequency = <0>;
> interrupts = <36 2 0 0>;
> diff --git a/arch/powerpc/boot/dts/fsl/qoriq-duart-1.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-duart-1.dtsi
> index cf1a0ac..d23233a 100644
> --- a/arch/powerpc/boot/dts/fsl/qoriq-duart-1.dtsi
> +++ b/arch/powerpc/boot/dts/fsl/qoriq-duart-1.dtsi
> @@ -35,7 +35,7 @@
> serial2: serial@11d500 {
> cell-index = <2>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x11d500 0x100>;
> clock-frequency = <0>;
> interrupts = <37 2 0 0>;
> @@ -44,7 +44,7 @@ serial2: serial@11d500 {
> serial3: serial@11d600 {
> cell-index = <3>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x11d600 0x100>;
> clock-frequency = <0>;
> interrupts = <37 2 0 0>;
> diff --git a/arch/powerpc/boot/dts/gef_ppc9a.dts b/arch/powerpc/boot/dts/gef_ppc9a.dts
> index 2266bbb..38dcb96 100644
> --- a/arch/powerpc/boot/dts/gef_ppc9a.dts
> +++ b/arch/powerpc/boot/dts/gef_ppc9a.dts
> @@ -339,7 +339,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <0x2a 0x2>;
> @@ -349,7 +349,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <0x1c 0x2>;
> diff --git a/arch/powerpc/boot/dts/gef_sbc310.dts b/arch/powerpc/boot/dts/gef_sbc310.dts
> index 429e87d..5ab8932 100644
> --- a/arch/powerpc/boot/dts/gef_sbc310.dts
> +++ b/arch/powerpc/boot/dts/gef_sbc310.dts
> @@ -337,7 +337,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <0x2a 0x2>;
> @@ -347,7 +347,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <0x1c 0x2>;
> diff --git a/arch/powerpc/boot/dts/gef_sbc610.dts b/arch/powerpc/boot/dts/gef_sbc610.dts
> index d81201a..d5341f5 100644
> --- a/arch/powerpc/boot/dts/gef_sbc610.dts
> +++ b/arch/powerpc/boot/dts/gef_sbc610.dts
> @@ -337,7 +337,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <0x2a 0x2>;
> @@ -347,7 +347,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <0x1c 0x2>;
> diff --git a/arch/powerpc/boot/dts/kmeter1.dts b/arch/powerpc/boot/dts/kmeter1.dts
> index d16bae1..983aee1 100644
> --- a/arch/powerpc/boot/dts/kmeter1.dts
> +++ b/arch/powerpc/boot/dts/kmeter1.dts
> @@ -80,7 +80,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <264000000>;
> interrupts = <9 0x8>;
> diff --git a/arch/powerpc/boot/dts/kuroboxHD.dts b/arch/powerpc/boot/dts/kuroboxHD.dts
> index 8d725d1..0a45451 100644
> --- a/arch/powerpc/boot/dts/kuroboxHD.dts
> +++ b/arch/powerpc/boot/dts/kuroboxHD.dts
> @@ -84,7 +84,7 @@ XXXX add flash parts, rtc, ??
> serial0: serial@80004500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x80004500 0x8>;
> clock-frequency = <97553800>;
> current-speed = <9600>;
> @@ -95,7 +95,7 @@ XXXX add flash parts, rtc, ??
> serial1: serial@80004600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x80004600 0x8>;
> clock-frequency = <97553800>;
> current-speed = <57600>;
> diff --git a/arch/powerpc/boot/dts/kuroboxHG.dts b/arch/powerpc/boot/dts/kuroboxHG.dts
> index b13a11e..0e758b3 100644
> --- a/arch/powerpc/boot/dts/kuroboxHG.dts
> +++ b/arch/powerpc/boot/dts/kuroboxHG.dts
> @@ -84,7 +84,7 @@ XXXX add flash parts, rtc, ??
> serial0: serial@80004500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x80004500 0x8>;
> clock-frequency = <130041000>;
> current-speed = <9600>;
> @@ -95,7 +95,7 @@ XXXX add flash parts, rtc, ??
> serial1: serial@80004600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x80004600 0x8>;
> clock-frequency = <130041000>;
> current-speed = <57600>;
> diff --git a/arch/powerpc/boot/dts/mpc8308_p1m.dts b/arch/powerpc/boot/dts/mpc8308_p1m.dts
> index 697b3f6..22b0832 100644
> --- a/arch/powerpc/boot/dts/mpc8308_p1m.dts
> +++ b/arch/powerpc/boot/dts/mpc8308_p1m.dts
> @@ -233,7 +233,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <133333333>;
> interrupts = <9 0x8>;
> @@ -243,7 +243,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <133333333>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc8308rdb.dts b/arch/powerpc/boot/dts/mpc8308rdb.dts
> index a0bd188..f66d10d 100644
> --- a/arch/powerpc/boot/dts/mpc8308rdb.dts
> +++ b/arch/powerpc/boot/dts/mpc8308rdb.dts
> @@ -208,7 +208,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <133333333>;
> interrupts = <9 0x8>;
> @@ -218,7 +218,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <133333333>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc8313erdb.dts b/arch/powerpc/boot/dts/mpc8313erdb.dts
> index ac1eb32..1c836c6 100644
> --- a/arch/powerpc/boot/dts/mpc8313erdb.dts
> +++ b/arch/powerpc/boot/dts/mpc8313erdb.dts
> @@ -261,7 +261,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <9 0x8>;
> @@ -271,7 +271,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc8315erdb.dts b/arch/powerpc/boot/dts/mpc8315erdb.dts
> index 4dd08c3..811848e 100644
> --- a/arch/powerpc/boot/dts/mpc8315erdb.dts
> +++ b/arch/powerpc/boot/dts/mpc8315erdb.dts
> @@ -265,7 +265,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <133333333>;
> interrupts = <9 0x8>;
> @@ -275,7 +275,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <133333333>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc832x_mds.dts b/arch/powerpc/boot/dts/mpc832x_mds.dts
> index 05ad8c9..da9c72d 100644
> --- a/arch/powerpc/boot/dts/mpc832x_mds.dts
> +++ b/arch/powerpc/boot/dts/mpc832x_mds.dts
> @@ -105,7 +105,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <9 0x8>;
> @@ -115,7 +115,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc832x_rdb.dts b/arch/powerpc/boot/dts/mpc832x_rdb.dts
> index f4fadb23a..ff7b15b 100644
> --- a/arch/powerpc/boot/dts/mpc832x_rdb.dts
> +++ b/arch/powerpc/boot/dts/mpc832x_rdb.dts
> @@ -83,7 +83,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <9 0x8>;
> @@ -93,7 +93,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc8349emitx.dts b/arch/powerpc/boot/dts/mpc8349emitx.dts
> index 505dc84..2608679 100644
> --- a/arch/powerpc/boot/dts/mpc8349emitx.dts
> +++ b/arch/powerpc/boot/dts/mpc8349emitx.dts
> @@ -283,7 +283,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>; // from bootloader
> interrupts = <9 0x8>;
> @@ -293,7 +293,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>; // from bootloader
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc8349emitxgp.dts b/arch/powerpc/boot/dts/mpc8349emitxgp.dts
> index eb73211..6cd044d 100644
> --- a/arch/powerpc/boot/dts/mpc8349emitxgp.dts
> +++ b/arch/powerpc/boot/dts/mpc8349emitxgp.dts
> @@ -189,7 +189,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>; // from bootloader
> interrupts = <9 0x8>;
> @@ -199,7 +199,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>; // from bootloader
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc834x_mds.dts b/arch/powerpc/boot/dts/mpc834x_mds.dts
> index 230febb..4552864 100644
> --- a/arch/powerpc/boot/dts/mpc834x_mds.dts
> +++ b/arch/powerpc/boot/dts/mpc834x_mds.dts
> @@ -242,7 +242,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <9 0x8>;
> @@ -252,7 +252,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc836x_mds.dts b/arch/powerpc/boot/dts/mpc836x_mds.dts
> index 45cfa1c5..c0e450a 100644
> --- a/arch/powerpc/boot/dts/mpc836x_mds.dts
> +++ b/arch/powerpc/boot/dts/mpc836x_mds.dts
> @@ -136,7 +136,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <264000000>;
> interrupts = <9 0x8>;
> @@ -146,7 +146,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <264000000>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc836x_rdk.dts b/arch/powerpc/boot/dts/mpc836x_rdk.dts
> index bdf4459..b6e9aec 100644
> --- a/arch/powerpc/boot/dts/mpc836x_rdk.dts
> +++ b/arch/powerpc/boot/dts/mpc836x_rdk.dts
> @@ -102,7 +102,7 @@
>
> serial0: serial@4500 {
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> interrupts = <9 8>;
> interrupt-parent = <&ipic>;
> @@ -112,7 +112,7 @@
>
> serial1: serial@4600 {
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> interrupts = <10 8>;
> interrupt-parent = <&ipic>;
> diff --git a/arch/powerpc/boot/dts/mpc8377_mds.dts b/arch/powerpc/boot/dts/mpc8377_mds.dts
> index 855782c..cfccef5 100644
> --- a/arch/powerpc/boot/dts/mpc8377_mds.dts
> +++ b/arch/powerpc/boot/dts/mpc8377_mds.dts
> @@ -276,7 +276,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <9 0x8>;
> @@ -286,7 +286,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc8377_rdb.dts b/arch/powerpc/boot/dts/mpc8377_rdb.dts
> index dbc1b98..353deff 100644
> --- a/arch/powerpc/boot/dts/mpc8377_rdb.dts
> +++ b/arch/powerpc/boot/dts/mpc8377_rdb.dts
> @@ -321,7 +321,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <9 0x8>;
> @@ -331,7 +331,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc8377_wlan.dts b/arch/powerpc/boot/dts/mpc8377_wlan.dts
> index 9ea7830..ef4a305 100644
> --- a/arch/powerpc/boot/dts/mpc8377_wlan.dts
> +++ b/arch/powerpc/boot/dts/mpc8377_wlan.dts
> @@ -304,7 +304,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <9 0x8>;
> @@ -314,7 +314,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc8378_mds.dts b/arch/powerpc/boot/dts/mpc8378_mds.dts
> index f70cf60..538fcb9 100644
> --- a/arch/powerpc/boot/dts/mpc8378_mds.dts
> +++ b/arch/powerpc/boot/dts/mpc8378_mds.dts
> @@ -315,7 +315,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <9 0x8>;
> @@ -325,7 +325,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc8378_rdb.dts b/arch/powerpc/boot/dts/mpc8378_rdb.dts
> index 3447eb9..32333a9 100644
> --- a/arch/powerpc/boot/dts/mpc8378_rdb.dts
> +++ b/arch/powerpc/boot/dts/mpc8378_rdb.dts
> @@ -321,7 +321,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <9 0x8>;
> @@ -331,7 +331,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc8379_mds.dts b/arch/powerpc/boot/dts/mpc8379_mds.dts
> index 645ec51..5387092 100644
> --- a/arch/powerpc/boot/dts/mpc8379_mds.dts
> +++ b/arch/powerpc/boot/dts/mpc8379_mds.dts
> @@ -313,7 +313,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <9 0x8>;
> @@ -323,7 +323,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc8379_rdb.dts b/arch/powerpc/boot/dts/mpc8379_rdb.dts
> index 15560c6..46224c2 100644
> --- a/arch/powerpc/boot/dts/mpc8379_rdb.dts
> +++ b/arch/powerpc/boot/dts/mpc8379_rdb.dts
> @@ -319,7 +319,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <9 0x8>;
> @@ -329,7 +329,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/mpc8540ads.dts b/arch/powerpc/boot/dts/mpc8540ads.dts
> index 8d1bf0f..f99fb11 100644
> --- a/arch/powerpc/boot/dts/mpc8540ads.dts
> +++ b/arch/powerpc/boot/dts/mpc8540ads.dts
> @@ -243,7 +243,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> interrupts = <42 2>;
> @@ -253,7 +253,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> interrupts = <42 2>;
> diff --git a/arch/powerpc/boot/dts/mpc8541cds.dts b/arch/powerpc/boot/dts/mpc8541cds.dts
> index 87ff965..0f5e939 100644
> --- a/arch/powerpc/boot/dts/mpc8541cds.dts
> +++ b/arch/powerpc/boot/dts/mpc8541cds.dts
> @@ -209,7 +209,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> interrupts = <42 2>;
> @@ -219,7 +219,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> interrupts = <42 2>;
> diff --git a/arch/powerpc/boot/dts/mpc8555cds.dts b/arch/powerpc/boot/dts/mpc8555cds.dts
> index 5c5614f..fe10438 100644
> --- a/arch/powerpc/boot/dts/mpc8555cds.dts
> +++ b/arch/powerpc/boot/dts/mpc8555cds.dts
> @@ -209,7 +209,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> interrupts = <42 2>;
> @@ -219,7 +219,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> interrupts = <42 2>;
> diff --git a/arch/powerpc/boot/dts/mpc8610_hpcd.dts b/arch/powerpc/boot/dts/mpc8610_hpcd.dts
> index 83c3218..6a109a0 100644
> --- a/arch/powerpc/boot/dts/mpc8610_hpcd.dts
> +++ b/arch/powerpc/boot/dts/mpc8610_hpcd.dts
> @@ -175,7 +175,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2>;
> @@ -186,7 +186,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2>;
> diff --git a/arch/powerpc/boot/dts/mpc8641_hpcn.dts b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
> index fb8640e..1e8666c 100644
> --- a/arch/powerpc/boot/dts/mpc8641_hpcn.dts
> +++ b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
> @@ -328,7 +328,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2>;
> @@ -338,7 +338,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <28 2>;
> diff --git a/arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts b/arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts
> index 8be8e70..fd4cd4d 100644
> --- a/arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts
> +++ b/arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts
> @@ -328,7 +328,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2>;
> @@ -338,7 +338,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <28 2>;
> diff --git a/arch/powerpc/boot/dts/sbc8349.dts b/arch/powerpc/boot/dts/sbc8349.dts
> index 0dc90f9..b1e45a8 100644
> --- a/arch/powerpc/boot/dts/sbc8349.dts
> +++ b/arch/powerpc/boot/dts/sbc8349.dts
> @@ -222,7 +222,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <9 0x8>;
> @@ -232,7 +232,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <10 0x8>;
> diff --git a/arch/powerpc/boot/dts/sbc8548.dts b/arch/powerpc/boot/dts/sbc8548.dts
> index 94a3322..77be771 100644
> --- a/arch/powerpc/boot/dts/sbc8548.dts
> +++ b/arch/powerpc/boot/dts/sbc8548.dts
> @@ -316,7 +316,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> interrupts = <0x2a 0x2>;
> @@ -326,7 +326,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> interrupts = <0x2a 0x2>;
> diff --git a/arch/powerpc/boot/dts/sbc8641d.dts b/arch/powerpc/boot/dts/sbc8641d.dts
> index ee5538f..56bebce 100644
> --- a/arch/powerpc/boot/dts/sbc8641d.dts
> +++ b/arch/powerpc/boot/dts/sbc8641d.dts
> @@ -347,7 +347,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2>;
> @@ -357,7 +357,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <28 2>;
> diff --git a/arch/powerpc/boot/dts/socrates.dts b/arch/powerpc/boot/dts/socrates.dts
> index 38c3540..134a5ff 100644
> --- a/arch/powerpc/boot/dts/socrates.dts
> +++ b/arch/powerpc/boot/dts/socrates.dts
> @@ -199,7 +199,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2>;
> @@ -209,7 +209,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2>;
> diff --git a/arch/powerpc/boot/dts/storcenter.dts b/arch/powerpc/boot/dts/storcenter.dts
> index eab680c..2a55573 100644
> --- a/arch/powerpc/boot/dts/storcenter.dts
> +++ b/arch/powerpc/boot/dts/storcenter.dts
> @@ -74,7 +74,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x20>;
> clock-frequency = <97553800>; /* Hz */
> current-speed = <115200>;
> @@ -85,7 +85,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x20>;
> clock-frequency = <97553800>; /* Hz */
> current-speed = <9600>;
> diff --git a/arch/powerpc/boot/dts/stxssa8555.dts b/arch/powerpc/boot/dts/stxssa8555.dts
> index 49efd44..4f166b0 100644
> --- a/arch/powerpc/boot/dts/stxssa8555.dts
> +++ b/arch/powerpc/boot/dts/stxssa8555.dts
> @@ -210,7 +210,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> interrupts = <42 2>;
> @@ -220,7 +220,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> interrupts = <42 2>;
> diff --git a/arch/powerpc/boot/dts/tqm8540.dts b/arch/powerpc/boot/dts/tqm8540.dts
> index 0a4cedb..ed264d9 100644
> --- a/arch/powerpc/boot/dts/tqm8540.dts
> +++ b/arch/powerpc/boot/dts/tqm8540.dts
> @@ -250,7 +250,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> interrupts = <42 2>;
> @@ -260,7 +260,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> interrupts = <42 2>;
> diff --git a/arch/powerpc/boot/dts/tqm8541.dts b/arch/powerpc/boot/dts/tqm8541.dts
> index f49d091..9252421 100644
> --- a/arch/powerpc/boot/dts/tqm8541.dts
> +++ b/arch/powerpc/boot/dts/tqm8541.dts
> @@ -224,7 +224,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> interrupts = <42 2>;
> @@ -234,7 +234,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> interrupts = <42 2>;
> diff --git a/arch/powerpc/boot/dts/tqm8548-bigflash.dts b/arch/powerpc/boot/dts/tqm8548-bigflash.dts
> index 9452c3c..7adab94 100644
> --- a/arch/powerpc/boot/dts/tqm8548-bigflash.dts
> +++ b/arch/powerpc/boot/dts/tqm8548-bigflash.dts
> @@ -305,7 +305,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> current-speed = <115200>;
> @@ -316,7 +316,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> current-speed = <115200>;
> diff --git a/arch/powerpc/boot/dts/tqm8548.dts b/arch/powerpc/boot/dts/tqm8548.dts
> index 619776f..589860e 100644
> --- a/arch/powerpc/boot/dts/tqm8548.dts
> +++ b/arch/powerpc/boot/dts/tqm8548.dts
> @@ -305,7 +305,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> current-speed = <115200>;
> @@ -316,7 +316,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> current-speed = <115200>;
> diff --git a/arch/powerpc/boot/dts/tqm8555.dts b/arch/powerpc/boot/dts/tqm8555.dts
> index 81bad8c..aa6ff0d 100644
> --- a/arch/powerpc/boot/dts/tqm8555.dts
> +++ b/arch/powerpc/boot/dts/tqm8555.dts
> @@ -224,7 +224,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> interrupts = <42 2>;
> @@ -234,7 +234,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>; // reg base, size
> clock-frequency = <0>; // should we fill in in uboot?
> interrupts = <42 2>;
> diff --git a/arch/powerpc/boot/dts/xcalibur1501.dts b/arch/powerpc/boot/dts/xcalibur1501.dts
> index ac0a617..cc00f4d 100644
> --- a/arch/powerpc/boot/dts/xcalibur1501.dts
> +++ b/arch/powerpc/boot/dts/xcalibur1501.dts
> @@ -531,7 +531,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2>;
> @@ -542,7 +542,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2>;
> diff --git a/arch/powerpc/boot/dts/xpedite5200.dts b/arch/powerpc/boot/dts/xpedite5200.dts
> index c41a80c..8fd7b70 100644
> --- a/arch/powerpc/boot/dts/xpedite5200.dts
> +++ b/arch/powerpc/boot/dts/xpedite5200.dts
> @@ -333,7 +333,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> current-speed = <115200>;
> @@ -344,7 +344,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> current-speed = <115200>;
> diff --git a/arch/powerpc/boot/dts/xpedite5200_xmon.dts b/arch/powerpc/boot/dts/xpedite5200_xmon.dts
> index c0efcbb..0baa828 100644
> --- a/arch/powerpc/boot/dts/xpedite5200_xmon.dts
> +++ b/arch/powerpc/boot/dts/xpedite5200_xmon.dts
> @@ -337,7 +337,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> current-speed = <9600>;
> @@ -348,7 +348,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> current-speed = <9600>;
> diff --git a/arch/powerpc/boot/dts/xpedite5301.dts b/arch/powerpc/boot/dts/xpedite5301.dts
> index db7faf5..53c1c6a 100644
> --- a/arch/powerpc/boot/dts/xpedite5301.dts
> +++ b/arch/powerpc/boot/dts/xpedite5301.dts
> @@ -441,7 +441,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2>;
> @@ -452,7 +452,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2>;
> diff --git a/arch/powerpc/boot/dts/xpedite5330.dts b/arch/powerpc/boot/dts/xpedite5330.dts
> index c364ca6..2152259 100644
> --- a/arch/powerpc/boot/dts/xpedite5330.dts
> +++ b/arch/powerpc/boot/dts/xpedite5330.dts
> @@ -477,7 +477,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2>;
> @@ -488,7 +488,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2>;
> diff --git a/arch/powerpc/boot/dts/xpedite5370.dts b/arch/powerpc/boot/dts/xpedite5370.dts
> index 7a8a4af..11dbda1 100644
> --- a/arch/powerpc/boot/dts/xpedite5370.dts
> +++ b/arch/powerpc/boot/dts/xpedite5370.dts
> @@ -439,7 +439,7 @@
> serial0: serial@4500 {
> cell-index = <0>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4500 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2>;
> @@ -450,7 +450,7 @@
> serial1: serial@4600 {
> cell-index = <1>;
> device_type = "serial";
> - compatible = "ns16550";
> + compatible = "fsl,ns16550", "ns16550";
> reg = <0x4600 0x100>;
> clock-frequency = <0>;
> interrupts = <42 2>;
--
Martyn Welch (Lead Software Engineer) | Registered in England and Wales
GE Intelligent Platforms | (3828642) at 100 Barbirolli Square
T +44(0)1327322748 | Manchester, M2 3AB
E martyn.welch@ge.com | VAT:GB 927559189
^ permalink raw reply
* Re: [PATCH 3/3] mtd/nand : workaround for Freescale FCM to support large-page Nand chip
From: LiuShuo @ 2011-12-08 10:44 UTC (permalink / raw)
To: Scott Wood
Cc: Artem.Bityutskiy, linuxppc-dev, linux-kernel, shuo.liu, linux-mtd,
akpm, dwmw2
In-Reply-To: <4EDFBA6D.9080500@freescale.com>
=E4=BA=8E 2011=E5=B9=B412=E6=9C=8808=E6=97=A5 03:11, Scott Wood =E5=86=99=
=E9=81=93:
> On 12/06/2011 09:55 PM, LiuShuo wrote:
>> =E4=BA=8E 2011=E5=B9=B412=E6=9C=8807=E6=97=A5 08:09, Scott Wood =E5=86=
=99=E9=81=93:
>>> On 12/03/2011 10:31 PM, shuo.liu@freescale.com wrote:
>>>> From: Liu Shuo<shuo.liu@freescale.com>
>>>>
>>>> Freescale FCM controller has a 2K size limitation of buffer RAM. In
>>>> order
>>>> to support the Nand flash chip whose page size is larger than 2K byt=
es,
>>>> we read/write 2k data repeatedly by issuing FIR_OP_RB/FIR_OP_WB and =
save
>>>> them to a large buffer.
>>>>
>>>> Signed-off-by: Liu Shuo<shuo.liu@freescale.com>
>>>> ---
>>>> v3:
>>>> -remove page_size of struct fsl_elbc_mtd.
>>>> -do a oob write by NAND_CMD_RNDIN.
>>>>
>>>> drivers/mtd/nand/fsl_elbc_nand.c | 243
>>>> ++++++++++++++++++++++++++++++++++----
>>>> 1 files changed, 218 insertions(+), 25 deletions(-)
>>> What is the plan for bad block marker migration?
>> This patch has been ported to uboot now, I think we can make a special
>> uboot image for bad
>> block marker migration when first use the chip.
> It should not be a special image, and there should be some way to mark
> that the migration has happened. Even if we do the migration in U-Boot=
,
> Linux could check for the marker and if absent, disallow access and tel=
l
> the user to run the migration tool.
>
>>>> @@ -473,13 +568,72 @@ static void fsl_elbc_cmdfunc(struct mtd_info
>>>> *mtd, unsigned int command,
>>>> * write so the HW generates the ECC.
>>>> */
>>>> if (elbc_fcm_ctrl->oob || elbc_fcm_ctrl->column !=3D 0 ||
>>>> - elbc_fcm_ctrl->index !=3D mtd->writesize + mtd->oobsize=
)
>>>> - out_be32(&lbc->fbcr,
>>>> - elbc_fcm_ctrl->index - elbc_fcm_ctrl->column);
>>>> - else
>>>> + elbc_fcm_ctrl->index !=3D mtd->writesize + mtd->oobsize=
) {
>>>> + if (elbc_fcm_ctrl->oob&& mtd->writesize> 2048) {
>>>> + out_be32(&lbc->fbcr, 64);
>>>> + } else {
>>>> + out_be32(&lbc->fbcr, elbc_fcm_ctrl->index
>>>> + - elbc_fcm_ctrl->column);
>>>> + }
>>> We need to limit ourselves to the regions that have actually been
>>> written to in the buffer. fbcr needs to be set separately for first =
and
>>> last subpages, with intermediate subpages having 0, 64, or 2112 as
>>> appropriate. Subpages that are entirely before column or entirely af=
ter
>>> column + index should be skipped.
>> I have considered this case, but I don't think it is useful.
>> 1.There isn't a 'length' parameter in driver interface, although =
we
>> can get it from 'index - column'.
> Right. column is start, and index is end + 1. We have the bounds of
> what has been written.
>
>> 2.To see nand_do_write_oob() in nand_base.c, it fill '0xff' to
>> entire oob area first and write the user data by nand_fill_oob(), then
>> call ecc.write_oob (default is nand_write_oob_std()).
> Do we really want to assume that that's what it will always do?
>
> And if we do want to make such assumptions, we could rip out all usage
> of index/column here, and just handle "oob" and "full page" cases.
The function nand_do_write_ops() in nandbase.c is a Nand internal interfa=
ce.
It always is called when application write to nand flash. (e.g. dd)
In this function, partial page write is dealt with by filling '0xff' to=20
buffer before data copy.
(nand_do_write_oob() is similar)
So I don't think we need to do it in our controller driver again, it=20
should be a job of upper layer.
I found that 'column' for NAND_CMD_SEQIN is always 0 or writesize except=20
for oob write with
NAND_ECC_HW_SYNDROME, but it's not useful case for our controller.
-LiuShuo
> -Scott
^ permalink raw reply
* [PATCH 0/2] Changes to PowerPC ptrace flags using watchpoints - v2
From: K.Prasad @ 2011-12-08 11:12 UTC (permalink / raw)
To: dwg; +Cc: linuxppc-dev, Thiago Jung Bauermann, Edjunior Barbosa Machado
Hi David,
Please find a revised version of the patchset which have
incorporated the various suggestions made by you.
Kindly review the patches and let me know if they look fine.
Changelog - v2
--------------
v1 posted at
http://lists.ozlabs.org/pipermail/linuxppc-dev/2011-August/092463.html
- Introduction of a new version number for the hw-breakpoint structures
dropped.
- The ptrace flag operations are expected to make more precise requests
and suitable error return codes have been added for incorrect
requests.
- Modification of an existing breakpoint is not possible. Request an
delete, followed by set breakpoint request instead.
Thanks,
K.Prasad
^ permalink raw reply
* cpu idle time going backward
From: Andreas Schwab @ 2011-12-08 11:15 UTC (permalink / raw)
To: linuxppc-dev
There seems to be something wrong with cpu idle time accounting at least
on G5. The value as reported in the cpu lines in /proc/stat seems to be
stuck in the interval [100000,210000] for each cpu, jumping back at
random points. Any idea what could be the problem?
Andreas.
--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."
^ permalink raw reply
* [PATCH 1/2] [hw-breakpoint] Use generic hw-breakpoint interfaces for new PPC ptrace flags
From: K.Prasad @ 2011-12-08 11:19 UTC (permalink / raw)
To: dwg; +Cc: linuxppc-dev, Thiago Jung Bauermann, Edjunior Barbosa Machado
In-Reply-To: <20111208111212.GB3720@in.ibm.com>
PPC_PTRACE_GETHWDBGINFO, PPC_PTRACE_SETHWDEBUG and PPC_PTRACE_DELHWDEBUG are
PowerPC specific ptrace flags that use the watchpoint register. While they are
targeted primarily towards BookE users, user-space applications such as GDB
have started using them for BookS too. This patch enables the use of generic
hardware breakpoint interfaces for these new flags.
Apart from the usual benefits of using generic hw-breakpoint interfaces, these
changes allow debuggers (such as GDB) to use a common set of ptrace flags for
their watchpoint needs and allow more precise breakpoint specification (length
of the variable can be specified).
Signed-off-by: K.Prasad <prasad@linux.vnet.ibm.com>
---
Documentation/powerpc/ptrace.txt | 16 ++++++++
arch/powerpc/kernel/ptrace.c | 77 +++++++++++++++++++++++++++++++++++---
2 files changed, 87 insertions(+), 6 deletions(-)
diff --git a/Documentation/powerpc/ptrace.txt b/Documentation/powerpc/ptrace.txt
index f4a5499..f2a7a39 100644
--- a/Documentation/powerpc/ptrace.txt
+++ b/Documentation/powerpc/ptrace.txt
@@ -127,6 +127,22 @@ Some examples of using the structure to:
p.addr2 = (uint64_t) end_range;
p.condition_value = 0;
+- set a watchpoint in server processors (BookS)
+
+ p.version = 1;
+ p.trigger_type = PPC_BREAKPOINT_TRIGGER_RW;
+ p.addr_mode = PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE;
+ or
+ p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
+
+ p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
+ p.addr = (uint64_t) begin_range;
+ /* For PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE addr2 needs to be specified, where
+ * addr2 - addr <= 8 Bytes.
+ */
+ p.addr2 = (uint64_t) end_range;
+ p.condition_value = 0;
+
3. PTRACE_DELHWDEBUG
Takes an integer which identifies an existing breakpoint or watchpoint
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
index 05b7dd2..cd41c78 100644
--- a/arch/powerpc/kernel/ptrace.c
+++ b/arch/powerpc/kernel/ptrace.c
@@ -1339,6 +1339,12 @@ static int set_dac_range(struct task_struct *child,
static long ppc_set_hwdebug(struct task_struct *child,
struct ppc_hw_breakpoint *bp_info)
{
+#ifdef CONFIG_HAVE_HW_BREAKPOINT
+ int ret, len = 0;
+ struct thread_struct *thread = &(child->thread);
+ struct perf_event *bp;
+ struct perf_event_attr attr;
+#endif /* CONFIG_HAVE_HW_BREAKPOINT */
#ifndef CONFIG_PPC_ADV_DEBUG_REGS
unsigned long dabr;
#endif
@@ -1382,13 +1388,9 @@ static long ppc_set_hwdebug(struct task_struct *child,
*/
if ((bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_RW) == 0 ||
(bp_info->trigger_type & ~PPC_BREAKPOINT_TRIGGER_RW) != 0 ||
- bp_info->addr_mode != PPC_BREAKPOINT_MODE_EXACT ||
bp_info->condition_mode != PPC_BREAKPOINT_CONDITION_NONE)
return -EINVAL;
- if (child->thread.dabr)
- return -ENOSPC;
-
if ((unsigned long)bp_info->addr >= TASK_SIZE)
return -EIO;
@@ -1398,15 +1400,63 @@ static long ppc_set_hwdebug(struct task_struct *child,
dabr |= DABR_DATA_READ;
if (bp_info->trigger_type & PPC_BREAKPOINT_TRIGGER_WRITE)
dabr |= DABR_DATA_WRITE;
+#ifdef CONFIG_HAVE_HW_BREAKPOINT
+ if (ptrace_get_breakpoints(child) < 0)
+ return -ESRCH;
- child->thread.dabr = dabr;
+ /*
+ * Check if the request is for 'range' breakpoints. We can
+ * support it if range < 8 bytes.
+ */
+ if (bp_info->addr_mode == PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE) {
+ len = bp_info->addr2 - bp_info->addr;
+ } else if (bp_info->addr_mode != PPC_BREAKPOINT_MODE_EXACT) {
+ ptrace_put_breakpoints(child);
+ return -EINVAL;
+ }
+ bp = thread->ptrace_bps[0];
+ if (bp) {
+ ptrace_put_breakpoints(child);
+ return -ENOSPC;
+ }
+
+ /* Create a new breakpoint request if one doesn't exist already */
+ hw_breakpoint_init(&attr);
+ attr.bp_addr = (unsigned long)bp_info->addr & ~HW_BREAKPOINT_ALIGN;
+ attr.bp_len = len;
+ arch_bp_generic_fields(dabr & (DABR_DATA_WRITE | DABR_DATA_READ),
+ &attr.bp_type);
+
+ thread->ptrace_bps[0] = bp = register_user_hw_breakpoint(&attr,
+ ptrace_triggered, NULL, child);
+ if (IS_ERR(bp)) {
+ thread->ptrace_bps[0] = NULL;
+ ptrace_put_breakpoints(child);
+ return PTR_ERR(bp);
+ }
+ ptrace_put_breakpoints(child);
+ return 1;
+#endif /* CONFIG_HAVE_HW_BREAKPOINT */
+
+ if (bp_info->addr_mode != PPC_BREAKPOINT_MODE_EXACT)
+ return -EINVAL;
+
+ if (child->thread.dabr)
+ return -ENOSPC;
+
+ child->thread.dabr = dabr;
return 1;
#endif /* !CONFIG_PPC_ADV_DEBUG_DVCS */
}
static long ppc_del_hwdebug(struct task_struct *child, long addr, long data)
{
+#ifdef CONFIG_HAVE_HW_BREAKPOINT
+ int ret = 0;
+ struct thread_struct *thread = &(child->thread);
+ struct perf_event *bp;
+#endif /* CONFIG_HAVE_HW_BREAKPOINT */
#ifdef CONFIG_PPC_ADV_DEBUG_REGS
int rc;
@@ -1426,10 +1476,25 @@ static long ppc_del_hwdebug(struct task_struct *child, long addr, long data)
#else
if (data != 1)
return -EINVAL;
+
+#ifdef CONFIG_HAVE_HW_BREAKPOINT
+ if (ptrace_get_breakpoints(child) < 0)
+ return -ESRCH;
+
+ bp = thread->ptrace_bps[0];
+ if (bp) {
+ unregister_hw_breakpoint(bp);
+ thread->ptrace_bps[0] = NULL;
+ } else
+ ret = -ENOENT;
+ ptrace_put_breakpoints(child);
+ return ret;
+#else /* CONFIG_HAVE_HW_BREAKPOINT */
if (child->thread.dabr == 0)
return -ENOENT;
child->thread.dabr = 0;
+#endif /* CONFIG_HAVE_HW_BREAKPOINT */
return 0;
#endif
@@ -1560,7 +1625,7 @@ long arch_ptrace(struct task_struct *child, long request,
dbginfo.data_bp_alignment = 4;
#endif
dbginfo.sizeof_condition = 0;
- dbginfo.features = 0;
+ dbginfo.features = PPC_DEBUG_FEATURE_DATA_BP_RANGE;
#endif /* CONFIG_PPC_ADV_DEBUG_REGS */
if (!access_ok(VERIFY_WRITE, datavp,
--
1.7.4.1
^ permalink raw reply related
* [PATCH 2/2] [PowerPC Book3E] Introduce new ptrace debug feature flag
From: K.Prasad @ 2011-12-08 11:23 UTC (permalink / raw)
To: dwg; +Cc: linuxppc-dev, Thiago Jung Bauermann, Edjunior Barbosa Machado
In-Reply-To: <20111208111212.GB3720@in.ibm.com>
While PPC_PTRACE_SETHWDEBUG ptrace flag in PowerPC accepts
PPC_BREAKPOINT_MODE_EXACT mode of breakpoint, the same is not intimated to the
user-space debuggers (like GDB) who may want to use it. Hence we introduce a
new PPC_DEBUG_FEATURE_DATA_BP_EXACT flag which will be populated on the
"features" member of "struct ppc_debug_info" to advertise support for the
same on Book3E PowerPC processors.
Signed-off-by: K.Prasad <prasad@linux.vnet.ibm.com>
---
arch/powerpc/include/asm/ptrace.h | 1 +
arch/powerpc/kernel/ptrace.c | 1 +
2 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/include/asm/ptrace.h b/arch/powerpc/include/asm/ptrace.h
index 48223f9..cf014f9 100644
--- a/arch/powerpc/include/asm/ptrace.h
+++ b/arch/powerpc/include/asm/ptrace.h
@@ -380,6 +380,7 @@ struct ppc_debug_info {
#define PPC_DEBUG_FEATURE_INSN_BP_MASK 0x0000000000000002
#define PPC_DEBUG_FEATURE_DATA_BP_RANGE 0x0000000000000004
#define PPC_DEBUG_FEATURE_DATA_BP_MASK 0x0000000000000008
+#define PPC_DEBUG_FEATURE_DATA_BP_EXACT 0x0000000000000010
#ifndef __ASSEMBLY__
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
index 18d28b6..71db5a6 100644
--- a/arch/powerpc/kernel/ptrace.c
+++ b/arch/powerpc/kernel/ptrace.c
@@ -1636,6 +1636,7 @@ long arch_ptrace(struct task_struct *child, long request,
#ifdef CONFIG_PPC_ADV_DEBUG_DAC_RANGE
dbginfo.features |=
PPC_DEBUG_FEATURE_DATA_BP_RANGE |
+ PPC_DEBUG_FEATURE_DATA_BP_EXACT |
PPC_DEBUG_FEATURE_DATA_BP_MASK;
#endif
#else /* !CONFIG_PPC_ADV_DEBUG_REGS */
^ permalink raw reply related
* Re: [PATCH 01/16 v3] pmac_zilog: fix unexpected irq
From: Finn Thain @ 2011-12-08 11:26 UTC (permalink / raw)
To: Benjamin Herrenschmidt
Cc: linuxppc-dev, linux-m68k, Geert Uytterhoeven, linux-serial
In-Reply-To: <1323318638.12793.23.camel@pasglop>
On Thu, 8 Dec 2011, Benjamin Herrenschmidt wrote:
> On Thu, 2011-12-08 at 15:20 +1100, Benjamin Herrenschmidt wrote:
>
> > So basic operations seem to work, I've applied the patch to
> > powerpc-next.
Then I guess Geert should not push this for 3.3 -- or does it make no
difference?
> > However, the internal modem on my Pismo powerbook doesn't appear to
> > survive suspend/resume. I'll dig into that and merge a fixup patch
> > asap.
>
> BTW. I applied anyway because suspend/resume was already broken (you
> spotted that we don't clear the suspended flag for example).
>
> Fixing the flag alone helps a bit. We can't use the modem if we
> suspend/resume with the open port,
If the SCC IRQ counters change across suspend/resume, perhaps the modem
itself is not powering up...
> but closing and re-opening works.
Maybe the modem wants a transition on DTR or similar, but it hasn't had
time to initialise when that happens during SCC resumption.
If so, calling pmz_shutdown() then pmz_startup() from the tail of
pmz_resume() without delay should probably fail to revive it...
>
> Lockdep also picked-up a A->B B->A between the port mutex and the pmz
> irq mutex on suspend.
>
> I'll try to fix all these, and will let you know (I may not have time
> today).
Thanks.
Finn
>
> Cheers,
> Ben.
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply
* Re: [PATCH 01/16 v3] pmac_zilog: fix unexpected irq
From: Geert Uytterhoeven @ 2011-12-08 11:54 UTC (permalink / raw)
To: Finn Thain; +Cc: linux-m68k, linuxppc-dev, linux-serial
In-Reply-To: <alpine.LNX.2.00.1112082128330.2357@nippy.intranet>
Hi Finn,
On Thu, Dec 8, 2011 at 12:26, Finn Thain <fthain@telegraphics.com.au> wrote=
:
> On Thu, 8 Dec 2011, Benjamin Herrenschmidt wrote:
>> On Thu, 2011-12-08 at 15:20 +1100, Benjamin Herrenschmidt wrote:
>> > So basic operations seem to work, I've applied the patch to
>> > powerpc-next.
>
> Then I guess Geert should not push this for 3.3 -- or does it make no
> difference?
I do not plan to push it myself, that's why it's not in my for-next branch.
The for-3.3 is just indicative.
Gr{oetje,eeting}s,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k=
.org
In personal conversations with technical people, I call myself a hacker. Bu=
t
when I'm talking to journalists I just say "programmer" or something like t=
hat.
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0 =C2=A0=C2=A0 -- Linus Torvalds
^ permalink raw reply
* Re: [PATCH v3 2/3] hvc_init(): Enforce one-time initialization.
From: Amit Shah @ 2011-12-08 12:08 UTC (permalink / raw)
To: Miche Baker-Harvey
Cc: Stephen Rothwell, xen-devel, Konrad Rzeszutek Wilk, Rusty Russell,
linux-kernel, virtualization, Anton Blanchard, Mike Waychison,
ppc-dev, Greg Kroah-Hartman, Eric Northrup
In-Reply-To: <CAB8Rdar=qOokxZkjQVRmo=zN_f75jPwzU+6=WBRo0g+P7w+pAw@mail.gmail.com>
On (Tue) 06 Dec 2011 [09:05:38], Miche Baker-Harvey wrote:
> Amit,
>
> Ah, indeed. I am not using MSI-X, so virtio_pci::vp_try_to_find_vqs()
> calls vp_request_intx() and sets up an interrupt callback. From
> there, when an interrupt occurs, the stack looks something like this:
>
> virtio_pci::vp_interrupt()
> virtio_pci::vp_vring_interrupt()
> virtio_ring::vring_interrupt()
> vq->vq.callback() <-- in this case, that's virtio_console::control_intr()
> workqueue::schedule_work()
> workqueue::queue_work()
> queue_work_on(get_cpu()) <-- queues the work on the current CPU.
>
> I'm not doing anything to keep multiple control message from being
> sent concurrently to the guest, and we will take those interrupts on
> any CPU. I've confirmed that the two instances of
> handle_control_message() are occurring on different CPUs.
So let's have a new helper, port_lock() that takes the port-specific
spinlock. There has to be a new helper, since the port lock should
depend on the portdev lock being taken too. For the port addition
case, just the portdev lock should be taken. For any other
operations, the port lock should be taken.
My assumption was that we would be able to serialise the work items,
but that will be too restrictive. Taking port locks sounds like a
better idea.
We'd definitely need the port lock in the control work handler. We
might need it in a few more places (like module removal), but we'll
worry about that later.
Does this sound fine?
Amit
^ permalink raw reply
* Re: ibm_newemac tx problem with jumbo frame enabled
From: Prashant Bhole @ 2011-12-08 13:01 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev
In-Reply-To: <1323295383.12793.3.camel@pasglop>
[-- Attachment #1: Type: text/plain, Size: 2238 bytes --]
On Thu, Dec 8, 2011 at 3:33 AM, Benjamin Herrenschmidt <
benh@kernel.crashing.org> wrote:
> On Wed, 2011-12-07 at 13:35 +0530, Prashant Bhole wrote:
> > Still couldn't find anything like fifo overflow...
> > I noticed one more thing, this problem happens only when mtu size on
> > the initiator (the other end) is set to 4088, regardless of any mtu
> > size set for EMAC.
>
> Did you check all the registers that may carry errors ? Nothing showed
> up ? Did you check that things like Pause frames were properly
> negociated on both sides ? Tried playing with the pause and FIFO
> thresholds ?
>
> Other than using the tx timeout to perform resets I don't see a good way
> to fix that problem.
>
> Cheers,
> Ben.
>
>
I checked RX descriptor status and TX descriptor status and ethtool output.
However I don't know about pause packet/frame, how do I check if pause
frames are properly negotiated on both sides?
I need to try changing pause and FIFO thresholds.
ethtool output after disconnection is as follows:
# ethtool -S eth0
NIC statistics:
rx_packets: 330939
rx_bytes: 804963241
tx_packets: 248554
tx_bytes: 798853638
rx_packets_csum: 330716
tx_packets_csum: 179526
tx_undo: 0
rx_dropped_stack: 0
rx_dropped_oom: 0
rx_dropped_error: 0
rx_dropped_resize: 0
rx_dropped_mtu: 0
rx_stopped: 0
rx_bd_errors: 0
rx_bd_overrun: 0
rx_bd_bad_packet: 0
rx_bd_runt_packet: 0
rx_bd_short_event: 0
rx_bd_alignment_error: 0
rx_bd_bad_fcs: 0
rx_bd_packet_too_long: 0
rx_bd_out_of_range: 0
rx_bd_in_range: 0
rx_parity: 0
rx_fifo_overrun: 0
rx_overrun: 0
rx_bad_packet: 0
rx_runt_packet: 0
rx_short_event: 0
rx_alignment_error: 0
rx_bad_fcs: 0
rx_packet_too_long: 0
rx_out_of_range: 0
rx_in_range: 0
tx_dropped: 0
tx_bd_errors: 0
tx_bd_bad_fcs: 0
tx_bd_carrier_loss: 0
tx_bd_excessive_deferral: 0
tx_bd_excessive_collisions: 0
tx_bd_late_collision: 0
tx_bd_multple_collisions: 0
tx_bd_single_collision: 0
tx_bd_underrun: 0
tx_bd_sqe: 0
tx_parity: 0
tx_underrun: 0
tx_sqe: 0
tx_errors: 0
Thanks,
Prashant
[-- Attachment #2: Type: text/html, Size: 2804 bytes --]
^ permalink raw reply
* Re: [PATCH] powerpc: POWER7 optimised copy_to_user/copy_from_user using VMX
From: Segher Boessenkool @ 2011-12-08 13:31 UTC (permalink / raw)
To: Anton Blanchard; +Cc: linuxppc-dev, Michael Neuling, sukadev, paulus
In-Reply-To: <20111208170450.22247a4b@kryten>
>> I hate the idea of having a POWER7 FTR bit. Every loon will (and has
>> tried to in the past) attach every POWER7 related thing to it, rather
>> than thinking about what the feature really is for.
>>
>> What about other processors which could also benefit from this copy
>> loop? Turning on CPU_FTR_POWER7 for them is gonna look a bit silly.
>
> As we discussed online, we could call it CPU_FTR_VMX_COPY and start
> thinking about a better way to solve the CPU feature bit mess.
But then, most CPUs with VMX will not want that, because it is slower
code for them. For things like copy loops it makes perfect sense to
have them tuned per CPU core. For example, this code likes to use
unaligned stores over more complicated shift-and-combine stuff; that
works great on POWER7, but not on much else.
Maybe you should have the various kinds of loop ("source aligned, dest
unaligned, using unaligned stores, 64 bytes") as asm routines, have
some higher level code (which can be runtime patched) select which
to run.
> One idea would be to have a structure of function pointers for each
> CPU that gets runtime patched into the right places, similar to how we
> do some of the MMU fixups.
Sounds good to me :-)
Segher
^ permalink raw reply
* RE: [PATCH] powerpc: POWER7 optimised copy_to_user/copy_from_user using VMX
From: David Laight @ 2011-12-08 14:02 UTC (permalink / raw)
To: Segher Boessenkool, Anton Blanchard
Cc: paulus, Michael Neuling, sukadev, linuxppc-dev
In-Reply-To: <700CAC5A-AD1A-48BA-BD74-CB9FBB325484@kernel.crashing.org>
=20
> > One idea would be to have a structure of function pointers for each
> > CPU that gets runtime patched into the right places,=20
> > similar to how we do some of the MMU fixups.
>=20
> Sounds good to me :-)
Except the indirect jump/call is almost certainly
never predicted - so will be slow.
You might want to patch jump instructions instead.
The same is true for in-kernel memcpy() and other
similar operations.
I actually wonder sometimes what the typical lengths
are for these sort of functions, and whether, in fact,
small lengths dominate - where the fixed costs matter.
David
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox