[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [MiNT] [PATCH] EHCI driver interrupt checking.
Whoops! I just learned that the Coldfire can’t update the stack pointer in the movem instruction, so it would be (although *still* not tested):
> subq.l #12, sp
> 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
> addq.l #12, sp
> On 10 Dec 2014, at 11:16, Hrafnkell Hlodversson <firstname.lastname@example.org> wrote:
> 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 )
>> 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
> With kind regards
>> On 02 Dec 2014, at 10:11, David Gálvez <email@example.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.