xref: /openbmc/linux/arch/arm/mach-omap1/ams-delta-fiq-handler.S (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1d2912cb1SThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-only */
260c3bf3fSJanusz Krzysztofik/*
360c3bf3fSJanusz Krzysztofik *  linux/arch/arm/mach-omap1/ams-delta-fiq-handler.S
460c3bf3fSJanusz Krzysztofik *
560c3bf3fSJanusz Krzysztofik *  Based on  linux/arch/arm/lib/floppydma.S
660c3bf3fSJanusz Krzysztofik *  Renamed and modified to work with 2.6 kernel by Matt Callow
760c3bf3fSJanusz Krzysztofik *  Copyright (C) 1995, 1996 Russell King
860c3bf3fSJanusz Krzysztofik *  Copyright (C) 2004 Pete Trapps
960c3bf3fSJanusz Krzysztofik *  Copyright (C) 2006 Matt Callow
1060c3bf3fSJanusz Krzysztofik *  Copyright (C) 2010 Janusz Krzysztofik
1160c3bf3fSJanusz Krzysztofik */
1260c3bf3fSJanusz Krzysztofik
1360c3bf3fSJanusz Krzysztofik#include <linux/linkage.h>
14dc8fbeb0SJanusz Krzysztofik#include <linux/platform_data/ams-delta-fiq.h>
1526683316SJanusz Krzysztofik#include <linux/platform_data/gpio-omap.h>
16*7e0a9e62SArnd Bergmann#include <linux/soc/ti/omap1-io.h>
17dc8fbeb0SJanusz Krzysztofik
186f6f6a70SRob Herring#include <asm/assembler.h>
1928399a5aSArnd Bergmann#include <asm/irq.h>
2060c3bf3fSJanusz Krzysztofik
21*7e0a9e62SArnd Bergmann#include "hardware.h"
22dc8fbeb0SJanusz Krzysztofik#include "ams-delta-fiq.h"
230a48a413SJanusz Krzysztofik#include "board-ams-delta.h"
242e3ee9f4STony Lindgren#include "iomap.h"
252e3ee9f4STony Lindgren
2660c3bf3fSJanusz Krzysztofik/*
2726683316SJanusz Krzysztofik * OMAP1510 GPIO related symbol copied from arch/arm/mach-omap1/gpio15xx.c.
2826683316SJanusz Krzysztofik * Unfortunately, it was not placed in a separate header file.
2960c3bf3fSJanusz Krzysztofik */
3060c3bf3fSJanusz Krzysztofik#define OMAP1510_GPIO_BASE		0xFFFCE000
3160c3bf3fSJanusz Krzysztofik
3260c3bf3fSJanusz Krzysztofik/* GPIO register bitmasks */
3360c3bf3fSJanusz Krzysztofik#define KEYBRD_DATA_MASK		(0x1 << AMS_DELTA_GPIO_PIN_KEYBRD_DATA)
3460c3bf3fSJanusz Krzysztofik#define KEYBRD_CLK_MASK			(0x1 << AMS_DELTA_GPIO_PIN_KEYBRD_CLK)
3560c3bf3fSJanusz Krzysztofik#define MODEM_IRQ_MASK			(0x1 << AMS_DELTA_GPIO_PIN_MODEM_IRQ)
3660c3bf3fSJanusz Krzysztofik#define HOOK_SWITCH_MASK		(0x1 << AMS_DELTA_GPIO_PIN_HOOK_SWITCH)
3760c3bf3fSJanusz Krzysztofik#define OTHERS_MASK			(MODEM_IRQ_MASK | HOOK_SWITCH_MASK)
3860c3bf3fSJanusz Krzysztofik
3960c3bf3fSJanusz Krzysztofik/* IRQ handler register bitmasks */
40ef5bdccfSJanusz Krzysztofik#define DEFERRED_FIQ_MASK		OMAP_IRQ_BIT(INT_DEFERRED_FIQ)
41ef5bdccfSJanusz Krzysztofik#define GPIO_BANK1_MASK  		OMAP_IRQ_BIT(INT_GPIO_BANK1)
4260c3bf3fSJanusz Krzysztofik
4360c3bf3fSJanusz Krzysztofik/* Driver buffer byte offsets */
4460c3bf3fSJanusz Krzysztofik#define BUF_MASK			(FIQ_MASK * 4)
4560c3bf3fSJanusz Krzysztofik#define BUF_STATE			(FIQ_STATE * 4)
4660c3bf3fSJanusz Krzysztofik#define BUF_KEYS_CNT			(FIQ_KEYS_CNT * 4)
4760c3bf3fSJanusz Krzysztofik#define BUF_TAIL_OFFSET			(FIQ_TAIL_OFFSET * 4)
4860c3bf3fSJanusz Krzysztofik#define BUF_HEAD_OFFSET			(FIQ_HEAD_OFFSET * 4)
4960c3bf3fSJanusz Krzysztofik#define BUF_BUF_LEN			(FIQ_BUF_LEN * 4)
5060c3bf3fSJanusz Krzysztofik#define BUF_KEY				(FIQ_KEY * 4)
5160c3bf3fSJanusz Krzysztofik#define BUF_MISSED_KEYS			(FIQ_MISSED_KEYS * 4)
5260c3bf3fSJanusz Krzysztofik#define BUF_BUFFER_START		(FIQ_BUFFER_START * 4)
5360c3bf3fSJanusz Krzysztofik#define BUF_GPIO_INT_MASK		(FIQ_GPIO_INT_MASK * 4)
5460c3bf3fSJanusz Krzysztofik#define BUF_KEYS_HICNT			(FIQ_KEYS_HICNT * 4)
5560c3bf3fSJanusz Krzysztofik#define BUF_IRQ_PEND			(FIQ_IRQ_PEND * 4)
5660c3bf3fSJanusz Krzysztofik#define BUF_SIR_CODE_L1			(FIQ_SIR_CODE_L1 * 4)
5760c3bf3fSJanusz Krzysztofik#define BUF_SIR_CODE_L2			(IRQ_SIR_CODE_L2 * 4)
5860c3bf3fSJanusz Krzysztofik#define BUF_CNT_INT_00			(FIQ_CNT_INT_00 * 4)
5960c3bf3fSJanusz Krzysztofik#define BUF_CNT_INT_KEY			(FIQ_CNT_INT_KEY * 4)
6060c3bf3fSJanusz Krzysztofik#define BUF_CNT_INT_MDM			(FIQ_CNT_INT_MDM * 4)
6160c3bf3fSJanusz Krzysztofik#define BUF_CNT_INT_03			(FIQ_CNT_INT_03 * 4)
6260c3bf3fSJanusz Krzysztofik#define BUF_CNT_INT_HSW			(FIQ_CNT_INT_HSW * 4)
6360c3bf3fSJanusz Krzysztofik#define BUF_CNT_INT_05			(FIQ_CNT_INT_05 * 4)
6460c3bf3fSJanusz Krzysztofik#define BUF_CNT_INT_06			(FIQ_CNT_INT_06 * 4)
6560c3bf3fSJanusz Krzysztofik#define BUF_CNT_INT_07			(FIQ_CNT_INT_07 * 4)
6660c3bf3fSJanusz Krzysztofik#define BUF_CNT_INT_08			(FIQ_CNT_INT_08 * 4)
6760c3bf3fSJanusz Krzysztofik#define BUF_CNT_INT_09			(FIQ_CNT_INT_09 * 4)
6860c3bf3fSJanusz Krzysztofik#define BUF_CNT_INT_10			(FIQ_CNT_INT_10 * 4)
6960c3bf3fSJanusz Krzysztofik#define BUF_CNT_INT_11			(FIQ_CNT_INT_11 * 4)
7060c3bf3fSJanusz Krzysztofik#define BUF_CNT_INT_12			(FIQ_CNT_INT_12 * 4)
7160c3bf3fSJanusz Krzysztofik#define BUF_CNT_INT_13			(FIQ_CNT_INT_13 * 4)
7260c3bf3fSJanusz Krzysztofik#define BUF_CNT_INT_14			(FIQ_CNT_INT_14 * 4)
7360c3bf3fSJanusz Krzysztofik#define BUF_CNT_INT_15			(FIQ_CNT_INT_15 * 4)
7460c3bf3fSJanusz Krzysztofik#define BUF_CIRC_BUFF			(FIQ_CIRC_BUFF * 4)
7560c3bf3fSJanusz Krzysztofik
7660c3bf3fSJanusz Krzysztofik
7760c3bf3fSJanusz Krzysztofik/*
7825985edcSLucas De Marchi * Register usage
7960c3bf3fSJanusz Krzysztofik * r8  - temporary
8060c3bf3fSJanusz Krzysztofik * r9  - the driver buffer
8160c3bf3fSJanusz Krzysztofik * r10 - temporary
8260c3bf3fSJanusz Krzysztofik * r11 - interrupts mask
8360c3bf3fSJanusz Krzysztofik * r12 - base pointers
8460c3bf3fSJanusz Krzysztofik * r13 - interrupts status
8560c3bf3fSJanusz Krzysztofik */
8660c3bf3fSJanusz Krzysztofik
8760c3bf3fSJanusz Krzysztofik	.text
8860c3bf3fSJanusz Krzysztofik
8960c3bf3fSJanusz Krzysztofik	.global qwerty_fiqin_end
9060c3bf3fSJanusz Krzysztofik
9160c3bf3fSJanusz KrzysztofikENTRY(qwerty_fiqin_start)
9260c3bf3fSJanusz Krzysztofik	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
9360c3bf3fSJanusz Krzysztofik	@ FIQ intrrupt handler
9460c3bf3fSJanusz Krzysztofik	ldr r12, omap_ih1_base			@ set pointer to level1 handler
9560c3bf3fSJanusz Krzysztofik
9660c3bf3fSJanusz Krzysztofik	ldr r11, [r12, #IRQ_MIR_REG_OFFSET]	@ fetch interrupts mask
9760c3bf3fSJanusz Krzysztofik
9860c3bf3fSJanusz Krzysztofik	ldr r13, [r12, #IRQ_ITR_REG_OFFSET]	@ fetch interrupts status
9960c3bf3fSJanusz Krzysztofik	bics r13, r13, r11			@ clear masked - any left?
10060c3bf3fSJanusz Krzysztofik	beq exit				@ none - spurious FIQ? exit
10160c3bf3fSJanusz Krzysztofik
10260c3bf3fSJanusz Krzysztofik	ldr r10, [r12, #IRQ_SIR_FIQ_REG_OFFSET]	@ get requested interrupt number
10360c3bf3fSJanusz Krzysztofik
10460c3bf3fSJanusz Krzysztofik	mov r8, #2				@ reset FIQ agreement
10560c3bf3fSJanusz Krzysztofik	str r8, [r12, #IRQ_CONTROL_REG_OFFSET]
10660c3bf3fSJanusz Krzysztofik
107ef5bdccfSJanusz Krzysztofik	cmp r10, #(INT_GPIO_BANK1 - NR_IRQS_LEGACY)	@ is it GPIO interrupt?
10860c3bf3fSJanusz Krzysztofik	beq gpio				@ yes - process it
10960c3bf3fSJanusz Krzysztofik
11060c3bf3fSJanusz Krzysztofik	mov r8, #1
11160c3bf3fSJanusz Krzysztofik	orr r8, r11, r8, lsl r10		@ mask spurious interrupt
11260c3bf3fSJanusz Krzysztofik	str r8, [r12, #IRQ_MIR_REG_OFFSET]
11360c3bf3fSJanusz Krzysztofikexit:
11460c3bf3fSJanusz Krzysztofik	subs	pc, lr, #4			@ return from FIQ
11560c3bf3fSJanusz Krzysztofik	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
11660c3bf3fSJanusz Krzysztofik
11760c3bf3fSJanusz Krzysztofik
11860c3bf3fSJanusz Krzysztofik	@@@@@@@@@@@@@@@@@@@@@@@@@@@
11960c3bf3fSJanusz Krzysztofikgpio:	@ GPIO bank interrupt handler
12060c3bf3fSJanusz Krzysztofik	ldr r12, omap1510_gpio_base		@ set base pointer to GPIO bank
12160c3bf3fSJanusz Krzysztofik
12260c3bf3fSJanusz Krzysztofik	ldr r11, [r12, #OMAP1510_GPIO_INT_MASK]	@ fetch GPIO interrupts mask
12360c3bf3fSJanusz Krzysztofikrestart:
12460c3bf3fSJanusz Krzysztofik	ldr r13, [r12, #OMAP1510_GPIO_INT_STATUS]	@ fetch status bits
12560c3bf3fSJanusz Krzysztofik	bics r13, r13, r11			@ clear masked - any left?
12660c3bf3fSJanusz Krzysztofik	beq exit				@ no - spurious interrupt? exit
12760c3bf3fSJanusz Krzysztofik
12860c3bf3fSJanusz Krzysztofik	orr r11, r11, r13			@ mask all requested interrupts
12960c3bf3fSJanusz Krzysztofik	str r11, [r12, #OMAP1510_GPIO_INT_MASK]
13060c3bf3fSJanusz Krzysztofik
131fa8397e4SJanusz Krzysztofik	str r13, [r12, #OMAP1510_GPIO_INT_STATUS] @ ack all requested interrupts
132fa8397e4SJanusz Krzysztofik
13360c3bf3fSJanusz Krzysztofik	ands r10, r13, #KEYBRD_CLK_MASK		@ extract keyboard status - set?
13460c3bf3fSJanusz Krzysztofik	beq hksw				@ no - try next source
13560c3bf3fSJanusz Krzysztofik
13660c3bf3fSJanusz Krzysztofik
13760c3bf3fSJanusz Krzysztofik	@@@@@@@@@@@@@@@@@@@@@@
13860c3bf3fSJanusz Krzysztofik	@ Keyboard clock FIQ mode interrupt handler
13960c3bf3fSJanusz Krzysztofik	@ r10 now contains KEYBRD_CLK_MASK, use it
14060c3bf3fSJanusz Krzysztofik	bic r11, r11, r10				@ unmask it
14160c3bf3fSJanusz Krzysztofik	str r11, [r12, #OMAP1510_GPIO_INT_MASK]
14260c3bf3fSJanusz Krzysztofik
14360c3bf3fSJanusz Krzysztofik	@ Process keyboard data
14460c3bf3fSJanusz Krzysztofik	ldr r8, [r12, #OMAP1510_GPIO_DATA_INPUT]	@ fetch GPIO input
14560c3bf3fSJanusz Krzysztofik
14660c3bf3fSJanusz Krzysztofik	ldr r10, [r9, #BUF_STATE]		@ fetch kbd interface state
14760c3bf3fSJanusz Krzysztofik	cmp r10, #0				@ are we expecting start bit?
14860c3bf3fSJanusz Krzysztofik	bne data				@ no - go to data processing
14960c3bf3fSJanusz Krzysztofik
15060c3bf3fSJanusz Krzysztofik	ands r8, r8, #KEYBRD_DATA_MASK		@ check start bit - detected?
15160c3bf3fSJanusz Krzysztofik	beq hksw				@ no - try next source
15260c3bf3fSJanusz Krzysztofik
15360c3bf3fSJanusz Krzysztofik	@ r8 contains KEYBRD_DATA_MASK, use it
15460c3bf3fSJanusz Krzysztofik	str r8, [r9, #BUF_STATE]		@ enter data processing state
15560c3bf3fSJanusz Krzysztofik	@ r10 already contains 0, reuse it
15660c3bf3fSJanusz Krzysztofik	str r10, [r9, #BUF_KEY]			@ clear keycode
15760c3bf3fSJanusz Krzysztofik	mov r10, #2				@ reset input bit mask
15860c3bf3fSJanusz Krzysztofik	str r10, [r9, #BUF_MASK]
15960c3bf3fSJanusz Krzysztofik
16060c3bf3fSJanusz Krzysztofik	@ Mask other GPIO line interrupts till key done
16160c3bf3fSJanusz Krzysztofik	str r11, [r9, #BUF_GPIO_INT_MASK]	@ save mask for later restore
16260c3bf3fSJanusz Krzysztofik	mvn r11, #KEYBRD_CLK_MASK		@ prepare all except kbd mask
16360c3bf3fSJanusz Krzysztofik	str r11, [r12, #OMAP1510_GPIO_INT_MASK]	@ store into the mask register
16460c3bf3fSJanusz Krzysztofik
16560c3bf3fSJanusz Krzysztofik	b restart				@ restart
16660c3bf3fSJanusz Krzysztofik
16760c3bf3fSJanusz Krzysztofikdata:	ldr r10, [r9, #BUF_MASK]		@ fetch current input bit mask
16860c3bf3fSJanusz Krzysztofik
16960c3bf3fSJanusz Krzysztofik	@ r8 still contains GPIO input bits
17060c3bf3fSJanusz Krzysztofik	ands r8, r8, #KEYBRD_DATA_MASK		@ is keyboard data line low?
17160c3bf3fSJanusz Krzysztofik	ldreq r8, [r9, #BUF_KEY]		@ yes - fetch collected so far,
17260c3bf3fSJanusz Krzysztofik	orreq r8, r8, r10			@ set 1 at current mask position
17360c3bf3fSJanusz Krzysztofik	streq r8, [r9, #BUF_KEY]		@ and save back
17460c3bf3fSJanusz Krzysztofik
17560c3bf3fSJanusz Krzysztofik	mov r10, r10, lsl #1			@ shift mask left
17660c3bf3fSJanusz Krzysztofik	bics r10, r10, #0x800			@ have we got all the bits?
17760c3bf3fSJanusz Krzysztofik	strne r10, [r9, #BUF_MASK]		@ not yet - store the mask
17860c3bf3fSJanusz Krzysztofik	bne restart				@ and restart
17960c3bf3fSJanusz Krzysztofik
18060c3bf3fSJanusz Krzysztofik	@ r10 already contains 0, reuse it
18160c3bf3fSJanusz Krzysztofik	str r10, [r9, #BUF_STATE]		@ reset state to start
18260c3bf3fSJanusz Krzysztofik
18360c3bf3fSJanusz Krzysztofik	@ Key done - restore interrupt mask
18460c3bf3fSJanusz Krzysztofik	ldr r10, [r9, #BUF_GPIO_INT_MASK]	@ fetch saved mask
18560c3bf3fSJanusz Krzysztofik	and r11, r11, r10			@ unmask all saved as unmasked
18660c3bf3fSJanusz Krzysztofik	str r11, [r12, #OMAP1510_GPIO_INT_MASK]	@ restore into the mask register
18760c3bf3fSJanusz Krzysztofik
18860c3bf3fSJanusz Krzysztofik	@ Try appending the keycode to the circular buffer
18960c3bf3fSJanusz Krzysztofik	ldr r10, [r9, #BUF_KEYS_CNT]		@ get saved keystrokes count
19060c3bf3fSJanusz Krzysztofik	ldr r8, [r9, #BUF_BUF_LEN]		@ get buffer size
19160c3bf3fSJanusz Krzysztofik	cmp r10, r8				@ is buffer full?
19260c3bf3fSJanusz Krzysztofik	beq hksw				@ yes - key lost, next source
19360c3bf3fSJanusz Krzysztofik
19460c3bf3fSJanusz Krzysztofik	add r10, r10, #1			@ incremet keystrokes counter
19560c3bf3fSJanusz Krzysztofik	str r10, [r9, #BUF_KEYS_CNT]
19660c3bf3fSJanusz Krzysztofik
19760c3bf3fSJanusz Krzysztofik	ldr r10, [r9, #BUF_TAIL_OFFSET]		@ get buffer tail offset
19860c3bf3fSJanusz Krzysztofik	@ r8 already contains buffer size
19960c3bf3fSJanusz Krzysztofik	cmp r10, r8				@ end of buffer?
20060c3bf3fSJanusz Krzysztofik	moveq r10, #0				@ yes - rewind to buffer start
20160c3bf3fSJanusz Krzysztofik
20260c3bf3fSJanusz Krzysztofik	ldr r12, [r9, #BUF_BUFFER_START]	@ get buffer start address
20360c3bf3fSJanusz Krzysztofik	add r12, r12, r10, LSL #2		@ calculate buffer tail address
20460c3bf3fSJanusz Krzysztofik	ldr r8, [r9, #BUF_KEY]			@ get last keycode
20560c3bf3fSJanusz Krzysztofik	str r8, [r12]				@ append it to the buffer tail
20660c3bf3fSJanusz Krzysztofik
20760c3bf3fSJanusz Krzysztofik	add r10, r10, #1			@ increment buffer tail offset
20860c3bf3fSJanusz Krzysztofik	str r10, [r9, #BUF_TAIL_OFFSET]
20960c3bf3fSJanusz Krzysztofik
21060c3bf3fSJanusz Krzysztofik	ldr r10, [r9, #BUF_CNT_INT_KEY]		@ increment interrupts counter
21160c3bf3fSJanusz Krzysztofik	add r10, r10, #1
21260c3bf3fSJanusz Krzysztofik	str r10, [r9, #BUF_CNT_INT_KEY]
21360c3bf3fSJanusz Krzysztofik	@@@@@@@@@@@@@@@@@@@@@@@@
21460c3bf3fSJanusz Krzysztofik
21560c3bf3fSJanusz Krzysztofik
21660c3bf3fSJanusz Krzysztofikhksw:	@Is hook switch interrupt requested?
21760c3bf3fSJanusz Krzysztofik	tst r13, #HOOK_SWITCH_MASK 		@ is hook switch status bit set?
21860c3bf3fSJanusz Krzysztofik	beq mdm					@ no - try next source
21960c3bf3fSJanusz Krzysztofik
22060c3bf3fSJanusz Krzysztofik
22160c3bf3fSJanusz Krzysztofik	@@@@@@@@@@@@@@@@@@@@@@@@
22260c3bf3fSJanusz Krzysztofik	@ Hook switch interrupt FIQ mode simple handler
22360c3bf3fSJanusz Krzysztofik
22460c3bf3fSJanusz Krzysztofik	@ Don't toggle active edge, the switch always bounces
22560c3bf3fSJanusz Krzysztofik
22660c3bf3fSJanusz Krzysztofik	@ Increment hook switch interrupt counter
22760c3bf3fSJanusz Krzysztofik	ldr r10, [r9, #BUF_CNT_INT_HSW]
22860c3bf3fSJanusz Krzysztofik	add r10, r10, #1
22960c3bf3fSJanusz Krzysztofik	str r10, [r9, #BUF_CNT_INT_HSW]
23060c3bf3fSJanusz Krzysztofik	@@@@@@@@@@@@@@@@@@@@@@@@
23160c3bf3fSJanusz Krzysztofik
23260c3bf3fSJanusz Krzysztofik
23360c3bf3fSJanusz Krzysztofikmdm:	@Is it a modem interrupt?
23460c3bf3fSJanusz Krzysztofik	tst r13, #MODEM_IRQ_MASK 		@ is modem status bit set?
23560c3bf3fSJanusz Krzysztofik	beq irq					@ no - check for next interrupt
23660c3bf3fSJanusz Krzysztofik
23760c3bf3fSJanusz Krzysztofik
23860c3bf3fSJanusz Krzysztofik	@@@@@@@@@@@@@@@@@@@@@@@@
23960c3bf3fSJanusz Krzysztofik	@ Modem FIQ mode interrupt handler stub
24060c3bf3fSJanusz Krzysztofik
24160c3bf3fSJanusz Krzysztofik	@ Increment modem interrupt counter
24260c3bf3fSJanusz Krzysztofik	ldr r10, [r9, #BUF_CNT_INT_MDM]
24360c3bf3fSJanusz Krzysztofik	add r10, r10, #1
24460c3bf3fSJanusz Krzysztofik	str r10, [r9, #BUF_CNT_INT_MDM]
24560c3bf3fSJanusz Krzysztofik	@@@@@@@@@@@@@@@@@@@@@@@@
24660c3bf3fSJanusz Krzysztofik
24760c3bf3fSJanusz Krzysztofik
24860c3bf3fSJanusz Krzysztofikirq:	@ Place deferred_fiq interrupt request
24960c3bf3fSJanusz Krzysztofik	ldr r12, deferred_fiq_ih_base		@ set pointer to IRQ handler
25060c3bf3fSJanusz Krzysztofik	mov r10, #DEFERRED_FIQ_MASK		@ set deferred_fiq bit
25160c3bf3fSJanusz Krzysztofik	str r10, [r12, #IRQ_ISR_REG_OFFSET] 	@ place it in the ISR register
25260c3bf3fSJanusz Krzysztofik
25360c3bf3fSJanusz Krzysztofik	ldr r12, omap1510_gpio_base		@ set pointer back to GPIO bank
25460c3bf3fSJanusz Krzysztofik	b restart				@ check for next GPIO interrupt
25560c3bf3fSJanusz Krzysztofik	@@@@@@@@@@@@@@@@@@@@@@@@@@@
25660c3bf3fSJanusz Krzysztofik
25760c3bf3fSJanusz Krzysztofik
25860c3bf3fSJanusz Krzysztofik/*
25960c3bf3fSJanusz Krzysztofik * Virtual addresses for IO
26060c3bf3fSJanusz Krzysztofik */
26160c3bf3fSJanusz Krzysztofikomap_ih1_base:
26260c3bf3fSJanusz Krzysztofik	.word OMAP1_IO_ADDRESS(OMAP_IH1_BASE)
26360c3bf3fSJanusz Krzysztofikdeferred_fiq_ih_base:
26460c3bf3fSJanusz Krzysztofik	.word OMAP1_IO_ADDRESS(DEFERRED_FIQ_IH_BASE)
26560c3bf3fSJanusz Krzysztofikomap1510_gpio_base:
26660c3bf3fSJanusz Krzysztofik	.word OMAP1_IO_ADDRESS(OMAP1510_GPIO_BASE)
26760c3bf3fSJanusz Krzysztofikqwerty_fiqin_end:
26860c3bf3fSJanusz Krzysztofik
26960c3bf3fSJanusz Krzysztofik/*
27060c3bf3fSJanusz Krzysztofik * Check the size of the FIQ,
27160c3bf3fSJanusz Krzysztofik * it cannot go beyond 0xffff0200, and is copied to 0xffff001c
27260c3bf3fSJanusz Krzysztofik */
27360c3bf3fSJanusz Krzysztofik.if (qwerty_fiqin_end - qwerty_fiqin_start) > (0x200 - 0x1c)
27460c3bf3fSJanusz Krzysztofik	.err
27560c3bf3fSJanusz Krzysztofik.endif
276