/* * linux/drivers/sound/vidc_fill.S * * Copyright (C) 1997 Russell King * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * Filler routines for DMA buffers */ #include #include #include #include .text ENTRY(vidc_fill_1x8_u) mov ip, #0xff00 1: cmp r0, r1 bge vidc_clear ldrb r4, [r0], #1 eor r4, r4, #0x80 and r4, ip, r4, lsl #8 orr r4, r4, r4, lsl #16 str r4, [r2], #4 cmp r2, r3 blt 1b mov pc, lr ENTRY(vidc_fill_2x8_u) mov ip, #0xff00 1: cmp r0, r1 bge vidc_clear ldr r4, [r0], #2 and r5, r4, ip and r4, ip, r4, lsl #8 orr r4, r4, r5, lsl #16 orr r4, r4, r4, lsr #8 str r4, [r2], #4 cmp r2, r3 blt 1b mov pc, lr ENTRY(vidc_fill_1x8_s) mov ip, #0xff00 1: cmp r0, r1 bge vidc_clear ldrb r4, [r0], #1 and r4, ip, r4, lsl #8 orr r4, r4, r4, lsl #16 str r4, [r2], #4 cmp r2, r3 blt 1b mov pc, lr ENTRY(vidc_fill_2x8_s) mov ip, #0xff00 1: cmp r0, r1 bge vidc_clear ldr r4, [r0], #2 and r5, r4, ip and r4, ip, r4, lsl #8 orr r4, r4, r5, lsl #16 orr r4, r4, r4, lsr #8 str r4, [r2], #4 cmp r2, r3 blt 1b mov pc, lr ENTRY(vidc_fill_1x16_s) mov ip, #0xff00 orr ip, ip, ip, lsr #8 1: cmp r0, r1 bge vidc_clear ldr r5, [r0], #2 and r4, r5, ip orr r4, r4, r4, lsl #16 str r4, [r2], #4 cmp r0, r1 addlt r0, r0, #2 andlt r4, r5, ip, lsl #16 orrlt r4, r4, r4, lsr #16 strlt r4, [r2], #4 cmp r2, r3 blt 1b mov pc, lr ENTRY(vidc_fill_2x16_s) mov ip, #0xff00 orr ip, ip, ip, lsr #8 1: cmp r0, r1 bge vidc_clear ldr r4, [r0], #4 str r4, [r2], #4 cmp r0, r1 ldrlt r4, [r0], #4 strlt r4, [r2], #4 cmp r2, r3 blt 1b mov pc, lr ENTRY(vidc_fill_noaudio) mov r0, #0 mov r1, #0 2: mov r4, #0 mov r5, #0 1: cmp r2, r3 stmltia r2!, {r0, r1, r4, r5} blt 1b mov pc, lr ENTRY(vidc_clear) mov r0, #0 mov r1, #0 tst r2, #4 str r0, [r2], #4 tst r2, #8 stmia r2!, {r0, r1} b 2b /* * Call filler routines with: * r0 = phys address * r1 = phys end * r2 = buffer * Returns: * r0 = new buffer address * r2 = new buffer finish * r4 = corrupted * r5 = corrupted * ip = corrupted */ ENTRY(vidc_sound_dma_irq) stmfd sp!, {r4 - r8, lr} ldr r8, =dma_start ldmia r8, {r0, r1, r2, r3, r4, r5} teq r1, #0 adreq r4, vidc_fill_noaudio moveq r7, #1 << 31 movne r7, #0 mov ip, #IOMD_BASE & 0xff000000 orr ip, ip, #IOMD_BASE & 0x00ff0000 ldrb r6, [ip, #IOMD_SD0ST] tst r6, #DMA_ST_OFL @ Check for overrun eorne r6, r6, #DMA_ST_AB tst r6, #DMA_ST_AB moveq r2, r3 @ DMAing A, update B add r3, r2, r5 @ End of DMA buffer add r1, r1, r0 @ End of virtual DMA buffer mov lr, pc mov pc, r4 @ Call fill routine (uses r4, ip) sub r1, r1, r0 @ Remaining length stmia r8, {r0, r1} mov r0, #0 tst r2, #4 @ Round buffer up to 4 words strne r0, [r2], #4 tst r2, #8 strne r0, [r2], #4 strne r0, [r2], #4 sub r2, r2, #16 mov r2, r2, lsl #20 movs r2, r2, lsr #20 orreq r2, r2, #1 << 30 @ Set L bit orr r2, r2, r7 ldmdb r8, {r3, r4, r5} tst r6, #DMA_ST_AB mov ip, #IOMD_BASE & 0xff000000 orr ip, ip, #IOMD_BASE & 0x00ff0000 streq r4, [ip, #IOMD_SD0CURB] strne r5, [ip, #IOMD_SD0CURA] streq r2, [ip, #IOMD_SD0ENDB] strne r2, [ip, #IOMD_SD0ENDA] ldr lr, [ip, #IOMD_SD0ST] tst lr, #DMA_ST_OFL bne 1f tst r6, #DMA_ST_AB strne r4, [ip, #IOMD_SD0CURB] streq r5, [ip, #IOMD_SD0CURA] strne r2, [ip, #IOMD_SD0ENDB] streq r2, [ip, #IOMD_SD0ENDA] 1: teq r7, #0 mov r0, #0x10 strneb r0, [ip, #IOMD_SD0CR] ldmfd sp!, {r4 - r8, lr} mov r0, #1 @ IRQ_HANDLED teq r1, #0 @ If we have no more movne pc, lr teq r3, #0 movne pc, r3 @ Call interrupt routine mov pc, lr .data .globl dma_interrupt dma_interrupt: .long 0 @ r3 .globl dma_pbuf dma_pbuf: .long 0 @ r4 .long 0 @ r5 .globl dma_start dma_start: .long 0 @ r0 .globl dma_count dma_count: .long 0 @ r1 .globl dma_buf dma_buf: .long 0 @ r2 .long 0 @ r3 .globl vidc_filler vidc_filler: .long vidc_fill_noaudio @ r4 .globl dma_bufsize dma_bufsize: .long 0x1000 @ r5 '>6space:mode:
authorJiri Slaby <jslaby@suse.cz>2017-01-18 14:29:21 +0100
committerIngo Molnar <mingo@kernel.org>2017-01-19 08:39:44 +0100
commitb5b46c4740aed1538544f0fa849c5b76c7823469 (patch)
tree125e7aced4835bad6f6a0c0d02d012f333caf922 /tools/perf/pmu-events/arch/x86/nehalemep/memory.json
parentfa19a769f82fb9a5ca000b83cacd13fcaeda51ac (diff)
objtool: Fix IRET's opcode
The IRET opcode is 0xcf according to the Intel manual and also to objdump of my vmlinux: 1ea8: 48 cf iretq Fix the opcode in arch_decode_instruction(). The previous value (0xc5) seems to correspond to LDS. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Acked-by: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Andy Lutomirski <luto@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/20170118132921.19319-1-jslaby@suse.cz Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/perf/pmu-events/arch/x86/nehalemep/memory.json')