summaryrefslogtreecommitdiff
path: root/arch/microblaze/kernel (follow)
Commit message (Collapse)AuthorAge
...
| * | of/address: merge of_address_to_resource()Grant Likely2010-07-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Merge common code between PowerPC and Microblaze. This patch also moves the prototype of pci_address_to_pio() out of pci-bridge.h and into prom.h because the only user of pci_address_to_pio() is of_address_to_resource(). Signed-off-by: Grant Likely <grant.likely@secretlab.ca> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> CC: Michal Simek <monstr@monstr.eu> CC: Stephen Rothwell <sfr@canb.auug.org.au>
| * | of/address: merge of_iomap()Grant Likely2010-07-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Merge common code between Microblaze and PowerPC. This patch creates new of_address.h and address.c files to containing address translation and mapping routines. First routine to be moved it of_iomap() Signed-off-by: Grant Likely <grant.likely@secretlab.ca> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> CC: Michal Simek <monstr@monstr.eu> CC: Stephen Rothwell <sfr@canb.auug.org.au>
| * | of/irq: merge irq mapping codeGrant Likely2010-07-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Merge common irq mapping code between PowerPC and Microblaze. This patch merges of_irq_find_parent(), of_irq_map_raw() and of_irq_map_one(). The functions are dependent on one another, so all three are merged in a single patch. Other than cosmetic difference (ie. DBG() vs. pr_debug()), the implementations are identical. of_irq_to_resource() is also merged, but in this case the implementations are different. This patch drops the microblaze version and uses the powerpc implementation unchanged. The microblaze version essentially open-coded irq_of_parse_and_map() which it does not need to do. Therefore the powerpc version is safe to adopt. Signed-off-by: Grant Likely <grant.likely@secretlab.ca> CC: Michal Simek <monstr@monstr.eu> CC: Benjamin Herrenschmidt <benh@kernel.crashing.org> CC: Stephen Rothwell <sfr@canb.auug.org.au>
| * | of/microblaze: strip out of_irq_workarounds codeGrant Likely2010-07-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Microblaze doesn't have any legacy workaround in the device tree irq mapping data. All of the of_irq_workarounds stuff can be dropped Signed-off-by: Grant Likely <grant.likely@secretlab.ca> Cc: Michal Simek <monstr@monstr.eu> Cc: Stephen Rothwell <sfr@canb.auug.org.au>
| * | of/irq: Move irq_of_parse_and_map() to common codeGrant Likely2010-06-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Merge common code between PowerPC and Microblaze. SPARC implements irq_of_parse_and_map(), but the implementation is different, so it does not use this code. Signed-off-by: Grant Likely <grant.likely@secretlab.ca> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Michal Simek <monstr@monstr.eu> Cc: "David S. Miller" <davem@davemloft.net> Cc: Stephen Rothwell <sfr@canb.auug.org.au> Cc: Jeremy Kerr <jeremy.kerr@canonical.com>
* | | microblaze: Add KGDB supportMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Kgdb uses brki r16, 0x18 instruction to call low level _debug_exception function which save current state to pt_regs and call microblaze_kgdb_break function. _debug_exception should be called only from the kernel space. User space calling is not supported because user application debugging uses different handling. pt_regs_to_gdb_regs loads additional special registers which can't be changed * Enable KGDB in Kconfig * Remove ancient not-tested KGDB support * Remove ancient _debug_exception code from entry.S Only MMU KGDB support is supported. Signed-off-by: Michal Simek <monstr@monstr.eu> CC: Jason Wessel <jason.wessel@windriver.com> CC: John Williams <john.williams@petalogix.com> CC: Edgar E. Iglesias <edgar.iglesias@petalogix.com> CC: linux-kernel@vger.kernel.org Acked-by: Jason Wessel <jason.wessel@windriver.com>
* | | microblaze: Support brki rX, 0x18 for user application debuggingMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is the first patch which add support for user application debugging through brki rX, 0x18 vector. This patch has side effect which also remove security issue to use brki rX, 0x18 to freeze kernel. Support for old gdb support via priviledged exception (brk r0, r0) is still there. It will be remove in future. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Remove nop after MSRCLR/SET, MTS, MFS instructionsMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | We need to save instruction and the latest Microblaze shouldn't have any problem with it. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Simplify syscall rutineMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Syscall can be called only from userspace that's why we don't need to check which space kernel come from. Kernel syscall calling is not check and shouldn't come throught this part of code. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Move PT_MODE saving to delay slotMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | We can save one more instruction if PT_MODE is saved in delay slot Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Fix _interrupt functionMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | Save instructions by using delay slot and clear UMS only if kernel comes from user space. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Fix _user_exception functionMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | Saving some instructions. Clear VMS bit if kernel comes from kernel space. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Put together addik instructionsMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | Saving instructions by adding 2/3 addik instructions to one. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Use delay slot in syscall macrosMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | Saving instruction with delay slot usage. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Save kernel mode in delay slotMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | This change save one instruction if kernel comes from kernel space. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Do not mix register saving and mode settingMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | Separate reg saving and mode setting. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Move SAVE_STATE upwardMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | SAVE_STATE macro could be used by other rutines too. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: entry.S: Macro optimizationMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | We are not working with values from MSR that's why we can discard it and use r11 for different purpose without saving/restoring. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Optimize hw exception rutineMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | Remove set_vms because UMS is cleared and VMS is already setup. Optimize function calling which save one additional instruction. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Implement clear_ums macro and fix SAVE_STATE macroMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | VMS is always setup because VM mode was before exception/syscall/interrupt. Kernel continues in kernel mode that's why we have to clear UMS bit if kernel comes from user space. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Remove additional setup for kernel_modeMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PT_MODE stores information if kernel comes from user or kernel space. If come from user space, PT_MODE contains 0. If come from kernel store, PT_MODE contains non zero value. We don't need to save value 1. I am using r1 register which contains non zero value. This change save one additional instruction. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Optimize SAVE_STATE macroMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | SAVE_STATE macro could be used for user_exception or interrupt functions. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Remove additional loadingMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | We don't need to save r0 to PT_R0. It could be additional operation. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Completely remove working with R11 registerMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | We don't need to save R11 register. There is easy way to use only R1 which is saved and restore later. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Do not setup BIP in _debug_exceptionMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | BIP is already setup. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Simplify _debug_exception functionMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Keep together all arguments for send_sig function. Move returning address to delay slot which is executed. Remove additional send_sig loading. I am using IMM part of rtbd instruction with r0. old solution: addik r11, r0, send_sig rtbd r11, 0 nop new solution: rtbd r0, send_sig nop There is one instruction saving. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Optimize SAVE_STATE macroMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It is necessary to setup BIP and EE and clear EIP only for unaligned exception handler. The rest of hw exception handlers don't require it. HW exception occured and we are not in virtual mode. That's why we can do operations protected by EIP. Interrupt, next hw exception or syscall can't occur. EIP is cleared by rted. This change speedup page_fault hw exception handler which is critical path. There is also necessary to save R11 content before flag setup for unaligned exception. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: trivial: Use la insted of addikMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | la is translated to addik by toolchain. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: remove enable_irq from SAVE_STATE macroMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | SAVE_STATE macro is used in hw exceptions high level handling functions. Hw exception doesn't disable IRQ that's why we don't need to reenable it. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Move stack backup to SAVE_STATE macroMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | Remove code duplicity and move it to SAVE_STATE macro. There is no impact on performance. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Move BIP setup to the end of ret_from_trap/ret_from_excMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | We don't need to protect by BIP whole ret_from_trap/ret_from_exc code. Only restoring from user/hw exception should be covered. If BIP is setup, IRQ can't occur. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Remove PER_CPU(KM) variableMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | There is a way howto remove Kernel Mode variable. It is easier to parse UMS bit in MSR to find out if I come from kernel or user space. Loading MSR content should be in one cycle and loading PER_CPU variable depends on memory state. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Optimize clear_vms_ums macroMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | We can save two instruction when MSR_VMS and MSR_UMS are setup in one instruction. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Save and restore r3/r4 in SAVE/RESTORE_REGS macrosMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Save and restore R3/R4 registers in macros. This change help to cleanup entry.S. In ret_from_trap function we are saving returning value from syscall to pt_regs on stack that's why we don't need to save and restore these values before kernel functions (schedule, do_signal). Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Fix VM_ON and VM_OFF macrosMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | Jump behind macro. We don't want to execute nop instruction again. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Do not use _start in vmlinuxMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | _start symbol stores physical address where kernel is. Gdb uses this symbol for their purpose that's why we have to rename it. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Decrease time shifting valuesMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | Lower shifting values ensure that shifted 32bit counter value doesn't exceed 64bit cycle variable too fast. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Do not trace cpu_relax functionMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | IRQsoff tracer requires to protect cpu_idle function to get correct timing report. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Improve ftrace time measuringMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | I had to comment sched_clock generic function because of broken toolchain. It is fine grain timing. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Add stack unwinderSteven J. Magnani2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Implement intelligent backtracing by searching for stack frame creation, and emitting only return addresses. Use print_hex_dump() to display the entire binary kernel stack. Limitation: MMU kernels are not currently able to trace beyond a system trap (interrupt, syscall, etc.). It is the intent of this patch to provide infrastructure that can be extended to add this capability later. Changes from V1: * Removed checks in find_frame_creation() that prevented location of the frame creation instruction in heavily optimized code * Various formatting/commenting/file location tweaks per review comments * Dropped Kconfig option to enable STACKTRACE as something logically separate Signed-off-by: Steven J. Magnani <steve@digidescorp.com>
* | | microblaze: Allow PAGE_SIZE configurationSteven J. Magnani2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Allow developer to configure memory page size at compile time. Larger pages can improve performance on some workloads. Based on PowerPC code. Signed-off-by: Steven J. Magnani <steve@digidescorp.com> Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Trace hardirqsMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | Add trace_hardirqs_off and trace_hardirqs_on to do_IRQ function. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Fix sys_clone syscallMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | sys_clone syscall ignored args which this patch mapped to args which are passing from glibc. Here is the origin problem description. "I ran the static libgcc tests (very few of them are there, they are mostly dynamically linked) and some of them fail with an assertion in fork() system call (tid != pid), I looked at the microblaze/entry.S file and it looks suspicious (ignores arguments 3-5)" Arg mapping should be: glibc ARCH_FORK(...) -> do_fork(...) r5 -> r5 (clone_flags) r6 -> r6 (stack_start, use parent->stack if NULL) pt_regs -> r7 (pt_regs) r7 -> r8 (stack_size) r8 -> r9 (parent_tidptr) r9 -> r10 (child_tidptr) Signed-off-by: John Williams <john.williams@petalogix.com> Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Fix copy_to_user_page macroMichal Simek2010-08-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | copy_to_user_page macro is used in mm/memory.c:access_process_vm function. This function is called from ptrace code (POKETEXT, POKEDATA) which write data to memory. Microblaze handle physical address for caches that's why there is virt_to_phys conversion. There is potential one location which can caused the problem on WB system. The important is take a look at write PTRACEs requests (POKE/TEXT, DATA, USR). Note: Majority of Microblaze PTRACE code is moved to generic location in newer kernel version that's why this solution should work on the newest kernel version too. linux/io.h is in cacheflush because of mm/nommu.c Tested on a WB system - hello world debugging. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | | microblaze: Fix comment for TLBMichal Simek2010-08-02
| |/ |/| | | | | | | | | | | There is wrong comment for TLB. Early printk uartlite console uses TLB 63. Signed-off-by: Michal Simek <monstr@monstr.eu>
* | lmb: rename to memblockYinghai Lu2010-07-14
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | via following scripts FILES=$(find * -type f | grep -vE 'oprofile|[^K]config') sed -i \ -e 's/lmb/memblock/g' \ -e 's/LMB/MEMBLOCK/g' \ $FILES for N in $(find . -name lmb.[ch]); do M=$(echo $N | sed 's/lmb/memblock/g') mv $N $M done and remove some wrong change like lmbench and dlmb etc. also move memblock.c from lib/ to mm/ Suggested-by: Ingo Molnar <mingo@elte.hu> Acked-by: "H. Peter Anvin" <hpa@zytor.com> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Acked-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
* microblaze: Fix sg_dma_len() regressionFUJITA Tomonori2010-06-09
| | | | | | | | | | | | | | | | The commit "asm-generic: add NEED_SG_DMA_LENGTH to define sg_dma_len()" 18e98307de0d746cb0845ebf66535ce2184c25a2 broke microblaze compilation. dma_direct_map_sg() sets sg->dma_length, however microblaze doesn't set NEED_SG_DMA_LENGTH so scatterlist strcutres doesn't include dma_length. sg->dma_length is always equal to sg->length on microblaze. So we don't need to set set dma_length, that is, microblaze can simply use sg->length. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: Michal Simek <monstr@monstr.eu>
* Merge remote branch 'origin' into secretlab/next-devicetreeGrant Likely2010-05-22
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | Merging in current state of Linus' tree to deal with merge conflicts and build failures in vio.c after merge. Conflicts: drivers/i2c/busses/i2c-cpm.c drivers/i2c/busses/i2c-mpc.c drivers/net/gianfar.c Also fixed up one line in arch/powerpc/kernel/vio.c to use the correct node pointer. Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
| * microblaze: Fix module loading on system with WB cacheMichal Simek2010-05-14
| | | | | | | | | | | | | | There is necessary to flush whole dcache. Icache work should be done in kernel/module.c. Signed-off-by: Michal Simek <monstr@monstr.eu>
| * microblaze: export assembly functions used by modulesMichal Simek2010-05-13
| | | | | | | | | | | | Export __strncpy_user, memory_size, ioremap_bot for modules. Signed-off-by: Michal Simek <monstr@monstr.eu>