[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [MiNT] [PATCH] EHCI driver interrupt checking.



Hello everyone, I’ve been lurking this list (and watching the CVS commits for a while)

I did a quick read through this diff, and it seems there is a problem with how you’re saving d0.
> + move.l d0,-(sp) 
The above does save it to the stack, but after returning from ehci_interrupt_handle:
> -	addq.l #4,sp
> +	addq.l #8,sp
you simply add 4 more bytes to the stack pointer instead of restoring it.
Also there is a movem.l instruction already there, maybe you should just add the d0 to the lists of registers to be pushed to that one?

Something like this (First 68k assembly I’ve written in this century and completely untested, so don’t shoot me ;P )
> 
>  _ehci_int_handle_asm:
>  	movem.l d0-d1/a1,-(sp) // save d0, d1 and a1 to stack
>  	move.l a0,-(sp)		// PCI_BIOS specification: parameter is in a0
>  	jsr _ehci_interrupt_handle
> 	addq.l #4,sp // Clean up argument from stack as per C calling conventions
>  	movem.l (sp)+,d0-d1/a1 // restore old values of d0, d1 and a1
>  	rts


With kind regards
Keli

> On 02 Dec 2014, at 10:11, David Gálvez <dgalvez75@gmail.com> wrote:
> 
> PCI interrupt handlers are put into chain.
> Check if the interrupt was triggered by the device we're driving.
> Return d0 register unmodified if the interrupt is not ours.
> Contributed by David Galvez.
> <ehci_check_interrupt_20141202.diff>